{
  "title" : "Duplication",
  "timestamp" : "2026-01-18 16:47:48",
  "duplicates" : [ {
    "blockSize" : 15,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/test-integration/kotlin/org/jetbrains/teamcity/github/GitHubWebHookSuggestionTest.kt",
        "extension" : "kt",
        "linesOfCode" : 159,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 133,
      "startLine" : 198,
      "endLine" : 216,
      "cleanedStartLine" : 119,
      "cleanedEndLine" : 133
    }, {
      "file" : {
        "relativePath" : "src/test-integration/kotlin/org/jetbrains/teamcity/github/IntegrationUtilTest.kt",
        "extension" : "kt",
        "linesOfCode" : 132,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 103,
      "startLine" : 149,
      "endLine" : 167,
      "cleanedStartLine" : 89,
      "cleanedEndLine" : 103
    } ]
  }, {
    "blockSize" : 12,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/main/resources/buildServerResources/editProjectWebHooks.jsp",
        "extension" : "jsp",
        "linesOfCode" : 202,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 144,
      "startLine" : 190,
      "endLine" : 201,
      "cleanedStartLine" : 121,
      "cleanedEndLine" : 132
    }, {
      "file" : {
        "relativePath" : "src/main/resources/buildServerResources/installPage.jsp",
        "extension" : "jsp",
        "linesOfCode" : 74,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 66,
      "startLine" : 52,
      "endLine" : 63,
      "cleanedStartLine" : 33,
      "cleanedEndLine" : 44
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/main/resources/buildServerResources/editProjectWebHooks.jsp",
        "extension" : "jsp",
        "linesOfCode" : 202,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 144,
      "startLine" : 192,
      "endLine" : 201,
      "cleanedStartLine" : 123,
      "cleanedEndLine" : 132
    }, {
      "file" : {
        "relativePath" : "src/main/resources/buildServerResources/gh-webhook-health-item.jsp",
        "extension" : "jsp",
        "linesOfCode" : 43,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 40,
      "startLine" : 45,
      "endLine" : 54,
      "cleanedStartLine" : 28,
      "cleanedEndLine" : 37
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/main/resources/buildServerResources/gh-webhook-health-item.jsp",
        "extension" : "jsp",
        "linesOfCode" : 43,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 40,
      "startLine" : 45,
      "endLine" : 54,
      "cleanedStartLine" : 28,
      "cleanedEndLine" : 37
    }, {
      "file" : {
        "relativePath" : "src/main/resources/buildServerResources/installPage.jsp",
        "extension" : "jsp",
        "linesOfCode" : 74,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 66,
      "startLine" : 54,
      "endLine" : 63,
      "cleanedStartLine" : 35,
      "cleanedEndLine" : 44
    } ]
  }, {
    "blockSize" : 9,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/teamcity/github/action/DeleteWebHookAction.kt",
        "extension" : "kt",
        "linesOfCode" : 72,
        "components" : [ "primary::src" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 51,
      "startLine" : 58,
      "endLine" : 71,
      "cleanedStartLine" : 28,
      "cleanedEndLine" : 36
    }, {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/teamcity/github/action/DeleteWebHookAction.kt",
        "extension" : "kt",
        "linesOfCode" : 72,
        "components" : [ "primary::src" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 51,
      "startLine" : 81,
      "endLine" : 94,
      "cleanedStartLine" : 43,
      "cleanedEndLine" : 51
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/test-integration/kotlin/org/jetbrains/teamcity/github/GitHubWebHookSuggestionTest.kt",
        "extension" : "kt",
        "linesOfCode" : 159,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 133,
      "startLine" : 35,
      "endLine" : 47,
      "cleanedStartLine" : 14,
      "cleanedEndLine" : 21
    }, {
      "file" : {
        "relativePath" : "src/test-integration/kotlin/org/jetbrains/teamcity/github/GitHubWebHookSuggestionTest.kt",
        "extension" : "kt",
        "linesOfCode" : 159,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 133,
      "startLine" : 58,
      "endLine" : 70,
      "cleanedStartLine" : 29,
      "cleanedEndLine" : 36
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/test-integration/kotlin/org/jetbrains/teamcity/github/GitHubWebHookSuggestionTest.kt",
        "extension" : "kt",
        "linesOfCode" : 159,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 133,
      "startLine" : 49,
      "endLine" : 58,
      "cleanedStartLine" : 23,
      "cleanedEndLine" : 29
    }, {
      "file" : {
        "relativePath" : "src/test-integration/kotlin/org/jetbrains/teamcity/github/IntegrationUtilTest.kt",
        "extension" : "kt",
        "linesOfCode" : 132,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 103,
      "startLine" : 115,
      "endLine" : 123,
      "cleanedStartLine" : 67,
      "cleanedEndLine" : 73
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/teamcity/github/AuthDataStorage.kt",
        "extension" : "kt",
        "linesOfCode" : 220,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 150,
      "startLine" : 81,
      "endLine" : 88,
      "cleanedStartLine" : 32,
      "cleanedEndLine" : 37
    }, {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/teamcity/github/WebHooksStorage.kt",
        "extension" : "kt",
        "linesOfCode" : 250,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 171,
      "startLine" : 97,
      "endLine" : 104,
      "cleanedStartLine" : 37,
      "cleanedEndLine" : 42
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/teamcity/github/action/CreateWebHookAction.kt",
        "extension" : "kt",
        "linesOfCode" : 116,
        "components" : [ "primary::src" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 82,
      "startLine" : 63,
      "endLine" : 69,
      "cleanedStartLine" : 29,
      "cleanedEndLine" : 34
    }, {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/teamcity/github/action/TestWebHookAction.kt",
        "extension" : "kt",
        "linesOfCode" : 26,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 17,
      "startLine" : 20,
      "endLine" : 26,
      "cleanedStartLine" : 11,
      "cleanedEndLine" : 16
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/test-integration/kotlin/org/jetbrains/teamcity/github/GitHubWebHookSuggestionTest.kt",
        "extension" : "kt",
        "linesOfCode" : 159,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 133,
      "startLine" : 19,
      "endLine" : 27,
      "cleanedStartLine" : 3,
      "cleanedEndLine" : 8
    }, {
      "file" : {
        "relativePath" : "src/test-integration/kotlin/org/jetbrains/teamcity/github/IntegrationUtilTest.kt",
        "extension" : "kt",
        "linesOfCode" : 132,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 103,
      "startLine" : 20,
      "endLine" : 28,
      "cleanedStartLine" : 3,
      "cleanedEndLine" : 8
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/test-integration/kotlin/org/jetbrains/teamcity/github/IntegrationUtilTest.kt",
        "extension" : "kt",
        "linesOfCode" : 132,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 103,
      "startLine" : 39,
      "endLine" : 48,
      "cleanedStartLine" : 16,
      "cleanedEndLine" : 21
    }, {
      "file" : {
        "relativePath" : "src/test-integration/kotlin/org/jetbrains/teamcity/github/IntegrationUtilTest.kt",
        "extension" : "kt",
        "linesOfCode" : 132,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 103,
      "startLine" : 55,
      "endLine" : 64,
      "cleanedStartLine" : 27,
      "cleanedEndLine" : 32
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/main/resources/buildServerResources/gh-webhook.js",
        "extension" : "js",
        "linesOfCode" : 538,
        "components" : [ "primary::src" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 473,
      "startLine" : 53,
      "endLine" : 59,
      "cleanedStartLine" : 42,
      "cleanedEndLine" : 47
    }, {
      "file" : {
        "relativePath" : "src/main/resources/buildServerResources/gh-webhook.js",
        "extension" : "js",
        "linesOfCode" : 538,
        "components" : [ "primary::src" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 473,
      "startLine" : 135,
      "endLine" : 142,
      "cleanedStartLine" : 111,
      "cleanedEndLine" : 116
    } ]
  } ],
  "overallDuplication" : null
}