{
  "metadata" : {
    "name" : "Uber / RIBs",
    "description" : "Uber&apos;s cross-platform mobile architecture framework.",
    "tooltip" : "",
    "logoLink" : "https://avatars.githubusercontent.com/Uber",
    "links" : [ {
      "label" : "GitHub Repo",
      "href" : "https://github.com/uber/RIBs.git"
    } ]
  },
  "metricsList" : {
    "metrics" : [ {
      "id" : "TOTAL_NUMBER_OF_FILES",
      "value" : 902,
      "description" : "Total number of files in the source folder"
    }, {
      "id" : "NUMBER_OF_FILES_MAIN",
      "value" : 516,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_MAIN",
      "value" : 18845,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_MAIN_EXT_SWIFT",
      "value" : 199,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_MAIN_EXT_SWIFT",
      "value" : 6541,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_MAIN_EXT_JAVA",
      "value" : 137,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_MAIN_EXT_JAVA",
      "value" : 5591,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_MAIN_EXT_KT",
      "value" : 138,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_MAIN_EXT_KT",
      "value" : 5259,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_MAIN_EXT_XML",
      "value" : 25,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_MAIN_EXT_XML",
      "value" : 854,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_MAIN_EXT_KTS",
      "value" : 12,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_MAIN_EXT_KTS",
      "value" : 333,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_MAIN_EXT_TOML",
      "value" : 2,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_MAIN_EXT_TOML",
      "value" : 134,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_MAIN_EXT_JS",
      "value" : 2,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_MAIN_EXT_JS",
      "value" : 130,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_MAIN_EXT_H",
      "value" : 1,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_MAIN_EXT_H",
      "value" : 3,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_TEST",
      "value" : 67,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_TEST",
      "value" : 3270,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_TEST_EXT_KT",
      "value" : 31,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_TEST_EXT_KT",
      "value" : 2631,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_TEST_EXT_JAVA",
      "value" : 36,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_TEST_EXT_JAVA",
      "value" : 639,
      "description" : null
    }, {
      "id" : "TEST_VS_MAIN_LINES_OF_CODE_PERCENTAGE",
      "value" : 17.35,
      "description" : "Test / main code ratio"
    }, {
      "id" : "NUMBER_OF_FILES_GENERATED",
      "value" : 0,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_GENERATED",
      "value" : 0,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_BUILD_AND_DEPLOYMENT",
      "value" : 31,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_BUILD_AND_DEPLOYMENT",
      "value" : 858,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_BUILD_AND_DEPLOYMENT_EXT_GRADLE",
      "value" : 21,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_BUILD_AND_DEPLOYMENT_EXT_GRADLE",
      "value" : 563,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_BUILD_AND_DEPLOYMENT_EXT_XML",
      "value" : 5,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_BUILD_AND_DEPLOYMENT_EXT_XML",
      "value" : 126,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_BUILD_AND_DEPLOYMENT_EXT_SH",
      "value" : 3,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_BUILD_AND_DEPLOYMENT_EXT_SH",
      "value" : 87,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_BUILD_AND_DEPLOYMENT_EXT_BAT",
      "value" : 1,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_BUILD_AND_DEPLOYMENT_EXT_BAT",
      "value" : 66,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_BUILD_AND_DEPLOYMENT_EXT_PODSPEC",
      "value" : 1,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_BUILD_AND_DEPLOYMENT_EXT_PODSPEC",
      "value" : 16,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_OTHER",
      "value" : 236,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_OTHER",
      "value" : 7025,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_OTHER_EXT_JAVA",
      "value" : 59,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_OTHER_EXT_JAVA",
      "value" : 2371,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_OTHER_EXT_KT",
      "value" : 68,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_OTHER_EXT_KT",
      "value" : 1775,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_OTHER_EXT_XML",
      "value" : 31,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_OTHER_EXT_XML",
      "value" : 986,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_OTHER_EXT_MD",
      "value" : 37,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_OTHER_EXT_MD",
      "value" : 569,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_OTHER_EXT_PLIST",
      "value" : 12,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_OTHER_EXT_PLIST",
      "value" : 557,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_OTHER_EXT_PROPERTIES",
      "value" : 20,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_OTHER_EXT_PROPERTIES",
      "value" : 336,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_OTHER_EXT_TXT",
      "value" : 1,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_OTHER_EXT_TXT",
      "value" : 180,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_OTHER_EXT_GRADLE",
      "value" : 5,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_OTHER_EXT_GRADLE",
      "value" : 164,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_OTHER_EXT_JSON",
      "value" : 1,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_OTHER_EXT_JSON",
      "value" : 34,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_OTHER_EXT_STORYBOARD",
      "value" : 1,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_OTHER_EXT_STORYBOARD",
      "value" : 27,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_OTHER_EXT_XIB",
      "value" : 1,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_OTHER_EXT_XIB",
      "value" : 26,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_DECOMPOSITION_PRIMARY_IOS",
      "value" : 199,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_DECOMPOSITION_PRIMARY_IOS",
      "value" : 6519,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_DECOMPOSITION_PRIMARY_IOS_EXT_SWIFT",
      "value" : 198,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_DECOMPOSITION_PRIMARY_IOS_EXT_SWIFT",
      "value" : 6516,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_DECOMPOSITION_PRIMARY_IOS_EXT_H",
      "value" : 1,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_DECOMPOSITION_PRIMARY_IOS_EXT_H",
      "value" : 3,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_DECOMPOSITION_PRIMARY_ANDROID",
      "value" : 316,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_DECOMPOSITION_PRIMARY_ANDROID",
      "value" : 12301,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_DECOMPOSITION_PRIMARY_ANDROID_EXT_JAVA",
      "value" : 137,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_DECOMPOSITION_PRIMARY_ANDROID_EXT_JAVA",
      "value" : 5591,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_DECOMPOSITION_PRIMARY_ANDROID_EXT_KT",
      "value" : 138,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_DECOMPOSITION_PRIMARY_ANDROID_EXT_KT",
      "value" : 5259,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_DECOMPOSITION_PRIMARY_ANDROID_EXT_XML",
      "value" : 25,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_DECOMPOSITION_PRIMARY_ANDROID_EXT_XML",
      "value" : 854,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_DECOMPOSITION_PRIMARY_ANDROID_EXT_KTS",
      "value" : 12,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_DECOMPOSITION_PRIMARY_ANDROID_EXT_KTS",
      "value" : 333,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_DECOMPOSITION_PRIMARY_ANDROID_EXT_TOML",
      "value" : 2,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_DECOMPOSITION_PRIMARY_ANDROID_EXT_TOML",
      "value" : 134,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_DECOMPOSITION_PRIMARY_ANDROID_EXT_JS",
      "value" : 2,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_DECOMPOSITION_PRIMARY_ANDROID_EXT_JS",
      "value" : 130,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_DECOMPOSITION_PRIMARY_ROOT",
      "value" : 1,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_DECOMPOSITION_PRIMARY_ROOT",
      "value" : 25,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_DECOMPOSITION_PRIMARY_ROOT_EXT_SWIFT",
      "value" : 1,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_DECOMPOSITION_PRIMARY_ROOT_EXT_SWIFT",
      "value" : 25,
      "description" : null
    }, {
      "id" : "NUMBER_OF_DEPENDENCY_LINKS_DECOMPOSITION_PRIMARY",
      "value" : 28,
      "description" : "Number of anchor dependencies"
    }, {
      "id" : "NUMBER_OF_DEPENDENCIES_DECOMPOSITION_PRIMARY",
      "value" : 0,
      "description" : null
    }, {
      "id" : "NUMBER_OF_PLACES_WITH_CYCLIC_DEPENDENCIES_DECOMPOSITION_PRIMARY",
      "value" : 0,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_CONCERN_GENERAL_TODOS",
      "value" : 106,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_CONCERN_GENERAL_TODOS",
      "value" : 2957,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_CONCERN_GENERAL_TODOS_EXT_SWIFT",
      "value" : 97,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_CONCERN_GENERAL_TODOS_EXT_SWIFT",
      "value" : 2473,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_CONCERN_GENERAL_TODOS_EXT_JAVA",
      "value" : 9,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_CONCERN_GENERAL_TODOS_EXT_JAVA",
      "value" : 484,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_CONCERN_GENERAL_UNCLASSIFIED",
      "value" : 410,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_CONCERN_GENERAL_UNCLASSIFIED",
      "value" : 15888,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_CONCERN_GENERAL_UNCLASSIFIED_EXT_KT",
      "value" : 138,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_CONCERN_GENERAL_UNCLASSIFIED_EXT_KT",
      "value" : 5259,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_CONCERN_GENERAL_UNCLASSIFIED_EXT_JAVA",
      "value" : 128,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_CONCERN_GENERAL_UNCLASSIFIED_EXT_JAVA",
      "value" : 5107,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_CONCERN_GENERAL_UNCLASSIFIED_EXT_SWIFT",
      "value" : 102,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_CONCERN_GENERAL_UNCLASSIFIED_EXT_SWIFT",
      "value" : 4068,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_CONCERN_GENERAL_UNCLASSIFIED_EXT_XML",
      "value" : 25,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_CONCERN_GENERAL_UNCLASSIFIED_EXT_XML",
      "value" : 854,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_CONCERN_GENERAL_UNCLASSIFIED_EXT_KTS",
      "value" : 12,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_CONCERN_GENERAL_UNCLASSIFIED_EXT_KTS",
      "value" : 333,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_CONCERN_GENERAL_UNCLASSIFIED_EXT_TOML",
      "value" : 2,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_CONCERN_GENERAL_UNCLASSIFIED_EXT_TOML",
      "value" : 134,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_CONCERN_GENERAL_UNCLASSIFIED_EXT_JS",
      "value" : 2,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_CONCERN_GENERAL_UNCLASSIFIED_EXT_JS",
      "value" : 130,
      "description" : null
    }, {
      "id" : "NUMBER_OF_FILES_CONCERN_GENERAL_UNCLASSIFIED_EXT_H",
      "value" : 1,
      "description" : null
    }, {
      "id" : "LINES_OF_CODE_CONCERN_GENERAL_UNCLASSIFIED_EXT_H",
      "value" : 3,
      "description" : null
    }, {
      "id" : "NEGLIGIBLE_RISK_FILE_SIZE_COUNT",
      "value" : 486,
      "description" : "Number of  files with 100 or less lines of code"
    }, {
      "id" : "LOW_RISK_FILE_SIZE_COUNT",
      "value" : 25,
      "description" : "Number of  files with 100 to 200 lines of code"
    }, {
      "id" : "MEDIUM_RISK_FILE_SIZE_COUNT",
      "value" : 5,
      "description" : "Number of  files with 200 to 500 lines of code"
    }, {
      "id" : "HIGH_RISK_FILE_SIZE_COUNT",
      "value" : 0,
      "description" : "Number of  files with 500 to 1000 lines of code"
    }, {
      "id" : "VERY_HIGH_RISK_FILE_SIZE_COUNT",
      "value" : 0,
      "description" : "Number of  files with more than 1000 lines of code"
    }, {
      "id" : "NEGLIGIBLE_RISK_FILE_SIZE_LOC",
      "value" : 14137,
      "description" : "Lines of code in  files with 100 or less lines of code"
    }, {
      "id" : "LOW_RISK_FILE_SIZE_LOC",
      "value" : 3287,
      "description" : "Lines of code in  files with 100 to 200 lines of code"
    }, {
      "id" : "MEDIUM_RISK_FILE_SIZE_LOC",
      "value" : 1421,
      "description" : "Lines of code in  files with 200 to 500 lines of code"
    }, {
      "id" : "HIGH_RISK_FILE_SIZE_LOC",
      "value" : 0,
      "description" : "Lines of code in  files with 500 to 1000 lines of code"
    }, {
      "id" : "VERY_HIGH_RISK_FILE_SIZE_LOC",
      "value" : 0,
      "description" : "Lines of code in  files with more than 1000 lines of code"
    }, {
      "id" : "NUMBER_OF_UNITS",
      "value" : 1108,
      "description" : "Number of units"
    }, {
      "id" : "LINES_OF_CODE_IN_UNITS",
      "value" : 6931,
      "description" : "Lines of code in units"
    }, {
      "id" : "LINES_OF_CODE_OUTSIDE_UNITS",
      "value" : 11914,
      "description" : "Lines of code in units"
    }, {
      "id" : "UNIT_SIZE_NEGLIGIBLE_RISK_LOC",
      "value" : 3912,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_NEGLIGIBLE_RISK_PERCENTAGE",
      "value" : 56.442071851103734,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_NEGLIGIBLE_RISK_COUNT",
      "value" : 942,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_LOW_RISK_LOC",
      "value" : 1799,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_LOW_RISK_PERCENTAGE",
      "value" : 25.955850526619535,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_LOW_RISK_COUNT",
      "value" : 128,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_MEDIUM_RISK_LOC",
      "value" : 1065,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_MEDIUM_RISK_PERCENTAGE",
      "value" : 15.365748088298947,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_MEDIUM_RISK_COUNT",
      "value" : 36,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_HIGH_RISK_LOC",
      "value" : 155,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_HIGH_RISK_PERCENTAGE",
      "value" : 2.236329533977781,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_HIGH_RISK_COUNT",
      "value" : 2,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_VERY_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_VERY_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_VERY_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_IOS_NEGLIGIBLE_RISK_LOC",
      "value" : 1290,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_IOS_NEGLIGIBLE_RISK_PERCENTAGE",
      "value" : 66.97819314641744,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_IOS_NEGLIGIBLE_RISK_COUNT",
      "value" : 312,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_IOS_LOW_RISK_LOC",
      "value" : 483,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_IOS_LOW_RISK_PERCENTAGE",
      "value" : 25.077881619937695,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_IOS_LOW_RISK_COUNT",
      "value" : 33,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_IOS_MEDIUM_RISK_LOC",
      "value" : 153,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_IOS_MEDIUM_RISK_PERCENTAGE",
      "value" : 7.94392523364486,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_IOS_MEDIUM_RISK_COUNT",
      "value" : 5,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_IOS_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_IOS_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_IOS_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_IOS_VERY_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_IOS_VERY_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_IOS_VERY_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_ANDROID_NEGLIGIBLE_RISK_LOC",
      "value" : 2622,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_ANDROID_NEGLIGIBLE_RISK_PERCENTAGE",
      "value" : 52.387612387612386,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_ANDROID_NEGLIGIBLE_RISK_COUNT",
      "value" : 630,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_ANDROID_LOW_RISK_LOC",
      "value" : 1316,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_ANDROID_LOW_RISK_PERCENTAGE",
      "value" : 26.293706293706293,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_ANDROID_LOW_RISK_COUNT",
      "value" : 95,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_ANDROID_MEDIUM_RISK_LOC",
      "value" : 912,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_ANDROID_MEDIUM_RISK_PERCENTAGE",
      "value" : 18.221778221778223,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_ANDROID_MEDIUM_RISK_COUNT",
      "value" : 31,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_ANDROID_HIGH_RISK_LOC",
      "value" : 155,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_ANDROID_HIGH_RISK_PERCENTAGE",
      "value" : 3.096903096903097,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_ANDROID_HIGH_RISK_COUNT",
      "value" : 2,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_ANDROID_VERY_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_ANDROID_VERY_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_COMPONENT_ANDROID_VERY_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_SWIFT_NEGLIGIBLE_RISK_LOC",
      "value" : 1290,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_SWIFT_NEGLIGIBLE_RISK_PERCENTAGE",
      "value" : 66.97819314641744,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_SWIFT_NEGLIGIBLE_RISK_COUNT",
      "value" : 312,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_SWIFT_LOW_RISK_LOC",
      "value" : 483,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_SWIFT_LOW_RISK_PERCENTAGE",
      "value" : 25.077881619937695,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_SWIFT_LOW_RISK_COUNT",
      "value" : 33,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_SWIFT_MEDIUM_RISK_LOC",
      "value" : 153,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_SWIFT_MEDIUM_RISK_PERCENTAGE",
      "value" : 7.94392523364486,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_SWIFT_MEDIUM_RISK_COUNT",
      "value" : 5,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_SWIFT_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_SWIFT_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_SWIFT_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_SWIFT_VERY_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_SWIFT_VERY_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_SWIFT_VERY_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JAVA_NEGLIGIBLE_RISK_LOC",
      "value" : 1411,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JAVA_NEGLIGIBLE_RISK_PERCENTAGE",
      "value" : 52.047215049797124,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JAVA_NEGLIGIBLE_RISK_COUNT",
      "value" : 342,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JAVA_LOW_RISK_LOC",
      "value" : 711,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JAVA_LOW_RISK_PERCENTAGE",
      "value" : 26.226484691995573,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JAVA_LOW_RISK_COUNT",
      "value" : 52,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JAVA_MEDIUM_RISK_LOC",
      "value" : 589,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JAVA_MEDIUM_RISK_PERCENTAGE",
      "value" : 21.726300258207303,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JAVA_MEDIUM_RISK_COUNT",
      "value" : 21,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JAVA_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JAVA_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JAVA_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JAVA_VERY_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JAVA_VERY_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JAVA_VERY_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_KT_NEGLIGIBLE_RISK_LOC",
      "value" : 1186,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_KT_NEGLIGIBLE_RISK_PERCENTAGE",
      "value" : 54.60405156537753,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_KT_NEGLIGIBLE_RISK_COUNT",
      "value" : 282,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_KT_LOW_RISK_LOC",
      "value" : 587,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_KT_LOW_RISK_PERCENTAGE",
      "value" : 27.025782688766114,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_KT_LOW_RISK_COUNT",
      "value" : 42,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_KT_MEDIUM_RISK_LOC",
      "value" : 323,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_KT_MEDIUM_RISK_PERCENTAGE",
      "value" : 14.871086556169429,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_KT_MEDIUM_RISK_COUNT",
      "value" : 10,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_KT_HIGH_RISK_LOC",
      "value" : 76,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_KT_HIGH_RISK_PERCENTAGE",
      "value" : 3.4990791896869244,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_KT_HIGH_RISK_COUNT",
      "value" : 1,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_KT_VERY_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_KT_VERY_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_KT_VERY_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JS_NEGLIGIBLE_RISK_LOC",
      "value" : 25,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JS_NEGLIGIBLE_RISK_PERCENTAGE",
      "value" : 20.491803278688526,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JS_NEGLIGIBLE_RISK_COUNT",
      "value" : 6,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JS_LOW_RISK_LOC",
      "value" : 18,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JS_LOW_RISK_PERCENTAGE",
      "value" : 14.754098360655737,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JS_LOW_RISK_COUNT",
      "value" : 1,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JS_MEDIUM_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JS_MEDIUM_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JS_MEDIUM_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JS_HIGH_RISK_LOC",
      "value" : 79,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JS_HIGH_RISK_PERCENTAGE",
      "value" : 64.75409836065573,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JS_HIGH_RISK_COUNT",
      "value" : 1,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JS_VERY_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JS_VERY_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "UNIT_SIZE_EXTENSION_JS_VERY_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_NEGLIGIBLE_RISK_LOC",
      "value" : 6187,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_NEGLIGIBLE_RISK_PERCENTAGE",
      "value" : 89.26561823690665,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_NEGLIGIBLE_RISK_COUNT",
      "value" : 1080,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_LOW_RISK_LOC",
      "value" : 601,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_LOW_RISK_PERCENTAGE",
      "value" : 8.67118741884288,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_LOW_RISK_COUNT",
      "value" : 23,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_MEDIUM_RISK_LOC",
      "value" : 143,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_MEDIUM_RISK_PERCENTAGE",
      "value" : 2.0631943442504688,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_MEDIUM_RISK_COUNT",
      "value" : 5,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_VERY_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_VERY_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_VERY_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_HIGH_PLUS_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_HIGH_PLUS_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_IOS_NEGLIGIBLE_RISK_LOC",
      "value" : 1926,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_IOS_NEGLIGIBLE_RISK_PERCENTAGE",
      "value" : 100.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_IOS_NEGLIGIBLE_RISK_COUNT",
      "value" : 350,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_IOS_LOW_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_IOS_LOW_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_IOS_LOW_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_IOS_MEDIUM_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_IOS_MEDIUM_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_IOS_MEDIUM_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_IOS_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_IOS_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_IOS_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_IOS_VERY_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_IOS_VERY_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_IOS_VERY_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_ANDROID_NEGLIGIBLE_RISK_LOC",
      "value" : 4261,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_ANDROID_NEGLIGIBLE_RISK_PERCENTAGE",
      "value" : 85.13486513486514,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_ANDROID_NEGLIGIBLE_RISK_COUNT",
      "value" : 730,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_ANDROID_LOW_RISK_LOC",
      "value" : 601,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_ANDROID_LOW_RISK_PERCENTAGE",
      "value" : 12.007992007992009,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_ANDROID_LOW_RISK_COUNT",
      "value" : 23,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_ANDROID_MEDIUM_RISK_LOC",
      "value" : 143,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_ANDROID_MEDIUM_RISK_PERCENTAGE",
      "value" : 2.857142857142857,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_ANDROID_MEDIUM_RISK_COUNT",
      "value" : 5,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_ANDROID_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_ANDROID_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_ANDROID_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_ANDROID_VERY_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_ANDROID_VERY_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_ANDROID_VERY_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_SWIFT_NEGLIGIBLE_RISK_LOC",
      "value" : 1926,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_SWIFT_NEGLIGIBLE_RISK_PERCENTAGE",
      "value" : 100.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_SWIFT_NEGLIGIBLE_RISK_COUNT",
      "value" : 350,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_SWIFT_LOW_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_SWIFT_LOW_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_SWIFT_LOW_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_SWIFT_MEDIUM_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_SWIFT_MEDIUM_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_SWIFT_MEDIUM_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_SWIFT_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_SWIFT_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_SWIFT_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_SWIFT_VERY_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_SWIFT_VERY_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_SWIFT_VERY_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JAVA_NEGLIGIBLE_RISK_LOC",
      "value" : 2207,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JAVA_NEGLIGIBLE_RISK_PERCENTAGE",
      "value" : 81.40907414238289,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JAVA_NEGLIGIBLE_RISK_COUNT",
      "value" : 394,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JAVA_LOW_RISK_LOC",
      "value" : 440,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JAVA_LOW_RISK_PERCENTAGE",
      "value" : 16.230173367760973,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JAVA_LOW_RISK_COUNT",
      "value" : 17,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JAVA_MEDIUM_RISK_LOC",
      "value" : 64,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JAVA_MEDIUM_RISK_PERCENTAGE",
      "value" : 2.3607524898561416,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JAVA_MEDIUM_RISK_COUNT",
      "value" : 4,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JAVA_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JAVA_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JAVA_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JAVA_VERY_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JAVA_VERY_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JAVA_VERY_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_KT_NEGLIGIBLE_RISK_LOC",
      "value" : 2029,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_KT_NEGLIGIBLE_RISK_PERCENTAGE",
      "value" : 93.41620626151013,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_KT_NEGLIGIBLE_RISK_COUNT",
      "value" : 330,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_KT_LOW_RISK_LOC",
      "value" : 143,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_KT_LOW_RISK_PERCENTAGE",
      "value" : 6.583793738489871,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_KT_LOW_RISK_COUNT",
      "value" : 5,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_KT_MEDIUM_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_KT_MEDIUM_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_KT_MEDIUM_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_KT_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_KT_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_KT_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_KT_VERY_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_KT_VERY_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_KT_VERY_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JS_NEGLIGIBLE_RISK_LOC",
      "value" : 25,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JS_NEGLIGIBLE_RISK_PERCENTAGE",
      "value" : 20.491803278688526,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JS_NEGLIGIBLE_RISK_COUNT",
      "value" : 6,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JS_LOW_RISK_LOC",
      "value" : 18,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JS_LOW_RISK_PERCENTAGE",
      "value" : 14.754098360655737,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JS_LOW_RISK_COUNT",
      "value" : 1,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JS_MEDIUM_RISK_LOC",
      "value" : 79,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JS_MEDIUM_RISK_PERCENTAGE",
      "value" : 64.75409836065573,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JS_MEDIUM_RISK_COUNT",
      "value" : 1,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JS_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JS_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JS_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JS_VERY_HIGH_RISK_LOC",
      "value" : 0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JS_VERY_HIGH_RISK_PERCENTAGE",
      "value" : 0.0,
      "description" : null
    }, {
      "id" : "CONDITIONAL_COMPLEXITY_COMPONENT_JS_VERY_HIGH_RISK_COUNT",
      "value" : 0,
      "description" : null
    }, {
      "id" : "FILE_CHANGE_HISTORY_TOTAL_AGE_DAYS",
      "value" : 2372,
      "description" : "The age of the repository in days"
    }, {
      "id" : "FILE_CHANGE_HISTORY_ACTIVE_DAYS",
      "value" : 215,
      "description" : "The number of days with at least one file change"
    }, {
      "id" : "FILE_CHANGE_HISTORY_WEEKS",
      "value" : 337,
      "description" : "The number of weeks"
    }, {
      "id" : "FILE_CHANGE_HISTORY_ESTIMATED_WORKING_DAYS",
      "value" : 1685,
      "description" : "The number of estimated working days in the period"
    }, {
      "id" : "FILE_AGE_NEGLIGIBLE_RISK_COUNT",
      "value" : 2,
      "description" : "Number of files 1-30 days days old"
    }, {
      "id" : "FILE_AGE_LOW_RISK_COUNT",
      "value" : 0,
      "description" : "Number of files 31-90 days days old"
    }, {
      "id" : "FILE_AGE_MEDIUM_RISK_COUNT",
      "value" : 4,
      "description" : "Number of files 91-180 days days old"
    }, {
      "id" : "FILE_AGE_HIGH_RISK_COUNT",
      "value" : 244,
      "description" : "Number of files 181-365 days days old"
    }, {
      "id" : "FILE_AGE_VERY_HIGH_RISK_COUNT",
      "value" : 266,
      "description" : "Number of files 366+ days days old"
    }, {
      "id" : "FILE_AGE_NEGLIGIBLE_RISK_LOC",
      "value" : 183,
      "description" : "Number of files 1-30 days days old"
    }, {
      "id" : "FILE_AGE_LOW_RISK_LOC",
      "value" : 0,
      "description" : "Number of files 31-90 days days old"
    }, {
      "id" : "FILE_AGE_MEDIUM_RISK_LOC",
      "value" : 395,
      "description" : "Number of files 91-180 days days old"
    }, {
      "id" : "FILE_AGE_HIGH_RISK_LOC",
      "value" : 10566,
      "description" : "Number of files 181-365 days days old"
    }, {
      "id" : "FILE_AGE_VERY_HIGH_RISK_LOC",
      "value" : 7701,
      "description" : "Number of files 366+ days days old"
    }, {
      "id" : "NUMBER_OF_CONTRIBUTORS",
      "value" : 79,
      "description" : "Number of contributors"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_DUPLICATES",
      "value" : 667,
      "description" : "Number of duplicates"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_FILES_WITH_DUPLICATES",
      "value" : 240,
      "description" : "Number of files with duplicates"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_DUPLICATED_LINES",
      "value" : 6305,
      "description" : "Number of duplicated lines"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_CLEANED_LINES",
      "value" : 13387,
      "description" : "Number of lines after cleaning for duplication calculations"
    }, {
      "id" : "DUPLICATION_PERCENTAGE",
      "value" : 47.09793082841563,
      "description" : "Duplication percentage"
    }, {
      "id" : "UNIT_DUPLICATES_COUNT",
      "value" : 25,
      "description" : "Unit duplicates"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_DUPLICATED_LINES_PRIMARY_ANDROID",
      "value" : 3113,
      "description" : "Number of duplicated lines"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_CLEANED_LINES_PRIMARY_ANDROID",
      "value" : 3113,
      "description" : "Number of lines after cleaning for duplication calculations"
    }, {
      "id" : "DUPLICATION_PERCENTAGE_PRIMARY_ANDROID",
      "value" : 100.0,
      "description" : "Duplication percentage"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_DUPLICATED_LINES_PRIMARY_IOS",
      "value" : 3192,
      "description" : "Number of duplicated lines"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_CLEANED_LINES_PRIMARY_IOS",
      "value" : 3192,
      "description" : "Number of lines after cleaning for duplication calculations"
    }, {
      "id" : "DUPLICATION_PERCENTAGE_PRIMARY_IOS",
      "value" : 100.0,
      "description" : "Duplication percentage"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_DUPLICATED_LINES_PRIMARY_ROOT",
      "value" : 0,
      "description" : "Number of duplicated lines"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_CLEANED_LINES_PRIMARY_ROOT",
      "value" : 0,
      "description" : "Number of lines after cleaning for duplication calculations"
    }, {
      "id" : "DUPLICATION_PERCENTAGE_PRIMARY_ROOT",
      "value" : "NaN",
      "description" : "Duplication percentage"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_DUPLICATED_LINES_JAVA",
      "value" : 2237,
      "description" : "Number of duplicated lines"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_CLEANED_LINES_JAVA",
      "value" : 3672,
      "description" : "Number of lines after cleaning for duplication calculations"
    }, {
      "id" : "DUPLICATION_PERCENTAGE_JAVA",
      "value" : 60.92047930283224,
      "description" : "Duplication percentage"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_DUPLICATED_LINES_SWIFT",
      "value" : 3192,
      "description" : "Number of duplicated lines"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_CLEANED_LINES_SWIFT",
      "value" : 4633,
      "description" : "Number of lines after cleaning for duplication calculations"
    }, {
      "id" : "DUPLICATION_PERCENTAGE_SWIFT",
      "value" : 68.89704295273042,
      "description" : "Duplication percentage"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_DUPLICATED_LINES_XML",
      "value" : 725,
      "description" : "Number of duplicated lines"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_CLEANED_LINES_XML",
      "value" : 816,
      "description" : "Number of lines after cleaning for duplication calculations"
    }, {
      "id" : "DUPLICATION_PERCENTAGE_XML",
      "value" : 88.84803921568627,
      "description" : "Duplication percentage"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_DUPLICATED_LINES_KT",
      "value" : 121,
      "description" : "Number of duplicated lines"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_CLEANED_LINES_KT",
      "value" : 3768,
      "description" : "Number of lines after cleaning for duplication calculations"
    }, {
      "id" : "DUPLICATION_PERCENTAGE_KT",
      "value" : 3.2112526539278132,
      "description" : "Duplication percentage"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_DUPLICATED_LINES_KTS",
      "value" : 30,
      "description" : "Number of duplicated lines"
    }, {
      "id" : "DUPLICATION_NUMBER_OF_CLEANED_LINES_KTS",
      "value" : 250,
      "description" : "Number of lines after cleaning for duplication calculations"
    }, {
      "id" : "DUPLICATION_PERCENTAGE_KTS",
      "value" : 12.0,
      "description" : "Duplication percentage"
    }, {
      "id" : "TOTAL_ANALYSIS_TIME_IN_MILLIS",
      "value" : 1330,
      "description" : "Total analysis time in milliseconds"
    } ]
  },
  "controlResults" : {
    "goalsAnalysisResults" : [ {
      "metricsWithGoal" : {
        "goal" : "Keep the system simple and easy to change",
        "description" : "Aim at keeping the system size modest (less than 200,000 LOC is good), duplication low (less than 5% is good), files small (no files longer than 1000 LOC is good), and units simple (no units with more than 25 decision points is good).",
        "controls" : [ {
          "metric" : "LINES_OF_CODE_MAIN",
          "description" : "Total number of lines of main code",
          "desiredRange" : {
            "min" : "0",
            "max" : "200000",
            "tolerance" : "20000"
          }
        }, {
          "metric" : "DUPLICATION_PERCENTAGE",
          "description" : "System duplication",
          "desiredRange" : {
            "min" : "0",
            "max" : "5",
            "tolerance" : "1"
          }
        }, {
          "metric" : "VERY_HIGH_RISK_FILE_SIZE_COUNT",
          "description" : "The number of very large files",
          "desiredRange" : {
            "min" : "0",
            "max" : "0",
            "tolerance" : "1"
          }
        }, {
          "metric" : "CONDITIONAL_COMPLEXITY_VERY_HIGH_RISK_COUNT",
          "description" : "Number of very complex units",
          "desiredRange" : {
            "min" : "0",
            "max" : "0",
            "tolerance" : "1"
          }
        } ]
      },
      "controlStatuses" : [ {
        "control" : {
          "metric" : "LINES_OF_CODE_MAIN",
          "description" : "Total number of lines of main code",
          "desiredRange" : {
            "min" : "0",
            "max" : "200000",
            "tolerance" : "20000"
          }
        },
        "metric" : {
          "id" : "LINES_OF_CODE_MAIN",
          "value" : 18845,
          "description" : null
        },
        "status" : "OK"
      }, {
        "control" : {
          "metric" : "DUPLICATION_PERCENTAGE",
          "description" : "System duplication",
          "desiredRange" : {
            "min" : "0",
            "max" : "5",
            "tolerance" : "1"
          }
        },
        "metric" : {
          "id" : "DUPLICATION_PERCENTAGE",
          "value" : 47.09793082841563,
          "description" : "Duplication percentage"
        },
        "status" : "FAILED"
      }, {
        "control" : {
          "metric" : "VERY_HIGH_RISK_FILE_SIZE_COUNT",
          "description" : "The number of very large files",
          "desiredRange" : {
            "min" : "0",
            "max" : "0",
            "tolerance" : "1"
          }
        },
        "metric" : {
          "id" : "VERY_HIGH_RISK_FILE_SIZE_COUNT",
          "value" : 0,
          "description" : "Number of  files with more than 1000 lines of code"
        },
        "status" : "OK"
      }, {
        "control" : {
          "metric" : "CONDITIONAL_COMPLEXITY_VERY_HIGH_RISK_COUNT",
          "description" : "Number of very complex units",
          "desiredRange" : {
            "min" : "0",
            "max" : "0",
            "tolerance" : "1"
          }
        },
        "metric" : {
          "id" : "CONDITIONAL_COMPLEXITY_VERY_HIGH_RISK_COUNT",
          "value" : 0,
          "description" : null
        },
        "status" : "OK"
      } ]
    } ]
  },
  "totalNumberOfFilesInScope" : 902,
  "mainAspectAnalysisResults" : {
    "name" : null,
    "filesCount" : 516,
    "linesOfCode" : 18845,
    "numberOfRegexLineMatches" : 0,
    "fileCountPerExtension" : [ {
      "name" : "  *.swift",
      "value" : 199,
      "description" : [ ]
    }, {
      "name" : "  *.java",
      "value" : 137,
      "description" : [ ]
    }, {
      "name" : "  *.kt",
      "value" : 138,
      "description" : [ ]
    }, {
      "name" : "  *.xml",
      "value" : 25,
      "description" : [ ]
    }, {
      "name" : "  *.kts",
      "value" : 12,
      "description" : [ ]
    }, {
      "name" : "  *.toml",
      "value" : 2,
      "description" : [ ]
    }, {
      "name" : "  *.js",
      "value" : 2,
      "description" : [ ]
    }, {
      "name" : "  *.h",
      "value" : 1,
      "description" : [ ]
    } ],
    "linesOfCodePerExtension" : [ {
      "name" : "  *.swift",
      "value" : 6541,
      "description" : [ ]
    }, {
      "name" : "  *.java",
      "value" : 5591,
      "description" : [ ]
    }, {
      "name" : "  *.kt",
      "value" : 5259,
      "description" : [ ]
    }, {
      "name" : "  *.xml",
      "value" : 854,
      "description" : [ ]
    }, {
      "name" : "  *.kts",
      "value" : 333,
      "description" : [ ]
    }, {
      "name" : "  *.toml",
      "value" : 134,
      "description" : [ ]
    }, {
      "name" : "  *.js",
      "value" : 130,
      "description" : [ ]
    }, {
      "name" : "  *.h",
      "value" : 3,
      "description" : [ ]
    } ]
  },
  "testAspectAnalysisResults" : {
    "name" : null,
    "filesCount" : 67,
    "linesOfCode" : 3270,
    "numberOfRegexLineMatches" : 0,
    "fileCountPerExtension" : [ {
      "name" : "  *.kt",
      "value" : 31,
      "description" : [ ]
    }, {
      "name" : "  *.java",
      "value" : 36,
      "description" : [ ]
    } ],
    "linesOfCodePerExtension" : [ {
      "name" : "  *.kt",
      "value" : 2631,
      "description" : [ ]
    }, {
      "name" : "  *.java",
      "value" : 639,
      "description" : [ ]
    } ]
  },
  "generatedAspectAnalysisResults" : {
    "name" : null,
    "filesCount" : 0,
    "linesOfCode" : 0,
    "numberOfRegexLineMatches" : 0,
    "fileCountPerExtension" : [ ],
    "linesOfCodePerExtension" : [ ]
  },
  "buildAndDeployAspectAnalysisResults" : {
    "name" : null,
    "filesCount" : 31,
    "linesOfCode" : 858,
    "numberOfRegexLineMatches" : 0,
    "fileCountPerExtension" : [ {
      "name" : "  *.gradle",
      "value" : 21,
      "description" : [ ]
    }, {
      "name" : "  *.xml",
      "value" : 5,
      "description" : [ ]
    }, {
      "name" : "  *.sh",
      "value" : 3,
      "description" : [ ]
    }, {
      "name" : "  *.bat",
      "value" : 1,
      "description" : [ ]
    }, {
      "name" : "  *.podspec",
      "value" : 1,
      "description" : [ ]
    } ],
    "linesOfCodePerExtension" : [ {
      "name" : "  *.gradle",
      "value" : 563,
      "description" : [ ]
    }, {
      "name" : "  *.xml",
      "value" : 126,
      "description" : [ ]
    }, {
      "name" : "  *.sh",
      "value" : 87,
      "description" : [ ]
    }, {
      "name" : "  *.bat",
      "value" : 66,
      "description" : [ ]
    }, {
      "name" : "  *.podspec",
      "value" : 16,
      "description" : [ ]
    } ]
  },
  "otherAspectAnalysisResults" : {
    "name" : null,
    "filesCount" : 236,
    "linesOfCode" : 7025,
    "numberOfRegexLineMatches" : 0,
    "fileCountPerExtension" : [ {
      "name" : "  *.java",
      "value" : 59,
      "description" : [ ]
    }, {
      "name" : "  *.kt",
      "value" : 68,
      "description" : [ ]
    }, {
      "name" : "  *.xml",
      "value" : 31,
      "description" : [ ]
    }, {
      "name" : "  *.md",
      "value" : 37,
      "description" : [ ]
    }, {
      "name" : "  *.plist",
      "value" : 12,
      "description" : [ ]
    }, {
      "name" : "  *.properties",
      "value" : 20,
      "description" : [ ]
    }, {
      "name" : "  *.txt",
      "value" : 1,
      "description" : [ ]
    }, {
      "name" : "  *.gradle",
      "value" : 5,
      "description" : [ ]
    }, {
      "name" : "  *.json",
      "value" : 1,
      "description" : [ ]
    }, {
      "name" : "  *.storyboard",
      "value" : 1,
      "description" : [ ]
    }, {
      "name" : "  *.xib",
      "value" : 1,
      "description" : [ ]
    } ],
    "linesOfCodePerExtension" : [ {
      "name" : "  *.java",
      "value" : 2371,
      "description" : [ ]
    }, {
      "name" : "  *.kt",
      "value" : 1775,
      "description" : [ ]
    }, {
      "name" : "  *.xml",
      "value" : 986,
      "description" : [ ]
    }, {
      "name" : "  *.md",
      "value" : 569,
      "description" : [ ]
    }, {
      "name" : "  *.plist",
      "value" : 557,
      "description" : [ ]
    }, {
      "name" : "  *.properties",
      "value" : 336,
      "description" : [ ]
    }, {
      "name" : "  *.txt",
      "value" : 180,
      "description" : [ ]
    }, {
      "name" : "  *.gradle",
      "value" : 164,
      "description" : [ ]
    }, {
      "name" : "  *.json",
      "value" : 34,
      "description" : [ ]
    }, {
      "name" : "  *.storyboard",
      "value" : 27,
      "description" : [ ]
    }, {
      "name" : "  *.xib",
      "value" : 26,
      "description" : [ ]
    } ]
  },
  "logicalDecompositionsAnalysisResults" : [ {
    "key" : "primary",
    "components" : [ {
      "name" : "ios",
      "filesCount" : 199,
      "linesOfCode" : 6519,
      "numberOfRegexLineMatches" : 0,
      "fileCountPerExtension" : [ {
        "name" : "  *.swift",
        "value" : 198,
        "description" : [ ]
      }, {
        "name" : "  *.h",
        "value" : 1,
        "description" : [ ]
      } ],
      "linesOfCodePerExtension" : [ {
        "name" : "  *.swift",
        "value" : 6516,
        "description" : [ ]
      }, {
        "name" : "  *.h",
        "value" : 3,
        "description" : [ ]
      } ]
    }, {
      "name" : "android",
      "filesCount" : 316,
      "linesOfCode" : 12301,
      "numberOfRegexLineMatches" : 0,
      "fileCountPerExtension" : [ {
        "name" : "  *.java",
        "value" : 137,
        "description" : [ ]
      }, {
        "name" : "  *.kt",
        "value" : 138,
        "description" : [ ]
      }, {
        "name" : "  *.xml",
        "value" : 25,
        "description" : [ ]
      }, {
        "name" : "  *.kts",
        "value" : 12,
        "description" : [ ]
      }, {
        "name" : "  *.toml",
        "value" : 2,
        "description" : [ ]
      }, {
        "name" : "  *.js",
        "value" : 2,
        "description" : [ ]
      } ],
      "linesOfCodePerExtension" : [ {
        "name" : "  *.java",
        "value" : 5591,
        "description" : [ ]
      }, {
        "name" : "  *.kt",
        "value" : 5259,
        "description" : [ ]
      }, {
        "name" : "  *.xml",
        "value" : 854,
        "description" : [ ]
      }, {
        "name" : "  *.kts",
        "value" : 333,
        "description" : [ ]
      }, {
        "name" : "  *.toml",
        "value" : 134,
        "description" : [ ]
      }, {
        "name" : "  *.js",
        "value" : 130,
        "description" : [ ]
      } ]
    }, {
      "name" : "ROOT",
      "filesCount" : 1,
      "linesOfCode" : 25,
      "numberOfRegexLineMatches" : 0,
      "fileCountPerExtension" : [ {
        "name" : "  *.swift",
        "value" : 1,
        "description" : [ ]
      } ],
      "linesOfCodePerExtension" : [ {
        "name" : "  *.swift",
        "value" : 25,
        "description" : [ ]
      } ]
    } ],
    "componentDependencies" : [ ],
    "componentDependenciesErrors" : [ ],
    "logicalDecomposition" : {
      "name" : "primary",
      "scope" : "main",
      "filters" : [ ],
      "componentsFolderDepth" : 1,
      "minComponentsCount" : 0,
      "components" : [ {
        "name" : "ios",
        "sourceFileFilters" : [ {
          "pathPattern" : "./ios/.*",
          "contentPattern" : "",
          "exception" : false,
          "note" : ""
        } ],
        "files" : [ ]
      }, {
        "name" : "android",
        "sourceFileFilters" : [ {
          "pathPattern" : "./android/.*",
          "contentPattern" : "",
          "exception" : false,
          "note" : ""
        } ],
        "files" : [ ]
      }, {
        "name" : "ROOT",
        "sourceFileFilters" : [ {
          "pathPattern" : "./.*",
          "contentPattern" : "",
          "exception" : false,
          "note" : ""
        }, {
          "pathPattern" : "./ios/.*",
          "contentPattern" : "",
          "exception" : true,
          "note" : ""
        }, {
          "pathPattern" : "./android/.*",
          "contentPattern" : "",
          "exception" : true,
          "note" : ""
        } ],
        "files" : [ ]
      } ],
      "metaComponents" : [ ],
      "groups" : [ ],
      "includeRemainingFiles" : true,
      "dependenciesFinder" : {
        "useBuiltInDependencyFinders" : true,
        "rules" : [ ],
        "metaRules" : [ ]
      },
      "renderingOptions" : {
        "orientation" : "TB",
        "maxNumberOfDependencies" : 100,
        "renderComponentsWithoutDependencies" : true,
        "renderIndirectDependencies" : false,
        "renderInternalIndirectDependencies" : false,
        "reverseDirection" : false
      },
      "includeExternalComponents" : true,
      "dependencyLinkThreshold" : 1,
      "duplicationLinkThreshold" : 50,
      "temporalLinkThreshold" : 1,
      "maxSearchDepthLines" : 200
    },
    "fileCountPerComponent" : [ {
      "name" : "ios",
      "value" : 199,
      "description" : [ ]
    }, {
      "name" : "android",
      "value" : 316,
      "description" : [ ]
    }, {
      "name" : "ROOT",
      "value" : 1,
      "description" : [ ]
    } ],
    "linesOfCodePerComponent" : [ {
      "name" : "ios",
      "value" : 6519,
      "description" : [ ]
    }, {
      "name" : "android",
      "value" : 12301,
      "description" : [ ]
    }, {
      "name" : "ROOT",
      "value" : 25,
      "description" : [ ]
    } ]
  } ],
  "concernsAnalysisResults" : [ {
    "key" : "general",
    "concerns" : [ {
      "name" : "TODOs",
      "filesCount" : 106,
      "linesOfCode" : 2957,
      "numberOfRegexLineMatches" : 273,
      "fileCountPerExtension" : [ {
        "name" : "  *.swift",
        "value" : 97,
        "description" : [ ]
      }, {
        "name" : "  *.java",
        "value" : 9,
        "description" : [ ]
      } ],
      "linesOfCodePerExtension" : [ {
        "name" : "  *.swift",
        "value" : 2473,
        "description" : [ ]
      }, {
        "name" : "  *.java",
        "value" : 484,
        "description" : [ ]
      } ]
    }, {
      "name" : "Unclassified",
      "filesCount" : 410,
      "linesOfCode" : 15888,
      "numberOfRegexLineMatches" : 0,
      "fileCountPerExtension" : [ {
        "name" : "  *.kt",
        "value" : 138,
        "description" : [ ]
      }, {
        "name" : "  *.java",
        "value" : 128,
        "description" : [ ]
      }, {
        "name" : "  *.swift",
        "value" : 102,
        "description" : [ ]
      }, {
        "name" : "  *.xml",
        "value" : 25,
        "description" : [ ]
      }, {
        "name" : "  *.kts",
        "value" : 12,
        "description" : [ ]
      }, {
        "name" : "  *.toml",
        "value" : 2,
        "description" : [ ]
      }, {
        "name" : "  *.js",
        "value" : 2,
        "description" : [ ]
      }, {
        "name" : "  *.h",
        "value" : 1,
        "description" : [ ]
      } ],
      "linesOfCodePerExtension" : [ {
        "name" : "  *.kt",
        "value" : 5259,
        "description" : [ ]
      }, {
        "name" : "  *.java",
        "value" : 5107,
        "description" : [ ]
      }, {
        "name" : "  *.swift",
        "value" : 4068,
        "description" : [ ]
      }, {
        "name" : "  *.xml",
        "value" : 854,
        "description" : [ ]
      }, {
        "name" : "  *.kts",
        "value" : 333,
        "description" : [ ]
      }, {
        "name" : "  *.toml",
        "value" : 134,
        "description" : [ ]
      }, {
        "name" : "  *.js",
        "value" : 130,
        "description" : [ ]
      }, {
        "name" : "  *.h",
        "value" : 3,
        "description" : [ ]
      } ]
    } ],
    "concernsGroup" : null,
    "fileCountPerConcern" : [ {
      "name" : "TODOs",
      "value" : 106,
      "description" : [ ]
    }, {
      "name" : "Unclassified",
      "value" : 410,
      "description" : [ ]
    } ],
    "linesOfCodePerConcern" : [ {
      "name" : "TODOs",
      "value" : 2957,
      "description" : [ ]
    }, {
      "name" : "Unclassified",
      "value" : 15888,
      "description" : [ ]
    } ]
  } ],
  "foundTags" : [ {
    "tagRule" : {
      "tag" : "travis",
      "color" : "#7CB9E8",
      "pathPatterns" : [ "(|.*/)[.]travis[.]ya?ml" ],
      "excludePathPatterns" : [ ]
    },
    "evidence" : ".travis.yml"
  }, {
    "tagRule" : {
      "tag" : "github actions",
      "color" : "#7CB9E8",
      "pathPatterns" : [ "(|.*/)[.]github[/]workflows[/].*" ],
      "excludePathPatterns" : [ ]
    },
    "evidence" : ".github/workflows/android.yml"
  }, {
    "tagRule" : {
      "tag" : "npm",
      "color" : "#B9D9EB",
      "pathPatterns" : [ "(|.*/)package[.]json" ],
      "excludePathPatterns" : [ ]
    },
    "evidence" : "android/tooling/rib-flipper-plugin/desktop/package.json"
  }, {
    "tagRule" : {
      "tag" : "gradle",
      "color" : "#B9D9EB",
      "pathPatterns" : [ "(|.*/)build[.]gradle" ],
      "excludePathPatterns" : [ ]
    },
    "evidence" : "android/build.gradle\nandroid/demos/compose/build.gradle\nandroid/demos/flipper/build.gradle\nandroid/demos/intellij/build.gradle\nandroid/demos/memory-leaks/build.gradle\nandroid/demos/rib-workers/build.gradle\nandroid/libraries/rib-android-compose/build.gradle\nandroid/libraries/rib-android-core/build.gradle\nandroid/libraries/rib-base/build.gradle\nandroid/libraries/rib-compiler-app/build.gradle\nandroid/libraries/rib-compiler-test/build.gradle\nandroid/libraries/rib-coroutines/build.gradle\nandroid/libraries/rib-router-navigator/build.gradle\nandroid/libraries/rib-screen-stack-base/build.gradle\nandroid/libraries/rib-workflow/build.gradle\nandroid/tooling/rib-flipper-plugin/build.gradle\nandroid/tooling/rib-intellij-plugin/build.gradle\nandroid/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/build.gradle\nandroid/tooling/utils/intellij-broadcast-core/build.gradle\nandroid/tutorials/tutorial1/build.gradle\n...\n(found 4 more files)"
  }, {
    "tagRule" : {
      "tag" : "podfile",
      "color" : "#B9D9EB",
      "pathPatterns" : [ "(|.*/)Podfile" ],
      "excludePathPatterns" : [ ]
    },
    "evidence" : "ios/tutorials/tutorial1/Podfile\nios/tutorials/tutorial2/Podfile\nios/tutorials/tutorial3-completed/Podfile\nios/tutorials/tutorial3/Podfile\nios/tutorials/tutorial4-completed/Podfile\nios/tutorials/tutorial4/Podfile"
  } ],
  "filesAnalysisResults" : {
    "overallFileSizeDistribution" : {
      "key" : "",
      "lowRiskThreshold" : 100,
      "mediumRiskThreshold" : 200,
      "highRiskThreshold" : 500,
      "veryHighRiskThreshold" : 1000,
      "negligibleRiskValue" : 14137,
      "lowRiskValue" : 3287,
      "mediumRiskValue" : 1421,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 25,
      "negligibleRiskCount" : 486,
      "mediumRiskCount" : 5,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-100",
      "lowRiskLabel" : "101-200",
      "mediumRiskLabel" : "201-500",
      "highRiskLabel" : "501-1000",
      "veryHighRiskLabel" : "1001+",
      "negligibleRiskPercentage" : 75.0172459538339,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 7.540461660918015,
      "lowRiskPercentage" : 17.442292385248077,
      "totalValue" : 18845,
      "totalCount" : 516
    },
    "fileSizeDistributionPerExtension" : [ {
      "key" : "swift",
      "lowRiskThreshold" : 100,
      "mediumRiskThreshold" : 200,
      "highRiskThreshold" : 500,
      "veryHighRiskThreshold" : 1000,
      "negligibleRiskValue" : 5299,
      "lowRiskValue" : 1242,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 10,
      "negligibleRiskCount" : 189,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-100",
      "lowRiskLabel" : "101-200",
      "mediumRiskLabel" : "201-500",
      "highRiskLabel" : "501-1000",
      "veryHighRiskLabel" : "1001+",
      "negligibleRiskPercentage" : 81.01207766396575,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 18.987922336034245,
      "totalValue" : 6541,
      "totalCount" : 199
    }, {
      "key" : "h",
      "lowRiskThreshold" : 100,
      "mediumRiskThreshold" : 200,
      "highRiskThreshold" : 500,
      "veryHighRiskThreshold" : 1000,
      "negligibleRiskValue" : 3,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 1,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-100",
      "lowRiskLabel" : "101-200",
      "mediumRiskLabel" : "201-500",
      "highRiskLabel" : "501-1000",
      "veryHighRiskLabel" : "1001+",
      "negligibleRiskPercentage" : 100.0,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 3,
      "totalCount" : 1
    }, {
      "key" : "java",
      "lowRiskThreshold" : 100,
      "mediumRiskThreshold" : 200,
      "highRiskThreshold" : 500,
      "veryHighRiskThreshold" : 1000,
      "negligibleRiskValue" : 4634,
      "lowRiskValue" : 517,
      "mediumRiskValue" : 440,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 4,
      "negligibleRiskCount" : 132,
      "mediumRiskCount" : 1,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-100",
      "lowRiskLabel" : "101-200",
      "mediumRiskLabel" : "201-500",
      "highRiskLabel" : "501-1000",
      "veryHighRiskLabel" : "1001+",
      "negligibleRiskPercentage" : 82.88320515113575,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 7.869790735109998,
      "lowRiskPercentage" : 9.247004113754247,
      "totalValue" : 5591,
      "totalCount" : 137
    }, {
      "key" : "xml",
      "lowRiskThreshold" : 100,
      "mediumRiskThreshold" : 200,
      "highRiskThreshold" : 500,
      "veryHighRiskThreshold" : 1000,
      "negligibleRiskValue" : 854,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 25,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-100",
      "lowRiskLabel" : "101-200",
      "mediumRiskLabel" : "201-500",
      "highRiskLabel" : "501-1000",
      "veryHighRiskLabel" : "1001+",
      "negligibleRiskPercentage" : 100.0,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 854,
      "totalCount" : 25
    }, {
      "key" : "kt",
      "lowRiskThreshold" : 100,
      "mediumRiskThreshold" : 200,
      "highRiskThreshold" : 500,
      "veryHighRiskThreshold" : 1000,
      "negligibleRiskValue" : 2973,
      "lowRiskValue" : 1305,
      "mediumRiskValue" : 981,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 9,
      "negligibleRiskCount" : 125,
      "mediumRiskCount" : 4,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-100",
      "lowRiskLabel" : "101-200",
      "mediumRiskLabel" : "201-500",
      "highRiskLabel" : "501-1000",
      "veryHighRiskLabel" : "1001+",
      "negligibleRiskPercentage" : 56.531660011409016,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 18.65373645179692,
      "lowRiskPercentage" : 24.814603536794067,
      "totalValue" : 5259,
      "totalCount" : 138
    }, {
      "key" : "js",
      "lowRiskThreshold" : 100,
      "mediumRiskThreshold" : 200,
      "highRiskThreshold" : 500,
      "veryHighRiskThreshold" : 1000,
      "negligibleRiskValue" : 25,
      "lowRiskValue" : 105,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 1,
      "negligibleRiskCount" : 1,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-100",
      "lowRiskLabel" : "101-200",
      "mediumRiskLabel" : "201-500",
      "highRiskLabel" : "501-1000",
      "veryHighRiskLabel" : "1001+",
      "negligibleRiskPercentage" : 19.23076923076923,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 80.76923076923077,
      "totalValue" : 130,
      "totalCount" : 2
    }, {
      "key" : "kts",
      "lowRiskThreshold" : 100,
      "mediumRiskThreshold" : 200,
      "highRiskThreshold" : 500,
      "veryHighRiskThreshold" : 1000,
      "negligibleRiskValue" : 333,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 12,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-100",
      "lowRiskLabel" : "101-200",
      "mediumRiskLabel" : "201-500",
      "highRiskLabel" : "501-1000",
      "veryHighRiskLabel" : "1001+",
      "negligibleRiskPercentage" : 100.0,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 333,
      "totalCount" : 12
    }, {
      "key" : "toml",
      "lowRiskThreshold" : 100,
      "mediumRiskThreshold" : 200,
      "highRiskThreshold" : 500,
      "veryHighRiskThreshold" : 1000,
      "negligibleRiskValue" : 16,
      "lowRiskValue" : 118,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 1,
      "negligibleRiskCount" : 1,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-100",
      "lowRiskLabel" : "101-200",
      "mediumRiskLabel" : "201-500",
      "highRiskLabel" : "501-1000",
      "veryHighRiskLabel" : "1001+",
      "negligibleRiskPercentage" : 11.940298507462687,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 88.05970149253731,
      "totalValue" : 134,
      "totalCount" : 2
    } ],
    "fileSizeDistributionPerLogicalDecomposition" : [ {
      "name" : "primary",
      "fileSizeDistributionPerComponent" : [ {
        "key" : "ios",
        "lowRiskThreshold" : 100,
        "mediumRiskThreshold" : 200,
        "highRiskThreshold" : 500,
        "veryHighRiskThreshold" : 1000,
        "negligibleRiskValue" : 5277,
        "lowRiskValue" : 1242,
        "mediumRiskValue" : 0,
        "highRiskValue" : 0,
        "veryHighRiskValue" : 0,
        "lowRiskCount" : 10,
        "negligibleRiskCount" : 189,
        "mediumRiskCount" : 0,
        "highRiskCount" : 0,
        "veryHighRiskCount" : 0,
        "negligibleRiskLabel" : "1-100",
        "lowRiskLabel" : "101-200",
        "mediumRiskLabel" : "201-500",
        "highRiskLabel" : "501-1000",
        "veryHighRiskLabel" : "1001+",
        "negligibleRiskPercentage" : 80.94799815922687,
        "veryHighRiskPercentage" : 0.0,
        "highRiskPercentage" : 0.0,
        "mediumRiskPercentage" : 0.0,
        "lowRiskPercentage" : 19.052001840773126,
        "totalValue" : 6519,
        "totalCount" : 199
      }, {
        "key" : "android",
        "lowRiskThreshold" : 100,
        "mediumRiskThreshold" : 200,
        "highRiskThreshold" : 500,
        "veryHighRiskThreshold" : 1000,
        "negligibleRiskValue" : 8835,
        "lowRiskValue" : 2045,
        "mediumRiskValue" : 1421,
        "highRiskValue" : 0,
        "veryHighRiskValue" : 0,
        "lowRiskCount" : 15,
        "negligibleRiskCount" : 296,
        "mediumRiskCount" : 5,
        "highRiskCount" : 0,
        "veryHighRiskCount" : 0,
        "negligibleRiskLabel" : "1-100",
        "lowRiskLabel" : "101-200",
        "mediumRiskLabel" : "201-500",
        "highRiskLabel" : "501-1000",
        "veryHighRiskLabel" : "1001+",
        "negligibleRiskPercentage" : 71.82342898951305,
        "veryHighRiskPercentage" : 0.0,
        "highRiskPercentage" : 0.0,
        "mediumRiskPercentage" : 11.55190634907731,
        "lowRiskPercentage" : 16.624664661409643,
        "totalValue" : 12301,
        "totalCount" : 316
      }, {
        "key" : "ROOT",
        "lowRiskThreshold" : 100,
        "mediumRiskThreshold" : 200,
        "highRiskThreshold" : 500,
        "veryHighRiskThreshold" : 1000,
        "negligibleRiskValue" : 25,
        "lowRiskValue" : 0,
        "mediumRiskValue" : 0,
        "highRiskValue" : 0,
        "veryHighRiskValue" : 0,
        "lowRiskCount" : 0,
        "negligibleRiskCount" : 1,
        "mediumRiskCount" : 0,
        "highRiskCount" : 0,
        "veryHighRiskCount" : 0,
        "negligibleRiskLabel" : "1-100",
        "lowRiskLabel" : "101-200",
        "mediumRiskLabel" : "201-500",
        "highRiskLabel" : "501-1000",
        "veryHighRiskLabel" : "1001+",
        "negligibleRiskPercentage" : 100.0,
        "veryHighRiskPercentage" : 0.0,
        "highRiskPercentage" : 0.0,
        "mediumRiskPercentage" : 0.0,
        "lowRiskPercentage" : 0.0,
        "totalValue" : 25,
        "totalCount" : 1
      } ]
    } ],
    "longestFiles" : [ {
      "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
      "extension" : "java",
      "linesOfCode" : 440,
      "unitsCount" : 33,
      "unitsMcCabeIndexSum" : 112,
      "linesOfCodeInUnits" : 358
    }, {
      "relativePath" : "android/libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/StackRouterNavigator.kt",
      "extension" : "kt",
      "linesOfCode" : 341,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 11,
      "linesOfCodeInUnits" : 66
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyBrowser.kt",
      "extension" : "kt",
      "linesOfCode" : 223,
      "unitsCount" : 21,
      "unitsMcCabeIndexSum" : 29,
      "linesOfCodeInUnits" : 127
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/WorkerBinder.kt",
      "extension" : "kt",
      "linesOfCode" : 216,
      "unitsCount" : 11,
      "unitsMcCabeIndexSum" : 13,
      "linesOfCodeInUnits" : 103
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibProjectService.kt",
      "extension" : "kt",
      "linesOfCode" : 201,
      "unitsCount" : 16,
      "unitsMcCabeIndexSum" : 24,
      "linesOfCodeInUnits" : 101
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToeTests/TicTacToeMocks.swift",
      "extension" : "swift",
      "linesOfCode" : 194,
      "unitsCount" : 23,
      "unitsMcCabeIndexSum" : 40,
      "linesOfCodeInUnits" : 117
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Router.kt",
      "extension" : "kt",
      "linesOfCode" : 193,
      "unitsCount" : 15,
      "unitsMcCabeIndexSum" : 26,
      "linesOfCodeInUnits" : 130
    }, {
      "relativePath" : "android/libraries/rib-android/src/main/kotlin/com/uber/rib/core/RibActivity.kt",
      "extension" : "kt",
      "linesOfCode" : 192,
      "unitsCount" : 16,
      "unitsMcCabeIndexSum" : 21,
      "linesOfCodeInUnits" : 91
    }, {
      "relativePath" : "ios/RIBsTests/Workflow/WorkflowTests.swift",
      "extension" : "swift",
      "linesOfCode" : 162,
      "unitsCount" : 5,
      "unitsMcCabeIndexSum" : 5,
      "linesOfCodeInUnits" : 140
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/RibCoroutineWorker.kt",
      "extension" : "kt",
      "linesOfCode" : 155,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 7,
      "linesOfCodeInUnits" : 29
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
      "extension" : "java",
      "linesOfCode" : 149,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 55
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/GenerateAction.java",
      "extension" : "java",
      "linesOfCode" : 146,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 22,
      "linesOfCodeInUnits" : 107
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Interactor.kt",
      "extension" : "kt",
      "linesOfCode" : 145,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 10,
      "linesOfCodeInUnits" : 61
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyPanel.kt",
      "extension" : "kt",
      "linesOfCode" : 143,
      "unitsCount" : 5,
      "unitsMcCabeIndexSum" : 12,
      "linesOfCodeInUnits" : 54
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibViewBrowser.kt",
      "extension" : "kt",
      "linesOfCode" : 136,
      "unitsCount" : 15,
      "unitsMcCabeIndexSum" : 24,
      "linesOfCodeInUnits" : 84
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
      "extension" : "swift",
      "linesOfCode" : 130,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 27
    }, {
      "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
      "extension" : "swift",
      "linesOfCode" : 130,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 27
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/Generator.java",
      "extension" : "java",
      "linesOfCode" : 119,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 14,
      "linesOfCodeInUnits" : 60
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyUtils.kt",
      "extension" : "kt",
      "linesOfCode" : 119,
      "unitsCount" : 12,
      "unitsMcCabeIndexSum" : 27,
      "linesOfCodeInUnits" : 84
    }, {
      "relativePath" : "android/gradle/libs.versions.toml",
      "extension" : "toml",
      "linesOfCode" : 118,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/io/LogcatRequestProcessor.kt",
      "extension" : "kt",
      "linesOfCode" : 113,
      "unitsCount" : 5,
      "unitsMcCabeIndexSum" : 15,
      "linesOfCodeInUnits" : 69
    }, {
      "relativePath" : "android/tooling/rib-flipper-plugin/src/main/kotlin/com/uber/rib/flipper/RibTreePlugin.kt",
      "extension" : "kt",
      "linesOfCode" : 109,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 43
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
      "extension" : "swift",
      "linesOfCode" : 107,
      "unitsCount" : 5,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 24
    }, {
      "relativePath" : "ios/RIBs/Classes/LeakDetector/LeakDetector.swift",
      "extension" : "swift",
      "linesOfCode" : 105,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 14
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/OffGame/OffGameViewController.swift",
      "extension" : "swift",
      "linesOfCode" : 105,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 11
    }, {
      "relativePath" : "android/tooling/rib-flipper-plugin/desktop/src/TreeChart.js",
      "extension" : "js",
      "linesOfCode" : 105,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 19,
      "linesOfCodeInUnits" : 97
    }, {
      "relativePath" : "ios/RIBs/Classes/Worker/Worker.swift",
      "extension" : "swift",
      "linesOfCode" : 104,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 14
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
      "extension" : "swift",
      "linesOfCode" : 103,
      "unitsCount" : 5,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 24
    }, {
      "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
      "extension" : "java",
      "linesOfCode" : 103,
      "unitsCount" : 5,
      "unitsMcCabeIndexSum" : 5,
      "linesOfCodeInUnits" : 30
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
      "extension" : "swift",
      "linesOfCode" : 102,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 5,
      "linesOfCodeInUnits" : 23
    }, {
      "relativePath" : "android/tutorials/tutorial3/src/main/res/layout/tic_tac_toe_rib.xml",
      "extension" : "xml",
      "linesOfCode" : 100,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/res/layout/tic_tac_toe_rib.xml",
      "extension" : "xml",
      "linesOfCode" : 100,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tutorials/tutorial2/src/main/res/layout/tic_tac_toe_rib.xml",
      "extension" : "xml",
      "linesOfCode" : 100,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tutorials/tutorial3-completed/src/main/res/layout/tic_tac_toe_rib.xml",
      "extension" : "xml",
      "linesOfCode" : 100,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/RIBs/Classes/Workflow/Workflow.swift",
      "extension" : "swift",
      "linesOfCode" : 99,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 13
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyPayload.java",
      "extension" : "java",
      "linesOfCode" : 99,
      "unitsCount" : 18,
      "unitsMcCabeIndexSum" : 19,
      "linesOfCodeInUnits" : 67
    }, {
      "relativePath" : "ios/RIBs/Classes/Router.swift",
      "extension" : "swift",
      "linesOfCode" : 98,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 16
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/TicTacToe/TicTacToeViewController.swift",
      "extension" : "swift",
      "linesOfCode" : 98,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 10,
      "linesOfCodeInUnits" : 44
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToe/TicTacToe/TicTacToeViewController.swift",
      "extension" : "swift",
      "linesOfCode" : 98,
      "unitsCount" : 9,
      "unitsMcCabeIndexSum" : 13,
      "linesOfCodeInUnits" : 55
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
      "extension" : "swift",
      "linesOfCode" : 98,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 10,
      "linesOfCodeInUnits" : 44
    }, {
      "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
      "extension" : "swift",
      "linesOfCode" : 98,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 10,
      "linesOfCodeInUnits" : 44
    }, {
      "relativePath" : "android/libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/RouterAndState.kt",
      "extension" : "kt",
      "linesOfCode" : 98,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 23
    }, {
      "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
      "extension" : "java",
      "linesOfCode" : 95,
      "unitsCount" : 10,
      "unitsMcCabeIndexSum" : 12,
      "linesOfCodeInUnits" : 70
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
      "extension" : "java",
      "linesOfCode" : 95,
      "unitsCount" : 10,
      "unitsMcCabeIndexSum" : 12,
      "linesOfCodeInUnits" : 70
    }, {
      "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
      "extension" : "java",
      "linesOfCode" : 95,
      "unitsCount" : 10,
      "unitsMcCabeIndexSum" : 12,
      "linesOfCodeInUnits" : 70
    }, {
      "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
      "extension" : "java",
      "linesOfCode" : 95,
      "unitsCount" : 10,
      "unitsMcCabeIndexSum" : 12,
      "linesOfCodeInUnits" : 70
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/TicTacToe/TicTacToeViewController.swift",
      "extension" : "swift",
      "linesOfCode" : 90,
      "unitsCount" : 9,
      "unitsMcCabeIndexSum" : 11,
      "linesOfCodeInUnits" : 47
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/ui/RibHierarchyTreeStructure.kt",
      "extension" : "kt",
      "linesOfCode" : 89,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 76
    }, {
      "relativePath" : "android/libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/RouterNavigator.kt",
      "extension" : "kt",
      "linesOfCode" : 85,
      "unitsCount" : 8,
      "unitsMcCabeIndexSum" : 8,
      "linesOfCodeInUnits" : 113
    }, {
      "relativePath" : "android/libraries/rib-android/src/main/kotlin/com/uber/rib/core/XRay.kt",
      "extension" : "kt",
      "linesOfCode" : 84,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 20
    } ],
    "filesWithMostUnits" : [ {
      "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
      "extension" : "java",
      "linesOfCode" : 440,
      "unitsCount" : 33,
      "unitsMcCabeIndexSum" : 112,
      "linesOfCodeInUnits" : 358
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToeTests/TicTacToeMocks.swift",
      "extension" : "swift",
      "linesOfCode" : 194,
      "unitsCount" : 23,
      "unitsMcCabeIndexSum" : 40,
      "linesOfCodeInUnits" : 117
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyBrowser.kt",
      "extension" : "kt",
      "linesOfCode" : 223,
      "unitsCount" : 21,
      "unitsMcCabeIndexSum" : 29,
      "linesOfCodeInUnits" : 127
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyPayload.java",
      "extension" : "java",
      "linesOfCode" : 99,
      "unitsCount" : 18,
      "unitsMcCabeIndexSum" : 19,
      "linesOfCodeInUnits" : 67
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibProjectService.kt",
      "extension" : "kt",
      "linesOfCode" : 201,
      "unitsCount" : 16,
      "unitsMcCabeIndexSum" : 24,
      "linesOfCodeInUnits" : 101
    }, {
      "relativePath" : "android/libraries/rib-android/src/main/kotlin/com/uber/rib/core/RibActivity.kt",
      "extension" : "kt",
      "linesOfCode" : 192,
      "unitsCount" : 16,
      "unitsMcCabeIndexSum" : 21,
      "linesOfCodeInUnits" : 91
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibViewBrowser.kt",
      "extension" : "kt",
      "linesOfCode" : 136,
      "unitsCount" : 15,
      "unitsMcCabeIndexSum" : 24,
      "linesOfCodeInUnits" : 84
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Router.kt",
      "extension" : "kt",
      "linesOfCode" : 193,
      "unitsCount" : 15,
      "unitsMcCabeIndexSum" : 26,
      "linesOfCodeInUnits" : 130
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyUtils.kt",
      "extension" : "kt",
      "linesOfCode" : 119,
      "unitsCount" : 12,
      "unitsMcCabeIndexSum" : 27,
      "linesOfCodeInUnits" : 84
    }, {
      "relativePath" : "android/libraries/rib-test/src/main/kotlin/com/uber/rib/core/RouterHelper.kt",
      "extension" : "kt",
      "linesOfCode" : 61,
      "unitsCount" : 11,
      "unitsMcCabeIndexSum" : 11,
      "linesOfCodeInUnits" : 33
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/RibRefWatcher.kt",
      "extension" : "kt",
      "linesOfCode" : 60,
      "unitsCount" : 11,
      "unitsMcCabeIndexSum" : 19,
      "linesOfCodeInUnits" : 48
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/WorkerBinder.kt",
      "extension" : "kt",
      "linesOfCode" : 216,
      "unitsCount" : 11,
      "unitsMcCabeIndexSum" : 13,
      "linesOfCodeInUnits" : 103
    }, {
      "relativePath" : "android/tooling/utils/intellij-broadcast-core/src/main/java/com/uber/debug/broadcast/core/DebugBroadcastRequest.java",
      "extension" : "java",
      "linesOfCode" : 76,
      "unitsCount" : 10,
      "unitsMcCabeIndexSum" : 15,
      "linesOfCodeInUnits" : 57
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Bundle.kt",
      "extension" : "kt",
      "linesOfCode" : 47,
      "unitsCount" : 10,
      "unitsMcCabeIndexSum" : 12,
      "linesOfCodeInUnits" : 39
    }, {
      "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
      "extension" : "java",
      "linesOfCode" : 95,
      "unitsCount" : 10,
      "unitsMcCabeIndexSum" : 12,
      "linesOfCodeInUnits" : 70
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
      "extension" : "java",
      "linesOfCode" : 95,
      "unitsCount" : 10,
      "unitsMcCabeIndexSum" : 12,
      "linesOfCodeInUnits" : 70
    }, {
      "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
      "extension" : "java",
      "linesOfCode" : 95,
      "unitsCount" : 10,
      "unitsMcCabeIndexSum" : 12,
      "linesOfCodeInUnits" : 70
    }, {
      "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
      "extension" : "java",
      "linesOfCode" : 95,
      "unitsCount" : 10,
      "unitsMcCabeIndexSum" : 12,
      "linesOfCodeInUnits" : 70
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/TicTacToe/TicTacToeViewController.swift",
      "extension" : "swift",
      "linesOfCode" : 90,
      "unitsCount" : 9,
      "unitsMcCabeIndexSum" : 11,
      "linesOfCodeInUnits" : 47
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToe/TicTacToe/TicTacToeViewController.swift",
      "extension" : "swift",
      "linesOfCode" : 98,
      "unitsCount" : 9,
      "unitsMcCabeIndexSum" : 13,
      "linesOfCodeInUnits" : 55
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/ui/HierarchyBrowserBase.kt",
      "extension" : "kt",
      "linesOfCode" : 66,
      "unitsCount" : 8,
      "unitsMcCabeIndexSum" : 11,
      "linesOfCodeInUnits" : 46
    }, {
      "relativePath" : "android/libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/RouterNavigator.kt",
      "extension" : "kt",
      "linesOfCode" : 85,
      "unitsCount" : 8,
      "unitsMcCabeIndexSum" : 8,
      "linesOfCodeInUnits" : 113
    }, {
      "relativePath" : "android/libraries/rib-android-core/src/main/kotlin/com/uber/rib/core/ActivityDelegate.kt",
      "extension" : "kt",
      "linesOfCode" : 25,
      "unitsCount" : 8,
      "unitsMcCabeIndexSum" : 8,
      "linesOfCodeInUnits" : 18
    }, {
      "relativePath" : "android/libraries/rib-android-core/src/main/kotlin/com/uber/rib/core/CoreAppCompatActivity.kt",
      "extension" : "kt",
      "linesOfCode" : 66,
      "unitsCount" : 8,
      "unitsMcCabeIndexSum" : 9,
      "linesOfCodeInUnits" : 41
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Rib.kt",
      "extension" : "kt",
      "linesOfCode" : 39,
      "unitsCount" : 8,
      "unitsMcCabeIndexSum" : 11,
      "linesOfCodeInUnits" : 36
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/TicTacToe/TicTacToeViewController.swift",
      "extension" : "swift",
      "linesOfCode" : 98,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 10,
      "linesOfCodeInUnits" : 44
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
      "extension" : "swift",
      "linesOfCode" : 98,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 10,
      "linesOfCodeInUnits" : 44
    }, {
      "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
      "extension" : "swift",
      "linesOfCode" : 98,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 10,
      "linesOfCodeInUnits" : 44
    }, {
      "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/LoggedIn/LoggedInInteractor.swift",
      "extension" : "swift",
      "linesOfCode" : 41,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 8,
      "linesOfCodeInUnits" : 31
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/GenerateAction.java",
      "extension" : "java",
      "linesOfCode" : 146,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 22,
      "linesOfCodeInUnits" : 107
    }, {
      "relativePath" : "android/libraries/rib-test/src/main/kotlin/com/uber/rib/core/AndroidRecordingRx2Observer.kt",
      "extension" : "kt",
      "linesOfCode" : 55,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 8,
      "linesOfCodeInUnits" : 25
    }, {
      "relativePath" : "android/libraries/rib-android/src/main/kotlin/com/uber/rib/core/lifecycle/ActivityCallbackEvent.kt",
      "extension" : "kt",
      "linesOfCode" : 72,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 7,
      "linesOfCodeInUnits" : 31
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Interactor.kt",
      "extension" : "kt",
      "linesOfCode" : 145,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 10,
      "linesOfCodeInUnits" : 61
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/RibCoroutineWorker.kt",
      "extension" : "kt",
      "linesOfCode" : 155,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 7,
      "linesOfCodeInUnits" : 29
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
      "extension" : "java",
      "linesOfCode" : 74,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 8,
      "linesOfCodeInUnits" : 46
    }, {
      "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
      "extension" : "java",
      "linesOfCode" : 54,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 7,
      "linesOfCodeInUnits" : 30
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedIn/LoggedInInteractor.swift",
      "extension" : "swift",
      "linesOfCode" : 32,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 22
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/LoggedIn/LoggedInInteractor.swift",
      "extension" : "swift",
      "linesOfCode" : 37,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 7,
      "linesOfCodeInUnits" : 24
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/Generator.java",
      "extension" : "java",
      "linesOfCode" : 119,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 14,
      "linesOfCodeInUnits" : 60
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/AndroidDeviceRepository.kt",
      "extension" : "kt",
      "linesOfCode" : 66,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 12,
      "linesOfCodeInUnits" : 35
    }, {
      "relativePath" : "android/tooling/rib-flipper-plugin/desktop/src/TreeChart.js",
      "extension" : "js",
      "linesOfCode" : 105,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 19,
      "linesOfCodeInUnits" : 97
    }, {
      "relativePath" : "android/libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/StackRouterNavigator.kt",
      "extension" : "kt",
      "linesOfCode" : 341,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 11,
      "linesOfCodeInUnits" : 66
    }, {
      "relativePath" : "android/libraries/rib-screen-stack-base/src/main/kotlin/com/uber/rib/core/screenstack/ViewProvider.kt",
      "extension" : "kt",
      "linesOfCode" : 37,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 18
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
      "extension" : "java",
      "linesOfCode" : 149,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 55
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
      "extension" : "swift",
      "linesOfCode" : 103,
      "unitsCount" : 5,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 24
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/LoggedIn/LoggedInRouter.swift",
      "extension" : "swift",
      "linesOfCode" : 57,
      "unitsCount" : 5,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 23
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/LoggedIn/LoggedInInteractor.swift",
      "extension" : "swift",
      "linesOfCode" : 31,
      "unitsCount" : 5,
      "unitsMcCabeIndexSum" : 5,
      "linesOfCodeInUnits" : 18
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
      "extension" : "swift",
      "linesOfCode" : 107,
      "unitsCount" : 5,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 24
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/LoggedIn/LoggedInRouter.swift",
      "extension" : "swift",
      "linesOfCode" : 57,
      "unitsCount" : 5,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 23
    }, {
      "relativePath" : "ios/RIBsTests/Workflow/WorkflowTests.swift",
      "extension" : "swift",
      "linesOfCode" : 162,
      "unitsCount" : 5,
      "unitsMcCabeIndexSum" : 5,
      "linesOfCodeInUnits" : 140
    } ]
  },
  "filesHistoryAnalysisResults" : {
    "overallFileLastModifiedDistribution" : {
      "key" : "",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 183,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 395,
      "highRiskValue" : 10566,
      "veryHighRiskValue" : 7701,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 2,
      "mediumRiskCount" : 4,
      "highRiskCount" : 244,
      "veryHighRiskCount" : 266,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.9710798620323693,
      "veryHighRiskPercentage" : 40.864950915362165,
      "highRiskPercentage" : 56.06792252586893,
      "mediumRiskPercentage" : 2.096046696736535,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 18845,
      "totalCount" : 516
    },
    "overallFileFirstModifiedDistribution" : {
      "key" : "",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 0,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 4111,
      "veryHighRiskValue" : 14734,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 0,
      "mediumRiskCount" : 0,
      "highRiskCount" : 101,
      "veryHighRiskCount" : 415,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.0,
      "veryHighRiskPercentage" : 78.18519501193951,
      "highRiskPercentage" : 21.814804988060494,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 18845,
      "totalCount" : 516
    },
    "overallFileChangeDistribution" : {
      "key" : "",
      "lowRiskThreshold" : 5,
      "mediumRiskThreshold" : 20,
      "highRiskThreshold" : 50,
      "veryHighRiskThreshold" : 100,
      "negligibleRiskValue" : 14333,
      "lowRiskValue" : 3959,
      "mediumRiskValue" : 553,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 83,
      "negligibleRiskCount" : 430,
      "mediumRiskCount" : 3,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-5",
      "lowRiskLabel" : "6-20",
      "mediumRiskLabel" : "21-50",
      "highRiskLabel" : "51-100",
      "veryHighRiskLabel" : "101+",
      "negligibleRiskPercentage" : 76.0573096312019,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 2.9344653754311487,
      "lowRiskPercentage" : 21.00822499336694,
      "totalValue" : 18845,
      "totalCount" : 516
    },
    "overallContributorsCountDistribution" : {
      "key" : "",
      "lowRiskThreshold" : 1,
      "mediumRiskThreshold" : 5,
      "highRiskThreshold" : 10,
      "veryHighRiskThreshold" : 25,
      "negligibleRiskValue" : 2106,
      "lowRiskValue" : 14163,
      "mediumRiskValue" : 2576,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 377,
      "negligibleRiskCount" : 107,
      "mediumRiskCount" : 32,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1",
      "lowRiskLabel" : "2-5",
      "mediumRiskLabel" : "6-10",
      "highRiskLabel" : "11-25",
      "veryHighRiskLabel" : "26+",
      "negligibleRiskPercentage" : 11.175378084372513,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 13.669408331122314,
      "lowRiskPercentage" : 75.15521358450518,
      "totalValue" : 18845,
      "totalCount" : 516
    },
    "filesWithoutCommitHistoryCount" : 0,
    "filesWithoutCommitHistoryLinesOfCode" : 0,
    "changeDistributionPerExtension" : [ {
      "key" : "swift",
      "lowRiskThreshold" : 5,
      "mediumRiskThreshold" : 20,
      "highRiskThreshold" : 50,
      "veryHighRiskThreshold" : 100,
      "negligibleRiskValue" : 6286,
      "lowRiskValue" : 255,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 6,
      "negligibleRiskCount" : 193,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-5",
      "lowRiskLabel" : "6-20",
      "mediumRiskLabel" : "21-50",
      "highRiskLabel" : "51-100",
      "veryHighRiskLabel" : "101+",
      "negligibleRiskPercentage" : 96.10151353004127,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 3.898486469958722,
      "totalValue" : 6541,
      "totalCount" : 199
    }, {
      "key" : "h",
      "lowRiskThreshold" : 5,
      "mediumRiskThreshold" : 20,
      "highRiskThreshold" : 50,
      "veryHighRiskThreshold" : 100,
      "negligibleRiskValue" : 3,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 1,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-5",
      "lowRiskLabel" : "6-20",
      "mediumRiskLabel" : "21-50",
      "highRiskLabel" : "51-100",
      "veryHighRiskLabel" : "101+",
      "negligibleRiskPercentage" : 100.0,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 3,
      "totalCount" : 1
    }, {
      "key" : "java",
      "lowRiskThreshold" : 5,
      "mediumRiskThreshold" : 20,
      "highRiskThreshold" : 50,
      "veryHighRiskThreshold" : 100,
      "negligibleRiskValue" : 4827,
      "lowRiskValue" : 764,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 23,
      "negligibleRiskCount" : 114,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-5",
      "lowRiskLabel" : "6-20",
      "mediumRiskLabel" : "21-50",
      "highRiskLabel" : "51-100",
      "veryHighRiskLabel" : "101+",
      "negligibleRiskPercentage" : 86.33518154176355,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 13.664818458236452,
      "totalValue" : 5591,
      "totalCount" : 137
    }, {
      "key" : "xml",
      "lowRiskThreshold" : 5,
      "mediumRiskThreshold" : 20,
      "highRiskThreshold" : 50,
      "veryHighRiskThreshold" : 100,
      "negligibleRiskValue" : 800,
      "lowRiskValue" : 54,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 1,
      "negligibleRiskCount" : 24,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-5",
      "lowRiskLabel" : "6-20",
      "mediumRiskLabel" : "21-50",
      "highRiskLabel" : "51-100",
      "veryHighRiskLabel" : "101+",
      "negligibleRiskPercentage" : 93.6768149882904,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 6.323185011709602,
      "totalValue" : 854,
      "totalCount" : 25
    }, {
      "key" : "kt",
      "lowRiskThreshold" : 5,
      "mediumRiskThreshold" : 20,
      "highRiskThreshold" : 50,
      "veryHighRiskThreshold" : 100,
      "negligibleRiskValue" : 1938,
      "lowRiskValue" : 2768,
      "mediumRiskValue" : 553,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 52,
      "negligibleRiskCount" : 83,
      "mediumRiskCount" : 3,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-5",
      "lowRiskLabel" : "6-20",
      "mediumRiskLabel" : "21-50",
      "highRiskLabel" : "51-100",
      "veryHighRiskLabel" : "101+",
      "negligibleRiskPercentage" : 36.851112378779234,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 10.515307092603157,
      "lowRiskPercentage" : 52.63358052861761,
      "totalValue" : 5259,
      "totalCount" : 138
    }, {
      "key" : "js",
      "lowRiskThreshold" : 5,
      "mediumRiskThreshold" : 20,
      "highRiskThreshold" : 50,
      "veryHighRiskThreshold" : 100,
      "negligibleRiskValue" : 130,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 2,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-5",
      "lowRiskLabel" : "6-20",
      "mediumRiskLabel" : "21-50",
      "highRiskLabel" : "51-100",
      "veryHighRiskLabel" : "101+",
      "negligibleRiskPercentage" : 100.0,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 130,
      "totalCount" : 2
    }, {
      "key" : "kts",
      "lowRiskThreshold" : 5,
      "mediumRiskThreshold" : 20,
      "highRiskThreshold" : 50,
      "veryHighRiskThreshold" : 100,
      "negligibleRiskValue" : 333,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 12,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-5",
      "lowRiskLabel" : "6-20",
      "mediumRiskLabel" : "21-50",
      "highRiskLabel" : "51-100",
      "veryHighRiskLabel" : "101+",
      "negligibleRiskPercentage" : 100.0,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 333,
      "totalCount" : 12
    }, {
      "key" : "toml",
      "lowRiskThreshold" : 5,
      "mediumRiskThreshold" : 20,
      "highRiskThreshold" : 50,
      "veryHighRiskThreshold" : 100,
      "negligibleRiskValue" : 16,
      "lowRiskValue" : 118,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 1,
      "negligibleRiskCount" : 1,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-5",
      "lowRiskLabel" : "6-20",
      "mediumRiskLabel" : "21-50",
      "highRiskLabel" : "51-100",
      "veryHighRiskLabel" : "101+",
      "negligibleRiskPercentage" : 11.940298507462687,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 88.05970149253731,
      "totalValue" : 134,
      "totalCount" : 2
    } ],
    "lastModifiedDistributionPerExtension" : [ {
      "key" : "swift",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 0,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 6541,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 0,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 199,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.0,
      "veryHighRiskPercentage" : 100.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 6541,
      "totalCount" : 199
    }, {
      "key" : "h",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 0,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 3,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 0,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 1,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.0,
      "veryHighRiskPercentage" : 100.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 3,
      "totalCount" : 1
    }, {
      "key" : "java",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 0,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 4693,
      "veryHighRiskValue" : 898,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 0,
      "mediumRiskCount" : 0,
      "highRiskCount" : 91,
      "veryHighRiskCount" : 46,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.0,
      "veryHighRiskPercentage" : 16.06152745483813,
      "highRiskPercentage" : 83.93847254516187,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 5591,
      "totalCount" : 137
    }, {
      "key" : "xml",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 0,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 773,
      "veryHighRiskValue" : 81,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 0,
      "mediumRiskCount" : 0,
      "highRiskCount" : 13,
      "veryHighRiskCount" : 12,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.0,
      "veryHighRiskPercentage" : 9.484777517564403,
      "highRiskPercentage" : 90.5152224824356,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 854,
      "totalCount" : 25
    }, {
      "key" : "kt",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 183,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 395,
      "highRiskValue" : 4633,
      "veryHighRiskValue" : 48,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 2,
      "mediumRiskCount" : 4,
      "highRiskCount" : 126,
      "veryHighRiskCount" : 6,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 3.479749001711352,
      "veryHighRiskPercentage" : 0.9127210496292071,
      "highRiskPercentage" : 88.09659631108576,
      "mediumRiskPercentage" : 7.510933637573683,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 5259,
      "totalCount" : 138
    }, {
      "key" : "js",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 0,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 130,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 0,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 2,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.0,
      "veryHighRiskPercentage" : 100.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 130,
      "totalCount" : 2
    }, {
      "key" : "kts",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 0,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 333,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 0,
      "mediumRiskCount" : 0,
      "highRiskCount" : 12,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.0,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 100.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 333,
      "totalCount" : 12
    }, {
      "key" : "toml",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 0,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 134,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 0,
      "mediumRiskCount" : 0,
      "highRiskCount" : 2,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.0,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 100.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 134,
      "totalCount" : 2
    } ],
    "firstModifiedDistributionPerExtension" : [ {
      "key" : "swift",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 0,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 6541,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 0,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 199,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.0,
      "veryHighRiskPercentage" : 100.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 6541,
      "totalCount" : 199
    }, {
      "key" : "h",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 0,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 3,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 0,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 1,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.0,
      "veryHighRiskPercentage" : 100.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 3,
      "totalCount" : 1
    }, {
      "key" : "java",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 0,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 3437,
      "veryHighRiskValue" : 2154,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 0,
      "mediumRiskCount" : 0,
      "highRiskCount" : 76,
      "veryHighRiskCount" : 61,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.0,
      "veryHighRiskPercentage" : 38.52620282597031,
      "highRiskPercentage" : 61.47379717402969,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 5591,
      "totalCount" : 137
    }, {
      "key" : "xml",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 0,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 854,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 0,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 25,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.0,
      "veryHighRiskPercentage" : 100.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 854,
      "totalCount" : 25
    }, {
      "key" : "kt",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 0,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 207,
      "veryHighRiskValue" : 5052,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 0,
      "mediumRiskCount" : 0,
      "highRiskCount" : 11,
      "veryHighRiskCount" : 127,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.0,
      "veryHighRiskPercentage" : 96.06389047347405,
      "highRiskPercentage" : 3.9361095265259554,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 5259,
      "totalCount" : 138
    }, {
      "key" : "js",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 0,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 130,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 0,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 2,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.0,
      "veryHighRiskPercentage" : 100.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 130,
      "totalCount" : 2
    }, {
      "key" : "kts",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 0,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 333,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 0,
      "mediumRiskCount" : 0,
      "highRiskCount" : 12,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.0,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 100.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 333,
      "totalCount" : 12
    }, {
      "key" : "toml",
      "lowRiskThreshold" : 30,
      "mediumRiskThreshold" : 90,
      "highRiskThreshold" : 180,
      "veryHighRiskThreshold" : 365,
      "negligibleRiskValue" : 0,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 134,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 0,
      "mediumRiskCount" : 0,
      "highRiskCount" : 2,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-30 days",
      "lowRiskLabel" : "31-90 days",
      "mediumRiskLabel" : "91-180 days",
      "highRiskLabel" : "181-365 days",
      "veryHighRiskLabel" : "366+ days",
      "negligibleRiskPercentage" : 0.0,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 100.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 134,
      "totalCount" : 2
    } ],
    "changeDistributionPerLogicalDecomposition" : [ {
      "name" : "primary",
      "distributionPerComponent" : [ {
        "key" : "ios",
        "lowRiskThreshold" : 5,
        "mediumRiskThreshold" : 20,
        "highRiskThreshold" : 50,
        "veryHighRiskThreshold" : 100,
        "negligibleRiskValue" : 6264,
        "lowRiskValue" : 255,
        "mediumRiskValue" : 0,
        "highRiskValue" : 0,
        "veryHighRiskValue" : 0,
        "lowRiskCount" : 6,
        "negligibleRiskCount" : 193,
        "mediumRiskCount" : 0,
        "highRiskCount" : 0,
        "veryHighRiskCount" : 0,
        "negligibleRiskLabel" : "1-5",
        "lowRiskLabel" : "6-20",
        "mediumRiskLabel" : "21-50",
        "highRiskLabel" : "51-100",
        "veryHighRiskLabel" : "101+",
        "negligibleRiskPercentage" : 96.08835710998619,
        "veryHighRiskPercentage" : 0.0,
        "highRiskPercentage" : 0.0,
        "mediumRiskPercentage" : 0.0,
        "lowRiskPercentage" : 3.911642890013806,
        "totalValue" : 6519,
        "totalCount" : 199
      }, {
        "key" : "android",
        "lowRiskThreshold" : 5,
        "mediumRiskThreshold" : 20,
        "highRiskThreshold" : 50,
        "veryHighRiskThreshold" : 100,
        "negligibleRiskValue" : 8044,
        "lowRiskValue" : 3704,
        "mediumRiskValue" : 553,
        "highRiskValue" : 0,
        "veryHighRiskValue" : 0,
        "lowRiskCount" : 77,
        "negligibleRiskCount" : 236,
        "mediumRiskCount" : 3,
        "highRiskCount" : 0,
        "veryHighRiskCount" : 0,
        "negligibleRiskLabel" : "1-5",
        "lowRiskLabel" : "6-20",
        "mediumRiskLabel" : "21-50",
        "highRiskLabel" : "51-100",
        "veryHighRiskLabel" : "101+",
        "negligibleRiskPercentage" : 65.39305747500204,
        "veryHighRiskPercentage" : 0.0,
        "highRiskPercentage" : 0.0,
        "mediumRiskPercentage" : 4.4955694658970815,
        "lowRiskPercentage" : 30.111373059100885,
        "totalValue" : 12301,
        "totalCount" : 316
      }, {
        "key" : "ROOT",
        "lowRiskThreshold" : 5,
        "mediumRiskThreshold" : 20,
        "highRiskThreshold" : 50,
        "veryHighRiskThreshold" : 100,
        "negligibleRiskValue" : 25,
        "lowRiskValue" : 0,
        "mediumRiskValue" : 0,
        "highRiskValue" : 0,
        "veryHighRiskValue" : 0,
        "lowRiskCount" : 0,
        "negligibleRiskCount" : 1,
        "mediumRiskCount" : 0,
        "highRiskCount" : 0,
        "veryHighRiskCount" : 0,
        "negligibleRiskLabel" : "1-5",
        "lowRiskLabel" : "6-20",
        "mediumRiskLabel" : "21-50",
        "highRiskLabel" : "51-100",
        "veryHighRiskLabel" : "101+",
        "negligibleRiskPercentage" : 100.0,
        "veryHighRiskPercentage" : 0.0,
        "highRiskPercentage" : 0.0,
        "mediumRiskPercentage" : 0.0,
        "lowRiskPercentage" : 0.0,
        "totalValue" : 25,
        "totalCount" : 1
      } ]
    } ],
    "firstModifiedDistributionPerLogicalDecomposition" : [ {
      "name" : "primary",
      "distributionPerComponent" : [ {
        "key" : "ios",
        "lowRiskThreshold" : 30,
        "mediumRiskThreshold" : 90,
        "highRiskThreshold" : 180,
        "veryHighRiskThreshold" : 365,
        "negligibleRiskValue" : 0,
        "lowRiskValue" : 0,
        "mediumRiskValue" : 0,
        "highRiskValue" : 0,
        "veryHighRiskValue" : 6519,
        "lowRiskCount" : 0,
        "negligibleRiskCount" : 0,
        "mediumRiskCount" : 0,
        "highRiskCount" : 0,
        "veryHighRiskCount" : 199,
        "negligibleRiskLabel" : "1-30 days",
        "lowRiskLabel" : "31-90 days",
        "mediumRiskLabel" : "91-180 days",
        "highRiskLabel" : "181-365 days",
        "veryHighRiskLabel" : "366+ days",
        "negligibleRiskPercentage" : 0.0,
        "veryHighRiskPercentage" : 100.0,
        "highRiskPercentage" : 0.0,
        "mediumRiskPercentage" : 0.0,
        "lowRiskPercentage" : 0.0,
        "totalValue" : 6519,
        "totalCount" : 199
      }, {
        "key" : "android",
        "lowRiskThreshold" : 30,
        "mediumRiskThreshold" : 90,
        "highRiskThreshold" : 180,
        "veryHighRiskThreshold" : 365,
        "negligibleRiskValue" : 0,
        "lowRiskValue" : 0,
        "mediumRiskValue" : 0,
        "highRiskValue" : 4111,
        "veryHighRiskValue" : 8190,
        "lowRiskCount" : 0,
        "negligibleRiskCount" : 0,
        "mediumRiskCount" : 0,
        "highRiskCount" : 101,
        "veryHighRiskCount" : 215,
        "negligibleRiskLabel" : "1-30 days",
        "lowRiskLabel" : "31-90 days",
        "mediumRiskLabel" : "91-180 days",
        "highRiskLabel" : "181-365 days",
        "veryHighRiskLabel" : "366+ days",
        "negligibleRiskPercentage" : 0.0,
        "veryHighRiskPercentage" : 66.57995284936185,
        "highRiskPercentage" : 33.42004715063816,
        "mediumRiskPercentage" : 0.0,
        "lowRiskPercentage" : 0.0,
        "totalValue" : 12301,
        "totalCount" : 316
      }, {
        "key" : "ROOT",
        "lowRiskThreshold" : 30,
        "mediumRiskThreshold" : 90,
        "highRiskThreshold" : 180,
        "veryHighRiskThreshold" : 365,
        "negligibleRiskValue" : 0,
        "lowRiskValue" : 0,
        "mediumRiskValue" : 0,
        "highRiskValue" : 0,
        "veryHighRiskValue" : 25,
        "lowRiskCount" : 0,
        "negligibleRiskCount" : 0,
        "mediumRiskCount" : 0,
        "highRiskCount" : 0,
        "veryHighRiskCount" : 1,
        "negligibleRiskLabel" : "1-30 days",
        "lowRiskLabel" : "31-90 days",
        "mediumRiskLabel" : "91-180 days",
        "highRiskLabel" : "181-365 days",
        "veryHighRiskLabel" : "366+ days",
        "negligibleRiskPercentage" : 0.0,
        "veryHighRiskPercentage" : 100.0,
        "highRiskPercentage" : 0.0,
        "mediumRiskPercentage" : 0.0,
        "lowRiskPercentage" : 0.0,
        "totalValue" : 25,
        "totalCount" : 1
      } ]
    } ],
    "lastModifiedDistributionPerLogicalDecomposition" : [ {
      "name" : "primary",
      "distributionPerComponent" : [ {
        "key" : "ios",
        "lowRiskThreshold" : 30,
        "mediumRiskThreshold" : 90,
        "highRiskThreshold" : 180,
        "veryHighRiskThreshold" : 365,
        "negligibleRiskValue" : 0,
        "lowRiskValue" : 0,
        "mediumRiskValue" : 0,
        "highRiskValue" : 0,
        "veryHighRiskValue" : 6519,
        "lowRiskCount" : 0,
        "negligibleRiskCount" : 0,
        "mediumRiskCount" : 0,
        "highRiskCount" : 0,
        "veryHighRiskCount" : 199,
        "negligibleRiskLabel" : "1-30 days",
        "lowRiskLabel" : "31-90 days",
        "mediumRiskLabel" : "91-180 days",
        "highRiskLabel" : "181-365 days",
        "veryHighRiskLabel" : "366+ days",
        "negligibleRiskPercentage" : 0.0,
        "veryHighRiskPercentage" : 100.0,
        "highRiskPercentage" : 0.0,
        "mediumRiskPercentage" : 0.0,
        "lowRiskPercentage" : 0.0,
        "totalValue" : 6519,
        "totalCount" : 199
      }, {
        "key" : "android",
        "lowRiskThreshold" : 30,
        "mediumRiskThreshold" : 90,
        "highRiskThreshold" : 180,
        "veryHighRiskThreshold" : 365,
        "negligibleRiskValue" : 183,
        "lowRiskValue" : 0,
        "mediumRiskValue" : 395,
        "highRiskValue" : 10566,
        "veryHighRiskValue" : 1157,
        "lowRiskCount" : 0,
        "negligibleRiskCount" : 2,
        "mediumRiskCount" : 4,
        "highRiskCount" : 244,
        "veryHighRiskCount" : 66,
        "negligibleRiskLabel" : "1-30 days",
        "lowRiskLabel" : "31-90 days",
        "mediumRiskLabel" : "91-180 days",
        "highRiskLabel" : "181-365 days",
        "veryHighRiskLabel" : "366+ days",
        "negligibleRiskPercentage" : 1.487683928135924,
        "veryHighRiskPercentage" : 9.405739370782863,
        "highRiskPercentage" : 85.89545565401187,
        "mediumRiskPercentage" : 3.211121047069344,
        "lowRiskPercentage" : 0.0,
        "totalValue" : 12301,
        "totalCount" : 316
      }, {
        "key" : "ROOT",
        "lowRiskThreshold" : 30,
        "mediumRiskThreshold" : 90,
        "highRiskThreshold" : 180,
        "veryHighRiskThreshold" : 365,
        "negligibleRiskValue" : 0,
        "lowRiskValue" : 0,
        "mediumRiskValue" : 0,
        "highRiskValue" : 0,
        "veryHighRiskValue" : 25,
        "lowRiskCount" : 0,
        "negligibleRiskCount" : 0,
        "mediumRiskCount" : 0,
        "highRiskCount" : 0,
        "veryHighRiskCount" : 1,
        "negligibleRiskLabel" : "1-30 days",
        "lowRiskLabel" : "31-90 days",
        "mediumRiskLabel" : "91-180 days",
        "highRiskLabel" : "181-365 days",
        "veryHighRiskLabel" : "366+ days",
        "negligibleRiskPercentage" : 0.0,
        "veryHighRiskPercentage" : 100.0,
        "highRiskPercentage" : 0.0,
        "mediumRiskPercentage" : 0.0,
        "lowRiskPercentage" : 0.0,
        "totalValue" : 25,
        "totalCount" : 1
      } ]
    } ],
    "oldestFiles" : [ {
      "relativePath" : "android/config/lint/lint.xml",
      "extension" : "xml",
      "linesOfCode" : 4,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/RIBs/RIBs.h",
      "extension" : "h",
      "linesOfCode" : 3,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tutorials/tutorial1/src/main/res/layout/root_rib.xml",
      "extension" : "xml",
      "linesOfCode" : 5,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tutorials/tutorial1/src/main/res/values/ub__strings.xml",
      "extension" : "xml",
      "linesOfCode" : 4,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/GenerateAction.java",
      "extension" : "java",
      "linesOfCode" : 146,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 22,
      "linesOfCodeInUnits" : 107
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/Generator.java",
      "extension" : "java",
      "linesOfCode" : 119,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 14,
      "linesOfCodeInUnits" : 60
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/resources/META-INF/plugin.xml",
      "extension" : "xml",
      "linesOfCode" : 54,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/Generators.java",
      "extension" : "java",
      "linesOfCode" : 50,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 34
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/GenerateRibDialog.java",
      "extension" : "java",
      "linesOfCode" : 39,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 17
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/GenerateRibAction.java",
      "extension" : "java",
      "linesOfCode" : 21,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 14
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/GeneratorPair.java",
      "extension" : "java",
      "linesOfCode" : 17,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 11
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/rib/InteractorWithPresenterGenerator.java",
      "extension" : "java",
      "linesOfCode" : 13,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 7
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/rib/InteractorWithEmptyPresenterGenerator.java",
      "extension" : "java",
      "linesOfCode" : 13,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 7
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/rib/InteractorWithEmptyPresenterTestGenerator.java",
      "extension" : "java",
      "linesOfCode" : 13,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 7
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/rib/InteractorWithPresenterTestGenerator.java",
      "extension" : "java",
      "linesOfCode" : 13,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 7
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/rib/BuilderGenerator.java",
      "extension" : "java",
      "linesOfCode" : 12,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 6
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/rib/ViewBuilderGenerator.java",
      "extension" : "java",
      "linesOfCode" : 12,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 6
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/rib/RouterGenerator.java",
      "extension" : "java",
      "linesOfCode" : 12,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 6
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/rib/ViewRouterGenerator.java",
      "extension" : "java",
      "linesOfCode" : 12,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 6
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/rib/ViewRouterTestGenerator.java",
      "extension" : "java",
      "linesOfCode" : 12,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 6
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/rib/RouterTestGenerator.java",
      "extension" : "java",
      "linesOfCode" : 12,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 6
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/rib/ViewGenerator.java",
      "extension" : "java",
      "linesOfCode" : 12,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 6
    }, {
      "relativePath" : "ios/RIBs/Classes/LeakDetector/LeakDetector.swift",
      "extension" : "swift",
      "linesOfCode" : 105,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 14
    }, {
      "relativePath" : "ios/RIBs/Classes/Worker/Worker.swift",
      "extension" : "swift",
      "linesOfCode" : 104,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 14
    }, {
      "relativePath" : "ios/RIBs/Classes/Workflow/Workflow.swift",
      "extension" : "swift",
      "linesOfCode" : 99,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 13
    }, {
      "relativePath" : "ios/RIBs/Classes/Router.swift",
      "extension" : "swift",
      "linesOfCode" : 98,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 16
    }, {
      "relativePath" : "ios/RIBs/Classes/Interactor.swift",
      "extension" : "swift",
      "linesOfCode" : 80,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 5,
      "linesOfCodeInUnits" : 28
    }, {
      "relativePath" : "ios/RIBs/Classes/ViewableRouter.swift",
      "extension" : "swift",
      "linesOfCode" : 39,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/RIBs/Classes/LeakDetector/Executor.swift",
      "extension" : "swift",
      "linesOfCode" : 27,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/RIBs/Classes/LaunchRouter.swift",
      "extension" : "swift",
      "linesOfCode" : 15,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "ios/RIBs/Classes/PresentableInteractor.swift",
      "extension" : "swift",
      "linesOfCode" : 10,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/RIBs/Classes/ViewControllable.swift",
      "extension" : "swift",
      "linesOfCode" : 9,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/RIBs/Classes/Builder.swift",
      "extension" : "swift",
      "linesOfCode" : 8,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/RIBs/Classes/Presenter.swift",
      "extension" : "swift",
      "linesOfCode" : 8,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/RIBs/Classes/DI/Component.swift",
      "extension" : "swift",
      "linesOfCode" : 24,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/RIBs/Classes/DI/Dependency.swift",
      "extension" : "swift",
      "linesOfCode" : 3,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tutorials/tutorial1/src/main/java/com/uber/rib/root/RootBuilder.java",
      "extension" : "java",
      "linesOfCode" : 64,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 20
    }, {
      "relativePath" : "android/tutorials/tutorial1/src/main/java/com/uber/rib/root/RootView.java",
      "extension" : "java",
      "linesOfCode" : 16,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 9
    }, {
      "relativePath" : "android/tutorials/tutorial1/src/main/java/com/uber/rib/root/RootInteractor.java",
      "extension" : "java",
      "linesOfCode" : 15,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "android/tutorials/tutorial1/src/main/java/com/uber/rib/RootActivity.java",
      "extension" : "java",
      "linesOfCode" : 13,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 4
    }, {
      "relativePath" : "android/tutorials/tutorial1/src/main/java/com/uber/rib/root/RootRouter.java",
      "extension" : "java",
      "linesOfCode" : 7,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tutorials/tutorial1/src/main/java/com/uber/rib/SampleApplication.java",
      "extension" : "java",
      "linesOfCode" : 3,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tooling/RIB.xctemplate/Default/___FILEBASENAME___Builder.swift",
      "extension" : "swift",
      "linesOfCode" : 23,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 9
    }, {
      "relativePath" : "ios/tooling/RIB.xctemplate/Default/___FILEBASENAME___Interactor.swift",
      "extension" : "swift",
      "linesOfCode" : 19,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "ios/tooling/RIB.xctemplate/Default/___FILEBASENAME___Router.swift",
      "extension" : "swift",
      "linesOfCode" : 17,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 7
    }, {
      "relativePath" : "ios/tooling/RIB.xctemplate/ownsView/___FILEBASENAME___Interactor.swift",
      "extension" : "swift",
      "linesOfCode" : 23,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tooling/RIB.xctemplate/ownsView/___FILEBASENAME___Builder.swift",
      "extension" : "swift",
      "linesOfCode" : 20,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "ios/tooling/RIB.xctemplate/ownsView/___FILEBASENAME___Router.swift",
      "extension" : "swift",
      "linesOfCode" : 13,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tooling/RIB.xctemplate/ownsView/___FILEBASENAME___ViewController.swift",
      "extension" : "swift",
      "linesOfCode" : 8,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToeTests/TicTacToeMocks.swift",
      "extension" : "swift",
      "linesOfCode" : 194,
      "unitsCount" : 23,
      "unitsMcCabeIndexSum" : 40,
      "linesOfCodeInUnits" : 117
    } ],
    "youngestFiles" : [ {
      "relativePath" : "android/libraries/rib-test/src/main/kotlin/com/uber/rib/core/TestRibCoroutineWorker.kt",
      "extension" : "kt",
      "linesOfCode" : 23,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-android/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 35,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-coroutines-test/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 29,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-workflow-test/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 27,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-test/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 23,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-debug-utils/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 18,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-coroutines/src/main/kotlin/com/uber/rib/core/internal/CoroutinesFriendModuleApi.kt",
      "extension" : "kt",
      "linesOfCode" : 3,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-workflow/src/main/kotlin/com/uber/rib/workflow/core/internal/WorkflowFriendModuleApi.kt",
      "extension" : "kt",
      "linesOfCode" : 2,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/internal/CoreFriendModuleApi.kt",
      "extension" : "kt",
      "linesOfCode" : 2,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibIcons.kt",
      "extension" : "kt",
      "linesOfCode" : 6,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/RibRouterEvent.kt",
      "extension" : "kt",
      "linesOfCode" : 6,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/gradle/libs.versions.toml",
      "extension" : "toml",
      "linesOfCode" : 118,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/conventions/src/main/kotlin/ribs.spotless-convention.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 42,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/conventions/src/main/kotlin/Extensions.kt",
      "extension" : "kt",
      "linesOfCode" : 28,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/conventions/src/main/kotlin/ribs.kotlin-android-application-errorprone-conventions.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 19,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/conventions/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 18,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/gradle/test-libs.versions.toml",
      "extension" : "toml",
      "linesOfCode" : 16,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/conventions/settings.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 8,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/conventions/src/main/kotlin/ribs.kotlin-android-application-conventions.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 52,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/conventions/src/main/kotlin/ribs.kotlin-android-library-conventions.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 49,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/conventions/src/main/kotlin/ribs.kotlin-library-conventions.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 13,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/LazyBackingProperty.kt",
      "extension" : "kt",
      "linesOfCode" : 8,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
      "extension" : "java",
      "linesOfCode" : 149,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 55
    }, {
      "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
      "extension" : "java",
      "linesOfCode" : 103,
      "unitsCount" : 5,
      "unitsMcCabeIndexSum" : 5,
      "linesOfCodeInUnits" : 30
    }, {
      "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
      "extension" : "java",
      "linesOfCode" : 95,
      "unitsCount" : 10,
      "unitsMcCabeIndexSum" : 12,
      "linesOfCodeInUnits" : 70
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
      "extension" : "java",
      "linesOfCode" : 95,
      "unitsCount" : 10,
      "unitsMcCabeIndexSum" : 12,
      "linesOfCodeInUnits" : 70
    }, {
      "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
      "extension" : "java",
      "linesOfCode" : 95,
      "unitsCount" : 10,
      "unitsMcCabeIndexSum" : 12,
      "linesOfCodeInUnits" : 70
    }, {
      "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
      "extension" : "java",
      "linesOfCode" : 95,
      "unitsCount" : 10,
      "unitsMcCabeIndexSum" : 12,
      "linesOfCodeInUnits" : 70
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
      "extension" : "java",
      "linesOfCode" : 83,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 8,
      "linesOfCodeInUnits" : 46
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
      "extension" : "java",
      "linesOfCode" : 82,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 21
    }, {
      "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
      "extension" : "java",
      "linesOfCode" : 82,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 8,
      "linesOfCodeInUnits" : 46
    }, {
      "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
      "extension" : "java",
      "linesOfCode" : 79,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 24
    }, {
      "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
      "extension" : "java",
      "linesOfCode" : 78,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 21
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
      "extension" : "java",
      "linesOfCode" : 77,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 21
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/randomWinner/RandomWinnerBuilder.java",
      "extension" : "java",
      "linesOfCode" : 76,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 21
    }, {
      "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
      "extension" : "java",
      "linesOfCode" : 76,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 21
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
      "extension" : "java",
      "linesOfCode" : 74,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 8,
      "linesOfCodeInUnits" : 46
    }, {
      "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
      "extension" : "java",
      "linesOfCode" : 71,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 21
    }, {
      "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
      "extension" : "java",
      "linesOfCode" : 71,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 21
    }, {
      "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
      "extension" : "java",
      "linesOfCode" : 71,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 8,
      "linesOfCodeInUnits" : 43
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
      "extension" : "java",
      "linesOfCode" : 71,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 21
    }, {
      "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
      "extension" : "java",
      "linesOfCode" : 71,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 21
    }, {
      "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
      "extension" : "java",
      "linesOfCode" : 71,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 8,
      "linesOfCodeInUnits" : 43
    }, {
      "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
      "extension" : "java",
      "linesOfCode" : 71,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 21
    }, {
      "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
      "extension" : "java",
      "linesOfCode" : 70,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 21
    }, {
      "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
      "extension" : "java",
      "linesOfCode" : 70,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 21
    }, {
      "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
      "extension" : "java",
      "linesOfCode" : 70,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 21
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameInteractor.java",
      "extension" : "java",
      "linesOfCode" : 63,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 25
    }, {
      "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameInteractor.java",
      "extension" : "java",
      "linesOfCode" : 59,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 25
    }, {
      "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/LoggedInRouter.java",
      "extension" : "java",
      "linesOfCode" : 55,
      "unitsCount" : 5,
      "unitsMcCabeIndexSum" : 7,
      "linesOfCodeInUnits" : 29
    } ],
    "mostRecentlyChangedFiles" : [ {
      "relativePath" : "android/tooling/rib-flipper-plugin/src/main/kotlin/com/uber/rib/flipper/RibTreePlugin.kt",
      "extension" : "kt",
      "linesOfCode" : 109,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 43
    }, {
      "relativePath" : "android/tooling/rib-flipper-plugin/src/main/kotlin/com/uber/rib/flipper/RibEventPayload.kt",
      "extension" : "kt",
      "linesOfCode" : 74,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 16
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/RibCoroutineWorker.kt",
      "extension" : "kt",
      "linesOfCode" : 155,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 7,
      "linesOfCodeInUnits" : 29
    }, {
      "relativePath" : "android/libraries/rib-test/src/main/kotlin/com/uber/rib/core/TestRibCoroutineWorker.kt",
      "extension" : "kt",
      "linesOfCode" : 23,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Router.kt",
      "extension" : "kt",
      "linesOfCode" : 193,
      "unitsCount" : 15,
      "unitsMcCabeIndexSum" : 26,
      "linesOfCodeInUnits" : 130
    }, {
      "relativePath" : "android/libraries/rib-android/src/main/kotlin/com/uber/rib/core/ViewRouter.kt",
      "extension" : "kt",
      "linesOfCode" : 24,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-test/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 23,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/WorkerBinder.kt",
      "extension" : "kt",
      "linesOfCode" : 216,
      "unitsCount" : 11,
      "unitsMcCabeIndexSum" : 13,
      "linesOfCodeInUnits" : 103
    }, {
      "relativePath" : "android/libraries/rib-android/src/main/kotlin/com/uber/rib/core/RibActivity.kt",
      "extension" : "kt",
      "linesOfCode" : 192,
      "unitsCount" : 16,
      "unitsMcCabeIndexSum" : 21,
      "linesOfCodeInUnits" : 91
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Interactor.kt",
      "extension" : "kt",
      "linesOfCode" : 145,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 10,
      "linesOfCodeInUnits" : 61
    }, {
      "relativePath" : "android/libraries/rib-workflow/src/main/kotlin/com/uber/rib/workflow/core/Step.kt",
      "extension" : "kt",
      "linesOfCode" : 77,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 37
    }, {
      "relativePath" : "android/libraries/rib-coroutines/src/main/kotlin/com/uber/rib/core/RibCoroutineScopes.kt",
      "extension" : "kt",
      "linesOfCode" : 53,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Presenter.kt",
      "extension" : "kt",
      "linesOfCode" : 42,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "android/libraries/rib-coroutines-test/src/main/kotlin/com/uber/rib/core/TestRibCoroutineScopes.kt",
      "extension" : "kt",
      "linesOfCode" : 41,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-workflow-test/src/main/kotlin/com/uber/rib/workflow/core/StepTester.kt",
      "extension" : "kt",
      "linesOfCode" : 37,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 26
    }, {
      "relativePath" : "android/libraries/rib-android/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 35,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-test/src/main/kotlin/com/uber/rib/core/InteractorHelper.kt",
      "extension" : "kt",
      "linesOfCode" : 34,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 12
    }, {
      "relativePath" : "android/libraries/rib-coroutines-test/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 29,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/FlowAsScope.kt",
      "extension" : "kt",
      "linesOfCode" : 29,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-workflow-test/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 27,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-debug-utils/src/main/kotlin/com/uber/rib/core/RouterDebugUtils.kt",
      "extension" : "kt",
      "linesOfCode" : 20,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-debug-utils/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 18,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/WorkerScopeProvider.kt",
      "extension" : "kt",
      "linesOfCode" : 14,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-test/src/main/kotlin/com/uber/rib/core/FakeInteractor.kt",
      "extension" : "kt",
      "linesOfCode" : 12,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 8
    }, {
      "relativePath" : "android/libraries/rib-test/src/main/kotlin/com/uber/rib/core/WorkerHelper.kt",
      "extension" : "kt",
      "linesOfCode" : 9,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/LazyBackingProperty.kt",
      "extension" : "kt",
      "linesOfCode" : 8,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-coroutines/src/main/kotlin/com/uber/rib/core/internal/CoroutinesFriendModuleApi.kt",
      "extension" : "kt",
      "linesOfCode" : 3,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-workflow/src/main/kotlin/com/uber/rib/workflow/core/internal/WorkflowFriendModuleApi.kt",
      "extension" : "kt",
      "linesOfCode" : 2,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/internal/CoreFriendModuleApi.kt",
      "extension" : "kt",
      "linesOfCode" : 2,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/conventions/src/main/kotlin/ribs.kotlin-android-library-conventions.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 49,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/conventions/src/main/kotlin/ribs.kotlin-library-conventions.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 13,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-android-core/src/main/kotlin/com/uber/rib/core/CoreAppCompatActivity.kt",
      "extension" : "kt",
      "linesOfCode" : 66,
      "unitsCount" : 8,
      "unitsMcCabeIndexSum" : 9,
      "linesOfCodeInUnits" : 41
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibProjectService.kt",
      "extension" : "kt",
      "linesOfCode" : 201,
      "unitsCount" : 16,
      "unitsMcCabeIndexSum" : 24,
      "linesOfCodeInUnits" : 101
    }, {
      "relativePath" : "android/gradle/libs.versions.toml",
      "extension" : "toml",
      "linesOfCode" : 118,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/ui/HierarchyBrowserBase.kt",
      "extension" : "kt",
      "linesOfCode" : 66,
      "unitsCount" : 8,
      "unitsMcCabeIndexSum" : 11,
      "linesOfCodeInUnits" : 46
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/resources/META-INF/plugin.xml",
      "extension" : "xml",
      "linesOfCode" : 54,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibIcons.kt",
      "extension" : "kt",
      "linesOfCode" : 6,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-coroutines-test/src/main/kotlin/com/uber/rib/core/TestRibDispatchers.kt",
      "extension" : "kt",
      "linesOfCode" : 27,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 8
    }, {
      "relativePath" : "android/libraries/rib-coroutines-test/src/main/kotlin/com/uber/rib/core/RibCoroutinesRule.kt",
      "extension" : "kt",
      "linesOfCode" : 18,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 9
    }, {
      "relativePath" : "android/gradle/test-libs.versions.toml",
      "extension" : "toml",
      "linesOfCode" : 16,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
      "extension" : "java",
      "linesOfCode" : 440,
      "unitsCount" : 33,
      "unitsMcCabeIndexSum" : 112,
      "linesOfCodeInUnits" : 358
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/RibEvents.kt",
      "extension" : "kt",
      "linesOfCode" : 83,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 6
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Worker.kt",
      "extension" : "kt",
      "linesOfCode" : 17,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 2
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/WorkerUnbinder.kt",
      "extension" : "kt",
      "linesOfCode" : 10,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/RibRouterEvent.kt",
      "extension" : "kt",
      "linesOfCode" : 6,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-coroutines/src/main/kotlin/com/uber/rib/core/RibCoroutinesConfig.kt",
      "extension" : "kt",
      "linesOfCode" : 17,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyBrowser.kt",
      "extension" : "kt",
      "linesOfCode" : 223,
      "unitsCount" : 21,
      "unitsMcCabeIndexSum" : 29,
      "linesOfCodeInUnits" : 127
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyPanel.kt",
      "extension" : "kt",
      "linesOfCode" : 143,
      "unitsCount" : 5,
      "unitsMcCabeIndexSum" : 12,
      "linesOfCodeInUnits" : 54
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibViewBrowser.kt",
      "extension" : "kt",
      "linesOfCode" : 136,
      "unitsCount" : 15,
      "unitsMcCabeIndexSum" : 24,
      "linesOfCodeInUnits" : 84
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyUtils.kt",
      "extension" : "kt",
      "linesOfCode" : 119,
      "unitsCount" : 12,
      "unitsMcCabeIndexSum" : 27,
      "linesOfCodeInUnits" : 84
    } ],
    "mostPreviouslyChangedFiles" : [ {
      "relativePath" : "ios/RIBs/RIBs.h",
      "extension" : "h",
      "linesOfCode" : 3,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/config/lint/lint.xml",
      "extension" : "xml",
      "linesOfCode" : 4,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedIn/LoggedInComponent+RandomWin.swift",
      "extension" : "swift",
      "linesOfCode" : 3,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial1/TicTacToe/Root/RootComponent+LoggedOut.swift",
      "extension" : "swift",
      "linesOfCode" : 5,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToe/Root/RootComponent+LoggedOut.swift",
      "extension" : "swift",
      "linesOfCode" : 5,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToe/LoggedIn/LoggedInComponent+OffGame.swift",
      "extension" : "swift",
      "linesOfCode" : 5,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToe/LoggedIn/LoggedInComponent+TicTacToe.swift",
      "extension" : "swift",
      "linesOfCode" : 5,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/Root/RootComponent+LoggedOut.swift",
      "extension" : "swift",
      "linesOfCode" : 5,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedIn/LoggedInComponent+OffGame.swift",
      "extension" : "swift",
      "linesOfCode" : 5,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedIn/LoggedInComponent+TicTacToe.swift",
      "extension" : "swift",
      "linesOfCode" : 5,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/Root/RootComponent+LoggedOut.swift",
      "extension" : "swift",
      "linesOfCode" : 5,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/LoggedIn/LoggedInComponent+OffGame.swift",
      "extension" : "swift",
      "linesOfCode" : 5,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/LoggedIn/LoggedInComponent+TicTacToe.swift",
      "extension" : "swift",
      "linesOfCode" : 5,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial1/TicTacToe/AppStart/AppComponent.swift",
      "extension" : "swift",
      "linesOfCode" : 6,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToe/AppStart/AppComponent.swift",
      "extension" : "swift",
      "linesOfCode" : 6,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/AppStart/AppComponent.swift",
      "extension" : "swift",
      "linesOfCode" : 6,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/AppStart/AppComponent.swift",
      "extension" : "swift",
      "linesOfCode" : 6,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToe/Root/RootComponent+LoggedIn.swift",
      "extension" : "swift",
      "linesOfCode" : 8,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/Root/RootComponent+LoggedIn.swift",
      "extension" : "swift",
      "linesOfCode" : 8,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/Root/RootComponent+LoggedIn.swift",
      "extension" : "swift",
      "linesOfCode" : 8,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToe/LoggedIn/DELETE_ME.swift",
      "extension" : "swift",
      "linesOfCode" : 10,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/Models/PlayerType.swift",
      "extension" : "swift",
      "linesOfCode" : 13,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedIn/RandomWinAdapter.swift",
      "extension" : "swift",
      "linesOfCode" : 20,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedIn/TicTacToeAdapter.swift",
      "extension" : "swift",
      "linesOfCode" : 20,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "ios/tutorials/tutorial1/TicTacToe/Root/RootBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 22,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 12
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/LoggedIn/LoggedInBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 28,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 14
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToe/Root/RootBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 29,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 13
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/Root/RootBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 31,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 15
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/Root/RootBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 31,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 15
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/ScoreBoard/BasicScoreBoardBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 34,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/TicTacToe/TicTacToeBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 34,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 12
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/RandomWin/RandomWinBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 34,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedIn/LoggedInBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 46,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 19
    }, {
      "relativePath" : "ios/tutorials/tutorial1/TicTacToe/LoggedOut/DELETE_ME.swift",
      "extension" : "swift",
      "linesOfCode" : 15,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 7
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/Root/RootComponent+LoggedOut.swift",
      "extension" : "swift",
      "linesOfCode" : 5,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/LoggedIn/LoggedInComponent+TicTacToe.swift",
      "extension" : "swift",
      "linesOfCode" : 5,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/AppStart/AppComponent.swift",
      "extension" : "swift",
      "linesOfCode" : 6,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/Root/RootComponent+LoggedIn.swift",
      "extension" : "swift",
      "linesOfCode" : 8,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/LoggedIn/LoggedInComponent+OffGame.swift",
      "extension" : "swift",
      "linesOfCode" : 8,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/RIBs/Classes/PresentableInteractor.swift",
      "extension" : "swift",
      "linesOfCode" : 10,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/LoggedOut/LoggedOutBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 20,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToe/LoggedOut/LoggedOutBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 20,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToe/TicTacToe/TicTacToeBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 20,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedOut/LoggedOutBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 20,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/LoggedOut/LoggedOutBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 20,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/TicTacToe/TicTacToeBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 20,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/OffGame/OffGameBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 20,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/TicTacToe/TicTacToeBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 29,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 11
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/Root/RootBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 31,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 15
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/OffGame/OffGameBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 34,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 12
    } ],
    "mostChangedFiles" : [ {
      "relativePath" : "android/libraries/rib-android/src/main/kotlin/com/uber/rib/core/RibActivity.kt",
      "extension" : "kt",
      "linesOfCode" : 192,
      "unitsCount" : 16,
      "unitsMcCabeIndexSum" : 21,
      "linesOfCodeInUnits" : 91
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/WorkerBinder.kt",
      "extension" : "kt",
      "linesOfCode" : 216,
      "unitsCount" : 11,
      "unitsMcCabeIndexSum" : 13,
      "linesOfCodeInUnits" : 103
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Interactor.kt",
      "extension" : "kt",
      "linesOfCode" : 145,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 10,
      "linesOfCodeInUnits" : 61
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Presenter.kt",
      "extension" : "kt",
      "linesOfCode" : 42,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Worker.kt",
      "extension" : "kt",
      "linesOfCode" : 17,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 2
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Router.kt",
      "extension" : "kt",
      "linesOfCode" : 193,
      "unitsCount" : 15,
      "unitsMcCabeIndexSum" : 26,
      "linesOfCodeInUnits" : 130
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/RibEvents.kt",
      "extension" : "kt",
      "linesOfCode" : 83,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 6
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/BasicInteractor.kt",
      "extension" : "kt",
      "linesOfCode" : 5,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/RibCoroutineWorker.kt",
      "extension" : "kt",
      "linesOfCode" : 155,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 7,
      "linesOfCodeInUnits" : 29
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/WorkerScopeProvider.kt",
      "extension" : "kt",
      "linesOfCode" : 14,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-coroutines-test/src/main/kotlin/com/uber/rib/core/TestRibDispatchers.kt",
      "extension" : "kt",
      "linesOfCode" : 27,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 8
    }, {
      "relativePath" : "android/libraries/rib-coroutines-test/src/main/kotlin/com/uber/rib/core/TestRibCoroutineScopes.kt",
      "extension" : "kt",
      "linesOfCode" : 41,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/GenerateAction.java",
      "extension" : "java",
      "linesOfCode" : 146,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 22,
      "linesOfCodeInUnits" : 107
    }, {
      "relativePath" : "android/libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/StackRouterNavigator.kt",
      "extension" : "kt",
      "linesOfCode" : 341,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 11,
      "linesOfCodeInUnits" : 66
    }, {
      "relativePath" : "android/libraries/rib-test/src/main/kotlin/com/uber/rib/core/InteractorHelper.kt",
      "extension" : "kt",
      "linesOfCode" : 34,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 12
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/resources/META-INF/plugin.xml",
      "extension" : "xml",
      "linesOfCode" : 54,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-coroutines/src/main/kotlin/com/uber/rib/core/RibCoroutinesConfig.kt",
      "extension" : "kt",
      "linesOfCode" : 17,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tooling/RIB.xctemplate/Default/___FILEBASENAME___Router.swift",
      "extension" : "swift",
      "linesOfCode" : 17,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 7
    }, {
      "relativePath" : "android/libraries/rib-coroutines-test/src/main/kotlin/com/uber/rib/core/RibCoroutinesRule.kt",
      "extension" : "kt",
      "linesOfCode" : 18,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 9
    }, {
      "relativePath" : "android/libraries/rib-debug-utils/src/main/kotlin/com/uber/rib/core/RouterDebugUtils.kt",
      "extension" : "kt",
      "linesOfCode" : 20,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-android/src/main/kotlin/com/uber/rib/core/ViewRouter.kt",
      "extension" : "kt",
      "linesOfCode" : 24,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/WorkerUnbinder.kt",
      "extension" : "kt",
      "linesOfCode" : 10,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/RouterNavigatorState.kt",
      "extension" : "kt",
      "linesOfCode" : 11,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 7
    }, {
      "relativePath" : "android/libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/RouterNavigatorEvents.kt",
      "extension" : "kt",
      "linesOfCode" : 22,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "android/libraries/rib-coroutines/src/main/kotlin/com/uber/rib/core/RibDispatchers.kt",
      "extension" : "kt",
      "linesOfCode" : 31,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootRouter.java",
      "extension" : "java",
      "linesOfCode" : 36,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 15
    }, {
      "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/RootRouter.java",
      "extension" : "java",
      "linesOfCode" : 36,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 15
    }, {
      "relativePath" : "android/libraries/rib-screen-stack-base/src/main/kotlin/com/uber/rib/core/screenstack/ViewProvider.kt",
      "extension" : "kt",
      "linesOfCode" : 37,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 18
    }, {
      "relativePath" : "android/libraries/rib-workflow-test/src/main/kotlin/com/uber/rib/workflow/core/StepTester.kt",
      "extension" : "kt",
      "linesOfCode" : 37,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 26
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/RootRouter.java",
      "extension" : "java",
      "linesOfCode" : 46,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 19
    }, {
      "relativePath" : "android/libraries/rib-coroutines/src/main/kotlin/com/uber/rib/core/RibCoroutineScopes.kt",
      "extension" : "kt",
      "linesOfCode" : 53,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/RIBs/Classes/Workflow/Workflow.swift",
      "extension" : "swift",
      "linesOfCode" : 99,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 13
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/Generator.java",
      "extension" : "java",
      "linesOfCode" : 119,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 14,
      "linesOfCodeInUnits" : 60
    }, {
      "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootInteractor.java",
      "extension" : "java",
      "linesOfCode" : 24,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 8
    }, {
      "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/RootRouter.java",
      "extension" : "java",
      "linesOfCode" : 24,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 7
    }, {
      "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/RootInteractor.java",
      "extension" : "java",
      "linesOfCode" : 24,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 8
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Rib.kt",
      "extension" : "kt",
      "linesOfCode" : 39,
      "unitsCount" : 8,
      "unitsMcCabeIndexSum" : 11,
      "linesOfCodeInUnits" : 36
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/GenerateRibDialog.java",
      "extension" : "java",
      "linesOfCode" : 39,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 17
    }, {
      "relativePath" : "android/libraries/rib-test/src/main/kotlin/com/uber/rib/core/RouterHelper.kt",
      "extension" : "kt",
      "linesOfCode" : 61,
      "unitsCount" : 11,
      "unitsMcCabeIndexSum" : 11,
      "linesOfCodeInUnits" : 33
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/ui/RibHierarchyRootNodeDescriptor.kt",
      "extension" : "kt",
      "linesOfCode" : 66,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 38
    }, {
      "relativePath" : "android/libraries/rib-android/src/main/kotlin/com/uber/rib/core/lifecycle/ActivityCallbackEvent.kt",
      "extension" : "kt",
      "linesOfCode" : 72,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 7,
      "linesOfCodeInUnits" : 31
    }, {
      "relativePath" : "android/tooling/rib-flipper-plugin/src/main/kotlin/com/uber/rib/flipper/RibEventPayload.kt",
      "extension" : "kt",
      "linesOfCode" : 74,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 16
    }, {
      "relativePath" : "android/libraries/rib-workflow/src/main/kotlin/com/uber/rib/workflow/core/Step.kt",
      "extension" : "kt",
      "linesOfCode" : 77,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 37
    }, {
      "relativePath" : "ios/RIBs/Classes/Interactor.swift",
      "extension" : "swift",
      "linesOfCode" : 80,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 5,
      "linesOfCodeInUnits" : 28
    }, {
      "relativePath" : "android/libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/RouterNavigator.kt",
      "extension" : "kt",
      "linesOfCode" : 85,
      "unitsCount" : 8,
      "unitsMcCabeIndexSum" : 8,
      "linesOfCodeInUnits" : 113
    }, {
      "relativePath" : "android/tooling/rib-flipper-plugin/src/main/kotlin/com/uber/rib/flipper/RibTreePlugin.kt",
      "extension" : "kt",
      "linesOfCode" : 109,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 43
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibProjectService.kt",
      "extension" : "kt",
      "linesOfCode" : 201,
      "unitsCount" : 16,
      "unitsMcCabeIndexSum" : 24,
      "linesOfCodeInUnits" : 101
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyBrowser.kt",
      "extension" : "kt",
      "linesOfCode" : 223,
      "unitsCount" : 21,
      "unitsMcCabeIndexSum" : 29,
      "linesOfCodeInUnits" : 127
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/EmptyPresenter.kt",
      "extension" : "kt",
      "linesOfCode" : 2,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/RibBuilder.kt",
      "extension" : "kt",
      "linesOfCode" : 4,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    } ],
    "filesWithMostContributors" : [ {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Worker.kt",
      "extension" : "kt",
      "linesOfCode" : 17,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 2
    }, {
      "relativePath" : "android/libraries/rib-android/src/main/kotlin/com/uber/rib/core/RibActivity.kt",
      "extension" : "kt",
      "linesOfCode" : 192,
      "unitsCount" : 16,
      "unitsMcCabeIndexSum" : 21,
      "linesOfCodeInUnits" : 91
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/WorkerBinder.kt",
      "extension" : "kt",
      "linesOfCode" : 216,
      "unitsCount" : 11,
      "unitsMcCabeIndexSum" : 13,
      "linesOfCodeInUnits" : 103
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/GenerateAction.java",
      "extension" : "java",
      "linesOfCode" : 146,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 22,
      "linesOfCodeInUnits" : 107
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Interactor.kt",
      "extension" : "kt",
      "linesOfCode" : 145,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 10,
      "linesOfCodeInUnits" : 61
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Presenter.kt",
      "extension" : "kt",
      "linesOfCode" : 42,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Router.kt",
      "extension" : "kt",
      "linesOfCode" : 193,
      "unitsCount" : 15,
      "unitsMcCabeIndexSum" : 26,
      "linesOfCodeInUnits" : 130
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/RibEvents.kt",
      "extension" : "kt",
      "linesOfCode" : 83,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 6
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/resources/META-INF/plugin.xml",
      "extension" : "xml",
      "linesOfCode" : 54,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tooling/RIB.xctemplate/Default/___FILEBASENAME___Router.swift",
      "extension" : "swift",
      "linesOfCode" : 17,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 7
    }, {
      "relativePath" : "ios/RIBs/Classes/Workflow/Workflow.swift",
      "extension" : "swift",
      "linesOfCode" : 99,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 13
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/Generator.java",
      "extension" : "java",
      "linesOfCode" : 119,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 14,
      "linesOfCodeInUnits" : 60
    }, {
      "relativePath" : "android/libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/RouterNavigatorEvents.kt",
      "extension" : "kt",
      "linesOfCode" : 22,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "android/libraries/rib-screen-stack-base/src/main/kotlin/com/uber/rib/core/screenstack/ViewProvider.kt",
      "extension" : "kt",
      "linesOfCode" : 37,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 18
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/WorkerUnbinder.kt",
      "extension" : "kt",
      "linesOfCode" : 10,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/RIBs/Classes/Interactor.swift",
      "extension" : "swift",
      "linesOfCode" : 80,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 5,
      "linesOfCodeInUnits" : 28
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/BasicInteractor.kt",
      "extension" : "kt",
      "linesOfCode" : 5,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/StackRouterNavigator.kt",
      "extension" : "kt",
      "linesOfCode" : 341,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 11,
      "linesOfCodeInUnits" : 66
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/WorkerScopeProvider.kt",
      "extension" : "kt",
      "linesOfCode" : 14,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-test/src/main/kotlin/com/uber/rib/core/InteractorHelper.kt",
      "extension" : "kt",
      "linesOfCode" : 34,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 12
    }, {
      "relativePath" : "android/libraries/rib-debug-utils/src/main/kotlin/com/uber/rib/core/RouterDebugUtils.kt",
      "extension" : "kt",
      "linesOfCode" : 20,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/RouterNavigatorState.kt",
      "extension" : "kt",
      "linesOfCode" : 11,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 7
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/GenerateRibDialog.java",
      "extension" : "java",
      "linesOfCode" : 39,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 17
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/ui/RibHierarchyRootNodeDescriptor.kt",
      "extension" : "kt",
      "linesOfCode" : 66,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 38
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyBrowser.kt",
      "extension" : "kt",
      "linesOfCode" : 223,
      "unitsCount" : 21,
      "unitsMcCabeIndexSum" : 29,
      "linesOfCodeInUnits" : 127
    }, {
      "relativePath" : "android/tooling/rib-flipper-plugin/src/main/kotlin/com/uber/rib/flipper/RibTreePlugin.kt",
      "extension" : "kt",
      "linesOfCode" : 109,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 43
    }, {
      "relativePath" : "android/libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/RouterNavigator.kt",
      "extension" : "kt",
      "linesOfCode" : 85,
      "unitsCount" : 8,
      "unitsMcCabeIndexSum" : 8,
      "linesOfCodeInUnits" : 113
    }, {
      "relativePath" : "android/libraries/rib-android/src/main/kotlin/com/uber/rib/core/lifecycle/ActivityCallbackEvent.kt",
      "extension" : "kt",
      "linesOfCode" : 72,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 7,
      "linesOfCodeInUnits" : 31
    }, {
      "relativePath" : "ios/RIBs/Classes/DI/Component.swift",
      "extension" : "swift",
      "linesOfCode" : 24,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/RIBs/Classes/LeakDetector/Executor.swift",
      "extension" : "swift",
      "linesOfCode" : 27,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-test/src/main/kotlin/com/uber/rib/core/WorkerHelper.kt",
      "extension" : "kt",
      "linesOfCode" : 9,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "android/libraries/rib-android-core/src/main/kotlin/com/uber/rib/core/ActivityDelegate.kt",
      "extension" : "kt",
      "linesOfCode" : 25,
      "unitsCount" : 8,
      "unitsMcCabeIndexSum" : 8,
      "linesOfCodeInUnits" : 18
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/RibCoroutineWorker.kt",
      "extension" : "kt",
      "linesOfCode" : 155,
      "unitsCount" : 7,
      "unitsMcCabeIndexSum" : 7,
      "linesOfCodeInUnits" : 29
    }, {
      "relativePath" : "android/libraries/rib-coroutines/src/main/kotlin/com/uber/rib/core/RibCoroutinesConfig.kt",
      "extension" : "kt",
      "linesOfCode" : 17,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-coroutines/src/main/kotlin/com/uber/rib/core/RibCoroutineScopes.kt",
      "extension" : "kt",
      "linesOfCode" : 53,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-workflow-test/src/main/kotlin/com/uber/rib/workflow/core/StepTester.kt",
      "extension" : "kt",
      "linesOfCode" : 37,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 26
    }, {
      "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/RootRouter.java",
      "extension" : "java",
      "linesOfCode" : 36,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 15
    }, {
      "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/RootRouter.java",
      "extension" : "java",
      "linesOfCode" : 46,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 19
    }, {
      "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootRouter.java",
      "extension" : "java",
      "linesOfCode" : 36,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 15
    }, {
      "relativePath" : "android/tooling/rib-flipper-plugin/src/main/kotlin/com/uber/rib/flipper/RibEventPayload.kt",
      "extension" : "kt",
      "linesOfCode" : 74,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 16
    }, {
      "relativePath" : "android/libraries/rib-workflow/src/main/kotlin/com/uber/rib/workflow/core/Step.kt",
      "extension" : "kt",
      "linesOfCode" : 77,
      "unitsCount" : 4,
      "unitsMcCabeIndexSum" : 6,
      "linesOfCodeInUnits" : 37
    }, {
      "relativePath" : "android/libraries/rib-test/src/main/kotlin/com/uber/rib/core/RouterHelper.kt",
      "extension" : "kt",
      "linesOfCode" : 61,
      "unitsCount" : 11,
      "unitsMcCabeIndexSum" : 11,
      "linesOfCodeInUnits" : 33
    }, {
      "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Rib.kt",
      "extension" : "kt",
      "linesOfCode" : 39,
      "unitsCount" : 8,
      "unitsMcCabeIndexSum" : 11,
      "linesOfCodeInUnits" : 36
    }, {
      "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/RootInteractor.java",
      "extension" : "java",
      "linesOfCode" : 24,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 8
    }, {
      "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/RootRouter.java",
      "extension" : "java",
      "linesOfCode" : 24,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 7
    }, {
      "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootInteractor.java",
      "extension" : "java",
      "linesOfCode" : 24,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 8
    }, {
      "relativePath" : "ios/RIBs/Classes/Presenter.swift",
      "extension" : "swift",
      "linesOfCode" : 8,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/GeneratorPair.java",
      "extension" : "java",
      "linesOfCode" : 17,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 11
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/rib/BuilderGenerator.java",
      "extension" : "java",
      "linesOfCode" : 12,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 6
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/rib/ViewBuilderGenerator.java",
      "extension" : "java",
      "linesOfCode" : 12,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 6
    } ],
    "filesWithLeastContributors" : [ {
      "relativePath" : "android/tooling/rib-flipper-plugin/desktop/src/TreeChart.js",
      "extension" : "js",
      "linesOfCode" : 105,
      "unitsCount" : 6,
      "unitsMcCabeIndexSum" : 19,
      "linesOfCodeInUnits" : 97
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyPayload.java",
      "extension" : "java",
      "linesOfCode" : 99,
      "unitsCount" : 18,
      "unitsMcCabeIndexSum" : 19,
      "linesOfCodeInUnits" : 67
    }, {
      "relativePath" : "android/tooling/utils/intellij-broadcast-core/src/main/java/com/uber/debug/broadcast/core/DebugBroadcastRequest.java",
      "extension" : "java",
      "linesOfCode" : 76,
      "unitsCount" : 10,
      "unitsMcCabeIndexSum" : 15,
      "linesOfCodeInUnits" : 57
    }, {
      "relativePath" : "ios/RIBsTests/Worker/WorkerTests.swift",
      "extension" : "swift",
      "linesOfCode" : 75,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 49
    }, {
      "relativePath" : "android/tooling/utils/intellij-broadcast-core/src/main/java/com/uber/debug/broadcast/core/DebugBroadcastReceiver.java",
      "extension" : "java",
      "linesOfCode" : 63,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 14,
      "linesOfCodeInUnits" : 45
    }, {
      "relativePath" : "ios/RIBsTests/MultiStageComponentizedBuilderTests.swift",
      "extension" : "swift",
      "linesOfCode" : 53,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 4,
      "linesOfCodeInUnits" : 34
    }, {
      "relativePath" : "android/conventions/src/main/kotlin/ribs.kotlin-android-application-conventions.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 52,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/LoggedIn/LoggedInBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 47,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 20
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedIn/LoggedInBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 46,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 19
    }, {
      "relativePath" : "android/conventions/src/main/kotlin/ribs.spotless-convention.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 42,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/LoggedIn/LoggedInBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 40,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 21
    }, {
      "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/OffGame/OffGameBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 36,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 14
    }, {
      "relativePath" : "ios/RIBsTests/RouterTests.swift",
      "extension" : "swift",
      "linesOfCode" : 35,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 20
    }, {
      "relativePath" : "ios/RIBsTests/ComponentizedBuilderTests.swift",
      "extension" : "swift",
      "linesOfCode" : 35,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 23
    }, {
      "relativePath" : "android/libraries/rib-android/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 35,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/RandomWin/RandomWinBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 34,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/TicTacToe/TicTacToeBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 34,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 12
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/ScoreBoard/BasicScoreBoardBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 34,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/OffGame/OffGameBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 34,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 12
    }, {
      "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/RandomWin/RandomWinBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 34,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/TicTacToe/TicTacToeBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 34,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 12
    }, {
      "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/ScoreBoard/BasicScoreBoardBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 34,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 3
    }, {
      "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/Root/RootBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 32,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 16
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/Root/RootBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 31,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 15
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/Root/RootBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 31,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 15
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/Root/RootBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 31,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 15
    }, {
      "relativePath" : "ios/tutorials/tutorial2/TicTacToe/Root/RootBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 29,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 13
    }, {
      "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/TicTacToe/TicTacToeBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 29,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 11
    }, {
      "relativePath" : "android/libraries/rib-coroutines-test/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 29,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial3/TicTacToe/LoggedIn/LoggedInBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 28,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 14
    }, {
      "relativePath" : "android/conventions/src/main/kotlin/Extensions.kt",
      "extension" : "kt",
      "linesOfCode" : 28,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-workflow-test/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 27,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/Promo/LaunchGameWorkflow.swift",
      "extension" : "swift",
      "linesOfCode" : 26,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/tooling/rib-flipper-plugin/desktop/src/utils.js",
      "extension" : "js",
      "linesOfCode" : 25,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 9,
      "linesOfCodeInUnits" : 25
    }, {
      "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyUtils.java",
      "extension" : "java",
      "linesOfCode" : 23,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 7,
      "linesOfCodeInUnits" : 18
    }, {
      "relativePath" : "android/tooling/utils/intellij-broadcast-core/src/main/java/com/uber/debug/broadcast/core/DebugBroadcastResponse.java",
      "extension" : "java",
      "linesOfCode" : 23,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 13
    }, {
      "relativePath" : "android/libraries/rib-test/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 23,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-test/src/main/kotlin/com/uber/rib/core/TestRibCoroutineWorker.kt",
      "extension" : "kt",
      "linesOfCode" : 23,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/tutorials/tutorial1/TicTacToe/Root/RootBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 22,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 12
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedIn/TicTacToeAdapter.swift",
      "extension" : "swift",
      "linesOfCode" : 20,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedIn/RandomWinAdapter.swift",
      "extension" : "swift",
      "linesOfCode" : 20,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/LoggedOut/LoggedOutBuilder.swift",
      "extension" : "swift",
      "linesOfCode" : 20,
      "unitsCount" : 2,
      "unitsMcCabeIndexSum" : 2,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/LoggedIn/TicTacToeAdapter.swift",
      "extension" : "swift",
      "linesOfCode" : 20,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/LoggedIn/RandomWinAdapter.swift",
      "extension" : "swift",
      "linesOfCode" : 20,
      "unitsCount" : 3,
      "unitsMcCabeIndexSum" : 3,
      "linesOfCodeInUnits" : 10
    }, {
      "relativePath" : "ios/RIBsTests/LaunchRouterTests.swift",
      "extension" : "swift",
      "linesOfCode" : 19,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 6
    }, {
      "relativePath" : "android/conventions/src/main/kotlin/ribs.kotlin-android-application-errorprone-conventions.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 19,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/libraries/rib-debug-utils/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 18,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "android/conventions/build.gradle.kts",
      "extension" : "kts",
      "linesOfCode" : 18,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    }, {
      "relativePath" : "ios/RIBsTests/Extensions/Foundation+ExtensionsTests.swift",
      "extension" : "swift",
      "linesOfCode" : 17,
      "unitsCount" : 1,
      "unitsMcCabeIndexSum" : 1,
      "linesOfCodeInUnits" : 13
    }, {
      "relativePath" : "android/gradle/test-libs.versions.toml",
      "extension" : "toml",
      "linesOfCode" : 16,
      "unitsCount" : 0,
      "unitsMcCabeIndexSum" : 0,
      "linesOfCodeInUnits" : 0
    } ],
    "firstDate" : "2017-10-06",
    "latestDate" : "2024-03-21",
    "daysBetweenFirstAndLastDate" : 2359,
    "weeks" : 337,
    "estimatedWorkindDays" : 1685,
    "activeDays" : 215,
    "ageInDays" : 2372,
    "historyPerExtensionPerYear" : [ {
      "extension" : "podspec",
      "year" : "2023",
      "commitsCount" : 2,
      "contributors" : [ "ebubekirssezer@gmail.com", "rudro@uber.com" ]
    }, {
      "extension" : "podspec",
      "year" : "2021",
      "commitsCount" : 1,
      "contributors" : [ "pavlo.davydiuk@miquido.com" ]
    }, {
      "extension" : "podspec",
      "year" : "2020",
      "commitsCount" : 1,
      "contributors" : [ "imairi@gmail.com" ]
    }, {
      "extension" : "swift-version",
      "year" : "2017",
      "commitsCount" : 1,
      "contributors" : [ "tuomas@artman.fi" ]
    }, {
      "extension" : "swift-version",
      "year" : "2019",
      "commitsCount" : 1,
      "contributors" : [ "jmkauf@gmail.com" ]
    }, {
      "extension" : "png",
      "year" : "2017",
      "commitsCount" : 41,
      "contributors" : [ "pavel@uber.com", "tuomas@artman.fi", "gergely.orosz@gmail.com", "yuan.ethan.lu@gmail.com", "kovpas@gmail.com", "attwell@uber.com", "tuomas@uber.com", "yuanlu@uber.com", "gergely@uber.com", "cameron@sbarow.com" ]
    }, {
      "extension" : "podspec",
      "year" : "2019",
      "commitsCount" : 2,
      "contributors" : [ "jmkauf@gmail.com", "daimathieu@gmail.com" ]
    }, {
      "extension" : "podspec",
      "year" : "2018",
      "commitsCount" : 2,
      "contributors" : [ "yiw@uber.com", "neakor@gmail.com" ]
    }, {
      "extension" : "podspec",
      "year" : "2017",
      "commitsCount" : 9,
      "contributors" : [ "yiw@uber.com", "me@kilian.io", "tuomas@artman.fi", "1827517+neakor@users.noreply.github.com", "tuomas@uber.com", "gergely@uber.com", "cameron@sbarow.com" ]
    }, {
      "extension" : "sh",
      "year" : "2022",
      "commitsCount" : 2,
      "contributors" : [ "tys@uber.com" ]
    }, {
      "extension" : "sh",
      "year" : "2021",
      "commitsCount" : 3,
      "contributors" : [ "jbarr@uber.com" ]
    }, {
      "extension" : "sh",
      "year" : "2023",
      "commitsCount" : 1,
      "contributors" : [ "tys@uber.com" ]
    }, {
      "extension" : "xib",
      "year" : "2017",
      "commitsCount" : 1,
      "contributors" : [ "dmitry.klimkin@gmail.com" ]
    }, {
      "extension" : "js",
      "year" : "2021",
      "commitsCount" : 1,
      "contributors" : [ "52428902+oliviernotteghem@users.noreply.github.com" ]
    }, {
      "extension" : "markdown",
      "year" : "2017",
      "commitsCount" : 1,
      "contributors" : [ "pavel@uber.com" ]
    }, {
      "extension" : "swift",
      "year" : "2021",
      "commitsCount" : 7,
      "contributors" : [ "44936625+jsdev887@users.noreply.github.com", "gnurtduc@gmail.com", "kge941228@gmail.com", "52437+tp@users.noreply.github.com", "pavlo.davydiuk@miquido.com", "run190822@gmail.com", "flip@kakao.com" ]
    }, {
      "extension" : "toml",
      "year" : "2023",
      "commitsCount" : 7,
      "contributors" : [ "jbarr21@users.noreply.github.com", "idanakav@uber.com", "tys@uber.com", "psteiger@gmail.com" ]
    }, {
      "extension" : "swift",
      "year" : "2022",
      "commitsCount" : 3,
      "contributors" : [ "tys@uber.com", "31857308+woookdev@users.noreply.github.com" ]
    }, {
      "extension" : "swift",
      "year" : "2020",
      "commitsCount" : 2,
      "contributors" : [ "imairi@gmail.com", "pomozoff@mail.ru" ]
    }, {
      "extension" : "png",
      "year" : "2022",
      "commitsCount" : 1,
      "contributors" : [ "tys@uber.com" ]
    }, {
      "extension" : "png",
      "year" : "2021",
      "commitsCount" : 4,
      "contributors" : [ "jbarr21@users.noreply.github.com", "52428902+oliviernotteghem@users.noreply.github.com" ]
    }, {
      "extension" : "lock",
      "year" : "2017",
      "commitsCount" : 5,
      "contributors" : [ "yiw@uber.com", "pavel@uber.com", "kovpas@gmail.com", "cameron@sbarow.com" ]
    }, {
      "extension" : "png",
      "year" : "2023",
      "commitsCount" : 2,
      "contributors" : [ "fran.aguilera@uber.com", "fran.aguilera12@gmail.com" ]
    }, {
      "extension" : "xml",
      "year" : "2023",
      "commitsCount" : 10,
      "contributors" : [ "fran.aguilera@uber.com", "fran.aguilera12@gmail.com", "jbarr@uber.com", "idanakav@uber.com", "82111345+sergeysmykovskyi@users.noreply.github.com", "psteiger@gmail.com", "sergey.smykovskyi@uber.com" ]
    }, {
      "extension" : "java",
      "year" : "2021",
      "commitsCount" : 24,
      "contributors" : [ "jbarr21@users.noreply.github.com", "tonythompsoncmu@gmail.com", "jbarr@uber.com", "52428902+oliviernotteghem@users.noreply.github.com", "bmgbharath@gmail.com" ]
    }, {
      "extension" : "xml",
      "year" : "2021",
      "commitsCount" : 9,
      "contributors" : [ "jbarr21@users.noreply.github.com", "jbarr@uber.com", "52428902+oliviernotteghem@users.noreply.github.com" ]
    }, {
      "extension" : "xml",
      "year" : "2022",
      "commitsCount" : 7,
      "contributors" : [ "idanakav@gmail.com", "idanakav@uber.com", "tys@uber.com" ]
    }, {
      "extension" : "storyboard",
      "year" : "2017",
      "commitsCount" : 1,
      "contributors" : [ "naokiishikawa0808@gmail.com" ]
    }, {
      "extension" : "pbxproj",
      "year" : "2020",
      "commitsCount" : 2,
      "contributors" : [ "sungwoon.park92@gmail.com", "pomozoff@mail.ru" ]
    }, {
      "extension" : "h",
      "year" : "2017",
      "commitsCount" : 2,
      "contributors" : [ "pavel@uber.com", "tuomas@uber.com" ]
    }, {
      "extension" : "sh",
      "year" : "2017",
      "commitsCount" : 9,
      "contributors" : [ "eric.r.drew@gmail.com", "naokiishikawa0808@gmail.com", "pavel@uber.com", "gergely.orosz@gmail.com", "tuomas@uber.com", "gergely@uber.com", "dmitry.klimkin@gmail.com", "cameron@sbarow.com" ]
    }, {
      "extension" : "modulemap",
      "year" : "2017",
      "commitsCount" : 1,
      "contributors" : [ "pavel@uber.com" ]
    }, {
      "extension" : "pbxproj",
      "year" : "2019",
      "commitsCount" : 2,
      "contributors" : [ "jmkauf@gmail.com", "daimathieu@gmail.com" ]
    }, {
      "extension" : "pbxproj",
      "year" : "2018",
      "commitsCount" : 3,
      "contributors" : [ "ikteish@yahoo.com", "eric.r.drew@gmail.com" ]
    }, {
      "extension" : "kt",
      "year" : "2021",
      "commitsCount" : 48,
      "contributors" : [ "john.hansler@gmail.com", "jbarr21@users.noreply.github.com", "jbarr@uber.com", "52428902+oliviernotteghem@users.noreply.github.com", "eric.liu@uber.com", "tys@uber.com" ]
    }, {
      "extension" : "kt",
      "year" : "2022",
      "commitsCount" : 41,
      "contributors" : [ "mathieu.brousse@maincare.fr", "kiran.kumar@uber.com", "idanakav@gmail.com", "52428902+oliviernotteghem@users.noreply.github.com", "82111345+sergeysmykovskyi@users.noreply.github.com", "idanakav@uber.com", "tys@uber.com", "2078154+thekirankumar@users.noreply.github.com" ]
    }, {
      "extension" : "java",
      "year" : "2019",
      "commitsCount" : 4,
      "contributors" : [ "feglusha@gmail.com", "shaishgandhi@gmail.com", "13363349+uoooo@users.noreply.github.com", "tys@uber.com" ]
    }, {
      "extension" : "java",
      "year" : "2018",
      "commitsCount" : 3,
      "contributors" : [ "rendecano@gmail.com" ]
    }, {
      "extension" : "java",
      "year" : "2017",
      "commitsCount" : 57,
      "contributors" : [ "tuomas@artman.fi", "gergely.orosz@gmail.com", "yuan.ethan.lu@gmail.com", "attwell@uber.com", "yuanlu@uber.com", "tuomas@uber.com", "gergely@uber.com" ]
    }, {
      "extension" : "kt",
      "year" : "2023",
      "commitsCount" : 102,
      "contributors" : [ "fran.aguilera@uber.com", "jbarr21@users.noreply.github.com", "fran.aguilera12@gmail.com", "82111345+sergeysmykovskyi@users.noreply.github.com", "mamykin.av@bk.ru", "idanakav@uber.com", "tys@uber.com", "psteig@ext.uber.com", "sergey.smykovskyi@uber.com", "psteiger@gmail.com", "106627781+davissuber@users.noreply.github.com" ]
    }, {
      "extension" : "kt",
      "year" : "2024",
      "commitsCount" : 1,
      "contributors" : [ "tys@uber.com" ]
    }, {
      "extension" : "pbxproj",
      "year" : "2017",
      "commitsCount" : 24,
      "contributors" : [ "yiw@uber.com", "neakor@gmail.com", "pavel@uber.com", "tuomas@artman.fi", "kovpas@gmail.com", "tuomas@uber.com", "cameron@sbarow.com" ]
    }, {
      "extension" : "gitignore",
      "year" : "2017",
      "commitsCount" : 3,
      "contributors" : [ "tuomas@artman.fi", "tuomas@uber.com", "cameron@sbarow.com" ]
    }, {
      "extension" : "bat",
      "year" : "2017",
      "commitsCount" : 1,
      "contributors" : [ "tuomas@uber.com" ]
    }, {
      "extension" : "partial",
      "year" : "2018",
      "commitsCount" : 1,
      "contributors" : [ "rendecano@gmail.com" ]
    }, {
      "extension" : "partial",
      "year" : "2017",
      "commitsCount" : 3,
      "contributors" : [ "attwell@uber.com" ]
    }, {
      "extension" : "plist",
      "year" : "2019",
      "commitsCount" : 1,
      "contributors" : [ "jmkauf@gmail.com" ]
    }, {
      "extension" : "",
      "year" : "2017",
      "commitsCount" : 22,
      "contributors" : [ "yiw@uber.com", "pavel@uber.com", "tuomas@artman.fi", "kovpas@gmail.com", "attwell@uber.com", "tuomas@uber.com", "alexandru.culeva@ellation.com", "cameron@sbarow.com" ]
    }, {
      "extension" : "yml",
      "year" : "2019",
      "commitsCount" : 4,
      "contributors" : [ "feglusha@gmail.com", "13363349+uoooo@users.noreply.github.com", "jmkauf@gmail.com", "tys@uber.com" ]
    }, {
      "extension" : "plist",
      "year" : "2017",
      "commitsCount" : 28,
      "contributors" : [ "naokiishikawa0808@gmail.com", "pavel@uber.com", "tuomas@artman.fi", "gergely.orosz@gmail.com", "kovpas@gmail.com", "tuomas@uber.com", "gergely@uber.com", "dmitry.klimkin@gmail.com", "cameron@sbarow.com" ]
    }, {
      "extension" : "yml",
      "year" : "2017",
      "commitsCount" : 7,
      "contributors" : [ "pandanomic@gmail.com", "tuomas@artman.fi", "attwell@uber.com", "tuomas@uber.com", "cameron@sbarow.com" ]
    }, {
      "extension" : "",
      "year" : "2019",
      "commitsCount" : 2,
      "contributors" : [ "jmkauf@gmail.com", "daimathieu@gmail.com" ]
    }, {
      "extension" : "md",
      "year" : "2017",
      "commitsCount" : 90,
      "contributors" : [ "naokiishikawa0808@gmail.com", "patrickkerrypei@users.noreply.github.com", "pavel@uber.com", "tuomas@artman.fi", "kovpas@gmail.com", "yuanlu@uber.com", "ctataru@hotmail.com", "gergely@uber.com", "pandanomic@gmail.com", "dayanruben@users.noreply.github.com", "gergely.orosz@gmail.com", "yuan.ethan.lu@gmail.com", "attwell@uber.com", "tuomas@uber.com" ]
    }, {
      "extension" : "jar",
      "year" : "2023",
      "commitsCount" : 1,
      "contributors" : [ "jbarr21@users.noreply.github.com" ]
    }, {
      "extension" : "md",
      "year" : "2019",
      "commitsCount" : 4,
      "contributors" : [ "leland@uber.com", "neakor@gmail.com", "jmkauf@gmail.com" ]
    }, {
      "extension" : "md",
      "year" : "2018",
      "commitsCount" : 7,
      "contributors" : [ "yiw@uber.com", "eric.r.drew@gmail.com", "naokiishikawa0808@gmail.com", "neakor@gmail.com", "tuomas@artman.fi", "serejahh@users.noreply.github.com" ]
    }, {
      "extension" : "jar",
      "year" : "2018",
      "commitsCount" : 3,
      "contributors" : [ "rendecano@gmail.com" ]
    }, {
      "extension" : "xcworkspacedata",
      "year" : "2017",
      "commitsCount" : 12,
      "contributors" : [ "yiw@uber.com", "pavel@uber.com", "tuomas@artman.fi", "kovpas@gmail.com", "tuomas@uber.com" ]
    }, {
      "extension" : "pbxproj",
      "year" : "2021",
      "commitsCount" : 1,
      "contributors" : [ "pavlo.davydiuk@miquido.com" ]
    }, {
      "extension" : "form",
      "year" : "2022",
      "commitsCount" : 1,
      "contributors" : [ "idanakav@uber.com" ]
    }, {
      "extension" : "",
      "year" : "2021",
      "commitsCount" : 1,
      "contributors" : [ "pavlo.davydiuk@miquido.com" ]
    }, {
      "extension" : "",
      "year" : "2020",
      "commitsCount" : 2,
      "contributors" : [ "imairi@gmail.com", "sungwoon.park92@gmail.com" ]
    }, {
      "extension" : "form",
      "year" : "2023",
      "commitsCount" : 1,
      "contributors" : [ "idanakav@uber.com" ]
    }, {
      "extension" : "java",
      "year" : "2023",
      "commitsCount" : 8,
      "contributors" : [ "fran.aguilera@uber.com", "idanakav@uber.com", "82111345+sergeysmykovskyi@users.noreply.github.com", "tys@uber.com", "sergey.smykovskyi@uber.com" ]
    }, {
      "extension" : "",
      "year" : "2023",
      "commitsCount" : 2,
      "contributors" : [ "ebubekirssezer@gmail.com", "rudro@uber.com" ]
    }, {
      "extension" : "java",
      "year" : "2022",
      "commitsCount" : 6,
      "contributors" : [ "idanakav@gmail.com", "jbarr@uber.com", "idanakav@uber.com", "82111345+sergeysmykovskyi@users.noreply.github.com", "tys@uber.com" ]
    }, {
      "extension" : "md",
      "year" : "2022",
      "commitsCount" : 14,
      "contributors" : [ "jbarr@uber.com", "tys@uber.com" ]
    }, {
      "extension" : "md",
      "year" : "2021",
      "commitsCount" : 18,
      "contributors" : [ "alejandro.s1993@gmail.com", "59746256+alexdtorres@users.noreply.github.com", "jbarr21@users.noreply.github.com", "jbarr@uber.com", "52428902+oliviernotteghem@users.noreply.github.com" ]
    }, {
      "extension" : "md",
      "year" : "2023",
      "commitsCount" : 23,
      "contributors" : [ "fran.aguilera@uber.com", "fran.aguilera12@gmail.com", "jbarr@uber.com", "110308072+solace-studios@users.noreply.github.com", "solacestudios@icloud.com", "tys@uber.com", "psteiger@gmail.com" ]
    }, {
      "extension" : "yml",
      "year" : "2022",
      "commitsCount" : 4,
      "contributors" : [ "jbarr21@users.noreply.github.com", "tys@uber.com" ]
    }, {
      "extension" : "yml",
      "year" : "2021",
      "commitsCount" : 8,
      "contributors" : [ "alejandro.s1993@gmail.com", "jbarr21@users.noreply.github.com" ]
    }, {
      "extension" : "yml",
      "year" : "2020",
      "commitsCount" : 1,
      "contributors" : [ "pomozoff@mail.ru" ]
    }, {
      "extension" : "jar",
      "year" : "2017",
      "commitsCount" : 6,
      "contributors" : [ "gergely.orosz@gmail.com", "attwell@uber.com", "tuomas@uber.com", "gergely@uber.com" ]
    }, {
      "extension" : "form",
      "year" : "2017",
      "commitsCount" : 3,
      "contributors" : [ "attwell@uber.com" ]
    }, {
      "extension" : "form",
      "year" : "2018",
      "commitsCount" : 2,
      "contributors" : [ "rendecano@gmail.com" ]
    }, {
      "extension" : "m",
      "year" : "2017",
      "commitsCount" : 1,
      "contributors" : [ "pavel@uber.com" ]
    }, {
      "extension" : "xml",
      "year" : "2018",
      "commitsCount" : 2,
      "contributors" : [ "rendecano@gmail.com" ]
    }, {
      "extension" : "xml",
      "year" : "2019",
      "commitsCount" : 2,
      "contributors" : [ "13363349+uoooo@users.noreply.github.com", "tys@uber.com" ]
    }, {
      "extension" : "xml",
      "year" : "2017",
      "commitsCount" : 36,
      "contributors" : [ "tuomas@artman.fi", "gergely.orosz@gmail.com", "yuan.ethan.lu@gmail.com", "attwell@uber.com", "tuomas@uber.com", "yuanlu@uber.com", "gergely@uber.com" ]
    }, {
      "extension" : "gradle",
      "year" : "2023",
      "commitsCount" : 23,
      "contributors" : [ "jbarr21@users.noreply.github.com", "fran.aguilera@uber.com", "fran.aguilera12@gmail.com", "idanakav@uber.com", "82111345+sergeysmykovskyi@users.noreply.github.com", "tys@uber.com", "psteiger@gmail.com", "106627781+davissuber@users.noreply.github.com", "sergey.smykovskyi@uber.com" ]
    }, {
      "extension" : "txt",
      "year" : "2017",
      "commitsCount" : 2,
      "contributors" : [ "attwell@uber.com", "tuomas@uber.com" ]
    }, {
      "extension" : "gradle",
      "year" : "2021",
      "commitsCount" : 53,
      "contributors" : [ "jbarr21@users.noreply.github.com", "jbarr@uber.com", "rafaeldtoledo@gmail.com", "52428902+oliviernotteghem@users.noreply.github.com" ]
    }, {
      "extension" : "gradle",
      "year" : "2022",
      "commitsCount" : 25,
      "contributors" : [ "idanakav@gmail.com", "52428902+oliviernotteghem@users.noreply.github.com", "idanakav@uber.com", "82111345+sergeysmykovskyi@users.noreply.github.com", "tys@uber.com" ]
    }, {
      "extension" : "kts",
      "year" : "2023",
      "commitsCount" : 5,
      "contributors" : [ "jbarr21@users.noreply.github.com", "psteiger@gmail.com" ]
    }, {
      "extension" : "xcconfig",
      "year" : "2017",
      "commitsCount" : 1,
      "contributors" : [ "pavel@uber.com" ]
    }, {
      "extension" : "swift",
      "year" : "2019",
      "commitsCount" : 4,
      "contributors" : [ "duc.fet01@gmail.com", "neakor@gmail.com", "jmkauf@gmail.com", "daimathieu@gmail.com" ]
    }, {
      "extension" : "swift",
      "year" : "2018",
      "commitsCount" : 6,
      "contributors" : [ "yiw@uber.com", "eric.r.drew@gmail.com", "neakor@gmail.com", "zpnotes@icloud.com", "zmicier.zaleznicenka@gmail.com" ]
    }, {
      "extension" : "swift",
      "year" : "2017",
      "commitsCount" : 48,
      "contributors" : [ "alex@iminichrispy.com", "yiw@uber.com", "naokiishikawa0808@gmail.com", "pavel@uber.com", "tuomas@artman.fi", "kovpas@gmail.com", "oronbz@gmail.com", "gergely@uber.com", "neakor@gmail.com", "gergely.orosz@gmail.com", "lucas.nelaupe@gmail.com", "tuomas@uber.com", "cameron@sbarow.com" ]
    }, {
      "extension" : "template",
      "year" : "2019",
      "commitsCount" : 1,
      "contributors" : [ "feglusha@gmail.com" ]
    }, {
      "extension" : "properties",
      "year" : "2019",
      "commitsCount" : 5,
      "contributors" : [ "leland@uber.com", "feglusha@gmail.com", "13363349+uoooo@users.noreply.github.com", "tys@uber.com" ]
    }, {
      "extension" : "properties",
      "year" : "2018",
      "commitsCount" : 1,
      "contributors" : [ "jorge.coca@bmwna.com" ]
    }, {
      "extension" : "properties",
      "year" : "2017",
      "commitsCount" : 13,
      "contributors" : [ "msridhar@uber.com", "attwell@uber.com", "tuomas@uber.com" ]
    }, {
      "extension" : "xcscheme",
      "year" : "2018",
      "commitsCount" : 1,
      "contributors" : [ "eric.r.drew@gmail.com" ]
    }, {
      "extension" : "xcscheme",
      "year" : "2017",
      "commitsCount" : 2,
      "contributors" : [ "tuomas@artman.fi", "cameron@sbarow.com" ]
    }, {
      "extension" : "gradle",
      "year" : "2018",
      "commitsCount" : 5,
      "contributors" : [ "msridhar@uber.com" ]
    }, {
      "extension" : "gradle",
      "year" : "2019",
      "commitsCount" : 7,
      "contributors" : [ "leland@uber.com", "feglusha@gmail.com", "shaishgandhi@gmail.com", "13363349+uoooo@users.noreply.github.com", "tys@uber.com" ]
    }, {
      "extension" : "template",
      "year" : "2021",
      "commitsCount" : 1,
      "contributors" : [ "jbarr21@users.noreply.github.com" ]
    }, {
      "extension" : "gradle",
      "year" : "2017",
      "commitsCount" : 56,
      "contributors" : [ "tuomas@artman.fi", "yuan.ethan.lu@gmail.com", "attwell@uber.com", "tuomas@uber.com", "yuanlu@uber.com", "lukaciko@users.noreply.github.com" ]
    }, {
      "extension" : "json",
      "year" : "2021",
      "commitsCount" : 1,
      "contributors" : [ "52428902+oliviernotteghem@users.noreply.github.com" ]
    }, {
      "extension" : "template",
      "year" : "2018",
      "commitsCount" : 3,
      "contributors" : [ "rendecano@gmail.com" ]
    }, {
      "extension" : "json",
      "year" : "2017",
      "commitsCount" : 1,
      "contributors" : [ "pavel@uber.com" ]
    }, {
      "extension" : "template",
      "year" : "2017",
      "commitsCount" : 5,
      "contributors" : [ "attwell@uber.com" ]
    }, {
      "extension" : "pch",
      "year" : "2017",
      "commitsCount" : 1,
      "contributors" : [ "pavel@uber.com" ]
    }, {
      "extension" : "properties",
      "year" : "2023",
      "commitsCount" : 26,
      "contributors" : [ "jbarr@uber.com", "tys@uber.com", "psteiger@gmail.com" ]
    }, {
      "extension" : "properties",
      "year" : "2022",
      "commitsCount" : 16,
      "contributors" : [ "jbarr@uber.com", "tys@uber.com" ]
    }, {
      "extension" : "properties",
      "year" : "2021",
      "commitsCount" : 31,
      "contributors" : [ "jbarr21@users.noreply.github.com", "jbarr@uber.com", "52428902+oliviernotteghem@users.noreply.github.com" ]
    } ]
  },
  "unitsAnalysisResults" : {
    "totalNumberOfUnits" : 1108,
    "linesOfCodeInUnits" : 6931,
    "unitSizeRiskDistribution" : {
      "key" : "",
      "lowRiskThreshold" : 10,
      "mediumRiskThreshold" : 20,
      "highRiskThreshold" : 50,
      "veryHighRiskThreshold" : 100,
      "negligibleRiskValue" : 3912,
      "lowRiskValue" : 1799,
      "mediumRiskValue" : 1065,
      "highRiskValue" : 155,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 128,
      "negligibleRiskCount" : 942,
      "mediumRiskCount" : 36,
      "highRiskCount" : 2,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-10",
      "lowRiskLabel" : "11-20",
      "mediumRiskLabel" : "21-50",
      "highRiskLabel" : "51-100",
      "veryHighRiskLabel" : "101+",
      "negligibleRiskPercentage" : 56.442071851103734,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 2.236329533977781,
      "mediumRiskPercentage" : 15.365748088298947,
      "lowRiskPercentage" : 25.955850526619535,
      "totalValue" : 6931,
      "totalCount" : 1108
    },
    "conditionalComplexityRiskDistribution" : {
      "key" : "",
      "lowRiskThreshold" : 5,
      "mediumRiskThreshold" : 10,
      "highRiskThreshold" : 25,
      "veryHighRiskThreshold" : 50,
      "negligibleRiskValue" : 6187,
      "lowRiskValue" : 601,
      "mediumRiskValue" : 143,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 23,
      "negligibleRiskCount" : 1080,
      "mediumRiskCount" : 5,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-5",
      "lowRiskLabel" : "6-10",
      "mediumRiskLabel" : "11-25",
      "highRiskLabel" : "26-50",
      "veryHighRiskLabel" : "51+",
      "negligibleRiskPercentage" : 89.26561823690665,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 2.0631943442504688,
      "lowRiskPercentage" : 8.67118741884288,
      "totalValue" : 6931,
      "totalCount" : 1108
    },
    "unitSizeRiskDistributionPerExtension" : [ {
      "key" : "swift",
      "lowRiskThreshold" : 10,
      "mediumRiskThreshold" : 20,
      "highRiskThreshold" : 50,
      "veryHighRiskThreshold" : 100,
      "negligibleRiskValue" : 1290,
      "lowRiskValue" : 483,
      "mediumRiskValue" : 153,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 33,
      "negligibleRiskCount" : 312,
      "mediumRiskCount" : 5,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-10",
      "lowRiskLabel" : "11-20",
      "mediumRiskLabel" : "21-50",
      "highRiskLabel" : "51-100",
      "veryHighRiskLabel" : "101+",
      "negligibleRiskPercentage" : 66.97819314641744,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 7.94392523364486,
      "lowRiskPercentage" : 25.077881619937695,
      "totalValue" : 1926,
      "totalCount" : 350
    }, {
      "key" : "java",
      "lowRiskThreshold" : 10,
      "mediumRiskThreshold" : 20,
      "highRiskThreshold" : 50,
      "veryHighRiskThreshold" : 100,
      "negligibleRiskValue" : 1411,
      "lowRiskValue" : 711,
      "mediumRiskValue" : 589,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 52,
      "negligibleRiskCount" : 342,
      "mediumRiskCount" : 21,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-10",
      "lowRiskLabel" : "11-20",
      "mediumRiskLabel" : "21-50",
      "highRiskLabel" : "51-100",
      "veryHighRiskLabel" : "101+",
      "negligibleRiskPercentage" : 52.047215049797124,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 21.726300258207303,
      "lowRiskPercentage" : 26.226484691995573,
      "totalValue" : 2711,
      "totalCount" : 415
    }, {
      "key" : "kt",
      "lowRiskThreshold" : 10,
      "mediumRiskThreshold" : 20,
      "highRiskThreshold" : 50,
      "veryHighRiskThreshold" : 100,
      "negligibleRiskValue" : 1186,
      "lowRiskValue" : 587,
      "mediumRiskValue" : 323,
      "highRiskValue" : 76,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 42,
      "negligibleRiskCount" : 282,
      "mediumRiskCount" : 10,
      "highRiskCount" : 1,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-10",
      "lowRiskLabel" : "11-20",
      "mediumRiskLabel" : "21-50",
      "highRiskLabel" : "51-100",
      "veryHighRiskLabel" : "101+",
      "negligibleRiskPercentage" : 54.60405156537753,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 3.4990791896869244,
      "mediumRiskPercentage" : 14.871086556169429,
      "lowRiskPercentage" : 27.025782688766114,
      "totalValue" : 2172,
      "totalCount" : 335
    }, {
      "key" : "js",
      "lowRiskThreshold" : 10,
      "mediumRiskThreshold" : 20,
      "highRiskThreshold" : 50,
      "veryHighRiskThreshold" : 100,
      "negligibleRiskValue" : 25,
      "lowRiskValue" : 18,
      "mediumRiskValue" : 0,
      "highRiskValue" : 79,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 1,
      "negligibleRiskCount" : 6,
      "mediumRiskCount" : 0,
      "highRiskCount" : 1,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-10",
      "lowRiskLabel" : "11-20",
      "mediumRiskLabel" : "21-50",
      "highRiskLabel" : "51-100",
      "veryHighRiskLabel" : "101+",
      "negligibleRiskPercentage" : 20.491803278688526,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 64.75409836065573,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 14.754098360655737,
      "totalValue" : 122,
      "totalCount" : 8
    } ],
    "unitSizeRiskDistributionPerComponent" : [ [ {
      "key" : "ios",
      "lowRiskThreshold" : 10,
      "mediumRiskThreshold" : 20,
      "highRiskThreshold" : 50,
      "veryHighRiskThreshold" : 100,
      "negligibleRiskValue" : 1290,
      "lowRiskValue" : 483,
      "mediumRiskValue" : 153,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 33,
      "negligibleRiskCount" : 312,
      "mediumRiskCount" : 5,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-10",
      "lowRiskLabel" : "11-20",
      "mediumRiskLabel" : "21-50",
      "highRiskLabel" : "51-100",
      "veryHighRiskLabel" : "101+",
      "negligibleRiskPercentage" : 66.97819314641744,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 7.94392523364486,
      "lowRiskPercentage" : 25.077881619937695,
      "totalValue" : 1926,
      "totalCount" : 350
    }, {
      "key" : "android",
      "lowRiskThreshold" : 10,
      "mediumRiskThreshold" : 20,
      "highRiskThreshold" : 50,
      "veryHighRiskThreshold" : 100,
      "negligibleRiskValue" : 2622,
      "lowRiskValue" : 1316,
      "mediumRiskValue" : 912,
      "highRiskValue" : 155,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 95,
      "negligibleRiskCount" : 630,
      "mediumRiskCount" : 31,
      "highRiskCount" : 2,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-10",
      "lowRiskLabel" : "11-20",
      "mediumRiskLabel" : "21-50",
      "highRiskLabel" : "51-100",
      "veryHighRiskLabel" : "101+",
      "negligibleRiskPercentage" : 52.387612387612386,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 3.096903096903097,
      "mediumRiskPercentage" : 18.221778221778223,
      "lowRiskPercentage" : 26.293706293706293,
      "totalValue" : 5005,
      "totalCount" : 758
    } ] ],
    "longestUnits" : [ {
      "shortName" : "renderTree()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-flipper-plugin/desktop/src/TreeChart.js",
        "extension" : "js",
        "linesOfCode" : 105,
        "unitsCount" : 6,
        "unitsMcCabeIndexSum" : 19,
        "linesOfCodeInUnits" : 97
      },
      "startLine" : 29,
      "endLine" : 125,
      "linesOfCode" : 79,
      "mcCabeIndex" : 12,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun buildChildren()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/ui/RibHierarchyTreeStructure.kt",
        "extension" : "kt",
        "linesOfCode" : 89,
        "unitsCount" : 1,
        "unitsMcCabeIndexSum" : 1,
        "linesOfCodeInUnits" : 76
      },
      "startLine" : 33,
      "endLine" : 108,
      "linesOfCode" : 76,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public fun popState()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/RouterNavigator.kt",
        "extension" : "kt",
        "linesOfCode" : 85,
        "unitsCount" : 8,
        "unitsMcCabeIndexSum" : 8,
        "linesOfCodeInUnits" : 113
      },
      "startLine" : 75,
      "endLine" : 247,
      "linesOfCode" : 48,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "func test_nestedStepsDoNotRepeat()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "ios/RIBsTests/Workflow/WorkflowTests.swift",
        "extension" : "swift",
        "linesOfCode" : 162,
        "unitsCount" : 5,
        "unitsMcCabeIndexSum" : 5,
        "linesOfCodeInUnits" : 140
      },
      "startLine" : 23,
      "endLine" : 78,
      "linesOfCode" : 46,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun  execute()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/io/LogcatRequestProcessor.kt",
        "extension" : "kt",
        "linesOfCode" : 113,
        "unitsCount" : 5,
        "unitsMcCabeIndexSum" : 15,
        "linesOfCodeInUnits" : 69
      },
      "startLine" : 54,
      "endLine" : 102,
      "linesOfCode" : 41,
      "mcCabeIndex" : 7,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public Generator()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/Generator.java",
        "extension" : "java",
        "linesOfCode" : 119,
        "unitsCount" : 6,
        "unitsMcCabeIndexSum" : 14,
        "linesOfCodeInUnits" : 60
      },
      "startLine" : 63,
      "endLine" : 108,
      "linesOfCode" : 39,
      "mcCabeIndex" : 8,
      "numberOfParameters" : 4,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "protected void generate()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/GenerateAction.java",
        "extension" : "java",
        "linesOfCode" : 146,
        "unitsCount" : 7,
        "unitsMcCabeIndexSum" : 22,
        "linesOfCodeInUnits" : 107
      },
      "startLine" : 109,
      "endLine" : 151,
      "linesOfCode" : 39,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun popState()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/StackRouterNavigator.kt",
        "extension" : "kt",
        "linesOfCode" : 341,
        "unitsCount" : 6,
        "unitsMcCabeIndexSum" : 11,
        "linesOfCodeInUnits" : 66
      },
      "startLine" : 42,
      "endLine" : 82,
      "linesOfCode" : 39,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "protected void didBecomeActive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 83,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 8,
        "linesOfCodeInUnits" : 46
      },
      "startLine" : 49,
      "endLine" : 88,
      "linesOfCode" : 39,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "protected void didBecomeActive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 8,
        "linesOfCodeInUnits" : 46
      },
      "startLine" : 48,
      "endLine" : 87,
      "linesOfCode" : 39,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun onSelectedRibChanged()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyPanel.kt",
        "extension" : "kt",
        "linesOfCode" : 143,
        "unitsCount" : 5,
        "unitsMcCabeIndexSum" : 12,
        "linesOfCodeInUnits" : 54
      },
      "startLine" : 142,
      "endLine" : 180,
      "linesOfCode" : 36,
      "mcCabeIndex" : 7,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "protected void didBecomeActive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 8,
        "linesOfCodeInUnits" : 43
      },
      "startLine" : 41,
      "endLine" : 77,
      "linesOfCode" : 36,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "protected void didBecomeActive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 8,
        "linesOfCodeInUnits" : 43
      },
      "startLine" : 41,
      "endLine" : 77,
      "linesOfCode" : 36,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public open fun attachChild()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Router.kt",
        "extension" : "kt",
        "linesOfCode" : 193,
        "unitsCount" : 15,
        "unitsMcCabeIndexSum" : 26,
        "linesOfCodeInUnits" : 130
      },
      "startLine" : 107,
      "endLine" : 142,
      "linesOfCode" : 34,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "func test_didStart_onceOnly_boundToInteractor()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "ios/RIBsTests/Worker/WorkerTests.swift",
        "extension" : "swift",
        "linesOfCode" : 75,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 2,
        "linesOfCodeInUnits" : 49
      },
      "startLine" : 40,
      "endLine" : 85,
      "linesOfCode" : 32,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public void onNext()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 124,
      "endLine" : 154,
      "linesOfCode" : 31,
      "mcCabeIndex" : 5,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private boolean setOverlayVisibility()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 328,
      "endLine" : 359,
      "linesOfCode" : 31,
      "mcCabeIndex" : 8,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun onConnect()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-flipper-plugin/src/main/kotlin/com/uber/rib/flipper/RibTreePlugin.kt",
        "extension" : "kt",
        "linesOfCode" : 109,
        "unitsCount" : 4,
        "unitsMcCabeIndexSum" : 6,
        "linesOfCodeInUnits" : 43
      },
      "startLine" : 74,
      "endLine" : 104,
      "linesOfCode" : 31,
      "mcCabeIndex" : 3,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public open fun detachChild()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Router.kt",
        "extension" : "kt",
        "linesOfCode" : 193,
        "unitsCount" : 15,
        "unitsMcCabeIndexSum" : 26,
        "linesOfCodeInUnits" : 130
      },
      "startLine" : 155,
      "endLine" : 186,
      "linesOfCode" : 30,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "func test_workflowDidFork()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "ios/RIBsTests/Workflow/WorkflowTests.swift",
        "extension" : "swift",
        "linesOfCode" : 162,
        "unitsCount" : 5,
        "unitsMcCabeIndexSum" : 5,
        "linesOfCodeInUnits" : 140
      },
      "startLine" : 127,
      "endLine" : 156,
      "linesOfCode" : 28,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "func test_fork_verifySingleInvocationAtRoot()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "ios/RIBsTests/Workflow/WorkflowTests.swift",
        "extension" : "swift",
        "linesOfCode" : 162,
        "unitsCount" : 5,
        "unitsMcCabeIndexSum" : 5,
        "linesOfCodeInUnits" : 140
      },
      "startLine" : 158,
      "endLine" : 188,
      "linesOfCode" : 25,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "protected void didBecomeActive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameInteractor.java",
        "extension" : "java",
        "linesOfCode" : 63,
        "unitsCount" : 1,
        "unitsMcCabeIndexSum" : 1,
        "linesOfCodeInUnits" : 25
      },
      "startLine" : 51,
      "endLine" : 77,
      "linesOfCode" : 25,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "static List gameProviders()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 149,
        "unitsCount" : 6,
        "unitsMcCabeIndexSum" : 6,
        "linesOfCodeInUnits" : 55
      },
      "startLine" : 129,
      "endLine" : 156,
      "linesOfCode" : 25,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "protected void didBecomeActive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameInteractor.java",
        "extension" : "java",
        "linesOfCode" : 59,
        "unitsCount" : 1,
        "unitsMcCabeIndexSum" : 1,
        "linesOfCodeInUnits" : 25
      },
      "startLine" : 48,
      "endLine" : 74,
      "linesOfCode" : 25,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private synchronized void buildTreeRecursive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 218,
      "endLine" : 241,
      "linesOfCode" : 24,
      "mcCabeIndex" : 10,
      "numberOfParameters" : 3,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private synchronized RibHierarchyPayload buildRibHierarchyPayload()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 166,
      "endLine" : 188,
      "linesOfCode" : 23,
      "mcCabeIndex" : 8,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "protected void onFinishInflate()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "unitsCount" : 10,
        "unitsMcCabeIndexSum" : 12,
        "linesOfCodeInUnits" : 70
      },
      "startLine" : 51,
      "endLine" : 73,
      "linesOfCode" : 23,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "protected void onFinishInflate()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "unitsCount" : 10,
        "unitsMcCabeIndexSum" : 12,
        "linesOfCodeInUnits" : 70
      },
      "startLine" : 51,
      "endLine" : 73,
      "linesOfCode" : 23,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "protected void onFinishInflate()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "unitsCount" : 10,
        "unitsMcCabeIndexSum" : 12,
        "linesOfCodeInUnits" : 70
      },
      "startLine" : 51,
      "endLine" : 73,
      "linesOfCode" : 23,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "protected void onFinishInflate()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "unitsCount" : 10,
        "unitsMcCabeIndexSum" : 12,
        "linesOfCodeInUnits" : 70
      },
      "startLine" : 51,
      "endLine" : 73,
      "linesOfCode" : 23,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "func test_workflowReceivesError()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "ios/RIBsTests/Workflow/WorkflowTests.swift",
        "extension" : "swift",
        "linesOfCode" : 162,
        "unitsCount" : 5,
        "unitsMcCabeIndexSum" : 5,
        "linesOfCodeInUnits" : 140
      },
      "startLine" : 80,
      "endLine" : 103,
      "linesOfCode" : 22,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public void handle()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 97,
      "endLine" : 118,
      "linesOfCode" : 22,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun updateText()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/ui/RibHierarchyRootNodeDescriptor.kt",
        "extension" : "kt",
        "linesOfCode" : 66,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 6,
        "linesOfCodeInUnits" : 38
      },
      "startLine" : 56,
      "endLine" : 79,
      "linesOfCode" : 22,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private synchronized void removeChild()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 304,
      "endLine" : 326,
      "linesOfCode" : 21,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private void setTouchOverlayVisibility()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 430,
      "endLine" : 450,
      "linesOfCode" : 21,
      "mcCabeIndex" : 8,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun configureTree()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibViewBrowser.kt",
        "extension" : "kt",
        "linesOfCode" : 136,
        "unitsCount" : 15,
        "unitsMcCabeIndexSum" : 24,
        "linesOfCodeInUnits" : 84
      },
      "startLine" : 140,
      "endLine" : 173,
      "linesOfCode" : 21,
      "mcCabeIndex" : 3,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ {
        "shortName" : "override fun focusLost()",
        "longName" : "",
        "sourceFile" : {
          "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibViewBrowser.kt",
          "extension" : "kt",
          "linesOfCode" : 136,
          "unitsCount" : 15,
          "unitsMcCabeIndexSum" : 24,
          "linesOfCodeInUnits" : 84
        },
        "startLine" : 145,
        "endLine" : 147,
        "linesOfCode" : 3,
        "mcCabeIndex" : 1,
        "numberOfParameters" : 1,
        "numberOfLiterals" : 0,
        "numberOfStatements" : 0,
        "numberOfExpressions" : 0,
        "children" : [ ]
      }, {
        "shortName" : "override fun focusGained()",
        "longName" : "",
        "sourceFile" : {
          "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibViewBrowser.kt",
          "extension" : "kt",
          "linesOfCode" : 136,
          "unitsCount" : 15,
          "unitsMcCabeIndexSum" : 24,
          "linesOfCodeInUnits" : 84
        },
        "startLine" : 149,
        "endLine" : 152,
        "linesOfCode" : 4,
        "mcCabeIndex" : 1,
        "numberOfParameters" : 1,
        "numberOfLiterals" : 0,
        "numberOfStatements" : 0,
        "numberOfExpressions" : 0,
        "children" : [ ]
      } ]
    }, {
      "shortName" : "public void onReceive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/utils/intellij-broadcast-core/src/main/java/com/uber/debug/broadcast/core/DebugBroadcastReceiver.java",
        "extension" : "java",
        "linesOfCode" : 63,
        "unitsCount" : 3,
        "unitsMcCabeIndexSum" : 14,
        "linesOfCodeInUnits" : 45
      },
      "startLine" : 50,
      "endLine" : 71,
      "linesOfCode" : 21,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public open fun dispatchDetach()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Interactor.kt",
        "extension" : "kt",
        "linesOfCode" : 145,
        "unitsCount" : 7,
        "unitsMcCabeIndexSum" : 10,
        "linesOfCodeInUnits" : 61
      },
      "startLine" : 133,
      "endLine" : 156,
      "linesOfCode" : 21,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "func announce()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "ios/tutorials/tutorial4/TicTacToe/TicTacToe/TicTacToeViewController.swift",
        "extension" : "swift",
        "linesOfCode" : 98,
        "unitsCount" : 7,
        "unitsMcCabeIndexSum" : 10,
        "linesOfCodeInUnits" : 44
      },
      "startLine" : 55,
      "endLine" : 74,
      "linesOfCode" : 20,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "func announce()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
        "extension" : "swift",
        "linesOfCode" : 98,
        "unitsCount" : 7,
        "unitsMcCabeIndexSum" : 10,
        "linesOfCodeInUnits" : 44
      },
      "startLine" : 55,
      "endLine" : 74,
      "linesOfCode" : 20,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "func announce()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
        "extension" : "swift",
        "linesOfCode" : 98,
        "unitsCount" : 7,
        "unitsMcCabeIndexSum" : 10,
        "linesOfCodeInUnits" : 44
      },
      "startLine" : 55,
      "endLine" : 74,
      "linesOfCode" : 20,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "func test_load_verifyLifecycleObservable()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "ios/RIBsTests/RouterTests.swift",
        "extension" : "swift",
        "linesOfCode" : 35,
        "unitsCount" : 1,
        "unitsMcCabeIndexSum" : 1,
        "linesOfCodeInUnits" : 20
      },
      "startLine" : 42,
      "endLine" : 66,
      "linesOfCode" : 20,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun generate()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/libraries/rib-compiler-test/src/main/kotlin/com/uber/rib/compiler/InteractorTestGenerator.kt",
        "extension" : "kt",
        "linesOfCode" : 69,
        "unitsCount" : 1,
        "unitsMcCabeIndexSum" : 2,
        "linesOfCodeInUnits" : 20
      },
      "startLine" : 41,
      "endLine" : 60,
      "linesOfCode" : 20,
      "mcCabeIndex" : 2,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public open fun dispatchAttach()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/Interactor.kt",
        "extension" : "kt",
        "linesOfCode" : 145,
        "unitsCount" : 7,
        "unitsMcCabeIndexSum" : 10,
        "linesOfCodeInUnits" : 61
      },
      "startLine" : 110,
      "endLine" : 131,
      "linesOfCode" : 20,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public Observable startGameRequest()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
        "extension" : "java",
        "linesOfCode" : 74,
        "unitsCount" : 7,
        "unitsMcCabeIndexSum" : 8,
        "linesOfCodeInUnits" : 46
      },
      "startLine" : 80,
      "endLine" : 99,
      "linesOfCode" : 20,
      "mcCabeIndex" : 2,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "func test_workflowDidComplete()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "ios/RIBsTests/Workflow/WorkflowTests.swift",
        "extension" : "swift",
        "linesOfCode" : 162,
        "unitsCount" : 5,
        "unitsMcCabeIndexSum" : 5,
        "linesOfCodeInUnits" : 140
      },
      "startLine" : 105,
      "endLine" : 125,
      "linesOfCode" : 19,
      "mcCabeIndex" : 1,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private synchronized Activity getActivityRecursive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 377,
      "endLine" : 395,
      "linesOfCode" : 19,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private boolean isAvailable()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/GenerateAction.java",
        "extension" : "java",
        "linesOfCode" : 146,
        "unitsCount" : 7,
        "unitsMcCabeIndexSum" : 22,
        "linesOfCodeInUnits" : 107
      },
      "startLine" : 178,
      "endLine" : 199,
      "linesOfCode" : 19,
      "mcCabeIndex" : 7,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public Observable squareClicks()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "unitsCount" : 10,
        "unitsMcCabeIndexSum" : 12,
        "linesOfCodeInUnits" : 70
      },
      "startLine" : 76,
      "endLine" : 94,
      "linesOfCode" : 19,
      "mcCabeIndex" : 3,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public Observable squareClicks()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "unitsCount" : 10,
        "unitsMcCabeIndexSum" : 12,
        "linesOfCodeInUnits" : 70
      },
      "startLine" : 76,
      "endLine" : 94,
      "linesOfCode" : 19,
      "mcCabeIndex" : 3,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    } ],
    "conditionalComplexityRiskDistributionPerExtension" : [ {
      "key" : "swift",
      "lowRiskThreshold" : 5,
      "mediumRiskThreshold" : 10,
      "highRiskThreshold" : 25,
      "veryHighRiskThreshold" : 50,
      "negligibleRiskValue" : 1926,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 350,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-5",
      "lowRiskLabel" : "6-10",
      "mediumRiskLabel" : "11-25",
      "highRiskLabel" : "26-50",
      "veryHighRiskLabel" : "51+",
      "negligibleRiskPercentage" : 100.0,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 1926,
      "totalCount" : 350
    }, {
      "key" : "java",
      "lowRiskThreshold" : 5,
      "mediumRiskThreshold" : 10,
      "highRiskThreshold" : 25,
      "veryHighRiskThreshold" : 50,
      "negligibleRiskValue" : 2207,
      "lowRiskValue" : 440,
      "mediumRiskValue" : 64,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 17,
      "negligibleRiskCount" : 394,
      "mediumRiskCount" : 4,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-5",
      "lowRiskLabel" : "6-10",
      "mediumRiskLabel" : "11-25",
      "highRiskLabel" : "26-50",
      "veryHighRiskLabel" : "51+",
      "negligibleRiskPercentage" : 81.40907414238289,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 2.3607524898561416,
      "lowRiskPercentage" : 16.230173367760973,
      "totalValue" : 2711,
      "totalCount" : 415
    }, {
      "key" : "kt",
      "lowRiskThreshold" : 5,
      "mediumRiskThreshold" : 10,
      "highRiskThreshold" : 25,
      "veryHighRiskThreshold" : 50,
      "negligibleRiskValue" : 2029,
      "lowRiskValue" : 143,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 5,
      "negligibleRiskCount" : 330,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-5",
      "lowRiskLabel" : "6-10",
      "mediumRiskLabel" : "11-25",
      "highRiskLabel" : "26-50",
      "veryHighRiskLabel" : "51+",
      "negligibleRiskPercentage" : 93.41620626151013,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 6.583793738489871,
      "totalValue" : 2172,
      "totalCount" : 335
    }, {
      "key" : "js",
      "lowRiskThreshold" : 5,
      "mediumRiskThreshold" : 10,
      "highRiskThreshold" : 25,
      "veryHighRiskThreshold" : 50,
      "negligibleRiskValue" : 25,
      "lowRiskValue" : 18,
      "mediumRiskValue" : 79,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 1,
      "negligibleRiskCount" : 6,
      "mediumRiskCount" : 1,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-5",
      "lowRiskLabel" : "6-10",
      "mediumRiskLabel" : "11-25",
      "highRiskLabel" : "26-50",
      "veryHighRiskLabel" : "51+",
      "negligibleRiskPercentage" : 20.491803278688526,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 64.75409836065573,
      "lowRiskPercentage" : 14.754098360655737,
      "totalValue" : 122,
      "totalCount" : 8
    } ],
    "conditionalComplexityRiskDistributionPerComponent" : [ [ {
      "key" : "ios",
      "lowRiskThreshold" : 5,
      "mediumRiskThreshold" : 10,
      "highRiskThreshold" : 25,
      "veryHighRiskThreshold" : 50,
      "negligibleRiskValue" : 1926,
      "lowRiskValue" : 0,
      "mediumRiskValue" : 0,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 0,
      "negligibleRiskCount" : 350,
      "mediumRiskCount" : 0,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-5",
      "lowRiskLabel" : "6-10",
      "mediumRiskLabel" : "11-25",
      "highRiskLabel" : "26-50",
      "veryHighRiskLabel" : "51+",
      "negligibleRiskPercentage" : 100.0,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 0.0,
      "lowRiskPercentage" : 0.0,
      "totalValue" : 1926,
      "totalCount" : 350
    }, {
      "key" : "android",
      "lowRiskThreshold" : 5,
      "mediumRiskThreshold" : 10,
      "highRiskThreshold" : 25,
      "veryHighRiskThreshold" : 50,
      "negligibleRiskValue" : 4261,
      "lowRiskValue" : 601,
      "mediumRiskValue" : 143,
      "highRiskValue" : 0,
      "veryHighRiskValue" : 0,
      "lowRiskCount" : 23,
      "negligibleRiskCount" : 730,
      "mediumRiskCount" : 5,
      "highRiskCount" : 0,
      "veryHighRiskCount" : 0,
      "negligibleRiskLabel" : "1-5",
      "lowRiskLabel" : "6-10",
      "mediumRiskLabel" : "11-25",
      "highRiskLabel" : "26-50",
      "veryHighRiskLabel" : "51+",
      "negligibleRiskPercentage" : 85.13486513486514,
      "veryHighRiskPercentage" : 0.0,
      "highRiskPercentage" : 0.0,
      "mediumRiskPercentage" : 2.857142857142857,
      "lowRiskPercentage" : 12.007992007992009,
      "totalValue" : 5005,
      "totalCount" : 758
    } ] ],
    "mostComplexUnits" : [ {
      "shortName" : "boolean hasWon()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 19,
        "linesOfCodeInUnits" : 26
      },
      "startLine" : 52,
      "endLine" : 67,
      "linesOfCode" : 16,
      "mcCabeIndex" : 14,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "boolean hasWon()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 19,
        "linesOfCodeInUnits" : 26
      },
      "startLine" : 52,
      "endLine" : 67,
      "linesOfCode" : 16,
      "mcCabeIndex" : 14,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "boolean hasWon()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 19,
        "linesOfCodeInUnits" : 26
      },
      "startLine" : 52,
      "endLine" : 67,
      "linesOfCode" : 16,
      "mcCabeIndex" : 14,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "boolean hasWon()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 19,
        "linesOfCodeInUnits" : 26
      },
      "startLine" : 52,
      "endLine" : 67,
      "linesOfCode" : 16,
      "mcCabeIndex" : 14,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "renderTree()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-flipper-plugin/desktop/src/TreeChart.js",
        "extension" : "js",
        "linesOfCode" : 105,
        "unitsCount" : 6,
        "unitsMcCabeIndexSum" : 19,
        "linesOfCodeInUnits" : 97
      },
      "startLine" : 29,
      "endLine" : 125,
      "linesOfCode" : 79,
      "mcCabeIndex" : 12,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private synchronized void buildTreeRecursive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 218,
      "endLine" : 241,
      "linesOfCode" : 24,
      "mcCabeIndex" : 10,
      "numberOfParameters" : 3,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private synchronized RibHierarchyPayload buildRibHierarchyPayload()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 166,
      "endLine" : 188,
      "linesOfCode" : 23,
      "mcCabeIndex" : 8,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private boolean setOverlayVisibility()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 328,
      "endLine" : 359,
      "linesOfCode" : 31,
      "mcCabeIndex" : 8,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private void setTouchOverlayVisibility()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 430,
      "endLine" : 450,
      "linesOfCode" : 21,
      "mcCabeIndex" : 8,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public Generator()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/generator/Generator.java",
        "extension" : "java",
        "linesOfCode" : 119,
        "unitsCount" : 6,
        "unitsMcCabeIndexSum" : 14,
        "linesOfCodeInUnits" : 60
      },
      "startLine" : 63,
      "endLine" : 108,
      "linesOfCode" : 39,
      "mcCabeIndex" : 8,
      "numberOfParameters" : 4,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private boolean isAvailable()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/GenerateAction.java",
        "extension" : "java",
        "linesOfCode" : 146,
        "unitsCount" : 7,
        "unitsMcCabeIndexSum" : 22,
        "linesOfCodeInUnits" : 107
      },
      "startLine" : 178,
      "endLine" : 199,
      "linesOfCode" : 19,
      "mcCabeIndex" : 7,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun getIcon()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/ui/RibViewNodeDescriptor.kt",
        "extension" : "kt",
        "linesOfCode" : 60,
        "unitsCount" : 4,
        "unitsMcCabeIndexSum" : 14,
        "linesOfCodeInUnits" : 38
      },
      "startLine" : 75,
      "endLine" : 88,
      "linesOfCode" : 14,
      "mcCabeIndex" : 7,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun onSelectedRibChanged()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyPanel.kt",
        "extension" : "kt",
        "linesOfCode" : 143,
        "unitsCount" : 5,
        "unitsMcCabeIndexSum" : 12,
        "linesOfCodeInUnits" : 54
      },
      "startLine" : 142,
      "endLine" : 180,
      "linesOfCode" : 36,
      "mcCabeIndex" : 7,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun  execute()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/io/LogcatRequestProcessor.kt",
        "extension" : "kt",
        "linesOfCode" : 113,
        "unitsCount" : 5,
        "unitsMcCabeIndexSum" : 15,
        "linesOfCodeInUnits" : 69
      },
      "startLine" : 54,
      "endLine" : 102,
      "linesOfCode" : 41,
      "mcCabeIndex" : 7,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "export function getHostForNodeRecursive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-flipper-plugin/desktop/src/utils.js",
        "extension" : "js",
        "linesOfCode" : 25,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 9,
        "linesOfCodeInUnits" : 25
      },
      "startLine" : 10,
      "endLine" : 27,
      "linesOfCode" : 18,
      "mcCabeIndex" : 7,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public void handle()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 97,
      "endLine" : 118,
      "linesOfCode" : 22,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private synchronized RibView buildRibViewRecursive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 190,
      "endLine" : 207,
      "linesOfCode" : 16,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 3,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private synchronized void addChild()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 282,
      "endLine" : 302,
      "linesOfCode" : 18,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private synchronized void removeChild()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 304,
      "endLine" : 326,
      "linesOfCode" : 21,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private synchronized Activity getActivityRecursive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 377,
      "endLine" : 395,
      "linesOfCode" : 19,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public fun notifySelectedViewChanged()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibViewBrowser.kt",
        "extension" : "kt",
        "linesOfCode" : 136,
        "unitsCount" : 15,
        "unitsMcCabeIndexSum" : 24,
        "linesOfCodeInUnits" : 84
      },
      "startLine" : 176,
      "endLine" : 188,
      "linesOfCode" : 13,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public void onReceive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/utils/intellij-broadcast-core/src/main/java/com/uber/debug/broadcast/core/DebugBroadcastReceiver.java",
        "extension" : "java",
        "linesOfCode" : 63,
        "unitsCount" : 3,
        "unitsMcCabeIndexSum" : 14,
        "linesOfCodeInUnits" : 45
      },
      "startLine" : 50,
      "endLine" : 71,
      "linesOfCode" : 21,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private boolean isAppInForeground()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/utils/intellij-broadcast-core/src/main/java/com/uber/debug/broadcast/core/DebugBroadcastReceiver.java",
        "extension" : "java",
        "linesOfCode" : 63,
        "unitsCount" : 3,
        "unitsMcCabeIndexSum" : 14,
        "linesOfCodeInUnits" : 45
      },
      "startLine" : 73,
      "endLine" : 88,
      "linesOfCode" : 16,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun popState()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/StackRouterNavigator.kt",
        "extension" : "kt",
        "linesOfCode" : 341,
        "unitsCount" : 6,
        "unitsMcCabeIndexSum" : 11,
        "linesOfCodeInUnits" : 66
      },
      "startLine" : 42,
      "endLine" : 82,
      "linesOfCode" : 39,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "protected void didBecomeActive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 8,
        "linesOfCodeInUnits" : 43
      },
      "startLine" : 41,
      "endLine" : 77,
      "linesOfCode" : 36,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "protected void didBecomeActive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 83,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 8,
        "linesOfCodeInUnits" : 46
      },
      "startLine" : 49,
      "endLine" : 88,
      "linesOfCode" : 39,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "protected void didBecomeActive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 8,
        "linesOfCodeInUnits" : 43
      },
      "startLine" : 41,
      "endLine" : 77,
      "linesOfCode" : 36,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "protected void didBecomeActive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 8,
        "linesOfCodeInUnits" : 46
      },
      "startLine" : 48,
      "endLine" : 87,
      "linesOfCode" : 39,
      "mcCabeIndex" : 6,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public void onNext()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 124,
      "endLine" : 154,
      "linesOfCode" : 31,
      "mcCabeIndex" : 5,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private static SourceFolder suitableTestSourceFolders()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/GenerateAction.java",
        "extension" : "java",
        "linesOfCode" : 146,
        "unitsCount" : 7,
        "unitsMcCabeIndexSum" : 22,
        "linesOfCodeInUnits" : 107
      },
      "startLine" : 58,
      "endLine" : 73,
      "linesOfCode" : 15,
      "mcCabeIndex" : 5,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun updateText()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/ui/RibViewNodeDescriptor.kt",
        "extension" : "kt",
        "linesOfCode" : 60,
        "unitsCount" : 4,
        "unitsMcCabeIndexSum" : 14,
        "linesOfCodeInUnits" : 38
      },
      "startLine" : 44,
      "endLine" : 63,
      "linesOfCode" : 18,
      "mcCabeIndex" : 5,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public fun findRibNodeRecursive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyUtils.kt",
        "extension" : "kt",
        "linesOfCode" : 119,
        "unitsCount" : 12,
        "unitsMcCabeIndexSum" : 27,
        "linesOfCodeInUnits" : 84
      },
      "startLine" : 109,
      "endLine" : 123,
      "linesOfCode" : 15,
      "mcCabeIndex" : 5,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public fun findRibViewRecursive()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyUtils.kt",
        "extension" : "kt",
        "linesOfCode" : 119,
        "unitsCount" : 12,
        "unitsMcCabeIndexSum" : 27,
        "linesOfCodeInUnits" : 84
      },
      "startLine" : 127,
      "endLine" : 141,
      "linesOfCode" : 15,
      "mcCabeIndex" : 5,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun onBackPressed()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/libraries/rib-android/src/main/kotlin/com/uber/rib/core/RibActivity.kt",
        "extension" : "kt",
        "linesOfCode" : 192,
        "unitsCount" : 16,
        "unitsMcCabeIndexSum" : 21,
        "linesOfCodeInUnits" : 91
      },
      "startLine" : 179,
      "endLine" : 194,
      "linesOfCode" : 14,
      "mcCabeIndex" : 5,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "public open fun logBreadcrumb()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/libraries/rib-base/src/main/kotlin/com/uber/rib/core/RibRefWatcher.kt",
        "extension" : "kt",
        "linesOfCode" : 60,
        "unitsCount" : 11,
        "unitsMcCabeIndexSum" : 19,
        "linesOfCodeInUnits" : 48
      },
      "startLine" : 58,
      "endLine" : 66,
      "linesOfCode" : 9,
      "mcCabeIndex" : 5,
      "numberOfParameters" : 3,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "boolean isDraw()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 19,
        "linesOfCodeInUnits" : 26
      },
      "startLine" : 40,
      "endLine" : 49,
      "linesOfCode" : 10,
      "mcCabeIndex" : 5,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "boolean isDraw()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 19,
        "linesOfCodeInUnits" : 26
      },
      "startLine" : 40,
      "endLine" : 49,
      "linesOfCode" : 10,
      "mcCabeIndex" : 5,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "boolean isDraw()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 19,
        "linesOfCodeInUnits" : 26
      },
      "startLine" : 40,
      "endLine" : 49,
      "linesOfCode" : 10,
      "mcCabeIndex" : 5,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "boolean isDraw()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 19,
        "linesOfCodeInUnits" : 26
      },
      "startLine" : 40,
      "endLine" : 49,
      "linesOfCode" : 10,
      "mcCabeIndex" : 5,
      "numberOfParameters" : 0,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "func announce()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "ios/tutorials/tutorial4/TicTacToe/TicTacToe/TicTacToeViewController.swift",
        "extension" : "swift",
        "linesOfCode" : 98,
        "unitsCount" : 7,
        "unitsMcCabeIndexSum" : 10,
        "linesOfCodeInUnits" : 44
      },
      "startLine" : 55,
      "endLine" : 74,
      "linesOfCode" : 20,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "func announce()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
        "extension" : "swift",
        "linesOfCode" : 98,
        "unitsCount" : 7,
        "unitsMcCabeIndexSum" : 10,
        "linesOfCodeInUnits" : 44
      },
      "startLine" : 55,
      "endLine" : 74,
      "linesOfCode" : 20,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "func announce()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
        "extension" : "swift",
        "linesOfCode" : 98,
        "unitsCount" : 7,
        "unitsMcCabeIndexSum" : 10,
        "linesOfCodeInUnits" : 44
      },
      "startLine" : 55,
      "endLine" : 74,
      "linesOfCode" : 20,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "static boolean viewIncludesTarget()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyUtils.java",
        "extension" : "java",
        "linesOfCode" : 23,
        "unitsCount" : 3,
        "unitsMcCabeIndexSum" : 7,
        "linesOfCodeInUnits" : 18
      },
      "startLine" : 49,
      "endLine" : 58,
      "linesOfCode" : 10,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 3,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private Activity getActivity()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 362,
      "endLine" : 374,
      "linesOfCode" : 13,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "private static String getCurrentProcessName()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java",
        "extension" : "java",
        "linesOfCode" : 440,
        "unitsCount" : 33,
        "unitsMcCabeIndexSum" : 112,
        "linesOfCodeInUnits" : 358
      },
      "startLine" : 397,
      "endLine" : 409,
      "linesOfCode" : 13,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "protected void generate()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/GenerateAction.java",
        "extension" : "java",
        "linesOfCode" : 146,
        "unitsCount" : 7,
        "unitsMcCabeIndexSum" : 22,
        "linesOfCodeInUnits" : 107
      },
      "startLine" : 109,
      "endLine" : 151,
      "linesOfCode" : 39,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 2,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun updateText()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/ui/RibHierarchyRootNodeDescriptor.kt",
        "extension" : "kt",
        "linesOfCode" : 66,
        "unitsCount" : 2,
        "unitsMcCabeIndexSum" : 6,
        "linesOfCodeInUnits" : 38
      },
      "startLine" : 56,
      "endLine" : 79,
      "linesOfCode" : 22,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun updateText()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/ui/RibViewRootNodeDescriptor.kt",
        "extension" : "kt",
        "linesOfCode" : 30,
        "unitsCount" : 1,
        "unitsMcCabeIndexSum" : 4,
        "linesOfCodeInUnits" : 14
      },
      "startLine" : 42,
      "endLine" : 55,
      "linesOfCode" : 14,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun visit()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/ui/HierarchyBrowserBase.kt",
        "extension" : "kt",
        "linesOfCode" : 66,
        "unitsCount" : 8,
        "unitsMcCabeIndexSum" : 11,
        "linesOfCodeInUnits" : 46
      },
      "startLine" : 84,
      "endLine" : 95,
      "linesOfCode" : 12,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    }, {
      "shortName" : "override fun processNewLines()",
      "longName" : "",
      "sourceFile" : {
        "relativePath" : "android/tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/io/LogcatRequestProcessor.kt",
        "extension" : "kt",
        "linesOfCode" : 113,
        "unitsCount" : 5,
        "unitsMcCabeIndexSum" : 15,
        "linesOfCodeInUnits" : 69
      },
      "startLine" : 121,
      "endLine" : 135,
      "linesOfCode" : 15,
      "mcCabeIndex" : 4,
      "numberOfParameters" : 1,
      "numberOfLiterals" : 0,
      "numberOfStatements" : 0,
      "numberOfExpressions" : 0,
      "children" : [ ]
    } ]
  },
  "duplicationAnalysisResults" : {
    "overallDuplication" : {
      "key" : "system",
      "numberOfDuplicates" : 667,
      "cleanedLinesOfCode" : 13387,
      "duplicatedLinesOfCode" : 6305,
      "numberOfFilesWithDuplicates" : 240,
      "duplicationPercentage" : 47.09793082841563
    },
    "duplicationPerComponent" : [ [ {
      "key" : "android",
      "numberOfDuplicates" : 0,
      "cleanedLinesOfCode" : 8752,
      "duplicatedLinesOfCode" : 3113,
      "numberOfFilesWithDuplicates" : 0,
      "duplicationPercentage" : 35.569012797074954
    }, {
      "key" : "ios",
      "numberOfDuplicates" : 0,
      "cleanedLinesOfCode" : 4611,
      "duplicatedLinesOfCode" : 3192,
      "numberOfFilesWithDuplicates" : 0,
      "duplicationPercentage" : 69.22576447625244
    }, {
      "key" : "ROOT",
      "numberOfDuplicates" : 0,
      "cleanedLinesOfCode" : 24,
      "duplicatedLinesOfCode" : 0,
      "numberOfFilesWithDuplicates" : 0,
      "duplicationPercentage" : 0.0
    } ] ],
    "duplicationPerConcern" : [ ],
    "duplicationPerExtension" : [ {
      "key" : "java",
      "numberOfDuplicates" : 0,
      "cleanedLinesOfCode" : 3672,
      "duplicatedLinesOfCode" : 2237,
      "numberOfFilesWithDuplicates" : 0,
      "duplicationPercentage" : 60.92047930283224
    }, {
      "key" : "swift",
      "numberOfDuplicates" : 0,
      "cleanedLinesOfCode" : 4633,
      "duplicatedLinesOfCode" : 3192,
      "numberOfFilesWithDuplicates" : 0,
      "duplicationPercentage" : 68.89704295273042
    }, {
      "key" : "xml",
      "numberOfDuplicates" : 0,
      "cleanedLinesOfCode" : 816,
      "duplicatedLinesOfCode" : 725,
      "numberOfFilesWithDuplicates" : 0,
      "duplicationPercentage" : 88.84803921568627
    }, {
      "key" : "kt",
      "numberOfDuplicates" : 0,
      "cleanedLinesOfCode" : 3768,
      "duplicatedLinesOfCode" : 121,
      "numberOfFilesWithDuplicates" : 0,
      "duplicationPercentage" : 3.2112526539278132
    }, {
      "key" : "kts",
      "numberOfDuplicates" : 0,
      "cleanedLinesOfCode" : 250,
      "duplicatedLinesOfCode" : 30,
      "numberOfFilesWithDuplicates" : 0,
      "duplicationPercentage" : 12.0
    } ],
    "longestDuplicates" : [ {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 1,
        "endLine" : 109,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 99,
        "blockSize" : 99,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 1,
        "endLine" : 109,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 99,
        "blockSize" : 99,
        "percentage" : 100.0
      } ],
      "blockSize" : 99
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 1,
        "endLine" : 109,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 99,
        "blockSize" : 99,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 1,
        "endLine" : 109,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 99,
        "blockSize" : 99,
        "percentage" : 100.0
      } ],
      "blockSize" : 99
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 1,
        "endLine" : 109,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 99,
        "blockSize" : 99,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 1,
        "endLine" : 109,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 99,
        "blockSize" : 99,
        "percentage" : 100.0
      } ],
      "blockSize" : 99
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 1,
        "endLine" : 109,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 99,
        "blockSize" : 99,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 1,
        "endLine" : 109,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 99,
        "blockSize" : 99,
        "percentage" : 100.0
      } ],
      "blockSize" : 99
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 1,
        "endLine" : 109,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 99,
        "blockSize" : 99,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 1,
        "endLine" : 109,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 99,
        "blockSize" : 99,
        "percentage" : 100.0
      } ],
      "blockSize" : 99
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 1,
        "endLine" : 109,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 99,
        "blockSize" : 99,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 1,
        "endLine" : 109,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 99,
        "blockSize" : 99,
        "percentage" : 100.0
      } ],
      "blockSize" : 99
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 130,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 27
        },
        "sourceFileCleanedLinesOfCode" : 89,
        "startLine" : 20,
        "endLine" : 181,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 89,
        "blockSize" : 89,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 130,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 27
        },
        "sourceFileCleanedLinesOfCode" : 89,
        "startLine" : 20,
        "endLine" : 181,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 89,
        "blockSize" : 89,
        "percentage" : 100.0
      } ],
      "blockSize" : 89
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 7,
          "unitsMcCabeIndexSum" : 10,
          "linesOfCodeInUnits" : 44
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 21,
        "endLine" : 138,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 75,
        "blockSize" : 75,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 7,
          "unitsMcCabeIndexSum" : 10,
          "linesOfCodeInUnits" : 44
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 21,
        "endLine" : 138,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 75,
        "blockSize" : 75,
        "percentage" : 100.0
      } ],
      "blockSize" : 75
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 7,
          "unitsMcCabeIndexSum" : 10,
          "linesOfCodeInUnits" : 44
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 21,
        "endLine" : 138,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 75,
        "blockSize" : 75,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 7,
          "unitsMcCabeIndexSum" : 10,
          "linesOfCodeInUnits" : 44
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 21,
        "endLine" : 138,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 75,
        "blockSize" : 75,
        "percentage" : 100.0
      } ],
      "blockSize" : 75
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 7,
          "unitsMcCabeIndexSum" : 10,
          "linesOfCodeInUnits" : 44
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 21,
        "endLine" : 138,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 75,
        "blockSize" : 75,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 7,
          "unitsMcCabeIndexSum" : 10,
          "linesOfCodeInUnits" : 44
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 21,
        "endLine" : 138,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 75,
        "blockSize" : 75,
        "percentage" : 100.0
      } ],
      "blockSize" : 75
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 31,
        "endLine" : 122,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 69,
        "blockSize" : 69,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 31,
        "endLine" : 122,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 69,
        "blockSize" : 69,
        "percentage" : 100.0
      } ],
      "blockSize" : 69
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 31,
        "endLine" : 122,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 69,
        "blockSize" : 69,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 31,
        "endLine" : 122,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 69,
        "blockSize" : 69,
        "percentage" : 100.0
      } ],
      "blockSize" : 69
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 31,
        "endLine" : 122,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 69,
        "blockSize" : 69,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 31,
        "endLine" : 122,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 69,
        "blockSize" : 69,
        "percentage" : 100.0
      } ],
      "blockSize" : 69
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 31,
        "endLine" : 122,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 69,
        "blockSize" : 69,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 31,
        "endLine" : 122,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 69,
        "blockSize" : 69,
        "percentage" : 100.0
      } ],
      "blockSize" : 69
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 31,
        "endLine" : 122,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 69,
        "blockSize" : 69,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 31,
        "endLine" : 122,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 69,
        "blockSize" : 69,
        "percentage" : 100.0
      } ],
      "blockSize" : 69
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 31,
        "endLine" : 122,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 69,
        "blockSize" : 69,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 31,
        "endLine" : 122,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 69,
        "blockSize" : 69,
        "percentage" : 100.0
      } ],
      "blockSize" : 69
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/ScoreBoard/BasicScoreBoardViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 73,
          "unitsCount" : 1,
          "unitsMcCabeIndexSum" : 1,
          "linesOfCodeInUnits" : 3
        },
        "sourceFileCleanedLinesOfCode" : 58,
        "startLine" : 21,
        "endLine" : 112,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 58,
        "blockSize" : 58,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/ScoreBoard/BasicScoreBoardViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 73,
          "unitsCount" : 1,
          "unitsMcCabeIndexSum" : 1,
          "linesOfCodeInUnits" : 3
        },
        "sourceFileCleanedLinesOfCode" : 58,
        "startLine" : 21,
        "endLine" : 112,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 58,
        "blockSize" : 58,
        "percentage" : 100.0
      } ],
      "blockSize" : 58
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/RootBuilder.java",
          "extension" : "java",
          "linesOfCode" : 81,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 25
        },
        "sourceFileCleanedLinesOfCode" : 55,
        "startLine" : 35,
        "endLine" : 123,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 55,
        "blockSize" : 55,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/RootBuilder.java",
          "extension" : "java",
          "linesOfCode" : 81,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 25
        },
        "sourceFileCleanedLinesOfCode" : 55,
        "startLine" : 35,
        "endLine" : 123,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 55,
        "blockSize" : 55,
        "percentage" : 100.0
      } ],
      "blockSize" : 55
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootBuilder.java",
          "extension" : "java",
          "linesOfCode" : 81,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 25
        },
        "sourceFileCleanedLinesOfCode" : 55,
        "startLine" : 35,
        "endLine" : 123,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 55,
        "blockSize" : 55,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/RootBuilder.java",
          "extension" : "java",
          "linesOfCode" : 81,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 25
        },
        "sourceFileCleanedLinesOfCode" : 55,
        "startLine" : 35,
        "endLine" : 123,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 55,
        "blockSize" : 55,
        "percentage" : 100.0
      } ],
      "blockSize" : 55
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootBuilder.java",
          "extension" : "java",
          "linesOfCode" : 81,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 25
        },
        "sourceFileCleanedLinesOfCode" : 55,
        "startLine" : 35,
        "endLine" : 123,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 55,
        "blockSize" : 55,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/RootBuilder.java",
          "extension" : "java",
          "linesOfCode" : 81,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 25
        },
        "sourceFileCleanedLinesOfCode" : 55,
        "startLine" : 35,
        "endLine" : 123,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 55,
        "blockSize" : 55,
        "percentage" : 100.0
      } ],
      "blockSize" : 55
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 8,
          "linesOfCodeInUnits" : 43
        },
        "sourceFileCleanedLinesOfCode" : 53,
        "startLine" : 28,
        "endLine" : 102,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 53,
        "blockSize" : 53,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 8,
          "linesOfCodeInUnits" : 43
        },
        "sourceFileCleanedLinesOfCode" : 53,
        "startLine" : 28,
        "endLine" : 102,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 53,
        "blockSize" : 53,
        "percentage" : 100.0
      } ],
      "blockSize" : 53
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/res/layout/off_game_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 53,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 50,
        "startLine" : 1,
        "endLine" : 60,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 50,
        "blockSize" : 50,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/res/layout/off_game_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 53,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 50,
        "startLine" : 1,
        "endLine" : 60,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 50,
        "blockSize" : 50,
        "percentage" : 100.0
      } ],
      "blockSize" : 50
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/res/layout/off_game_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 53,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 50,
        "startLine" : 1,
        "endLine" : 60,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 50,
        "blockSize" : 50,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/res/layout/off_game_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 53,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 50,
        "startLine" : 1,
        "endLine" : 60,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 50,
        "blockSize" : 50,
        "percentage" : 100.0
      } ],
      "blockSize" : 50
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/res/layout/off_game_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 53,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 50,
        "startLine" : 1,
        "endLine" : 60,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 50,
        "blockSize" : 50,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/res/layout/off_game_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 53,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 50,
        "startLine" : 1,
        "endLine" : 60,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 50,
        "blockSize" : 50,
        "percentage" : 100.0
      } ],
      "blockSize" : 50
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 48,
        "startLine" : 33,
        "endLine" : 115,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 48,
        "blockSize" : 48,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 48,
        "startLine" : 33,
        "endLine" : 115,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 48,
        "blockSize" : 48,
        "percentage" : 100.0
      } ],
      "blockSize" : 48
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 48,
        "startLine" : 33,
        "endLine" : 115,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 48,
        "blockSize" : 48,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 48,
        "startLine" : 33,
        "endLine" : 115,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 48,
        "blockSize" : 48,
        "percentage" : 100.0
      } ],
      "blockSize" : 48
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 48,
        "startLine" : 33,
        "endLine" : 115,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 48,
        "blockSize" : 48,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 48,
        "startLine" : 33,
        "endLine" : 115,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 48,
        "blockSize" : 48,
        "percentage" : 100.0
      } ],
      "blockSize" : 48
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 48,
        "startLine" : 33,
        "endLine" : 113,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 48,
        "blockSize" : 48,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 48,
        "startLine" : 33,
        "endLine" : 113,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 48,
        "blockSize" : 48,
        "percentage" : 100.0
      } ],
      "blockSize" : 48
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
          "extension" : "java",
          "linesOfCode" : 70,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 47,
        "startLine" : 33,
        "endLine" : 112,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 47,
        "blockSize" : 47,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
          "extension" : "java",
          "linesOfCode" : 70,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 47,
        "startLine" : 33,
        "endLine" : 112,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 47,
        "blockSize" : 47,
        "percentage" : 100.0
      } ],
      "blockSize" : 47
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/OffGame/OffGameViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 63,
          "unitsCount" : 3,
          "unitsMcCabeIndexSum" : 3,
          "linesOfCodeInUnits" : 16
        },
        "sourceFileCleanedLinesOfCode" : 46,
        "startLine" : 23,
        "endLine" : 93,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 46,
        "blockSize" : 46,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/OffGame/OffGameViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 63,
          "unitsCount" : 3,
          "unitsMcCabeIndexSum" : 3,
          "linesOfCodeInUnits" : 16
        },
        "sourceFileCleanedLinesOfCode" : 46,
        "startLine" : 23,
        "endLine" : 93,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 46,
        "blockSize" : 46,
        "percentage" : 100.0
      } ],
      "blockSize" : 46
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/RandomWin/RandomWinViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 61,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 19
        },
        "sourceFileCleanedLinesOfCode" : 46,
        "startLine" : 23,
        "endLine" : 92,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 46,
        "blockSize" : 46,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/RandomWin/RandomWinViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 61,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 19
        },
        "sourceFileCleanedLinesOfCode" : 46,
        "startLine" : 23,
        "endLine" : 92,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 46,
        "blockSize" : 46,
        "percentage" : 100.0
      } ],
      "blockSize" : 46
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      } ],
      "blockSize" : 45
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      } ],
      "blockSize" : 45
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial2/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      } ],
      "blockSize" : 45
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      } ],
      "blockSize" : 45
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial2/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      } ],
      "blockSize" : 45
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      } ],
      "blockSize" : 45
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial2/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      } ],
      "blockSize" : 45
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      } ],
      "blockSize" : 45
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      } ],
      "blockSize" : 45
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial2/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 9,
          "unitsMcCabeIndexSum" : 13,
          "linesOfCodeInUnits" : 55
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 67,
        "endLine" : 137,
        "cleanedStartLine" : 31,
        "cleanedEndLine" : 75,
        "blockSize" : 45,
        "percentage" : 60.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 90,
          "unitsCount" : 9,
          "unitsMcCabeIndexSum" : 11,
          "linesOfCodeInUnits" : 47
        },
        "sourceFileCleanedLinesOfCode" : 68,
        "startLine" : 59,
        "endLine" : 129,
        "cleanedStartLine" : 24,
        "cleanedEndLine" : 68,
        "blockSize" : 45,
        "percentage" : 66.17647058823529
      } ],
      "blockSize" : 45
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial2/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 23,
        "endLine" : 89,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 45,
        "blockSize" : 45,
        "percentage" : 100.0
      } ],
      "blockSize" : 45
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/LoggedIn/LoggedInRouter.swift",
          "extension" : "swift",
          "linesOfCode" : 57,
          "unitsCount" : 5,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 23
        },
        "sourceFileCleanedLinesOfCode" : 44,
        "startLine" : 19,
        "endLine" : 87,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 44,
        "blockSize" : 44,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/LoggedIn/LoggedInRouter.swift",
          "extension" : "swift",
          "linesOfCode" : 57,
          "unitsCount" : 5,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 23
        },
        "sourceFileCleanedLinesOfCode" : 44,
        "startLine" : 19,
        "endLine" : 87,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 44,
        "blockSize" : 44,
        "percentage" : 100.0
      } ],
      "blockSize" : 44
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/res/layout/off_game_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 53,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 50,
        "startLine" : 1,
        "endLine" : 51,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 43,
        "blockSize" : 43,
        "percentage" : 86.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/res/layout/off_game_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 46,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 43,
        "startLine" : 1,
        "endLine" : 51,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 43,
        "blockSize" : 43,
        "percentage" : 100.0
      } ],
      "blockSize" : 43
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/res/layout/off_game_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 53,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 50,
        "startLine" : 1,
        "endLine" : 51,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 43,
        "blockSize" : 43,
        "percentage" : 86.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/res/layout/off_game_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 46,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 43,
        "startLine" : 1,
        "endLine" : 51,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 43,
        "blockSize" : 43,
        "percentage" : 100.0
      } ],
      "blockSize" : 43
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/res/layout/off_game_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 53,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 50,
        "startLine" : 1,
        "endLine" : 51,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 43,
        "blockSize" : 43,
        "percentage" : 86.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/res/layout/off_game_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 46,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 43,
        "startLine" : 1,
        "endLine" : 51,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 43,
        "blockSize" : 43,
        "percentage" : 100.0
      } ],
      "blockSize" : 43
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 102,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 5,
          "linesOfCodeInUnits" : 23
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 78,
        "endLine" : 150,
        "cleanedStartLine" : 28,
        "cleanedEndLine" : 69,
        "blockSize" : 42,
        "percentage" : 60.869565217391305
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 103,
          "unitsCount" : 5,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 24
        },
        "sourceFileCleanedLinesOfCode" : 70,
        "startLine" : 80,
        "endLine" : 152,
        "cleanedStartLine" : 29,
        "cleanedEndLine" : 70,
        "blockSize" : 42,
        "percentage" : 60.0
      } ],
      "blockSize" : 42
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/LoggedInRouter.java",
          "extension" : "java",
          "linesOfCode" : 55,
          "unitsCount" : 5,
          "unitsMcCabeIndexSum" : 7,
          "linesOfCodeInUnits" : 29
        },
        "sourceFileCleanedLinesOfCode" : 39,
        "startLine" : 26,
        "endLine" : 77,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 39,
        "blockSize" : 39,
        "percentage" : 100.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/LoggedInRouter.java",
          "extension" : "java",
          "linesOfCode" : 55,
          "unitsCount" : 5,
          "unitsMcCabeIndexSum" : 7,
          "linesOfCodeInUnits" : 29
        },
        "sourceFileCleanedLinesOfCode" : 39,
        "startLine" : 26,
        "endLine" : 77,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 39,
        "blockSize" : 39,
        "percentage" : 100.0
      } ],
      "blockSize" : 39
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 90,
          "unitsCount" : 9,
          "unitsMcCabeIndexSum" : 11,
          "linesOfCodeInUnits" : 47
        },
        "sourceFileCleanedLinesOfCode" : 68,
        "startLine" : 72,
        "endLine" : 129,
        "cleanedStartLine" : 31,
        "cleanedEndLine" : 68,
        "blockSize" : 38,
        "percentage" : 55.88235294117647
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 7,
          "unitsMcCabeIndexSum" : 10,
          "linesOfCodeInUnits" : 44
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 81,
        "endLine" : 138,
        "cleanedStartLine" : 38,
        "cleanedEndLine" : 75,
        "blockSize" : 38,
        "percentage" : 50.666666666666664
      } ],
      "blockSize" : 38
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial2/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 9,
          "unitsMcCabeIndexSum" : 13,
          "linesOfCodeInUnits" : 55
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 80,
        "endLine" : 137,
        "cleanedStartLine" : 38,
        "cleanedEndLine" : 75,
        "blockSize" : 38,
        "percentage" : 50.666666666666664
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 7,
          "unitsMcCabeIndexSum" : 10,
          "linesOfCodeInUnits" : 44
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 81,
        "endLine" : 138,
        "cleanedStartLine" : 38,
        "cleanedEndLine" : 75,
        "blockSize" : 38,
        "percentage" : 50.666666666666664
      } ],
      "blockSize" : 38
    } ],
    "mostFrequentDuplicates" : [ {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 48,
        "startLine" : 93,
        "endLine" : 104,
        "cleanedStartLine" : 36,
        "cleanedEndLine" : 41,
        "blockSize" : 6,
        "percentage" : 12.5
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 48,
        "startLine" : 93,
        "endLine" : 104,
        "cleanedStartLine" : 36,
        "cleanedEndLine" : 41,
        "blockSize" : 6,
        "percentage" : 12.5
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
          "extension" : "java",
          "linesOfCode" : 70,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 47,
        "startLine" : 91,
        "endLine" : 102,
        "cleanedStartLine" : 35,
        "cleanedEndLine" : 40,
        "blockSize" : 6,
        "percentage" : 12.76595744680851
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 48,
        "startLine" : 93,
        "endLine" : 104,
        "cleanedStartLine" : 36,
        "cleanedEndLine" : 41,
        "blockSize" : 6,
        "percentage" : 12.5
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/RootInteractor.java",
          "extension" : "java",
          "linesOfCode" : 24,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 8
        },
        "sourceFileCleanedLinesOfCode" : 13,
        "startLine" : 26,
        "endLine" : 33,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 6,
        "blockSize" : 6,
        "percentage" : 46.15384615384615
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootInteractor.java",
          "extension" : "java",
          "linesOfCode" : 24,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 8
        },
        "sourceFileCleanedLinesOfCode" : 13,
        "startLine" : 26,
        "endLine" : 33,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 6,
        "blockSize" : 6,
        "percentage" : 46.15384615384615
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial1/src/main/java/com/uber/rib/root/RootInteractor.java",
          "extension" : "java",
          "linesOfCode" : 15,
          "unitsCount" : 1,
          "unitsMcCabeIndexSum" : 1,
          "linesOfCodeInUnits" : 3
        },
        "sourceFileCleanedLinesOfCode" : 7,
        "startLine" : 25,
        "endLine" : 32,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 6,
        "blockSize" : 6,
        "percentage" : 85.71428571428571
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/RootInteractor.java",
          "extension" : "java",
          "linesOfCode" : 16,
          "unitsCount" : 1,
          "unitsMcCabeIndexSum" : 1,
          "linesOfCodeInUnits" : 4
        },
        "sourceFileCleanedLinesOfCode" : 8,
        "startLine" : 25,
        "endLine" : 32,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 6,
        "blockSize" : 6,
        "percentage" : 75.0
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
          "extension" : "java",
          "linesOfCode" : 48,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 19,
          "linesOfCodeInUnits" : 26
        },
        "sourceFileCleanedLinesOfCode" : 36,
        "startLine" : 33,
        "endLine" : 43,
        "cleanedStartLine" : 11,
        "cleanedEndLine" : 16,
        "blockSize" : 6,
        "percentage" : 16.666666666666668
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
          "extension" : "java",
          "linesOfCode" : 48,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 19,
          "linesOfCodeInUnits" : 26
        },
        "sourceFileCleanedLinesOfCode" : 36,
        "startLine" : 33,
        "endLine" : 43,
        "cleanedStartLine" : 11,
        "cleanedEndLine" : 16,
        "blockSize" : 6,
        "percentage" : 16.666666666666668
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
          "extension" : "java",
          "linesOfCode" : 48,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 19,
          "linesOfCodeInUnits" : 26
        },
        "sourceFileCleanedLinesOfCode" : 36,
        "startLine" : 33,
        "endLine" : 43,
        "cleanedStartLine" : 11,
        "cleanedEndLine" : 16,
        "blockSize" : 6,
        "percentage" : 16.666666666666668
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
          "extension" : "java",
          "linesOfCode" : 48,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 19,
          "linesOfCodeInUnits" : 26
        },
        "sourceFileCleanedLinesOfCode" : 36,
        "startLine" : 33,
        "endLine" : 43,
        "cleanedStartLine" : 11,
        "cleanedEndLine" : 16,
        "blockSize" : 6,
        "percentage" : 16.666666666666668
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 81,
        "endLine" : 86,
        "cleanedStartLine" : 39,
        "cleanedEndLine" : 44,
        "blockSize" : 6,
        "percentage" : 13.333333333333334
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial2/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 81,
        "endLine" : 86,
        "cleanedStartLine" : 39,
        "cleanedEndLine" : 44,
        "blockSize" : 6,
        "percentage" : 13.333333333333334
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 81,
        "endLine" : 86,
        "cleanedStartLine" : 39,
        "cleanedEndLine" : 44,
        "blockSize" : 6,
        "percentage" : 13.333333333333334
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 81,
        "endLine" : 86,
        "cleanedStartLine" : 39,
        "cleanedEndLine" : 44,
        "blockSize" : 6,
        "percentage" : 13.333333333333334
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/LoggedOut/LoggedOutViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 60,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 45,
        "startLine" : 81,
        "endLine" : 86,
        "cleanedStartLine" : 39,
        "cleanedEndLine" : 44,
        "blockSize" : 6,
        "percentage" : 13.333333333333334
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 48,
        "startLine" : 104,
        "endLine" : 113,
        "cleanedStartLine" : 41,
        "cleanedEndLine" : 46,
        "blockSize" : 6,
        "percentage" : 12.5
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 48,
        "startLine" : 104,
        "endLine" : 113,
        "cleanedStartLine" : 41,
        "cleanedEndLine" : 46,
        "blockSize" : 6,
        "percentage" : 12.5
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
          "extension" : "java",
          "linesOfCode" : 70,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 47,
        "startLine" : 102,
        "endLine" : 110,
        "cleanedStartLine" : 40,
        "cleanedEndLine" : 45,
        "blockSize" : 6,
        "percentage" : 12.76595744680851
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 48,
        "startLine" : 104,
        "endLine" : 113,
        "cleanedStartLine" : 41,
        "cleanedEndLine" : 46,
        "blockSize" : 6,
        "percentage" : 12.5
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 43,
        "endLine" : 49,
        "cleanedStartLine" : 39,
        "cleanedEndLine" : 44,
        "blockSize" : 6,
        "percentage" : 6.0606060606060606
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 43,
        "endLine" : 49,
        "cleanedStartLine" : 39,
        "cleanedEndLine" : 44,
        "blockSize" : 6,
        "percentage" : 6.0606060606060606
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 43,
        "endLine" : 49,
        "cleanedStartLine" : 39,
        "cleanedEndLine" : 44,
        "blockSize" : 6,
        "percentage" : 6.0606060606060606
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 43,
        "endLine" : 49,
        "cleanedStartLine" : 39,
        "cleanedEndLine" : 44,
        "blockSize" : 6,
        "percentage" : 6.0606060606060606
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 42,
        "endLine" : 48,
        "cleanedStartLine" : 38,
        "cleanedEndLine" : 43,
        "blockSize" : 6,
        "percentage" : 6.0606060606060606
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 42,
        "endLine" : 48,
        "cleanedStartLine" : 38,
        "cleanedEndLine" : 43,
        "blockSize" : 6,
        "percentage" : 6.0606060606060606
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 42,
        "endLine" : 48,
        "cleanedStartLine" : 38,
        "cleanedEndLine" : 43,
        "blockSize" : 6,
        "percentage" : 6.0606060606060606
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 42,
        "endLine" : 48,
        "cleanedStartLine" : 38,
        "cleanedEndLine" : 43,
        "blockSize" : 6,
        "percentage" : 6.0606060606060606
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/Root/RootInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 27,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 17,
        "startLine" : 21,
        "endLine" : 35,
        "cleanedStartLine" : 2,
        "cleanedEndLine" : 7,
        "blockSize" : 6,
        "percentage" : 35.294117647058826
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/Root/RootInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 27,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 17,
        "startLine" : 21,
        "endLine" : 35,
        "cleanedStartLine" : 2,
        "cleanedEndLine" : 7,
        "blockSize" : 6,
        "percentage" : 35.294117647058826
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/Root/RootInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 27,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 17,
        "startLine" : 21,
        "endLine" : 35,
        "cleanedStartLine" : 2,
        "cleanedEndLine" : 7,
        "blockSize" : 6,
        "percentage" : 35.294117647058826
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 7,
          "unitsMcCabeIndexSum" : 10,
          "linesOfCodeInUnits" : 44
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 121,
        "endLine" : 133,
        "cleanedStartLine" : 66,
        "cleanedEndLine" : 71,
        "blockSize" : 6,
        "percentage" : 8.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 7,
          "unitsMcCabeIndexSum" : 10,
          "linesOfCodeInUnits" : 44
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 121,
        "endLine" : 133,
        "cleanedStartLine" : 66,
        "cleanedEndLine" : 71,
        "blockSize" : 6,
        "percentage" : 8.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 90,
          "unitsCount" : 9,
          "unitsMcCabeIndexSum" : 11,
          "linesOfCodeInUnits" : 47
        },
        "sourceFileCleanedLinesOfCode" : 68,
        "startLine" : 112,
        "endLine" : 124,
        "cleanedStartLine" : 59,
        "cleanedEndLine" : 64,
        "blockSize" : 6,
        "percentage" : 8.823529411764707
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial2/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 9,
          "unitsMcCabeIndexSum" : 13,
          "linesOfCodeInUnits" : 55
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 120,
        "endLine" : 132,
        "cleanedStartLine" : 66,
        "cleanedEndLine" : 71,
        "blockSize" : 6,
        "percentage" : 8.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 7,
          "unitsMcCabeIndexSum" : 10,
          "linesOfCodeInUnits" : 44
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 121,
        "endLine" : 133,
        "cleanedStartLine" : 66,
        "cleanedEndLine" : 71,
        "blockSize" : 6,
        "percentage" : 8.0
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 103,
          "unitsCount" : 5,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 24
        },
        "sourceFileCleanedLinesOfCode" : 70,
        "startLine" : 50,
        "endLine" : 62,
        "cleanedStartLine" : 16,
        "cleanedEndLine" : 21,
        "blockSize" : 6,
        "percentage" : 8.571428571428571
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial2/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 107,
          "unitsCount" : 5,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 24
        },
        "sourceFileCleanedLinesOfCode" : 73,
        "startLine" : 50,
        "endLine" : 62,
        "cleanedStartLine" : 16,
        "cleanedEndLine" : 21,
        "blockSize" : 6,
        "percentage" : 8.219178082191782
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 130,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 27
        },
        "sourceFileCleanedLinesOfCode" : 89,
        "startLine" : 50,
        "endLine" : 62,
        "cleanedStartLine" : 18,
        "cleanedEndLine" : 23,
        "blockSize" : 6,
        "percentage" : 6.741573033707865
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 130,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 27
        },
        "sourceFileCleanedLinesOfCode" : 89,
        "startLine" : 50,
        "endLine" : 62,
        "cleanedStartLine" : 18,
        "cleanedEndLine" : 23,
        "blockSize" : 6,
        "percentage" : 6.741573033707865
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 102,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 5,
          "linesOfCodeInUnits" : 23
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 50,
        "endLine" : 62,
        "cleanedStartLine" : 16,
        "cleanedEndLine" : 21,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedout/LoggedOutInteractor.java",
          "extension" : "java",
          "linesOfCode" : 40,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 5,
          "linesOfCodeInUnits" : 17
        },
        "sourceFileCleanedLinesOfCode" : 23,
        "startLine" : 33,
        "endLine" : 39,
        "cleanedStartLine" : 4,
        "cleanedEndLine" : 9,
        "blockSize" : 6,
        "percentage" : 26.08695652173913
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedout/LoggedOutInteractor.java",
          "extension" : "java",
          "linesOfCode" : 42,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 5,
          "linesOfCodeInUnits" : 18
        },
        "sourceFileCleanedLinesOfCode" : 24,
        "startLine" : 34,
        "endLine" : 40,
        "cleanedStartLine" : 4,
        "cleanedEndLine" : 9,
        "blockSize" : 6,
        "percentage" : 25.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedout/LoggedOutInteractor.java",
          "extension" : "java",
          "linesOfCode" : 40,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 5,
          "linesOfCodeInUnits" : 17
        },
        "sourceFileCleanedLinesOfCode" : 23,
        "startLine" : 33,
        "endLine" : 39,
        "cleanedStartLine" : 4,
        "cleanedEndLine" : 9,
        "blockSize" : 6,
        "percentage" : 26.08695652173913
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 46,
        "endLine" : 53,
        "cleanedStartLine" : 10,
        "cleanedEndLine" : 15,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 46,
        "endLine" : 53,
        "cleanedStartLine" : 10,
        "cleanedEndLine" : 15,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 46,
        "endLine" : 53,
        "cleanedStartLine" : 10,
        "cleanedEndLine" : 15,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 46,
        "endLine" : 53,
        "cleanedStartLine" : 10,
        "cleanedEndLine" : 15,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 90,
        "endLine" : 99,
        "cleanedStartLine" : 49,
        "cleanedEndLine" : 54,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 90,
        "endLine" : 99,
        "cleanedStartLine" : 49,
        "cleanedEndLine" : 54,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 90,
        "endLine" : 99,
        "cleanedStartLine" : 49,
        "cleanedEndLine" : 54,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 90,
        "endLine" : 99,
        "cleanedStartLine" : 49,
        "cleanedEndLine" : 54,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 70,
        "endLine" : 75,
        "cleanedStartLine" : 63,
        "cleanedEndLine" : 68,
        "blockSize" : 6,
        "percentage" : 6.0606060606060606
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 70,
        "endLine" : 75,
        "cleanedStartLine" : 63,
        "cleanedEndLine" : 68,
        "blockSize" : 6,
        "percentage" : 6.0606060606060606
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 70,
        "endLine" : 75,
        "cleanedStartLine" : 63,
        "cleanedEndLine" : 68,
        "blockSize" : 6,
        "percentage" : 6.0606060606060606
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 70,
        "endLine" : 75,
        "cleanedStartLine" : 63,
        "cleanedEndLine" : 68,
        "blockSize" : 6,
        "percentage" : 6.0606060606060606
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 103,
          "unitsCount" : 5,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 24
        },
        "sourceFileCleanedLinesOfCode" : 70,
        "startLine" : 118,
        "endLine" : 125,
        "cleanedStartLine" : 52,
        "cleanedEndLine" : 57,
        "blockSize" : 6,
        "percentage" : 8.571428571428571
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial2/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 107,
          "unitsCount" : 5,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 24
        },
        "sourceFileCleanedLinesOfCode" : 73,
        "startLine" : 118,
        "endLine" : 125,
        "cleanedStartLine" : 52,
        "cleanedEndLine" : 57,
        "blockSize" : 6,
        "percentage" : 8.219178082191782
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 130,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 27
        },
        "sourceFileCleanedLinesOfCode" : 89,
        "startLine" : 136,
        "endLine" : 143,
        "cleanedStartLine" : 65,
        "cleanedEndLine" : 70,
        "blockSize" : 6,
        "percentage" : 6.741573033707865
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 130,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 27
        },
        "sourceFileCleanedLinesOfCode" : 89,
        "startLine" : 136,
        "endLine" : 143,
        "cleanedStartLine" : 65,
        "cleanedEndLine" : 70,
        "blockSize" : 6,
        "percentage" : 6.741573033707865
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 102,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 5,
          "linesOfCodeInUnits" : 23
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 116,
        "endLine" : 123,
        "cleanedStartLine" : 51,
        "cleanedEndLine" : 56,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 53,
        "endLine" : 58,
        "cleanedStartLine" : 15,
        "cleanedEndLine" : 20,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 53,
        "endLine" : 58,
        "cleanedStartLine" : 15,
        "cleanedEndLine" : 20,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 53,
        "endLine" : 58,
        "cleanedStartLine" : 15,
        "cleanedEndLine" : 20,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 53,
        "endLine" : 58,
        "cleanedStartLine" : 15,
        "cleanedEndLine" : 20,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 48,
        "startLine" : 93,
        "endLine" : 104,
        "cleanedStartLine" : 37,
        "cleanedEndLine" : 42,
        "blockSize" : 6,
        "percentage" : 12.5
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
          "extension" : "java",
          "linesOfCode" : 78,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 53,
        "startLine" : 103,
        "endLine" : 114,
        "cleanedStartLine" : 42,
        "cleanedEndLine" : 47,
        "blockSize" : 6,
        "percentage" : 11.320754716981131
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
          "extension" : "java",
          "linesOfCode" : 82,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 54,
        "startLine" : 107,
        "endLine" : 117,
        "cleanedStartLine" : 43,
        "cleanedEndLine" : 48,
        "blockSize" : 6,
        "percentage" : 11.11111111111111
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
          "extension" : "java",
          "linesOfCode" : 71,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 21
        },
        "sourceFileCleanedLinesOfCode" : 48,
        "startLine" : 93,
        "endLine" : 104,
        "cleanedStartLine" : 37,
        "cleanedEndLine" : 42,
        "blockSize" : 6,
        "percentage" : 12.5
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial2/TicTacToe/Root/RootInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 23,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 14,
        "startLine" : 24,
        "endLine" : 37,
        "cleanedStartLine" : 2,
        "cleanedEndLine" : 7,
        "blockSize" : 6,
        "percentage" : 42.857142857142854
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial1/TicTacToe/Root/RootInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 23,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 14,
        "startLine" : 24,
        "endLine" : 37,
        "cleanedStartLine" : 2,
        "cleanedEndLine" : 7,
        "blockSize" : 6,
        "percentage" : 42.857142857142854
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/Root/RootInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 27,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 17,
        "startLine" : 24,
        "endLine" : 37,
        "cleanedStartLine" : 3,
        "cleanedEndLine" : 8,
        "blockSize" : 6,
        "percentage" : 35.294117647058826
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/Root/RootInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 27,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 17,
        "startLine" : 24,
        "endLine" : 37,
        "cleanedStartLine" : 3,
        "cleanedEndLine" : 8,
        "blockSize" : 6,
        "percentage" : 35.294117647058826
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/Root/RootInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 27,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 6
        },
        "sourceFileCleanedLinesOfCode" : 17,
        "startLine" : 24,
        "endLine" : 37,
        "cleanedStartLine" : 3,
        "cleanedEndLine" : 8,
        "blockSize" : 6,
        "percentage" : 35.294117647058826
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
          "extension" : "java",
          "linesOfCode" : 48,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 19,
          "linesOfCodeInUnits" : 26
        },
        "sourceFileCleanedLinesOfCode" : 36,
        "startLine" : 53,
        "endLine" : 58,
        "cleanedStartLine" : 20,
        "cleanedEndLine" : 25,
        "blockSize" : 6,
        "percentage" : 16.666666666666668
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
          "extension" : "java",
          "linesOfCode" : 48,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 19,
          "linesOfCodeInUnits" : 26
        },
        "sourceFileCleanedLinesOfCode" : 36,
        "startLine" : 53,
        "endLine" : 58,
        "cleanedStartLine" : 20,
        "cleanedEndLine" : 25,
        "blockSize" : 6,
        "percentage" : 16.666666666666668
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
          "extension" : "java",
          "linesOfCode" : 48,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 19,
          "linesOfCodeInUnits" : 26
        },
        "sourceFileCleanedLinesOfCode" : 36,
        "startLine" : 53,
        "endLine" : 58,
        "cleanedStartLine" : 20,
        "cleanedEndLine" : 25,
        "blockSize" : 6,
        "percentage" : 16.666666666666668
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
          "extension" : "java",
          "linesOfCode" : 48,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 19,
          "linesOfCodeInUnits" : 26
        },
        "sourceFileCleanedLinesOfCode" : 36,
        "startLine" : 53,
        "endLine" : 58,
        "cleanedStartLine" : 20,
        "cleanedEndLine" : 25,
        "blockSize" : 6,
        "percentage" : 16.666666666666668
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/LoggedInRouter.java",
          "extension" : "java",
          "linesOfCode" : 55,
          "unitsCount" : 5,
          "unitsMcCabeIndexSum" : 7,
          "linesOfCodeInUnits" : 29
        },
        "sourceFileCleanedLinesOfCode" : 39,
        "startLine" : 38,
        "endLine" : 43,
        "cleanedStartLine" : 11,
        "cleanedEndLine" : 16,
        "blockSize" : 6,
        "percentage" : 15.384615384615385
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/LoggedInRouter.java",
          "extension" : "java",
          "linesOfCode" : 55,
          "unitsCount" : 5,
          "unitsMcCabeIndexSum" : 7,
          "linesOfCodeInUnits" : 29
        },
        "sourceFileCleanedLinesOfCode" : 39,
        "startLine" : 38,
        "endLine" : 43,
        "cleanedStartLine" : 11,
        "cleanedEndLine" : 16,
        "blockSize" : 6,
        "percentage" : 15.384615384615385
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInRouter.java",
          "extension" : "java",
          "linesOfCode" : 55,
          "unitsCount" : 5,
          "unitsMcCabeIndexSum" : 7,
          "linesOfCodeInUnits" : 29
        },
        "sourceFileCleanedLinesOfCode" : 39,
        "startLine" : 38,
        "endLine" : 43,
        "cleanedStartLine" : 11,
        "cleanedEndLine" : 16,
        "blockSize" : 6,
        "percentage" : 15.384615384615385
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 106,
        "endLine" : 115,
        "cleanedStartLine" : 59,
        "cleanedEndLine" : 64,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 106,
        "endLine" : 115,
        "cleanedStartLine" : 59,
        "cleanedEndLine" : 64,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 106,
        "endLine" : 115,
        "cleanedStartLine" : 59,
        "cleanedEndLine" : 64,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
          "extension" : "java",
          "linesOfCode" : 95,
          "unitsCount" : 10,
          "unitsMcCabeIndexSum" : 12,
          "linesOfCodeInUnits" : 70
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 106,
        "endLine" : 115,
        "cleanedStartLine" : 59,
        "cleanedEndLine" : 64,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/LoggedOut/LoggedOutRouter.swift",
          "extension" : "swift",
          "linesOfCode" : 13,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 8,
        "startLine" : 19,
        "endLine" : 31,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 6,
        "blockSize" : 6,
        "percentage" : 75.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedOut/LoggedOutRouter.swift",
          "extension" : "swift",
          "linesOfCode" : 13,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 8,
        "startLine" : 19,
        "endLine" : 31,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 6,
        "blockSize" : 6,
        "percentage" : 75.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/LoggedOut/LoggedOutRouter.swift",
          "extension" : "swift",
          "linesOfCode" : 13,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 8,
        "startLine" : 19,
        "endLine" : 31,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 6,
        "blockSize" : 6,
        "percentage" : 75.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/LoggedOut/LoggedOutRouter.swift",
          "extension" : "swift",
          "linesOfCode" : 13,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 8,
        "startLine" : 19,
        "endLine" : 31,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 6,
        "blockSize" : 6,
        "percentage" : 75.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial2/TicTacToe/LoggedOut/LoggedOutRouter.swift",
          "extension" : "swift",
          "linesOfCode" : 13,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 8,
        "startLine" : 19,
        "endLine" : 31,
        "cleanedStartLine" : 1,
        "cleanedEndLine" : 6,
        "blockSize" : 6,
        "percentage" : 75.0
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/LoggedOut/LoggedOutRouter.swift",
          "extension" : "swift",
          "linesOfCode" : 13,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 8,
        "startLine" : 21,
        "endLine" : 33,
        "cleanedStartLine" : 3,
        "cleanedEndLine" : 8,
        "blockSize" : 6,
        "percentage" : 75.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedOut/LoggedOutRouter.swift",
          "extension" : "swift",
          "linesOfCode" : 13,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 8,
        "startLine" : 21,
        "endLine" : 33,
        "cleanedStartLine" : 3,
        "cleanedEndLine" : 8,
        "blockSize" : 6,
        "percentage" : 75.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/LoggedOut/LoggedOutRouter.swift",
          "extension" : "swift",
          "linesOfCode" : 13,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 8,
        "startLine" : 21,
        "endLine" : 33,
        "cleanedStartLine" : 3,
        "cleanedEndLine" : 8,
        "blockSize" : 6,
        "percentage" : 75.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/LoggedOut/LoggedOutRouter.swift",
          "extension" : "swift",
          "linesOfCode" : 13,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 8,
        "startLine" : 21,
        "endLine" : 33,
        "cleanedStartLine" : 3,
        "cleanedEndLine" : 8,
        "blockSize" : 6,
        "percentage" : 75.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial2/TicTacToe/LoggedOut/LoggedOutRouter.swift",
          "extension" : "swift",
          "linesOfCode" : 13,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 8,
        "startLine" : 21,
        "endLine" : 33,
        "cleanedStartLine" : 3,
        "cleanedEndLine" : 8,
        "blockSize" : 6,
        "percentage" : 75.0
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/res/layout/off_game_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 53,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 50,
        "startLine" : 2,
        "endLine" : 7,
        "cleanedStartLine" : 2,
        "cleanedEndLine" : 7,
        "blockSize" : 6,
        "percentage" : 12.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/res/layout/off_game_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 53,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 50,
        "startLine" : 2,
        "endLine" : 7,
        "cleanedStartLine" : 2,
        "cleanedEndLine" : 7,
        "blockSize" : 6,
        "percentage" : 12.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/res/layout/off_game_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 53,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 50,
        "startLine" : 2,
        "endLine" : 7,
        "cleanedStartLine" : 2,
        "cleanedEndLine" : 7,
        "blockSize" : 6,
        "percentage" : 12.0
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/res/layout/off_game_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 46,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 43,
        "startLine" : 2,
        "endLine" : 7,
        "cleanedStartLine" : 2,
        "cleanedEndLine" : 7,
        "blockSize" : 6,
        "percentage" : 13.953488372093023
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 103,
          "unitsCount" : 5,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 24
        },
        "sourceFileCleanedLinesOfCode" : 70,
        "startLine" : 80,
        "endLine" : 89,
        "cleanedStartLine" : 29,
        "cleanedEndLine" : 34,
        "blockSize" : 6,
        "percentage" : 8.571428571428571
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 130,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 27
        },
        "sourceFileCleanedLinesOfCode" : 89,
        "startLine" : 85,
        "endLine" : 94,
        "cleanedStartLine" : 34,
        "cleanedEndLine" : 39,
        "blockSize" : 6,
        "percentage" : 6.741573033707865
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 130,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 27
        },
        "sourceFileCleanedLinesOfCode" : 89,
        "startLine" : 85,
        "endLine" : 94,
        "cleanedStartLine" : 34,
        "cleanedEndLine" : 39,
        "blockSize" : 6,
        "percentage" : 6.741573033707865
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/TicTacToe/TicTacToeInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 102,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 5,
          "linesOfCodeInUnits" : 23
        },
        "sourceFileCleanedLinesOfCode" : 69,
        "startLine" : 78,
        "endLine" : 87,
        "cleanedStartLine" : 28,
        "cleanedEndLine" : 33,
        "blockSize" : 6,
        "percentage" : 8.695652173913043
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 95,
        "endLine" : 101,
        "cleanedStartLine" : 86,
        "cleanedEndLine" : 91,
        "blockSize" : 6,
        "percentage" : 6.0606060606060606
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial2/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 95,
        "endLine" : 101,
        "cleanedStartLine" : 86,
        "cleanedEndLine" : 91,
        "blockSize" : 6,
        "percentage" : 6.0606060606060606
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 95,
        "endLine" : 101,
        "cleanedStartLine" : 86,
        "cleanedEndLine" : 91,
        "blockSize" : 6,
        "percentage" : 6.0606060606060606
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/res/layout/tic_tac_toe_rib.xml",
          "extension" : "xml",
          "linesOfCode" : 100,
          "unitsCount" : 0,
          "unitsMcCabeIndexSum" : 0,
          "linesOfCodeInUnits" : 0
        },
        "sourceFileCleanedLinesOfCode" : 99,
        "startLine" : 95,
        "endLine" : 101,
        "cleanedStartLine" : 86,
        "cleanedEndLine" : 91,
        "blockSize" : 6,
        "percentage" : 6.0606060606060606
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3/TicTacToe/LoggedOut/LoggedOutInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 36,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 8
        },
        "sourceFileCleanedLinesOfCode" : 24,
        "startLine" : 60,
        "endLine" : 68,
        "cleanedStartLine" : 18,
        "cleanedEndLine" : 23,
        "blockSize" : 6,
        "percentage" : 25.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/LoggedOut/LoggedOutInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 36,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 8
        },
        "sourceFileCleanedLinesOfCode" : 24,
        "startLine" : 60,
        "endLine" : 68,
        "cleanedStartLine" : 18,
        "cleanedEndLine" : 23,
        "blockSize" : 6,
        "percentage" : 25.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/LoggedOut/LoggedOutInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 36,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 8
        },
        "sourceFileCleanedLinesOfCode" : 24,
        "startLine" : 60,
        "endLine" : 68,
        "cleanedStartLine" : 18,
        "cleanedEndLine" : 23,
        "blockSize" : 6,
        "percentage" : 25.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/LoggedOut/LoggedOutInteractor.swift",
          "extension" : "swift",
          "linesOfCode" : 36,
          "unitsCount" : 2,
          "unitsMcCabeIndexSum" : 2,
          "linesOfCodeInUnits" : 8
        },
        "sourceFileCleanedLinesOfCode" : 24,
        "startLine" : 60,
        "endLine" : 68,
        "cleanedStartLine" : 18,
        "cleanedEndLine" : 23,
        "blockSize" : 6,
        "percentage" : 25.0
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
          "extension" : "java",
          "linesOfCode" : 79,
          "unitsCount" : 4,
          "unitsMcCabeIndexSum" : 4,
          "linesOfCodeInUnits" : 24
        },
        "sourceFileCleanedLinesOfCode" : 54,
        "startLine" : 63,
        "endLine" : 70,
        "cleanedStartLine" : 16,
        "cleanedEndLine" : 21,
        "blockSize" : 6,
        "percentage" : 11.11111111111111
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
          "extension" : "java",
          "linesOfCode" : 149,
          "unitsCount" : 6,
          "unitsMcCabeIndexSum" : 6,
          "linesOfCodeInUnits" : 55
        },
        "sourceFileCleanedLinesOfCode" : 107,
        "startLine" : 75,
        "endLine" : 82,
        "cleanedStartLine" : 18,
        "cleanedEndLine" : 23,
        "blockSize" : 6,
        "percentage" : 5.607476635514018
      }, {
        "sourceFile" : {
          "relativePath" : "android/tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
          "extension" : "java",
          "linesOfCode" : 103,
          "unitsCount" : 5,
          "unitsMcCabeIndexSum" : 5,
          "linesOfCodeInUnits" : 30
        },
        "sourceFileCleanedLinesOfCode" : 73,
        "startLine" : 68,
        "endLine" : 75,
        "cleanedStartLine" : 18,
        "cleanedEndLine" : 23,
        "blockSize" : 6,
        "percentage" : 8.219178082191782
      } ],
      "blockSize" : 6
    }, {
      "displayContent" : "",
      "duplicatedFileBlocks" : [ {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 7,
          "unitsMcCabeIndexSum" : 10,
          "linesOfCodeInUnits" : 44
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 22,
        "endLine" : 31,
        "cleanedStartLine" : 2,
        "cleanedEndLine" : 7,
        "blockSize" : 6,
        "percentage" : 8.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial3-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 7,
          "unitsMcCabeIndexSum" : 10,
          "linesOfCodeInUnits" : 44
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 22,
        "endLine" : 31,
        "cleanedStartLine" : 2,
        "cleanedEndLine" : 7,
        "blockSize" : 6,
        "percentage" : 8.0
      }, {
        "sourceFile" : {
          "relativePath" : "ios/tutorials/tutorial4-completed/TicTacToe/TicTacToe/TicTacToeViewController.swift",
          "extension" : "swift",
          "linesOfCode" : 98,
          "unitsCount" : 7,
          "unitsMcCabeIndexSum" : 10,
          "linesOfCodeInUnits" : 44
        },
        "sourceFileCleanedLinesOfCode" : 75,
        "startLine" : 22,
        "endLine" : 31,
        "cleanedStartLine" : 2,
        "cleanedEndLine" : 7,
        "blockSize" : 6,
        "percentage" : 8.0
      } ],
      "blockSize" : 6
    } ]
  },
  "contributorsAnalysisResults" : {
    "latestCommitDate" : "2024-03-21",
    "contributors" : [ {
      "email" : "tys@uber.com",
      "commitsCount" : 89,
      "commitsCount30Days" : 1,
      "commitsCount90Days" : 1,
      "commitsCount180Days" : 1,
      "commitsCount365Days" : 21,
      "firstCommitDate" : "2019-05-29",
      "latestCommitDate" : "2024-03-21",
      "activeYears" : [ "2019", "2021", "2022", "2023", "2024" ],
      "commitDates" : [ "2024-03-21", "2023-08-28", "2023-08-23", "2023-08-22", "2023-06-24", "2023-06-23", "2023-05-13", "2023-05-05", "2023-05-02", "2023-04-25", "2023-03-30", "2023-03-29", "2023-03-28", "2023-03-27", "2023-03-25", "2023-03-23", "2023-03-08", "2023-01-19", "2022-10-29", "2022-10-28", "2022-10-27", "2022-10-21", "2022-10-20", "2022-10-19", "2022-10-05", "2022-09-28", "2022-08-27", "2022-08-26", "2022-08-04", "2022-04-25", "2022-04-24", "2022-04-23", "2022-04-22", "2022-04-21", "2022-04-20", "2022-04-19", "2022-01-08", "2021-11-05", "2019-05-29" ],
      "active" : true,
      "rookie" : false
    }, {
      "email" : "attwell@uber.com",
      "commitsCount" : 88,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-10-09",
      "latestCommitDate" : "2017-11-17",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-17", "2017-11-05", "2017-11-04", "2017-11-03", "2017-11-02", "2017-11-01", "2017-10-31", "2017-10-30", "2017-10-29", "2017-10-19", "2017-10-13", "2017-10-12", "2017-10-11", "2017-10-10", "2017-10-09" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "jbarr@uber.com",
      "commitsCount" : 61,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 2,
      "commitsCount365Days" : 9,
      "firstCommitDate" : "2021-02-13",
      "latestCommitDate" : "2023-11-04",
      "activeYears" : [ "2021", "2022", "2023" ],
      "commitDates" : [ "2023-11-04", "2023-09-20", "2023-08-08", "2023-07-18", "2023-07-11", "2022-03-30", "2022-03-25", "2021-11-09", "2021-09-30", "2021-09-13", "2021-06-08", "2021-05-18", "2021-05-17", "2021-05-12", "2021-04-17", "2021-04-08", "2021-04-14", "2021-04-15", "2021-04-10", "2021-04-09", "2021-04-03", "2021-04-01", "2021-03-31", "2021-03-29", "2021-03-27", "2021-03-26", "2021-03-18", "2021-03-17", "2021-03-11", "2021-02-13" ],
      "active" : true,
      "rookie" : false
    }, {
      "email" : "jbarr21@users.noreply.github.com",
      "commitsCount" : 47,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 1,
      "commitsCount365Days" : 4,
      "firstCommitDate" : "2021-02-12",
      "latestCommitDate" : "2023-10-31",
      "activeYears" : [ "2021", "2022", "2023" ],
      "commitDates" : [ "2023-10-31", "2023-09-20", "2023-09-12", "2023-08-08", "2022-03-15", "2022-03-14", "2021-09-29", "2021-09-18", "2021-09-17", "2021-09-13", "2021-07-10", "2021-07-09", "2021-06-08", "2021-05-18", "2021-05-17", "2021-05-14", "2021-05-12", "2021-04-17", "2021-04-15", "2021-04-10", "2021-04-09", "2021-04-03", "2021-04-02", "2021-03-29", "2021-03-27", "2021-03-25", "2021-03-04", "2021-03-02", "2021-02-27", "2021-02-25", "2021-02-23", "2021-02-22", "2021-02-19", "2021-02-17", "2021-02-16", "2021-02-12" ],
      "active" : true,
      "rookie" : false
    }, {
      "email" : "psteiger@gmail.com",
      "commitsCount" : 31,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 6,
      "commitsCount365Days" : 31,
      "firstCommitDate" : "2023-04-11",
      "latestCommitDate" : "2023-11-27",
      "activeYears" : [ "2023" ],
      "commitDates" : [ "2023-11-27", "2023-11-21", "2023-11-09", "2023-10-17", "2023-10-03", "2023-09-21", "2023-08-23", "2023-07-25", "2023-05-10", "2023-05-18", "2023-05-14", "2023-05-16", "2023-05-15", "2023-05-12", "2023-05-04", "2023-05-02", "2023-04-28", "2023-04-27", "2023-04-11", "2023-04-15", "2023-04-12" ],
      "active" : true,
      "rookie" : true
    }, {
      "email" : "fran.aguilera@uber.com",
      "commitsCount" : 30,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 30,
      "firstCommitDate" : "2023-04-15",
      "latestCommitDate" : "2023-08-10",
      "activeYears" : [ "2023" ],
      "commitDates" : [ "2023-08-10", "2023-06-23", "2023-06-22", "2023-06-21", "2023-06-20", "2023-06-17", "2023-06-16", "2023-06-15", "2023-06-13", "2023-06-14", "2023-05-03", "2023-04-28", "2023-04-27", "2023-04-15" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "tuomas@artman.fi",
      "commitsCount" : 22,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-10-25",
      "latestCommitDate" : "2018-01-31",
      "activeYears" : [ "2017", "2018" ],
      "commitDates" : [ "2018-01-31", "2017-12-21", "2017-11-07", "2017-11-06", "2017-11-04", "2017-11-03", "2017-11-01", "2017-10-30", "2017-10-28", "2017-10-26", "2017-10-25" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "idanakav@uber.com",
      "commitsCount" : 14,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 4,
      "firstCommitDate" : "2022-12-27",
      "latestCommitDate" : "2023-08-31",
      "activeYears" : [ "2022", "2023" ],
      "commitDates" : [ "2023-08-31", "2023-08-29", "2023-01-06", "2022-12-27" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "gergely.orosz@gmail.com",
      "commitsCount" : 14,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-10-17",
      "latestCommitDate" : "2017-11-17",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-17", "2017-11-06", "2017-11-04", "2017-11-01", "2017-10-26", "2017-10-25", "2017-10-24", "2017-10-21", "2017-10-17" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "fran.aguilera12@gmail.com",
      "commitsCount" : 13,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 13,
      "firstCommitDate" : "2023-04-25",
      "latestCommitDate" : "2023-08-10",
      "activeYears" : [ "2023" ],
      "commitDates" : [ "2023-08-10", "2023-06-23", "2023-06-20", "2023-06-16", "2023-06-15", "2023-05-12", "2023-05-03", "2023-04-29", "2023-04-25" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "gergely@uber.com",
      "commitsCount" : 12,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-10-18",
      "latestCommitDate" : "2017-11-17",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-17", "2017-11-06", "2017-11-05", "2017-11-04", "2017-10-26", "2017-10-25", "2017-10-24", "2017-10-23", "2017-10-22", "2017-10-20", "2017-10-18" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "neakor@gmail.com",
      "commitsCount" : 11,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-10-12",
      "latestCommitDate" : "2019-05-21",
      "activeYears" : [ "2017", "2018", "2019" ],
      "commitDates" : [ "2019-05-21", "2019-05-03", "2018-02-12", "2017-12-27", "2017-12-05", "2017-10-18", "2017-10-12" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "kovpas@gmail.com",
      "commitsCount" : 11,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-10-19",
      "latestCommitDate" : "2017-11-14",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-14", "2017-10-30", "2017-10-28", "2017-10-27", "2017-10-26", "2017-10-19" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "cameron@sbarow.com",
      "commitsCount" : 9,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-10-26",
      "latestCommitDate" : "2017-11-28",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-28", "2017-11-27", "2017-11-21", "2017-11-17", "2017-11-14", "2017-11-01", "2017-10-31", "2017-10-26" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "pavel@uber.com",
      "commitsCount" : 8,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-10-18",
      "latestCommitDate" : "2017-11-11",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-11", "2017-10-30", "2017-10-26", "2017-10-24", "2017-10-18" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "tuomas@uber.com",
      "commitsCount" : 7,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-10-06",
      "latestCommitDate" : "2017-11-06",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-06", "2017-11-01", "2017-10-30", "2017-10-25", "2017-10-24", "2017-10-06" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "eric.r.drew@gmail.com",
      "commitsCount" : 6,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-12-04",
      "latestCommitDate" : "2018-04-25",
      "activeYears" : [ "2017", "2018" ],
      "commitDates" : [ "2018-04-25", "2018-04-15", "2018-01-09", "2017-12-04" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "msridhar@uber.com",
      "commitsCount" : 6,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-11-03",
      "latestCommitDate" : "2018-02-07",
      "activeYears" : [ "2017", "2018" ],
      "commitDates" : [ "2018-02-07", "2017-11-03" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "yuan.ethan.lu@gmail.com",
      "commitsCount" : 6,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-10-26",
      "latestCommitDate" : "2017-11-01",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-01", "2017-10-31", "2017-10-28", "2017-10-27", "2017-10-26" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "yiw@uber.com",
      "commitsCount" : 5,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-10-10",
      "latestCommitDate" : "2018-02-08",
      "activeYears" : [ "2017", "2018" ],
      "commitDates" : [ "2018-02-08", "2017-12-26", "2017-12-05", "2017-10-10" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "sergey.smykovskyi@uber.com",
      "commitsCount" : 4,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 4,
      "firstCommitDate" : "2023-04-18",
      "latestCommitDate" : "2023-04-25",
      "activeYears" : [ "2023" ],
      "commitDates" : [ "2023-04-25", "2023-04-18", "2023-04-20" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "leland@uber.com",
      "commitsCount" : 4,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2019-05-21",
      "latestCommitDate" : "2019-11-06",
      "activeYears" : [ "2019" ],
      "commitDates" : [ "2019-11-06", "2019-11-04", "2019-05-21" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "rendecano@gmail.com",
      "commitsCount" : 4,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2018-01-15",
      "latestCommitDate" : "2018-01-23",
      "activeYears" : [ "2018" ],
      "commitDates" : [ "2018-01-23", "2018-01-17", "2018-01-15" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "naokiishikawa0808@gmail.com",
      "commitsCount" : 4,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-11-28",
      "latestCommitDate" : "2018-01-05",
      "activeYears" : [ "2017", "2018" ],
      "commitDates" : [ "2018-01-05", "2017-12-21", "2017-12-05", "2017-11-28" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "yuanlu@uber.com",
      "commitsCount" : 4,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-10-26",
      "latestCommitDate" : "2017-10-30",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-10-30", "2017-10-28", "2017-10-27", "2017-10-26" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "82111345+sergeysmykovskyi@users.noreply.github.com",
      "commitsCount" : 3,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 2,
      "firstCommitDate" : "2022-08-09",
      "latestCommitDate" : "2023-04-27",
      "activeYears" : [ "2022", "2023" ],
      "commitDates" : [ "2023-04-27", "2023-04-23", "2022-08-09" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "psteig@ext.uber.com",
      "commitsCount" : 3,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2023-01-17",
      "latestCommitDate" : "2023-03-30",
      "activeYears" : [ "2023" ],
      "commitDates" : [ "2023-03-30", "2023-03-07", "2023-01-17" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "52428902+oliviernotteghem@users.noreply.github.com",
      "commitsCount" : 3,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2021-06-10",
      "latestCommitDate" : "2022-03-30",
      "activeYears" : [ "2021", "2022" ],
      "commitDates" : [ "2022-03-30", "2021-06-17", "2021-06-10" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "pandanomic@gmail.com",
      "commitsCount" : 3,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-10-06",
      "latestCommitDate" : "2017-11-08",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-08", "2017-11-06", "2017-10-06" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "alejandro.s1993@gmail.com",
      "commitsCount" : 2,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2021-04-08",
      "latestCommitDate" : "2021-05-08",
      "activeYears" : [ "2021" ],
      "commitDates" : [ "2021-05-08", "2021-04-08" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "13363349+uoooo@users.noreply.github.com",
      "commitsCount" : 2,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2019-05-15",
      "latestCommitDate" : "2019-05-24",
      "activeYears" : [ "2019" ],
      "commitDates" : [ "2019-05-24", "2019-05-15" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "mamykin.av@bk.ru",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 1,
      "commitsCount365Days" : 1,
      "firstCommitDate" : "2023-12-13",
      "latestCommitDate" : "2023-12-13",
      "activeYears" : [ "2023" ],
      "commitDates" : [ "2023-12-13" ],
      "active" : true,
      "rookie" : true
    }, {
      "email" : "106627781+davissuber@users.noreply.github.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 1,
      "firstCommitDate" : "2023-04-25",
      "latestCommitDate" : "2023-04-25",
      "activeYears" : [ "2023" ],
      "commitDates" : [ "2023-04-25" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "rudro@uber.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 1,
      "firstCommitDate" : "2023-04-25",
      "latestCommitDate" : "2023-04-25",
      "activeYears" : [ "2023" ],
      "commitDates" : [ "2023-04-25" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "solacestudios@icloud.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 1,
      "firstCommitDate" : "2023-04-25",
      "latestCommitDate" : "2023-04-25",
      "activeYears" : [ "2023" ],
      "commitDates" : [ "2023-04-25" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "110308072+solace-studios@users.noreply.github.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 1,
      "firstCommitDate" : "2023-04-23",
      "latestCommitDate" : "2023-04-23",
      "activeYears" : [ "2023" ],
      "commitDates" : [ "2023-04-23" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "ebubekirssezer@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2023-01-02",
      "latestCommitDate" : "2023-01-02",
      "activeYears" : [ "2023" ],
      "commitDates" : [ "2023-01-02" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "2078154+thekirankumar@users.noreply.github.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2022-09-26",
      "latestCommitDate" : "2022-09-26",
      "activeYears" : [ "2022" ],
      "commitDates" : [ "2022-09-26" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "kiran.kumar@uber.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2022-09-26",
      "latestCommitDate" : "2022-09-26",
      "activeYears" : [ "2022" ],
      "commitDates" : [ "2022-09-26" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "mathieu.brousse@maincare.fr",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2022-07-19",
      "latestCommitDate" : "2022-07-19",
      "activeYears" : [ "2022" ],
      "commitDates" : [ "2022-07-19" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "idanakav@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2022-05-19",
      "latestCommitDate" : "2022-05-19",
      "activeYears" : [ "2022" ],
      "commitDates" : [ "2022-05-19" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "31857308+woookdev@users.noreply.github.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2022-01-23",
      "latestCommitDate" : "2022-01-23",
      "activeYears" : [ "2022" ],
      "commitDates" : [ "2022-01-23" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "59746256+alexdtorres@users.noreply.github.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2021-12-24",
      "latestCommitDate" : "2021-12-24",
      "activeYears" : [ "2021" ],
      "commitDates" : [ "2021-12-24" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "eric.liu@uber.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2021-10-28",
      "latestCommitDate" : "2021-10-28",
      "activeYears" : [ "2021" ],
      "commitDates" : [ "2021-10-28" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "john.hansler@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2021-09-07",
      "latestCommitDate" : "2021-09-07",
      "activeYears" : [ "2021" ],
      "commitDates" : [ "2021-09-07" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "52437+tp@users.noreply.github.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2021-07-13",
      "latestCommitDate" : "2021-07-13",
      "activeYears" : [ "2021" ],
      "commitDates" : [ "2021-07-13" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "flip@kakao.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2021-05-23",
      "latestCommitDate" : "2021-05-23",
      "activeYears" : [ "2021" ],
      "commitDates" : [ "2021-05-23" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "gnurtduc@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2021-05-14",
      "latestCommitDate" : "2021-05-14",
      "activeYears" : [ "2021" ],
      "commitDates" : [ "2021-05-14" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "kge941228@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2021-05-14",
      "latestCommitDate" : "2021-05-14",
      "activeYears" : [ "2021" ],
      "commitDates" : [ "2021-05-14" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "rafaeldtoledo@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2021-04-08",
      "latestCommitDate" : "2021-04-08",
      "activeYears" : [ "2021" ],
      "commitDates" : [ "2021-04-08" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "44936625+jsdev887@users.noreply.github.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2021-03-25",
      "latestCommitDate" : "2021-03-25",
      "activeYears" : [ "2021" ],
      "commitDates" : [ "2021-03-25" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "run190822@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2021-03-25",
      "latestCommitDate" : "2021-03-25",
      "activeYears" : [ "2021" ],
      "commitDates" : [ "2021-03-25" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "pavlo.davydiuk@miquido.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2021-03-25",
      "latestCommitDate" : "2021-03-25",
      "activeYears" : [ "2021" ],
      "commitDates" : [ "2021-03-25" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "bmgbharath@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2021-03-11",
      "latestCommitDate" : "2021-03-11",
      "activeYears" : [ "2021" ],
      "commitDates" : [ "2021-03-11" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "tonythompsoncmu@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2021-03-11",
      "latestCommitDate" : "2021-03-11",
      "activeYears" : [ "2021" ],
      "commitDates" : [ "2021-03-11" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "sungwoon.park92@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2020-05-08",
      "latestCommitDate" : "2020-05-08",
      "activeYears" : [ "2020" ],
      "commitDates" : [ "2020-05-08" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "imairi@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2020-05-08",
      "latestCommitDate" : "2020-05-08",
      "activeYears" : [ "2020" ],
      "commitDates" : [ "2020-05-08" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "pomozoff@mail.ru",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2020-05-04",
      "latestCommitDate" : "2020-05-04",
      "activeYears" : [ "2020" ],
      "commitDates" : [ "2020-05-04" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "daimathieu@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2019-10-04",
      "latestCommitDate" : "2019-10-04",
      "activeYears" : [ "2019" ],
      "commitDates" : [ "2019-10-04" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "feglusha@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2019-06-19",
      "latestCommitDate" : "2019-06-19",
      "activeYears" : [ "2019" ],
      "commitDates" : [ "2019-06-19" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "shaishgandhi@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2019-06-12",
      "latestCommitDate" : "2019-06-12",
      "activeYears" : [ "2019" ],
      "commitDates" : [ "2019-06-12" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "jmkauf@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2019-05-03",
      "latestCommitDate" : "2019-05-03",
      "activeYears" : [ "2019" ],
      "commitDates" : [ "2019-05-03" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "duc.fet01@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2019-04-23",
      "latestCommitDate" : "2019-04-23",
      "activeYears" : [ "2019" ],
      "commitDates" : [ "2019-04-23" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "ikteish@yahoo.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2018-10-23",
      "latestCommitDate" : "2018-10-23",
      "activeYears" : [ "2018" ],
      "commitDates" : [ "2018-10-23" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "zmicier.zaleznicenka@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2018-09-14",
      "latestCommitDate" : "2018-09-14",
      "activeYears" : [ "2018" ],
      "commitDates" : [ "2018-09-14" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "zpnotes@icloud.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2018-05-12",
      "latestCommitDate" : "2018-05-12",
      "activeYears" : [ "2018" ],
      "commitDates" : [ "2018-05-12" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "jorge.coca@bmwna.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2018-04-21",
      "latestCommitDate" : "2018-04-21",
      "activeYears" : [ "2018" ],
      "commitDates" : [ "2018-04-21" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "serejahh@users.noreply.github.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2018-01-19",
      "latestCommitDate" : "2018-01-19",
      "activeYears" : [ "2018" ],
      "commitDates" : [ "2018-01-19" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "ctataru@hotmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-12-21",
      "latestCommitDate" : "2017-12-21",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-12-21" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "dmitry.klimkin@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-11-30",
      "latestCommitDate" : "2017-11-30",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-30" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "lukaciko@users.noreply.github.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-11-09",
      "latestCommitDate" : "2017-11-09",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-09" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "alex@iminichrispy.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-11-09",
      "latestCommitDate" : "2017-11-09",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-09" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "oronbz@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-11-08",
      "latestCommitDate" : "2017-11-08",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-08" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "lucas.nelaupe@gmail.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-11-08",
      "latestCommitDate" : "2017-11-08",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-08" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "patrickkerrypei@users.noreply.github.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-11-06",
      "latestCommitDate" : "2017-11-06",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-06" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "dayanruben@users.noreply.github.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-11-06",
      "latestCommitDate" : "2017-11-06",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-06" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "me@kilian.io",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-11-06",
      "latestCommitDate" : "2017-11-06",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-06" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "alexandru.culeva@ellation.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-11-04",
      "latestCommitDate" : "2017-11-04",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-11-04" ],
      "active" : false,
      "rookie" : false
    }, {
      "email" : "1827517+neakor@users.noreply.github.com",
      "commitsCount" : 1,
      "commitsCount30Days" : 0,
      "commitsCount90Days" : 0,
      "commitsCount180Days" : 0,
      "commitsCount365Days" : 0,
      "firstCommitDate" : "2017-10-10",
      "latestCommitDate" : "2017-10-10",
      "activeYears" : [ "2017" ],
      "commitDates" : [ "2017-10-10" ],
      "active" : false,
      "rookie" : false
    } ],
    "contributorsPerYear" : [ {
      "timeSlot" : "2017",
      "contributorsCount" : 27,
      "commitsCount" : 209
    }, {
      "timeSlot" : "2018",
      "contributorsCount" : 12,
      "commitsCount" : 24
    }, {
      "timeSlot" : "2019",
      "contributorsCount" : 9,
      "commitsCount" : 15
    }, {
      "timeSlot" : "2020",
      "contributorsCount" : 3,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2021",
      "contributorsCount" : 18,
      "commitsCount" : 108
    }, {
      "timeSlot" : "2022",
      "contributorsCount" : 11,
      "commitsCount" : 73
    }, {
      "timeSlot" : "2023",
      "contributorsCount" : 16,
      "commitsCount" : 141
    }, {
      "timeSlot" : "2024",
      "contributorsCount" : 1,
      "commitsCount" : 1
    } ],
    "contributorsPerMonth" : [ {
      "timeSlot" : "2017-10",
      "contributorsCount" : 14,
      "commitsCount" : 103
    }, {
      "timeSlot" : "2017-11",
      "contributorsCount" : 21,
      "commitsCount" : 95
    }, {
      "timeSlot" : "2017-12",
      "contributorsCount" : 6,
      "commitsCount" : 11
    }, {
      "timeSlot" : "2018-01",
      "contributorsCount" : 5,
      "commitsCount" : 10
    }, {
      "timeSlot" : "2018-02",
      "contributorsCount" : 3,
      "commitsCount" : 7
    }, {
      "timeSlot" : "2018-04",
      "contributorsCount" : 2,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2018-05",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-09",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-10",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-04",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-05",
      "contributorsCount" : 5,
      "commitsCount" : 9
    }, {
      "timeSlot" : "2019-06",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2019-10",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-11",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2020-05",
      "contributorsCount" : 3,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2021-02",
      "contributorsCount" : 2,
      "commitsCount" : 14
    }, {
      "timeSlot" : "2021-03",
      "contributorsCount" : 7,
      "commitsCount" : 24
    }, {
      "timeSlot" : "2021-04",
      "contributorsCount" : 4,
      "commitsCount" : 29
    }, {
      "timeSlot" : "2021-05",
      "contributorsCount" : 6,
      "commitsCount" : 12
    }, {
      "timeSlot" : "2021-06",
      "contributorsCount" : 3,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2021-07",
      "contributorsCount" : 2,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2021-09",
      "contributorsCount" : 3,
      "commitsCount" : 10
    }, {
      "timeSlot" : "2021-10",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-11",
      "contributorsCount" : 2,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2021-12",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-01",
      "contributorsCount" : 2,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2022-03",
      "contributorsCount" : 3,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2022-04",
      "contributorsCount" : 1,
      "commitsCount" : 33
    }, {
      "timeSlot" : "2022-05",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-07",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-08",
      "contributorsCount" : 2,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2022-09",
      "contributorsCount" : 3,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2022-10",
      "contributorsCount" : 1,
      "commitsCount" : 12
    }, {
      "timeSlot" : "2022-12",
      "contributorsCount" : 1,
      "commitsCount" : 9
    }, {
      "timeSlot" : "2023-01",
      "contributorsCount" : 4,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2023-03",
      "contributorsCount" : 2,
      "commitsCount" : 15
    }, {
      "timeSlot" : "2023-04",
      "contributorsCount" : 10,
      "commitsCount" : 23
    }, {
      "timeSlot" : "2023-05",
      "contributorsCount" : 4,
      "commitsCount" : 24
    }, {
      "timeSlot" : "2023-06",
      "contributorsCount" : 3,
      "commitsCount" : 32
    }, {
      "timeSlot" : "2023-07",
      "contributorsCount" : 2,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2023-08",
      "contributorsCount" : 7,
      "commitsCount" : 23
    }, {
      "timeSlot" : "2023-09",
      "contributorsCount" : 3,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2023-10",
      "contributorsCount" : 2,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2023-11",
      "contributorsCount" : 2,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2023-12",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2024-03",
      "contributorsCount" : 1,
      "commitsCount" : 1
    } ],
    "contributorsPerDay" : [ {
      "timeSlot" : "2017-10-06",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2017-10-09",
      "contributorsCount" : 1,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2017-10-10",
      "contributorsCount" : 3,
      "commitsCount" : 10
    }, {
      "timeSlot" : "2017-10-11",
      "contributorsCount" : 1,
      "commitsCount" : 10
    }, {
      "timeSlot" : "2017-10-12",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2017-10-13",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2017-10-17",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2017-10-18",
      "contributorsCount" : 3,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2017-10-19",
      "contributorsCount" : 2,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2017-10-20",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2017-10-21",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2017-10-22",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2017-10-23",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2017-10-24",
      "contributorsCount" : 4,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2017-10-25",
      "contributorsCount" : 4,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2017-10-26",
      "contributorsCount" : 8,
      "commitsCount" : 13
    }, {
      "timeSlot" : "2017-10-27",
      "contributorsCount" : 3,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2017-10-28",
      "contributorsCount" : 4,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2017-10-29",
      "contributorsCount" : 1,
      "commitsCount" : 10
    }, {
      "timeSlot" : "2017-10-30",
      "contributorsCount" : 6,
      "commitsCount" : 15
    }, {
      "timeSlot" : "2017-10-31",
      "contributorsCount" : 3,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2017-11-01",
      "contributorsCount" : 6,
      "commitsCount" : 13
    }, {
      "timeSlot" : "2017-11-02",
      "contributorsCount" : 1,
      "commitsCount" : 7
    }, {
      "timeSlot" : "2017-11-03",
      "contributorsCount" : 3,
      "commitsCount" : 15
    }, {
      "timeSlot" : "2017-11-04",
      "contributorsCount" : 5,
      "commitsCount" : 14
    }, {
      "timeSlot" : "2017-11-05",
      "contributorsCount" : 2,
      "commitsCount" : 11
    }, {
      "timeSlot" : "2017-11-06",
      "contributorsCount" : 8,
      "commitsCount" : 12
    }, {
      "timeSlot" : "2017-11-07",
      "contributorsCount" : 1,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2017-11-08",
      "contributorsCount" : 3,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2017-11-09",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2017-11-11",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2017-11-14",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2017-11-17",
      "contributorsCount" : 4,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2017-11-21",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2017-11-27",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2017-11-28",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2017-11-30",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2017-12-04",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2017-12-05",
      "contributorsCount" : 3,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2017-12-21",
      "contributorsCount" : 3,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2017-12-26",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2017-12-27",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-01-05",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-01-09",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2018-01-15",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-01-17",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2018-01-19",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-01-23",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-01-31",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2018-02-07",
      "contributorsCount" : 1,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2018-02-08",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-02-12",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-04-15",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2018-04-21",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-04-25",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-05-12",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-09-14",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-10-23",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-04-23",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-05-03",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2019-05-15",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-05-21",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2019-05-24",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-05-29",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-06-12",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-06-19",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-10-04",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-11-04",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-11-06",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2020-05-04",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2020-05-08",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2021-02-12",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-02-13",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2021-02-16",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-02-17",
      "contributorsCount" : 1,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2021-02-19",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2021-02-22",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-02-23",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-02-25",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2021-02-27",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-03-02",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-03-04",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-03-11",
      "contributorsCount" : 3,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2021-03-17",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2021-03-18",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-03-25",
      "contributorsCount" : 4,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2021-03-26",
      "contributorsCount" : 1,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2021-03-27",
      "contributorsCount" : 2,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2021-03-29",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2021-03-31",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-04-01",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-04-02",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-04-03",
      "contributorsCount" : 2,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2021-04-08",
      "contributorsCount" : 3,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2021-04-09",
      "contributorsCount" : 2,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2021-04-10",
      "contributorsCount" : 2,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2021-04-14",
      "contributorsCount" : 1,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2021-04-15",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2021-04-17",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2021-05-08",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-05-12",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2021-05-14",
      "contributorsCount" : 3,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2021-05-17",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2021-05-18",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2021-05-23",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-06-08",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2021-06-10",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-06-17",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-07-09",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-07-10",
      "contributorsCount" : 1,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2021-07-13",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-09-07",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-09-13",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2021-09-17",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2021-09-18",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-09-29",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-09-30",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2021-10-28",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-11-05",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-11-09",
      "contributorsCount" : 1,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2021-12-24",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-01-08",
      "contributorsCount" : 1,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2022-01-23",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-03-14",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-03-15",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-03-25",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-03-30",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2022-04-19",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2022-04-20",
      "contributorsCount" : 1,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2022-04-21",
      "contributorsCount" : 1,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2022-04-22",
      "contributorsCount" : 1,
      "commitsCount" : 7
    }, {
      "timeSlot" : "2022-04-23",
      "contributorsCount" : 1,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2022-04-24",
      "contributorsCount" : 1,
      "commitsCount" : 9
    }, {
      "timeSlot" : "2022-04-25",
      "contributorsCount" : 1,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2022-05-19",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-07-19",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-08-04",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-08-09",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-08-26",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-08-27",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-09-26",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2022-09-28",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-10-05",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-10-19",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-10-20",
      "contributorsCount" : 1,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2022-10-21",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2022-10-27",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-10-28",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-10-29",
      "contributorsCount" : 1,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2022-12-27",
      "contributorsCount" : 1,
      "commitsCount" : 9
    }, {
      "timeSlot" : "2023-01-02",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-01-06",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-01-17",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-01-19",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-03-07",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-03-08",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-03-23",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-03-25",
      "contributorsCount" : 1,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2023-03-27",
      "contributorsCount" : 1,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2023-03-28",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-03-29",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-03-30",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-04-11",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-04-12",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-04-15",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2023-04-18",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-04-20",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-04-23",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-04-25",
      "contributorsCount" : 6,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2023-04-27",
      "contributorsCount" : 3,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2023-04-28",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-04-29",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-05-02",
      "contributorsCount" : 2,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2023-05-03",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2023-05-04",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-05-05",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-05-10",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-05-12",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-05-13",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-05-14",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-05-15",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-05-16",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-05-18",
      "contributorsCount" : 1,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2023-06-13",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-06-14",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-06-15",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2023-06-16",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2023-06-17",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-06-20",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2023-06-21",
      "contributorsCount" : 1,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2023-06-22",
      "contributorsCount" : 1,
      "commitsCount" : 7
    }, {
      "timeSlot" : "2023-06-23",
      "contributorsCount" : 3,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2023-06-24",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-07-11",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-07-18",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-07-25",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-08-08",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2023-08-10",
      "contributorsCount" : 2,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2023-08-22",
      "contributorsCount" : 1,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2023-08-23",
      "contributorsCount" : 2,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2023-08-28",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-08-29",
      "contributorsCount" : 1,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2023-08-31",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-09-12",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-09-20",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2023-09-21",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-10-03",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-10-17",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-10-31",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-11-04",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-11-09",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-11-21",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-11-27",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-12-13",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2024-03-21",
      "contributorsCount" : 1,
      "commitsCount" : 1
    } ],
    "contributorsPerWeek" : [ {
      "timeSlot" : "2017-10-02",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2017-10-09",
      "contributorsCount" : 4,
      "commitsCount" : 27
    }, {
      "timeSlot" : "2017-10-16",
      "contributorsCount" : 6,
      "commitsCount" : 13
    }, {
      "timeSlot" : "2017-10-23",
      "contributorsCount" : 10,
      "commitsCount" : 42
    }, {
      "timeSlot" : "2017-10-30",
      "contributorsCount" : 12,
      "commitsCount" : 79
    }, {
      "timeSlot" : "2017-11-06",
      "contributorsCount" : 13,
      "commitsCount" : 21
    }, {
      "timeSlot" : "2017-11-13",
      "contributorsCount" : 5,
      "commitsCount" : 9
    }, {
      "timeSlot" : "2017-11-20",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2017-11-27",
      "contributorsCount" : 3,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2017-12-04",
      "contributorsCount" : 4,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2017-12-18",
      "contributorsCount" : 3,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2017-12-25",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2018-01-01",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-01-08",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2018-01-15",
      "contributorsCount" : 2,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2018-01-22",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-01-29",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2018-02-05",
      "contributorsCount" : 2,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2018-02-12",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-04-09",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2018-04-16",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-04-23",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-05-07",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-09-10",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2018-10-22",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-04-22",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-04-29",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2019-05-13",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-05-20",
      "contributorsCount" : 3,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2019-05-27",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-06-10",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-06-17",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-09-30",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2019-11-04",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2020-05-04",
      "contributorsCount" : 3,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2021-02-08",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2021-02-15",
      "contributorsCount" : 1,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2021-02-22",
      "contributorsCount" : 1,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2021-03-01",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2021-03-08",
      "contributorsCount" : 3,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2021-03-15",
      "contributorsCount" : 1,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2021-03-22",
      "contributorsCount" : 5,
      "commitsCount" : 12
    }, {
      "timeSlot" : "2021-03-29",
      "contributorsCount" : 2,
      "commitsCount" : 12
    }, {
      "timeSlot" : "2021-04-05",
      "contributorsCount" : 4,
      "commitsCount" : 14
    }, {
      "timeSlot" : "2021-04-12",
      "contributorsCount" : 2,
      "commitsCount" : 7
    }, {
      "timeSlot" : "2021-05-03",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-05-10",
      "contributorsCount" : 4,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2021-05-17",
      "contributorsCount" : 3,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2021-06-07",
      "contributorsCount" : 3,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2021-06-14",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-07-05",
      "contributorsCount" : 1,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2021-07-12",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-09-06",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-09-13",
      "contributorsCount" : 2,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2021-09-27",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2021-10-25",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-11-01",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2021-11-08",
      "contributorsCount" : 1,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2021-12-20",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-01-03",
      "contributorsCount" : 1,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2022-01-17",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-03-14",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2022-03-21",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-03-28",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2022-04-18",
      "contributorsCount" : 1,
      "commitsCount" : 30
    }, {
      "timeSlot" : "2022-04-25",
      "contributorsCount" : 1,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2022-05-16",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-07-18",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-08-01",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-08-08",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-08-22",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2022-09-26",
      "contributorsCount" : 3,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2022-10-03",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2022-10-17",
      "contributorsCount" : 1,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2022-10-24",
      "contributorsCount" : 1,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2022-12-26",
      "contributorsCount" : 1,
      "commitsCount" : 9
    }, {
      "timeSlot" : "2023-01-02",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-01-16",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-03-06",
      "contributorsCount" : 2,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-03-20",
      "contributorsCount" : 1,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2023-03-27",
      "contributorsCount" : 2,
      "commitsCount" : 7
    }, {
      "timeSlot" : "2023-04-10",
      "contributorsCount" : 2,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2023-04-17",
      "contributorsCount" : 3,
      "commitsCount" : 5
    }, {
      "timeSlot" : "2023-04-24",
      "contributorsCount" : 9,
      "commitsCount" : 12
    }, {
      "timeSlot" : "2023-05-01",
      "contributorsCount" : 4,
      "commitsCount" : 12
    }, {
      "timeSlot" : "2023-05-08",
      "contributorsCount" : 3,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2023-05-15",
      "contributorsCount" : 1,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2023-06-12",
      "contributorsCount" : 2,
      "commitsCount" : 11
    }, {
      "timeSlot" : "2023-06-19",
      "contributorsCount" : 3,
      "commitsCount" : 21
    }, {
      "timeSlot" : "2023-07-10",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-07-17",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-07-24",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-08-07",
      "contributorsCount" : 4,
      "commitsCount" : 8
    }, {
      "timeSlot" : "2023-08-21",
      "contributorsCount" : 2,
      "commitsCount" : 9
    }, {
      "timeSlot" : "2023-08-28",
      "contributorsCount" : 2,
      "commitsCount" : 6
    }, {
      "timeSlot" : "2023-09-11",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-09-18",
      "contributorsCount" : 3,
      "commitsCount" : 4
    }, {
      "timeSlot" : "2023-10-02",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-10-16",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-10-30",
      "contributorsCount" : 2,
      "commitsCount" : 3
    }, {
      "timeSlot" : "2023-11-06",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-11-20",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2023-11-27",
      "contributorsCount" : 1,
      "commitsCount" : 2
    }, {
      "timeSlot" : "2023-12-11",
      "contributorsCount" : 1,
      "commitsCount" : 1
    }, {
      "timeSlot" : "2024-03-18",
      "contributorsCount" : 1,
      "commitsCount" : 1
    } ],
    "commitsPerExtensions" : [ {
      "extension" : "kt",
      "commitsCount" : 1585,
      "committers" : [ "tys@uber.com", "mamykin.av@bk.ru", "psteiger@gmail.com", "jbarr21@users.noreply.github.com", "idanakav@uber.com", "fran.aguilera12@gmail.com", "fran.aguilera@uber.com", "82111345+sergeysmykovskyi@users.noreply.github.com", "psteig@ext.uber.com", "sergey.smykovskyi@uber.com", "106627781+davissuber@users.noreply.github.com", "2078154+thekirankumar@users.noreply.github.com", "kiran.kumar@uber.com", "mathieu.brousse@maincare.fr", "idanakav@gmail.com", "52428902+oliviernotteghem@users.noreply.github.com", "eric.liu@uber.com", "john.hansler@gmail.com", "jbarr@uber.com" ],
      "filesCount" : 318,
      "commitsCount30Days" : 2,
      "committers30Days" : [ "tys@uber.com" ],
      "filesCount30Days" : 2,
      "commitsCount90Days" : 2,
      "committers90Days" : [ "tys@uber.com" ],
      "filesCount90Days" : 2,
      "contributorPerExtensionStats" : [ {
        "contributor" : "fran.aguilera@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 155
      }, {
        "contributor" : "kiran.kumar@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "fran.aguilera12@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 55
      }, {
        "contributor" : "idanakav@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "52428902+oliviernotteghem@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 31
      }, {
        "contributor" : "82111345+sergeysmykovskyi@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 185
      }, {
        "contributor" : "eric.liu@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 13
      }, {
        "contributor" : "tys@uber.com",
        "fileUpdates30Days" : 2,
        "fileUpdates90Days" : 2,
        "fileUpdates" : 286
      }, {
        "contributor" : "psteiger@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 132
      }, {
        "contributor" : "sergey.smykovskyi@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 206
      }, {
        "contributor" : "mathieu.brousse@maincare.fr",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "john.hansler@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "jbarr21@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 211
      }, {
        "contributor" : "jbarr@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 241
      }, {
        "contributor" : "mamykin.av@bk.ru",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "idanakav@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 21
      }, {
        "contributor" : "psteig@ext.uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 6
      }, {
        "contributor" : "106627781+davissuber@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 30
      }, {
        "contributor" : "2078154+thekirankumar@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      } ]
    }, {
      "extension" : "md",
      "commitsCount" : 263,
      "committers" : [ "psteiger@gmail.com", "jbarr@uber.com", "tys@uber.com", "fran.aguilera@uber.com", "fran.aguilera12@gmail.com", "solacestudios@icloud.com", "110308072+solace-studios@users.noreply.github.com", "59746256+alexdtorres@users.noreply.github.com", "jbarr21@users.noreply.github.com", "52428902+oliviernotteghem@users.noreply.github.com", "alejandro.s1993@gmail.com", "leland@uber.com", "neakor@gmail.com", "jmkauf@gmail.com", "eric.r.drew@gmail.com", "yiw@uber.com", "tuomas@artman.fi", "serejahh@users.noreply.github.com", "naokiishikawa0808@gmail.com", "ctataru@hotmail.com", "attwell@uber.com", "gergely.orosz@gmail.com", "gergely@uber.com", "kovpas@gmail.com", "patrickkerrypei@users.noreply.github.com", "dayanruben@users.noreply.github.com", "pandanomic@gmail.com", "yuan.ethan.lu@gmail.com", "tuomas@uber.com", "pavel@uber.com", "yuanlu@uber.com" ],
      "filesCount" : 59,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "yiw@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "fran.aguilera12@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 4
      }, {
        "contributor" : "eric.r.drew@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "tuomas@artman.fi",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 27
      }, {
        "contributor" : "tys@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 58
      }, {
        "contributor" : "yuanlu@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "gergely@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 10
      }, {
        "contributor" : "59746256+alexdtorres@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "jbarr21@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 6
      }, {
        "contributor" : "pandanomic@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "leland@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "dayanruben@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "110308072+solace-studios@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "neakor@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "solacestudios@icloud.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 12
      }, {
        "contributor" : "fran.aguilera@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "naokiishikawa0808@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "patrickkerrypei@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "pavel@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 7
      }, {
        "contributor" : "52428902+oliviernotteghem@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 6
      }, {
        "contributor" : "jmkauf@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "kovpas@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 10
      }, {
        "contributor" : "serejahh@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "ctataru@hotmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "psteiger@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 8
      }, {
        "contributor" : "alejandro.s1993@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "jbarr@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 35
      }, {
        "contributor" : "gergely.orosz@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 11
      }, {
        "contributor" : "yuan.ethan.lu@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "attwell@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 43
      } ]
    }, {
      "extension" : "swift",
      "commitsCount" : 1048,
      "committers" : [ "tys@uber.com", "31857308+woookdev@users.noreply.github.com", "52437+tp@users.noreply.github.com", "flip@kakao.com", "gnurtduc@gmail.com", "kge941228@gmail.com", "44936625+jsdev887@users.noreply.github.com", "run190822@gmail.com", "pavlo.davydiuk@miquido.com", "imairi@gmail.com", "pomozoff@mail.ru", "daimathieu@gmail.com", "neakor@gmail.com", "jmkauf@gmail.com", "duc.fet01@gmail.com", "zmicier.zaleznicenka@gmail.com", "zpnotes@icloud.com", "eric.r.drew@gmail.com", "yiw@uber.com", "cameron@sbarow.com", "naokiishikawa0808@gmail.com", "kovpas@gmail.com", "pavel@uber.com", "alex@iminichrispy.com", "oronbz@gmail.com", "lucas.nelaupe@gmail.com", "tuomas@artman.fi", "tuomas@uber.com", "gergely.orosz@gmail.com", "gergely@uber.com" ],
      "filesCount" : 656,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "yiw@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 14
      }, {
        "contributor" : "alex@iminichrispy.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 9
      }, {
        "contributor" : "eric.r.drew@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 56
      }, {
        "contributor" : "tuomas@artman.fi",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 96
      }, {
        "contributor" : "kge941228@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 71
      }, {
        "contributor" : "tys@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "gergely@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 25
      }, {
        "contributor" : "31857308+woookdev@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "run190822@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 5
      }, {
        "contributor" : "flip@kakao.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "imairi@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "neakor@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 46
      }, {
        "contributor" : "lucas.nelaupe@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "52437+tp@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "pavlo.davydiuk@miquido.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 68
      }, {
        "contributor" : "cameron@sbarow.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 81
      }, {
        "contributor" : "44936625+jsdev887@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "naokiishikawa0808@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 6
      }, {
        "contributor" : "pavel@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 354
      }, {
        "contributor" : "gnurtduc@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "jmkauf@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 5
      }, {
        "contributor" : "kovpas@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 168
      }, {
        "contributor" : "oronbz@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "zpnotes@icloud.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "pomozoff@mail.ru",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 5
      }, {
        "contributor" : "duc.fet01@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "gergely.orosz@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 16
      }, {
        "contributor" : "daimathieu@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 4
      }, {
        "contributor" : "zmicier.zaleznicenka@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      } ]
    }, {
      "extension" : "gradle",
      "commitsCount" : 634,
      "committers" : [ "jbarr21@users.noreply.github.com", "idanakav@uber.com", "psteiger@gmail.com", "fran.aguilera12@gmail.com", "fran.aguilera@uber.com", "82111345+sergeysmykovskyi@users.noreply.github.com", "sergey.smykovskyi@uber.com", "106627781+davissuber@users.noreply.github.com", "tys@uber.com", "idanakav@gmail.com", "52428902+oliviernotteghem@users.noreply.github.com", "jbarr@uber.com", "rafaeldtoledo@gmail.com", "feglusha@gmail.com", "shaishgandhi@gmail.com", "13363349+uoooo@users.noreply.github.com", "leland@uber.com", "msridhar@uber.com", "lukaciko@users.noreply.github.com", "tuomas@artman.fi", "attwell@uber.com", "yuan.ethan.lu@gmail.com", "yuanlu@uber.com", "tuomas@uber.com" ],
      "filesCount" : 49,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "msridhar@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 8
      }, {
        "contributor" : "fran.aguilera@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "fran.aguilera12@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "idanakav@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "rafaeldtoledo@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 4
      }, {
        "contributor" : "feglusha@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 19
      }, {
        "contributor" : "52428902+oliviernotteghem@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 11
      }, {
        "contributor" : "tuomas@artman.fi",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 5
      }, {
        "contributor" : "shaishgandhi@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 7
      }, {
        "contributor" : "82111345+sergeysmykovskyi@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "tys@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 101
      }, {
        "contributor" : "yuanlu@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 5
      }, {
        "contributor" : "lukaciko@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "psteiger@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 87
      }, {
        "contributor" : "sergey.smykovskyi@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "jbarr21@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 150
      }, {
        "contributor" : "leland@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "jbarr@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 35
      }, {
        "contributor" : "13363349+uoooo@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 23
      }, {
        "contributor" : "yuan.ethan.lu@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 5
      }, {
        "contributor" : "idanakav@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 13
      }, {
        "contributor" : "attwell@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 129
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 6
      }, {
        "contributor" : "106627781+davissuber@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 10
      } ]
    }, {
      "extension" : "java",
      "commitsCount" : 2042,
      "committers" : [ "idanakav@uber.com", "tys@uber.com", "fran.aguilera@uber.com", "82111345+sergeysmykovskyi@users.noreply.github.com", "sergey.smykovskyi@uber.com", "idanakav@gmail.com", "jbarr@uber.com", "jbarr21@users.noreply.github.com", "52428902+oliviernotteghem@users.noreply.github.com", "bmgbharath@gmail.com", "tonythompsoncmu@gmail.com", "feglusha@gmail.com", "shaishgandhi@gmail.com", "13363349+uoooo@users.noreply.github.com", "rendecano@gmail.com", "tuomas@artman.fi", "attwell@uber.com", "yuan.ethan.lu@gmail.com", "yuanlu@uber.com", "gergely.orosz@gmail.com", "gergely@uber.com", "tuomas@uber.com" ],
      "filesCount" : 931,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "fran.aguilera@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "idanakav@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "feglusha@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 86
      }, {
        "contributor" : "52428902+oliviernotteghem@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 54
      }, {
        "contributor" : "tuomas@artman.fi",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 138
      }, {
        "contributor" : "shaishgandhi@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 13
      }, {
        "contributor" : "82111345+sergeysmykovskyi@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 163
      }, {
        "contributor" : "tys@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 12
      }, {
        "contributor" : "yuanlu@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 115
      }, {
        "contributor" : "gergely@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 19
      }, {
        "contributor" : "sergey.smykovskyi@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 319
      }, {
        "contributor" : "jbarr21@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 472
      }, {
        "contributor" : "tonythompsoncmu@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "jbarr@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 15
      }, {
        "contributor" : "bmgbharath@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "13363349+uoooo@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 8
      }, {
        "contributor" : "gergely.orosz@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 19
      }, {
        "contributor" : "yuan.ethan.lu@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 116
      }, {
        "contributor" : "idanakav@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 4
      }, {
        "contributor" : "rendecano@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 34
      }, {
        "contributor" : "attwell@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 444
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 4
      } ]
    }, {
      "extension" : "xml",
      "commitsCount" : 270,
      "committers" : [ "idanakav@uber.com", "jbarr@uber.com", "fran.aguilera12@gmail.com", "fran.aguilera@uber.com", "psteiger@gmail.com", "82111345+sergeysmykovskyi@users.noreply.github.com", "sergey.smykovskyi@uber.com", "idanakav@gmail.com", "tys@uber.com", "jbarr21@users.noreply.github.com", "52428902+oliviernotteghem@users.noreply.github.com", "13363349+uoooo@users.noreply.github.com", "rendecano@gmail.com", "tuomas@artman.fi", "attwell@uber.com", "gergely.orosz@gmail.com", "gergely@uber.com", "yuan.ethan.lu@gmail.com", "yuanlu@uber.com", "tuomas@uber.com" ],
      "filesCount" : 130,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "fran.aguilera@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 8
      }, {
        "contributor" : "fran.aguilera12@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 8
      }, {
        "contributor" : "idanakav@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "52428902+oliviernotteghem@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 16
      }, {
        "contributor" : "tuomas@artman.fi",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 28
      }, {
        "contributor" : "82111345+sergeysmykovskyi@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 19
      }, {
        "contributor" : "tys@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 7
      }, {
        "contributor" : "yuanlu@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 18
      }, {
        "contributor" : "gergely@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "psteiger@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 9
      }, {
        "contributor" : "sergey.smykovskyi@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 38
      }, {
        "contributor" : "jbarr21@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 16
      }, {
        "contributor" : "jbarr@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "13363349+uoooo@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "gergely.orosz@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "yuan.ethan.lu@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 18
      }, {
        "contributor" : "idanakav@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 8
      }, {
        "contributor" : "rendecano@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "attwell@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 59
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 10
      } ]
    }, {
      "extension" : "",
      "commitsCount" : 43,
      "committers" : [ "rudro@uber.com", "ebubekirssezer@gmail.com", "pavlo.davydiuk@miquido.com", "sungwoon.park92@gmail.com", "imairi@gmail.com", "daimathieu@gmail.com", "jmkauf@gmail.com", "cameron@sbarow.com", "kovpas@gmail.com", "alexandru.culeva@ellation.com", "tuomas@uber.com", "tuomas@artman.fi", "pavel@uber.com", "attwell@uber.com", "yiw@uber.com" ],
      "filesCount" : 20,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "yiw@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "pavel@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 5
      }, {
        "contributor" : "tuomas@artman.fi",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 4
      }, {
        "contributor" : "jmkauf@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "kovpas@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 8
      }, {
        "contributor" : "ebubekirssezer@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "imairi@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "rudro@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "attwell@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "pavlo.davydiuk@miquido.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "sungwoon.park92@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 6
      }, {
        "contributor" : "daimathieu@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "alexandru.culeva@ellation.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 5
      }, {
        "contributor" : "cameron@sbarow.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      } ]
    }, {
      "extension" : "png",
      "commitsCount" : 221,
      "committers" : [ "fran.aguilera12@gmail.com", "fran.aguilera@uber.com", "tys@uber.com", "jbarr21@users.noreply.github.com", "52428902+oliviernotteghem@users.noreply.github.com", "kovpas@gmail.com", "cameron@sbarow.com", "tuomas@artman.fi", "gergely.orosz@gmail.com", "gergely@uber.com", "yuan.ethan.lu@gmail.com", "attwell@uber.com", "tuomas@uber.com", "yuanlu@uber.com", "pavel@uber.com" ],
      "filesCount" : 165,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "fran.aguilera@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 10
      }, {
        "contributor" : "fran.aguilera12@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 10
      }, {
        "contributor" : "pavel@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "52428902+oliviernotteghem@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 14
      }, {
        "contributor" : "tuomas@artman.fi",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 36
      }, {
        "contributor" : "kovpas@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 5
      }, {
        "contributor" : "tys@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 5
      }, {
        "contributor" : "yuanlu@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 15
      }, {
        "contributor" : "gergely@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 16
      }, {
        "contributor" : "jbarr21@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 11
      }, {
        "contributor" : "gergely.orosz@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 10
      }, {
        "contributor" : "yuan.ethan.lu@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 18
      }, {
        "contributor" : "attwell@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 52
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 14
      }, {
        "contributor" : "cameron@sbarow.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      } ]
    }, {
      "extension" : "podspec",
      "commitsCount" : 17,
      "committers" : [ "rudro@uber.com", "ebubekirssezer@gmail.com", "pavlo.davydiuk@miquido.com", "imairi@gmail.com", "daimathieu@gmail.com", "jmkauf@gmail.com", "neakor@gmail.com", "yiw@uber.com", "gergely@uber.com", "tuomas@uber.com", "me@kilian.io", "tuomas@artman.fi", "cameron@sbarow.com", "1827517+neakor@users.noreply.github.com" ],
      "filesCount" : 2,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "yiw@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "me@kilian.io",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "tuomas@artman.fi",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "jmkauf@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "1827517+neakor@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "gergely@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "ebubekirssezer@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "imairi@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "neakor@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "rudro@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "pavlo.davydiuk@miquido.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "daimathieu@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "cameron@sbarow.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      } ]
    }, {
      "extension" : "pbxproj",
      "commitsCount" : 49,
      "committers" : [ "pavlo.davydiuk@miquido.com", "sungwoon.park92@gmail.com", "pomozoff@mail.ru", "daimathieu@gmail.com", "jmkauf@gmail.com", "ikteish@yahoo.com", "eric.r.drew@gmail.com", "cameron@sbarow.com", "kovpas@gmail.com", "pavel@uber.com", "tuomas@uber.com", "tuomas@artman.fi", "neakor@gmail.com", "yiw@uber.com" ],
      "filesCount" : 15,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "yiw@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "eric.r.drew@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 9
      }, {
        "contributor" : "pavel@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 6
      }, {
        "contributor" : "tuomas@artman.fi",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 4
      }, {
        "contributor" : "jmkauf@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "kovpas@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 7
      }, {
        "contributor" : "pomozoff@mail.ru",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "ikteish@yahoo.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "neakor@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "pavlo.davydiuk@miquido.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "sungwoon.park92@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 6
      }, {
        "contributor" : "daimathieu@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "cameron@sbarow.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 5
      } ]
    }, {
      "extension" : "yml",
      "commitsCount" : 25,
      "committers" : [ "tys@uber.com", "jbarr21@users.noreply.github.com", "alejandro.s1993@gmail.com", "pomozoff@mail.ru", "feglusha@gmail.com", "13363349+uoooo@users.noreply.github.com", "jmkauf@gmail.com", "cameron@sbarow.com", "pandanomic@gmail.com", "attwell@uber.com", "tuomas@artman.fi", "tuomas@uber.com" ],
      "filesCount" : 2,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "alejandro.s1993@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "jbarr21@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 9
      }, {
        "contributor" : "pandanomic@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "feglusha@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "tuomas@artman.fi",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "13363349+uoooo@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "jmkauf@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "attwell@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "tys@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "pomozoff@mail.ru",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "cameron@sbarow.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      } ]
    }, {
      "extension" : "properties",
      "commitsCount" : 112,
      "committers" : [ "psteiger@gmail.com", "jbarr@uber.com", "tys@uber.com", "jbarr21@users.noreply.github.com", "52428902+oliviernotteghem@users.noreply.github.com", "leland@uber.com", "feglusha@gmail.com", "13363349+uoooo@users.noreply.github.com", "jorge.coca@bmwna.com", "attwell@uber.com", "msridhar@uber.com", "tuomas@uber.com" ],
      "filesCount" : 27,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "msridhar@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "jbarr21@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 12
      }, {
        "contributor" : "leland@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "jbarr@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 28
      }, {
        "contributor" : "feglusha@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "52428902+oliviernotteghem@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "13363349+uoooo@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "attwell@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 23
      }, {
        "contributor" : "tys@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 31
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 4
      }, {
        "contributor" : "jorge.coca@bmwna.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "psteiger@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 5
      } ]
    }, {
      "extension" : "plist",
      "commitsCount" : 42,
      "committers" : [ "jmkauf@gmail.com", "naokiishikawa0808@gmail.com", "dmitry.klimkin@gmail.com", "kovpas@gmail.com", "cameron@sbarow.com", "gergely@uber.com", "gergely.orosz@gmail.com", "tuomas@artman.fi", "tuomas@uber.com", "pavel@uber.com" ],
      "filesCount" : 26,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "naokiishikawa0808@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "pavel@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 10
      }, {
        "contributor" : "tuomas@artman.fi",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 6
      }, {
        "contributor" : "gergely.orosz@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 4
      }, {
        "contributor" : "jmkauf@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "kovpas@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 7
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 4
      }, {
        "contributor" : "gergely@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 7
      }, {
        "contributor" : "dmitry.klimkin@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "cameron@sbarow.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      } ]
    }, {
      "extension" : "sh",
      "commitsCount" : 16,
      "committers" : [ "tys@uber.com", "jbarr@uber.com", "naokiishikawa0808@gmail.com", "eric.r.drew@gmail.com", "dmitry.klimkin@gmail.com", "cameron@sbarow.com", "tuomas@uber.com", "pavel@uber.com", "gergely.orosz@gmail.com", "gergely@uber.com" ],
      "filesCount" : 5,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "eric.r.drew@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "jbarr@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "naokiishikawa0808@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "pavel@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "gergely.orosz@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "tys@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "gergely@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "dmitry.klimkin@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "cameron@sbarow.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      } ]
    }, {
      "extension" : "jar",
      "commitsCount" : 10,
      "committers" : [ "jbarr21@users.noreply.github.com", "rendecano@gmail.com", "gergely.orosz@gmail.com", "gergely@uber.com", "attwell@uber.com", "tuomas@uber.com" ],
      "filesCount" : 4,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "jbarr21@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "gergely.orosz@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "rendecano@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "attwell@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "gergely@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      } ]
    }, {
      "extension" : "xcworkspacedata",
      "commitsCount" : 18,
      "committers" : [ "tuomas@artman.fi", "kovpas@gmail.com", "pavel@uber.com", "yiw@uber.com", "tuomas@uber.com" ],
      "filesCount" : 14,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "yiw@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "pavel@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 6
      }, {
        "contributor" : "tuomas@artman.fi",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 4
      }, {
        "contributor" : "kovpas@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 6
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      } ]
    }, {
      "extension" : "template",
      "commitsCount" : 98,
      "committers" : [ "jbarr21@users.noreply.github.com", "feglusha@gmail.com", "rendecano@gmail.com", "attwell@uber.com" ],
      "filesCount" : 61,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "jbarr21@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "feglusha@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 7
      }, {
        "contributor" : "rendecano@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 48
      }, {
        "contributor" : "attwell@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 42
      } ]
    }, {
      "extension" : "lock",
      "commitsCount" : 7,
      "committers" : [ "cameron@sbarow.com", "pavel@uber.com", "kovpas@gmail.com", "yiw@uber.com" ],
      "filesCount" : 4,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "yiw@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "pavel@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      }, {
        "contributor" : "kovpas@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "cameron@sbarow.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      } ]
    }, {
      "extension" : "toml",
      "commitsCount" : 8,
      "committers" : [ "idanakav@uber.com", "psteiger@gmail.com", "tys@uber.com", "jbarr21@users.noreply.github.com" ],
      "filesCount" : 2,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "jbarr21@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "idanakav@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "tys@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "psteiger@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      } ]
    }, {
      "extension" : "gitignore",
      "commitsCount" : 3,
      "committers" : [ "cameron@sbarow.com", "tuomas@artman.fi", "tuomas@uber.com" ],
      "filesCount" : 1,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "tuomas@artman.fi",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "cameron@sbarow.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      } ]
    }, {
      "extension" : "xcscheme",
      "commitsCount" : 3,
      "committers" : [ "eric.r.drew@gmail.com", "cameron@sbarow.com", "tuomas@artman.fi" ],
      "filesCount" : 1,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "eric.r.drew@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "tuomas@artman.fi",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "cameron@sbarow.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      } ]
    }, {
      "extension" : "form",
      "commitsCount" : 7,
      "committers" : [ "idanakav@uber.com", "rendecano@gmail.com", "attwell@uber.com" ],
      "filesCount" : 3,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "idanakav@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "rendecano@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "attwell@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      } ]
    }, {
      "extension" : "swift-version",
      "commitsCount" : 2,
      "committers" : [ "jmkauf@gmail.com", "tuomas@artman.fi" ],
      "filesCount" : 1,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "tuomas@artman.fi",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "jmkauf@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      } ]
    }, {
      "extension" : "json",
      "commitsCount" : 2,
      "committers" : [ "52428902+oliviernotteghem@users.noreply.github.com", "pavel@uber.com" ],
      "filesCount" : 2,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "pavel@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "52428902+oliviernotteghem@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      } ]
    }, {
      "extension" : "h",
      "commitsCount" : 12,
      "committers" : [ "pavel@uber.com", "tuomas@uber.com" ],
      "filesCount" : 12,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "pavel@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 11
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      } ]
    }, {
      "extension" : "kts",
      "commitsCount" : 18,
      "committers" : [ "psteiger@gmail.com", "jbarr21@users.noreply.github.com" ],
      "filesCount" : 12,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "jbarr21@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      }, {
        "contributor" : "psteiger@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 16
      } ]
    }, {
      "extension" : "txt",
      "commitsCount" : 3,
      "committers" : [ "attwell@uber.com", "tuomas@uber.com" ],
      "filesCount" : 2,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "attwell@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      }, {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 2
      } ]
    }, {
      "extension" : "partial",
      "commitsCount" : 14,
      "committers" : [ "rendecano@gmail.com", "attwell@uber.com" ],
      "filesCount" : 10,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "rendecano@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 4
      }, {
        "contributor" : "attwell@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 10
      } ]
    }, {
      "extension" : "js",
      "commitsCount" : 3,
      "committers" : [ "52428902+oliviernotteghem@users.noreply.github.com" ],
      "filesCount" : 3,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "52428902+oliviernotteghem@users.noreply.github.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 3
      } ]
    }, {
      "extension" : "modulemap",
      "commitsCount" : 5,
      "committers" : [ "pavel@uber.com" ],
      "filesCount" : 5,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "pavel@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 5
      } ]
    }, {
      "extension" : "xib",
      "commitsCount" : 1,
      "committers" : [ "dmitry.klimkin@gmail.com" ],
      "filesCount" : 1,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "dmitry.klimkin@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      } ]
    }, {
      "extension" : "pch",
      "commitsCount" : 4,
      "committers" : [ "pavel@uber.com" ],
      "filesCount" : 4,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "pavel@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 4
      } ]
    }, {
      "extension" : "bat",
      "commitsCount" : 1,
      "committers" : [ "tuomas@uber.com" ],
      "filesCount" : 1,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "tuomas@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      } ]
    }, {
      "extension" : "markdown",
      "commitsCount" : 1,
      "committers" : [ "pavel@uber.com" ],
      "filesCount" : 1,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "pavel@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      } ]
    }, {
      "extension" : "storyboard",
      "commitsCount" : 1,
      "committers" : [ "naokiishikawa0808@gmail.com" ],
      "filesCount" : 1,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "naokiishikawa0808@gmail.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 1
      } ]
    }, {
      "extension" : "m",
      "commitsCount" : 9,
      "committers" : [ "pavel@uber.com" ],
      "filesCount" : 9,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "pavel@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 9
      } ]
    }, {
      "extension" : "xcconfig",
      "commitsCount" : 6,
      "committers" : [ "pavel@uber.com" ],
      "filesCount" : 6,
      "commitsCount30Days" : 0,
      "committers30Days" : [ ],
      "filesCount30Days" : 0,
      "commitsCount90Days" : 0,
      "committers90Days" : [ ],
      "filesCount90Days" : 0,
      "contributorPerExtensionStats" : [ {
        "contributor" : "pavel@uber.com",
        "fileUpdates30Days" : 0,
        "fileUpdates90Days" : 0,
        "fileUpdates" : 6
      } ]
    } ]
  },
  "numberOfExcludedFiles" : 52,
  "excludedExtensions" : {
    "" : 8,
    "template" : 22,
    "gitignore" : 1,
    "pbxproj" : 7,
    "xcscheme" : 1,
    "js" : 1,
    "txt" : 1,
    "swift-version" : 1,
    "form" : 1,
    "md" : 1,
    "json" : 1,
    "yml" : 2,
    "partial" : 4,
    "properties" : 1
  },
  "analysisStartTimeMs" : 1712147737084,
  "maxLinesOfCode" : 18845,
  "maxFileCount" : 516
}