{
  "title" : "Duplication",
  "timestamp" : "2024-04-03 14:36:17",
  "duplicates" : [ {
    "blockSize" : 56,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/modify-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 251,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 216,
      "startLine" : 60,
      "endLine" : 130,
      "cleanedStartLine" : 44,
      "cleanedEndLine" : 99
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/resize-circle-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 168,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 138,
      "startLine" : 54,
      "endLine" : 124,
      "cleanedStartLine" : 37,
      "cleanedEndLine" : 92
    } ]
  }, {
    "blockSize" : 39,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 381,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 329,
      "startLine" : 387,
      "endLine" : 441,
      "cleanedStartLine" : 245,
      "cleanedEndLine" : 283
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/mode-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 317,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 263,
      "startLine" : 327,
      "endLine" : 381,
      "cleanedStartLine" : 214,
      "cleanedEndLine" : 252
    } ]
  }, {
    "blockSize" : 35,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 381,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 329,
      "startLine" : 104,
      "endLine" : 156,
      "cleanedStartLine" : 48,
      "cleanedEndLine" : 82
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 125,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 105,
      "startLine" : 101,
      "endLine" : 154,
      "cleanedStartLine" : 46,
      "cleanedEndLine" : 80
    } ]
  }, {
    "blockSize" : 29,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 159,
      "endLine" : 200,
      "cleanedStartLine" : 105,
      "cleanedEndLine" : 133
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-90degree-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 160,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 133,
      "startLine" : 138,
      "endLine" : 179,
      "cleanedStartLine" : 90,
      "cleanedEndLine" : 118
    } ]
  }, {
    "blockSize" : 21,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/extrude-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 209,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 176,
      "startLine" : 22,
      "endLine" : 46,
      "cleanedStartLine" : 11,
      "cleanedEndLine" : 31
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/extrude-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 209,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 176,
      "startLine" : 126,
      "endLine" : 151,
      "cleanedStartLine" : 91,
      "cleanedEndLine" : 111
    } ]
  }, {
    "blockSize" : 20,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/extrude-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 222,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 183,
      "startLine" : 21,
      "endLine" : 45,
      "cleanedStartLine" : 10,
      "cleanedEndLine" : 29
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/extrude-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 222,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 183,
      "startLine" : 109,
      "endLine" : 134,
      "cleanedStartLine" : 77,
      "cleanedEndLine" : 96
    } ]
  }, {
    "blockSize" : 19,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 381,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 329,
      "startLine" : 158,
      "endLine" : 180,
      "cleanedStartLine" : 84,
      "cleanedEndLine" : 102
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 125,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 105,
      "startLine" : 156,
      "endLine" : 178,
      "cleanedStartLine" : 82,
      "cleanedEndLine" : 100
    } ]
  }, {
    "blockSize" : 18,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-ellipse-using-three-points-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 33,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 25,
      "startLine" : 11,
      "endLine" : 33,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 19
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-rectangle-using-three-points-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 49,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 40,
      "startLine" : 9,
      "endLine" : 31,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 19
    } ]
  }, {
    "blockSize" : 18,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 125,
      "endLine" : 152,
      "cleanedStartLine" : 87,
      "cleanedEndLine" : 104
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/measure-distance-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 176,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 152,
      "startLine" : 164,
      "endLine" : 187,
      "cleanedStartLine" : 115,
      "cleanedEndLine" : 132
    } ]
  }, {
    "blockSize" : 17,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 121,
      "endLine" : 140,
      "cleanedStartLine" : 85,
      "cleanedEndLine" : 101
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 59,
      "endLine" : 79,
      "cleanedStartLine" : 44,
      "cleanedEndLine" : 60
    } ]
  }, {
    "blockSize" : 16,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/react-map-gl-draw/src/style.ts",
        "extension" : "ts",
        "linesOfCode" : 111,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 102,
      "startLine" : 49,
      "endLine" : 68,
      "cleanedStartLine" : 39,
      "cleanedEndLine" : 54
    }, {
      "file" : {
        "relativePath" : "modules/react-map-gl-draw/src/style.ts",
        "extension" : "ts",
        "linesOfCode" : 111,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 102,
      "startLine" : 98,
      "endLine" : 117,
      "cleanedStartLine" : 74,
      "cleanedEndLine" : 89
    } ]
  }, {
    "blockSize" : 16,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-90degree-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 160,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 133,
      "startLine" : 113,
      "endLine" : 135,
      "cleanedStartLine" : 74,
      "cleanedEndLine" : 89
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 91,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 77,
      "startLine" : 62,
      "endLine" : 84,
      "cleanedStartLine" : 37,
      "cleanedEndLine" : 52
    } ]
  }, {
    "blockSize" : 15,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/extrude-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 222,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 183,
      "startLine" : 155,
      "endLine" : 177,
      "cleanedStartLine" : 113,
      "cleanedEndLine" : 127
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/extrude-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 209,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 176,
      "startLine" : 169,
      "endLine" : 190,
      "cleanedStartLine" : 124,
      "cleanedEndLine" : 138
    } ]
  }, {
    "blockSize" : 15,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 63,
      "endLine" : 79,
      "cleanedStartLine" : 46,
      "cleanedEndLine" : 60
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/measure-distance-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 176,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 152,
      "startLine" : 164,
      "endLine" : 180,
      "cleanedStartLine" : 115,
      "cleanedEndLine" : 129
    } ]
  }, {
    "blockSize" : 14,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-circle-by-bounding-box-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 29,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 20,
      "startLine" : 9,
      "endLine" : 28,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 15
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-circle-from-center-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 28,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 9,
      "endLine" : 28,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 15
    } ]
  }, {
    "blockSize" : 14,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/elevation-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 68,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 64,
      "endLine" : 84,
      "cleanedStartLine" : 42,
      "cleanedEndLine" : 55
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/elevation-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 70,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 57,
      "startLine" : 68,
      "endLine" : 88,
      "cleanedStartLine" : 44,
      "cleanedEndLine" : 57
    } ]
  }, {
    "blockSize" : 14,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/geojson-edit-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 234,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 195,
      "startLine" : 199,
      "endLine" : 220,
      "cleanedStartLine" : 139,
      "cleanedEndLine" : 152
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/mode-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 317,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 263,
      "startLine" : 226,
      "endLine" : 247,
      "cleanedStartLine" : 148,
      "cleanedEndLine" : 161
    } ]
  }, {
    "blockSize" : 14,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-by-dragging-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 88,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 66,
      "startLine" : 78,
      "endLine" : 94,
      "cleanedStartLine" : 46,
      "cleanedEndLine" : 59
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 141,
      "endLine" : 157,
      "cleanedStartLine" : 102,
      "cleanedEndLine" : 115
    } ]
  }, {
    "blockSize" : 13,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/split-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 159,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 125,
      "startLine" : 163,
      "endLine" : 181,
      "cleanedStartLine" : 100,
      "cleanedEndLine" : 112
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/split-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 143,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 114,
      "startLine" : 141,
      "endLine" : 158,
      "cleanedStartLine" : 90,
      "cleanedEndLine" : 102
    } ]
  }, {
    "blockSize" : 13,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/resize-circle-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 168,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 138,
      "startLine" : 70,
      "endLine" : 85,
      "cleanedStartLine" : 51,
      "cleanedEndLine" : 63
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/modify-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 218,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 184,
      "startLine" : 68,
      "endLine" : 83,
      "cleanedStartLine" : 48,
      "cleanedEndLine" : 60
    } ]
  }, {
    "blockSize" : 13,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/split-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 159,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 125,
      "startLine" : 34,
      "endLine" : 51,
      "cleanedStartLine" : 15,
      "cleanedEndLine" : 27
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/split-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 143,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 114,
      "startLine" : 27,
      "endLine" : 44,
      "cleanedStartLine" : 9,
      "cleanedEndLine" : 21
    } ]
  }, {
    "blockSize" : 13,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/modify-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 251,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 216,
      "startLine" : 76,
      "endLine" : 91,
      "cleanedStartLine" : 58,
      "cleanedEndLine" : 70
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/modify-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 218,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 184,
      "startLine" : 68,
      "endLine" : 83,
      "cleanedStartLine" : 48,
      "cleanedEndLine" : 60
    } ]
  }, {
    "blockSize" : 11,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/geojson-edit-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 234,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 195,
      "startLine" : 153,
      "endLine" : 165,
      "cleanedStartLine" : 101,
      "cleanedEndLine" : 111
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/mode-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 317,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 263,
      "startLine" : 187,
      "endLine" : 199,
      "cleanedStartLine" : 116,
      "cleanedEndLine" : 126
    } ]
  }, {
    "blockSize" : 11,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/math.ts",
        "extension" : "ts",
        "linesOfCode" : 16,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 11,
      "startLine" : 3,
      "endLine" : 25,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 11
    }, {
      "file" : {
        "relativePath" : "modules/main/src/lib/math.ts",
        "extension" : "ts",
        "linesOfCode" : 16,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 11,
      "startLine" : 3,
      "endLine" : 25,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 11
    } ]
  }, {
    "blockSize" : 11,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/three-click-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 95,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 80,
      "startLine" : 83,
      "endLine" : 99,
      "cleanedStartLine" : 62,
      "cleanedEndLine" : 72
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/two-click-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 105,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 85,
      "startLine" : 109,
      "endLine" : 125,
      "cleanedStartLine" : 72,
      "cleanedEndLine" : 82
    } ]
  }, {
    "blockSize" : 11,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 54,
      "endLine" : 70,
      "cleanedStartLine" : 35,
      "cleanedEndLine" : 45
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 125,
      "endLine" : 141,
      "cleanedStartLine" : 92,
      "cleanedEndLine" : 102
    } ]
  }, {
    "blockSize" : 11,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 381,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 329,
      "startLine" : 20,
      "endLine" : 59,
      "cleanedStartLine" : 10,
      "cleanedEndLine" : 20
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 125,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 105,
      "startLine" : 17,
      "endLine" : 56,
      "cleanedStartLine" : 8,
      "cleanedEndLine" : 18
    } ]
  }, {
    "blockSize" : 11,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 381,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 329,
      "startLine" : 61,
      "endLine" : 76,
      "cleanedStartLine" : 22,
      "cleanedEndLine" : 32
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 125,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 105,
      "startLine" : 58,
      "endLine" : 73,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 30
    } ]
  }, {
    "blockSize" : 11,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/types.ts",
        "extension" : "ts",
        "linesOfCode" : 12,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 12,
      "startLine" : 4,
      "endLine" : 14,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 12
    }, {
      "file" : {
        "relativePath" : "modules/main/src/types.ts",
        "extension" : "ts",
        "linesOfCode" : 35,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 35,
      "startLine" : 29,
      "endLine" : 39,
      "cleanedStartLine" : 25,
      "cleanedEndLine" : 35
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/extrude-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 222,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 183,
      "startLine" : 238,
      "endLine" : 252,
      "cleanedStartLine" : 174,
      "cleanedEndLine" : 183
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/extrude-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 209,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 176,
      "startLine" : 230,
      "endLine" : 243,
      "cleanedStartLine" : 167,
      "cleanedEndLine" : 176
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 109,
      "endLine" : 118,
      "cleanedStartLine" : 75,
      "cleanedEndLine" : 84
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 24,
      "endLine" : 33,
      "cleanedStartLine" : 15,
      "cleanedEndLine" : 24
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/geojson-edit-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 234,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 195,
      "startLine" : 180,
      "endLine" : 190,
      "cleanedStartLine" : 123,
      "cleanedEndLine" : 132
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/mode-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 317,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 263,
      "startLine" : 210,
      "endLine" : 220,
      "cleanedStartLine" : 135,
      "cleanedEndLine" : 144
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-ellipse-by-bounding-box-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 31,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 21,
      "startLine" : 11,
      "endLine" : 24,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 11
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-rectangle-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 20,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 13,
      "startLine" : 8,
      "endLine" : 21,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 11
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-90degree-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 160,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 133,
      "startLine" : 100,
      "endLine" : 111,
      "cleanedStartLine" : 63,
      "cleanedEndLine" : 72
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 91,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 77,
      "startLine" : 47,
      "endLine" : 60,
      "cleanedStartLine" : 26,
      "cleanedEndLine" : 35
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-square-from-center-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 31,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 23,
      "startLine" : 9,
      "endLine" : 27,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 11
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-square-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 23,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 15,
      "startLine" : 9,
      "endLine" : 27,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 11
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/three-click-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 95,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 80,
      "startLine" : 23,
      "endLine" : 38,
      "cleanedStartLine" : 18,
      "cleanedEndLine" : 27
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/two-click-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 105,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 85,
      "startLine" : 66,
      "endLine" : 81,
      "cleanedStartLine" : 44,
      "cleanedEndLine" : 53
    } ]
  }, {
    "blockSize" : 9,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 207,
      "endLine" : 218,
      "cleanedStartLine" : 140,
      "cleanedEndLine" : 148
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-90degree-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 160,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 133,
      "startLine" : 186,
      "endLine" : 197,
      "cleanedStartLine" : 125,
      "cleanedEndLine" : 133
    } ]
  }, {
    "blockSize" : 9,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/layers/editable-layer.ts",
        "extension" : "ts",
        "linesOfCode" : 187,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 161,
      "startLine" : 168,
      "endLine" : 181,
      "cleanedStartLine" : 96,
      "cleanedEndLine" : 104
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/layers/editable-layer.ts",
        "extension" : "ts",
        "linesOfCode" : 187,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 161,
      "startLine" : 224,
      "endLine" : 232,
      "cleanedStartLine" : 136,
      "cleanedEndLine" : 144
    } ]
  }, {
    "blockSize" : 9,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 91,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 77,
      "startLine" : 84,
      "endLine" : 96,
      "cleanedStartLine" : 52,
      "cleanedEndLine" : 60
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/split-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 143,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 114,
      "startLine" : 98,
      "endLine" : 110,
      "cleanedStartLine" : 61,
      "cleanedEndLine" : 69
    } ]
  }, {
    "blockSize" : 9,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/immutable-feature-collection.ts",
        "extension" : "ts",
        "linesOfCode" : 325,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 272,
      "startLine" : 271,
      "endLine" : 281,
      "cleanedStartLine" : 177,
      "cleanedEndLine" : 185
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/immutable-feature-collection.ts",
        "extension" : "ts",
        "linesOfCode" : 325,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 272,
      "startLine" : 318,
      "endLine" : 328,
      "cleanedStartLine" : 210,
      "cleanedEndLine" : 218
    } ]
  }, {
    "blockSize" : 9,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/extrude-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 209,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 176,
      "startLine" : 52,
      "endLine" : 69,
      "cleanedStartLine" : 37,
      "cleanedEndLine" : 45
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/modify-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 218,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 184,
      "startLine" : 192,
      "endLine" : 208,
      "cleanedStartLine" : 138,
      "cleanedEndLine" : 146
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-rectangle-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 20,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 13,
      "startLine" : 8,
      "endLine" : 17,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-rectangle-using-three-points-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 49,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 40,
      "startLine" : 9,
      "endLine" : 18,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/elevation-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 68,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 6,
      "endLine" : 13,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 8
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/elevation-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 70,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 57,
      "startLine" : 7,
      "endLine" : 14,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 8
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/elevation-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 68,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 33,
      "endLine" : 43,
      "cleanedStartLine" : 22,
      "cleanedEndLine" : 29
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/elevation-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 70,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 57,
      "startLine" : 34,
      "endLine" : 44,
      "cleanedStartLine" : 21,
      "cleanedEndLine" : 28
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 125,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 105,
      "startLine" : 58,
      "endLine" : 68,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 27
    }, {
      "file" : {
        "relativePath" : "modules/main/src/lib/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 25,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 40,
      "endLine" : 50,
      "cleanedStartLine" : 12,
      "cleanedEndLine" : 19
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-90degree-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 160,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 133,
      "startLine" : 38,
      "endLine" : 47,
      "cleanedStartLine" : 18,
      "cleanedEndLine" : 25
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/split-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 143,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 114,
      "startLine" : 101,
      "endLine" : 110,
      "cleanedStartLine" : 62,
      "cleanedEndLine" : 69
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 125,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 105,
      "startLine" : 21,
      "endLine" : 56,
      "cleanedStartLine" : 11,
      "cleanedEndLine" : 18
    }, {
      "file" : {
        "relativePath" : "modules/main/src/lib/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 25,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 3,
      "endLine" : 38,
      "cleanedStartLine" : 3,
      "cleanedEndLine" : 10
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-circle-from-center-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 28,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 9,
      "endLine" : 18,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-rectangle-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 20,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 13,
      "startLine" : 8,
      "endLine" : 17,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/extrude-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 209,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 176,
      "startLine" : 112,
      "endLine" : 125,
      "cleanedStartLine" : 83,
      "cleanedEndLine" : 90
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/modify-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 218,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 184,
      "startLine" : 220,
      "endLine" : 232,
      "cleanedStartLine" : 157,
      "cleanedEndLine" : 164
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/extrude-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 209,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 176,
      "startLine" : 11,
      "endLine" : 21,
      "cleanedStartLine" : 3,
      "cleanedEndLine" : 10
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/modify-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 218,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 184,
      "startLine" : 170,
      "endLine" : 180,
      "cleanedStartLine" : 120,
      "cleanedEndLine" : 127
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 381,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 329,
      "startLine" : 61,
      "endLine" : 71,
      "cleanedStartLine" : 22,
      "cleanedEndLine" : 29
    }, {
      "file" : {
        "relativePath" : "modules/main/src/lib/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 25,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 40,
      "endLine" : 50,
      "cleanedStartLine" : 12,
      "cleanedEndLine" : 19
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-ellipse-by-bounding-box-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 31,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 21,
      "startLine" : 11,
      "endLine" : 20,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-ellipse-using-three-points-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 33,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 25,
      "startLine" : 11,
      "endLine" : 20,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-circle-from-center-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 28,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 9,
      "endLine" : 18,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-ellipse-by-bounding-box-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 31,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 21,
      "startLine" : 11,
      "endLine" : 20,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-circle-from-center-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 28,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 9,
      "endLine" : 18,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-rectangle-using-three-points-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 49,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 40,
      "startLine" : 9,
      "endLine" : 18,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-circle-by-bounding-box-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 29,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 20,
      "startLine" : 9,
      "endLine" : 18,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-rectangle-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 20,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 13,
      "startLine" : 8,
      "endLine" : 17,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-90degree-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 160,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 133,
      "startLine" : 38,
      "endLine" : 47,
      "cleanedStartLine" : 18,
      "cleanedEndLine" : 25
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 91,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 77,
      "startLine" : 87,
      "endLine" : 96,
      "cleanedStartLine" : 53,
      "cleanedEndLine" : 60
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-ellipse-by-bounding-box-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 31,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 21,
      "startLine" : 11,
      "endLine" : 20,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-rectangle-using-three-points-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 49,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 40,
      "startLine" : 9,
      "endLine" : 18,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/style.ts",
        "extension" : "ts",
        "linesOfCode" : 8,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 8,
      "startLine" : 2,
      "endLine" : 10,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 8
    }, {
      "file" : {
        "relativePath" : "modules/main/src/lib/style.ts",
        "extension" : "ts",
        "linesOfCode" : 19,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 2,
      "endLine" : 10,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 8
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-circle-by-bounding-box-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 29,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 20,
      "startLine" : 9,
      "endLine" : 18,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-ellipse-by-bounding-box-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 31,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 21,
      "startLine" : 11,
      "endLine" : 20,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-ellipse-using-three-points-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 33,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 25,
      "startLine" : 11,
      "endLine" : 20,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-rectangle-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 20,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 13,
      "startLine" : 8,
      "endLine" : 17,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/three-click-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 20,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 15,
      "startLine" : 14,
      "endLine" : 23,
      "cleanedStartLine" : 8,
      "cleanedEndLine" : 15
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/two-click-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 20,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 15,
      "startLine" : 14,
      "endLine" : 23,
      "cleanedStartLine" : 8,
      "cleanedEndLine" : 15
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 110,
      "endLine" : 117,
      "cleanedStartLine" : 76,
      "cleanedEndLine" : 83
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/measure-distance-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 176,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 152,
      "startLine" : 153,
      "endLine" : 160,
      "cleanedStartLine" : 106,
      "cleanedEndLine" : 113
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/split-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 159,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 125,
      "startLine" : 122,
      "endLine" : 132,
      "cleanedStartLine" : 76,
      "cleanedEndLine" : 83
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/split-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 143,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 114,
      "startLine" : 82,
      "endLine" : 91,
      "cleanedStartLine" : 50,
      "cleanedEndLine" : 57
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-circle-from-center-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 28,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 9,
      "endLine" : 18,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-ellipse-using-three-points-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 33,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 25,
      "startLine" : 11,
      "endLine" : 20,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-circle-by-bounding-box-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 29,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 20,
      "startLine" : 9,
      "endLine" : 18,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-ellipse-using-three-points-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 33,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 25,
      "startLine" : 11,
      "endLine" : 20,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 381,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 329,
      "startLine" : 24,
      "endLine" : 59,
      "cleanedStartLine" : 13,
      "cleanedEndLine" : 20
    }, {
      "file" : {
        "relativePath" : "modules/main/src/lib/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 25,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 3,
      "endLine" : 38,
      "cleanedStartLine" : 3,
      "cleanedEndLine" : 10
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-circle-by-bounding-box-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 29,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 20,
      "startLine" : 9,
      "endLine" : 18,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-rectangle-using-three-points-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 49,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 40,
      "startLine" : 9,
      "endLine" : 18,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 117,
      "endLine" : 126,
      "cleanedStartLine" : 86,
      "cleanedEndLine" : 93
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 145,
      "endLine" : 153,
      "cleanedStartLine" : 106,
      "cleanedEndLine" : 113
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 25,
      "endLine" : 32,
      "cleanedStartLine" : 16,
      "cleanedEndLine" : 23
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/measure-distance-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 176,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 152,
      "startLine" : 153,
      "endLine" : 160,
      "cleanedStartLine" : 106,
      "cleanedEndLine" : 113
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 46,
      "endLine" : 55,
      "cleanedStartLine" : 29,
      "cleanedEndLine" : 36
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 75,
      "endLine" : 82,
      "cleanedStartLine" : 50,
      "cleanedEndLine" : 57
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-by-dragging-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 88,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 66,
      "startLine" : 82,
      "endLine" : 90,
      "cleanedStartLine" : 50,
      "cleanedEndLine" : 57
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 117,
      "endLine" : 126,
      "cleanedStartLine" : 86,
      "cleanedEndLine" : 93
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-circle-by-diameter-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 60,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 45,
      "startLine" : 78,
      "endLine" : 87,
      "cleanedStartLine" : 39,
      "cleanedEndLine" : 45
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 191,
      "endLine" : 199,
      "cleanedStartLine" : 125,
      "cleanedEndLine" : 131
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/modify-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 218,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 184,
      "startLine" : 216,
      "endLine" : 224,
      "cleanedStartLine" : 153,
      "cleanedEndLine" : 159
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/modify-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 218,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 184,
      "startLine" : 240,
      "endLine" : 248,
      "cleanedStartLine" : 171,
      "cleanedEndLine" : 177
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/extend-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 71,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 57,
      "startLine" : 70,
      "endLine" : 76,
      "cleanedStartLine" : 45,
      "cleanedEndLine" : 51
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/measure-distance-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 176,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 152,
      "startLine" : 152,
      "endLine" : 158,
      "cleanedStartLine" : 105,
      "cleanedEndLine" : 111
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 40,
      "endLine" : 46,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 30
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 109,
      "endLine" : 115,
      "cleanedStartLine" : 75,
      "cleanedEndLine" : 81
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-90degree-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 160,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 133,
      "startLine" : 75,
      "endLine" : 82,
      "cleanedStartLine" : 46,
      "cleanedEndLine" : 52
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 91,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 77,
      "startLine" : 106,
      "endLine" : 113,
      "cleanedStartLine" : 67,
      "cleanedEndLine" : 73
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/types.ts",
        "extension" : "ts",
        "linesOfCode" : 96,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 91,
      "startLine" : 19,
      "endLine" : 26,
      "cleanedStartLine" : 13,
      "cleanedEndLine" : 19
    }, {
      "file" : {
        "relativePath" : "modules/main/src/types.ts",
        "extension" : "ts",
        "linesOfCode" : 35,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 35,
      "startLine" : 27,
      "endLine" : 34,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 30
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 21,
      "endLine" : 30,
      "cleanedStartLine" : 13,
      "cleanedEndLine" : 19
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/measure-distance-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 176,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 152,
      "startLine" : 58,
      "endLine" : 67,
      "cleanedStartLine" : 36,
      "cleanedEndLine" : 42
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/extend-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 71,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 57,
      "startLine" : 70,
      "endLine" : 76,
      "cleanedStartLine" : 45,
      "cleanedEndLine" : 51
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/three-click-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 95,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 80,
      "startLine" : 48,
      "endLine" : 54,
      "cleanedStartLine" : 32,
      "cleanedEndLine" : 38
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/modify-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 251,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 216,
      "startLine" : 224,
      "endLine" : 232,
      "cleanedStartLine" : 168,
      "cleanedEndLine" : 174
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/modify-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 251,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 216,
      "startLine" : 256,
      "endLine" : 263,
      "cleanedStartLine" : 192,
      "cleanedEndLine" : 198
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/rotate-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 80,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 61,
      "startLine" : 91,
      "endLine" : 99,
      "cleanedStartLine" : 51,
      "cleanedEndLine" : 57
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/scale-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 78,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 58,
      "startLine" : 89,
      "endLine" : 97,
      "cleanedStartLine" : 48,
      "cleanedEndLine" : 54
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/scale-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 78,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 58,
      "startLine" : 89,
      "endLine" : 97,
      "cleanedStartLine" : 48,
      "cleanedEndLine" : 54
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/translate-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 86,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 66,
      "startLine" : 100,
      "endLine" : 108,
      "cleanedStartLine" : 60,
      "cleanedEndLine" : 66
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/react-map-gl-draw/src/editor.tsx",
        "extension" : "tsx",
        "linesOfCode" : 541,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 500,
      "startLine" : 505,
      "endLine" : 511,
      "cleanedStartLine" : 400,
      "cleanedEndLine" : 406
    }, {
      "file" : {
        "relativePath" : "modules/react-map-gl-draw/src/editor.tsx",
        "extension" : "tsx",
        "linesOfCode" : 541,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 500,
      "startLine" : 546,
      "endLine" : 552,
      "cleanedStartLine" : 429,
      "cleanedEndLine" : 435
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/extend-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 71,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 57,
      "startLine" : 70,
      "endLine" : 76,
      "cleanedStartLine" : 45,
      "cleanedEndLine" : 51
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/split-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 159,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 125,
      "startLine" : 87,
      "endLine" : 93,
      "cleanedStartLine" : 51,
      "cleanedEndLine" : 57
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/extrude-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 222,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 183,
      "startLine" : 68,
      "endLine" : 75,
      "cleanedStartLine" : 44,
      "cleanedEndLine" : 50
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/extrude-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 222,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 183,
      "startLine" : 117,
      "endLine" : 124,
      "cleanedStartLine" : 83,
      "cleanedEndLine" : 89
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/editor/src/editor-modal.tsx",
        "extension" : "tsx",
        "linesOfCode" : 81,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 75,
      "startLine" : 36,
      "endLine" : 42,
      "cleanedStartLine" : 28,
      "cleanedEndLine" : 34
    }, {
      "file" : {
        "relativePath" : "modules/editor/src/import-component.tsx",
        "extension" : "tsx",
        "linesOfCode" : 226,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 214,
      "startLine" : 10,
      "endLine" : 16,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 8
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/measure-distance-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 176,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 152,
      "startLine" : 152,
      "endLine" : 158,
      "cleanedStartLine" : 105,
      "cleanedEndLine" : 111
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/three-click-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 95,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 80,
      "startLine" : 48,
      "endLine" : 54,
      "cleanedStartLine" : 32,
      "cleanedEndLine" : 38
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/split-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 159,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 125,
      "startLine" : 87,
      "endLine" : 93,
      "cleanedStartLine" : 51,
      "cleanedEndLine" : 57
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/three-click-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 95,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 80,
      "startLine" : 48,
      "endLine" : 54,
      "cleanedStartLine" : 32,
      "cleanedEndLine" : 38
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-circle-by-diameter-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 60,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 45,
      "startLine" : 78,
      "endLine" : 87,
      "cleanedStartLine" : 39,
      "cleanedEndLine" : 45
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-circle-from-center-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 54,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 40,
      "startLine" : 69,
      "endLine" : 78,
      "cleanedStartLine" : 34,
      "cleanedEndLine" : 40
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/rotate-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 80,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 61,
      "startLine" : 91,
      "endLine" : 99,
      "cleanedStartLine" : 51,
      "cleanedEndLine" : 57
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/translate-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 86,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 66,
      "startLine" : 100,
      "endLine" : 108,
      "cleanedStartLine" : 60,
      "cleanedEndLine" : 66
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/layers/path-marker-layer/create-path-markers.ts",
        "extension" : "ts",
        "linesOfCode" : 74,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 63,
      "startLine" : 44,
      "endLine" : 50,
      "cleanedStartLine" : 29,
      "cleanedEndLine" : 35
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/layers/path-marker-layer/create-path-markers.ts",
        "extension" : "ts",
        "linesOfCode" : 74,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 63,
      "startLine" : 56,
      "endLine" : 62,
      "cleanedStartLine" : 39,
      "cleanedEndLine" : 45
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-by-dragging-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 88,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 66,
      "startLine" : 62,
      "endLine" : 68,
      "cleanedStartLine" : 36,
      "cleanedEndLine" : 42
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 130,
      "endLine" : 137,
      "cleanedStartLine" : 95,
      "cleanedEndLine" : 101
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/react-map-gl-draw/src/editor.tsx",
        "extension" : "tsx",
        "linesOfCode" : 541,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 500,
      "startLine" : 176,
      "endLine" : 182,
      "cleanedStartLine" : 118,
      "cleanedEndLine" : 124
    }, {
      "file" : {
        "relativePath" : "modules/react-map-gl-draw/src/editor.tsx",
        "extension" : "tsx",
        "linesOfCode" : 541,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 500,
      "startLine" : 466,
      "endLine" : 472,
      "cleanedStartLine" : 366,
      "cleanedEndLine" : 372
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 52,
      "endLine" : 58,
      "cleanedStartLine" : 35,
      "cleanedEndLine" : 41
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 35,
      "endLine" : 41,
      "cleanedStartLine" : 26,
      "cleanedEndLine" : 32
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-circle-from-center-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 54,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 40,
      "startLine" : 69,
      "endLine" : 78,
      "cleanedStartLine" : 34,
      "cleanedEndLine" : 40
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 191,
      "endLine" : 199,
      "cleanedStartLine" : 125,
      "cleanedEndLine" : 131
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/layers/editable-geojson-layer.ts",
        "extension" : "ts",
        "linesOfCode" : 483,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 430,
      "startLine" : 289,
      "endLine" : 295,
      "cleanedStartLine" : 218,
      "cleanedEndLine" : 224
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/layers/editable-geojson-layer.ts",
        "extension" : "ts",
        "linesOfCode" : 483,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 430,
      "startLine" : 525,
      "endLine" : 531,
      "cleanedStartLine" : 383,
      "cleanedEndLine" : 389
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/event-types.ts",
        "extension" : "ts",
        "linesOfCode" : 38,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 37,
      "startLine" : 19,
      "endLine" : 25,
      "cleanedStartLine" : 13,
      "cleanedEndLine" : 19
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/event-types.ts",
        "extension" : "ts",
        "linesOfCode" : 38,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 37,
      "startLine" : 28,
      "endLine" : 34,
      "cleanedStartLine" : 21,
      "cleanedEndLine" : 27
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/measure-distance-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 176,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 152,
      "startLine" : 152,
      "endLine" : 158,
      "cleanedStartLine" : 105,
      "cleanedEndLine" : 111
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/split-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 159,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 125,
      "startLine" : 87,
      "endLine" : 93,
      "cleanedStartLine" : 51,
      "cleanedEndLine" : 57
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/extrude-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 222,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 183,
      "startLine" : 29,
      "endLine" : 35,
      "cleanedStartLine" : 16,
      "cleanedEndLine" : 22
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/extrude-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 222,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 183,
      "startLine" : 68,
      "endLine" : 75,
      "cleanedStartLine" : 44,
      "cleanedEndLine" : 50
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 59,
      "endLine" : 66,
      "cleanedStartLine" : 38,
      "cleanedEndLine" : 44
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-by-dragging-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 88,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 66,
      "startLine" : 62,
      "endLine" : 68,
      "cleanedStartLine" : 36,
      "cleanedEndLine" : 42
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 40,
      "endLine" : 46,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 30
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 24,
      "endLine" : 30,
      "cleanedStartLine" : 15,
      "cleanedEndLine" : 21
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/rotate-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 111,
      "startLine" : 31,
      "endLine" : 39,
      "cleanedStartLine" : 13,
      "cleanedEndLine" : 19
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/scale-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 201,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 163,
      "startLine" : 33,
      "endLine" : 41,
      "cleanedStartLine" : 15,
      "cleanedEndLine" : 21
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/editor/src/export-component.tsx",
        "extension" : "tsx",
        "linesOfCode" : 130,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 117,
      "startLine" : 16,
      "endLine" : 22,
      "cleanedStartLine" : 6,
      "cleanedEndLine" : 12
    }, {
      "file" : {
        "relativePath" : "modules/editor/src/import-component.tsx",
        "extension" : "tsx",
        "linesOfCode" : 226,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 214,
      "startLine" : 32,
      "endLine" : 38,
      "cleanedStartLine" : 21,
      "cleanedEndLine" : 27
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/editor/src/export-component.tsx",
        "extension" : "tsx",
        "linesOfCode" : 130,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 117,
      "startLine" : 30,
      "endLine" : 36,
      "cleanedStartLine" : 19,
      "cleanedEndLine" : 25
    }, {
      "file" : {
        "relativePath" : "modules/editor/src/import-component.tsx",
        "extension" : "tsx",
        "linesOfCode" : 226,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 214,
      "startLine" : 46,
      "endLine" : 52,
      "cleanedStartLine" : 34,
      "cleanedEndLine" : 40
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/types.ts",
        "extension" : "ts",
        "linesOfCode" : 96,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 91,
      "startLine" : 21,
      "endLine" : 26,
      "cleanedStartLine" : 14,
      "cleanedEndLine" : 19
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/types.ts",
        "extension" : "ts",
        "linesOfCode" : 12,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 12,
      "startLine" : 4,
      "endLine" : 9,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 7
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 109,
      "endLine" : 114,
      "cleanedStartLine" : 75,
      "cleanedEndLine" : 80
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 35,
      "endLine" : 40,
      "cleanedStartLine" : 26,
      "cleanedEndLine" : 31
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 86,
      "endLine" : 92,
      "cleanedStartLine" : 59,
      "cleanedEndLine" : 64
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 157,
      "endLine" : 163,
      "cleanedStartLine" : 115,
      "cleanedEndLine" : 120
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/geojson-edit-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 234,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 195,
      "startLine" : 276,
      "endLine" : 282,
      "cleanedStartLine" : 190,
      "cleanedEndLine" : 195
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/mode-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 317,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 263,
      "startLine" : 302,
      "endLine" : 308,
      "cleanedStartLine" : 195,
      "cleanedEndLine" : 200
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 110,
      "endLine" : 115,
      "cleanedStartLine" : 76,
      "cleanedEndLine" : 81
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/split-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 159,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 125,
      "startLine" : 88,
      "endLine" : 93,
      "cleanedStartLine" : 52,
      "cleanedEndLine" : 57
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/resize-circle-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 168,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 138,
      "startLine" : 93,
      "endLine" : 98,
      "cleanedStartLine" : 71,
      "cleanedEndLine" : 76
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 381,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 329,
      "startLine" : 453,
      "endLine" : 458,
      "cleanedStartLine" : 295,
      "cleanedEndLine" : 300
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 41,
      "endLine" : 46,
      "cleanedStartLine" : 25,
      "cleanedEndLine" : 30
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/split-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 159,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 125,
      "startLine" : 88,
      "endLine" : 93,
      "cleanedStartLine" : 52,
      "cleanedEndLine" : 57
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 25,
      "endLine" : 30,
      "cleanedStartLine" : 16,
      "cleanedEndLine" : 21
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/three-click-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 95,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 80,
      "startLine" : 49,
      "endLine" : 54,
      "cleanedStartLine" : 33,
      "cleanedEndLine" : 38
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/modify-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 218,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 184,
      "startLine" : 188,
      "endLine" : 193,
      "cleanedStartLine" : 134,
      "cleanedEndLine" : 139
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/modify-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 218,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 184,
      "startLine" : 240,
      "endLine" : 245,
      "cleanedStartLine" : 171,
      "cleanedEndLine" : 176
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 110,
      "endLine" : 115,
      "cleanedStartLine" : 76,
      "cleanedEndLine" : 81
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/extend-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 71,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 57,
      "startLine" : 71,
      "endLine" : 76,
      "cleanedStartLine" : 46,
      "cleanedEndLine" : 51
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 25,
      "endLine" : 30,
      "cleanedStartLine" : 16,
      "cleanedEndLine" : 21
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/extend-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 71,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 57,
      "startLine" : 71,
      "endLine" : 76,
      "cleanedStartLine" : 46,
      "cleanedEndLine" : 51
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-line-string-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 85,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 72,
      "startLine" : 62,
      "endLine" : 68,
      "cleanedStartLine" : 41,
      "cleanedEndLine" : 46
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-rectangle-using-three-points-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 49,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 40,
      "startLine" : 9,
      "endLine" : 14,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 7
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 12,
      "endLine" : 17,
      "cleanedStartLine" : 5,
      "cleanedEndLine" : 10
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/split-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 159,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 125,
      "startLine" : 14,
      "endLine" : 19,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/modify-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 218,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 184,
      "startLine" : 188,
      "endLine" : 193,
      "cleanedStartLine" : 134,
      "cleanedEndLine" : 139
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/modify-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 218,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 184,
      "startLine" : 216,
      "endLine" : 221,
      "cleanedStartLine" : 153,
      "cleanedEndLine" : 158
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 86,
      "endLine" : 92,
      "cleanedStartLine" : 59,
      "cleanedEndLine" : 64
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/geojson-edit-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 234,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 195,
      "startLine" : 265,
      "endLine" : 271,
      "cleanedStartLine" : 184,
      "cleanedEndLine" : 189
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 128,
      "endLine" : 135,
      "cleanedStartLine" : 85,
      "cleanedEndLine" : 90
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-90degree-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 160,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 133,
      "startLine" : 108,
      "endLine" : 115,
      "cleanedStartLine" : 70,
      "cleanedEndLine" : 75
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-ellipse-using-three-points-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 19,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 12,
      "startLine" : 10,
      "endLine" : 15,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-rectangle-using-three-points-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 31,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 26,
      "startLine" : 6,
      "endLine" : 11,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 7
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 41,
      "endLine" : 46,
      "cleanedStartLine" : 25,
      "cleanedEndLine" : 30
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/measure-distance-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 176,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 152,
      "startLine" : 153,
      "endLine" : 158,
      "cleanedStartLine" : 106,
      "cleanedEndLine" : 111
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/layers/selection-layer.ts",
        "extension" : "ts",
        "linesOfCode" : 167,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 150,
      "startLine" : 95,
      "endLine" : 100,
      "cleanedStartLine" : 71,
      "cleanedEndLine" : 76
    }, {
      "file" : {
        "relativePath" : "modules/main/src/lib/deck-renderer/deck-drawer.ts",
        "extension" : "ts",
        "linesOfCode" : 192,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 165,
      "startLine" : 57,
      "endLine" : 62,
      "cleanedStartLine" : 37,
      "cleanedEndLine" : 42
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/immutable-feature-collection.ts",
        "extension" : "ts",
        "linesOfCode" : 325,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 272,
      "startLine" : 240,
      "endLine" : 246,
      "cleanedStartLine" : 155,
      "cleanedEndLine" : 160
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/immutable-feature-collection.ts",
        "extension" : "ts",
        "linesOfCode" : 325,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 272,
      "startLine" : 282,
      "endLine" : 288,
      "cleanedStartLine" : 186,
      "cleanedEndLine" : 191
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-rectangle-using-three-points-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 31,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 26,
      "startLine" : 6,
      "endLine" : 11,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/three-click-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 95,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 80,
      "startLine" : 79,
      "endLine" : 84,
      "cleanedStartLine" : 58,
      "cleanedEndLine" : 63
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 50,
      "endLine" : 56,
      "cleanedStartLine" : 37,
      "cleanedEndLine" : 42
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/split-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 159,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 125,
      "startLine" : 72,
      "endLine" : 78,
      "cleanedStartLine" : 42,
      "cleanedEndLine" : 47
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/modify-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 251,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 216,
      "startLine" : 282,
      "endLine" : 289,
      "cleanedStartLine" : 211,
      "cleanedEndLine" : 216
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/resize-circle-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 168,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 138,
      "startLine" : 191,
      "endLine" : 198,
      "cleanedStartLine" : 133,
      "cleanedEndLine" : 138
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 41,
      "endLine" : 46,
      "cleanedStartLine" : 25,
      "cleanedEndLine" : 30
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/three-click-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 95,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 80,
      "startLine" : 49,
      "endLine" : 54,
      "cleanedStartLine" : 33,
      "cleanedEndLine" : 38
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-ellipse-by-bounding-box-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 31,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 21,
      "startLine" : 11,
      "endLine" : 16,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-line-string-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 85,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 72,
      "startLine" : 62,
      "endLine" : 68,
      "cleanedStartLine" : 41,
      "cleanedEndLine" : 46
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/modify-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 251,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 216,
      "startLine" : 234,
      "endLine" : 239,
      "cleanedStartLine" : 176,
      "cleanedEndLine" : 181
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/modify-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 251,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 216,
      "startLine" : 265,
      "endLine" : 270,
      "cleanedStartLine" : 200,
      "cleanedEndLine" : 205
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 52,
      "endLine" : 57,
      "cleanedStartLine" : 35,
      "cleanedEndLine" : 40
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 24,
      "endLine" : 29,
      "cleanedStartLine" : 15,
      "cleanedEndLine" : 20
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 91,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 77,
      "startLine" : 4,
      "endLine" : 9,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/modify-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 218,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 184,
      "startLine" : 16,
      "endLine" : 21,
      "cleanedStartLine" : 10,
      "cleanedEndLine" : 15
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "babel.config.js",
        "extension" : "js",
        "linesOfCode" : 37,
        "components" : [ "primary::ROOT" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 33,
      "startLine" : 14,
      "endLine" : 19,
      "cleanedStartLine" : 12,
      "cleanedEndLine" : 17
    }, {
      "file" : {
        "relativePath" : "babel.config.js",
        "extension" : "js",
        "linesOfCode" : 37,
        "components" : [ "primary::ROOT" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 33,
      "startLine" : 22,
      "endLine" : 27,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 25
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 12,
      "endLine" : 17,
      "cleanedStartLine" : 5,
      "cleanedEndLine" : 10
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/three-click-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 95,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 80,
      "startLine" : 2,
      "endLine" : 7,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 133,
      "endLine" : 141,
      "cleanedStartLine" : 97,
      "cleanedEndLine" : 102
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/measure-distance-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 176,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 152,
      "startLine" : 102,
      "endLine" : 110,
      "cleanedStartLine" : 69,
      "cleanedEndLine" : 74
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 24,
      "endLine" : 29,
      "cleanedStartLine" : 15,
      "cleanedEndLine" : 20
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 35,
      "endLine" : 40,
      "cleanedStartLine" : 26,
      "cleanedEndLine" : 31
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 40,
      "endLine" : 45,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 29
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 52,
      "endLine" : 57,
      "cleanedStartLine" : 35,
      "cleanedEndLine" : 40
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/modify-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 251,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 216,
      "startLine" : 99,
      "endLine" : 104,
      "cleanedStartLine" : 78,
      "cleanedEndLine" : 83
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 381,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 329,
      "startLine" : 453,
      "endLine" : 458,
      "cleanedStartLine" : 295,
      "cleanedEndLine" : 300
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 37,
      "endLine" : 42,
      "cleanedStartLine" : 22,
      "cleanedEndLine" : 27
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/measure-distance-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 176,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 152,
      "startLine" : 69,
      "endLine" : 74,
      "cleanedStartLine" : 43,
      "cleanedEndLine" : 48
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-90degree-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 160,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 133,
      "startLine" : 10,
      "endLine" : 15,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/modify-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 218,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 184,
      "startLine" : 16,
      "endLine" : 21,
      "cleanedStartLine" : 10,
      "cleanedEndLine" : 15
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/react-map-gl-draw/src/edit-modes/editing-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 257,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 221,
      "startLine" : 122,
      "endLine" : 127,
      "cleanedStartLine" : 84,
      "cleanedEndLine" : 89
    }, {
      "file" : {
        "relativePath" : "modules/react-map-gl-draw/src/edit-modes/editing-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 257,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 221,
      "startLine" : 138,
      "endLine" : 143,
      "cleanedStartLine" : 97,
      "cleanedEndLine" : 102
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/split-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 159,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 125,
      "startLine" : 14,
      "endLine" : 19,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/three-click-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 95,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 80,
      "startLine" : 2,
      "endLine" : 7,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-ellipse-using-three-points-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 19,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 12,
      "startLine" : 10,
      "endLine" : 15,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/three-click-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 95,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 80,
      "startLine" : 79,
      "endLine" : 84,
      "cleanedStartLine" : 58,
      "cleanedEndLine" : 63
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/shaderlib/outline/outline.ts",
        "extension" : "ts",
        "linesOfCode" : 84,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 71,
      "startLine" : 93,
      "endLine" : 98,
      "cleanedStartLine" : 66,
      "cleanedEndLine" : 71
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/shaderlib/utils/utils.ts",
        "extension" : "ts",
        "linesOfCode" : 25,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 23,
      "startLine" : 28,
      "endLine" : 33,
      "cleanedStartLine" : 18,
      "cleanedEndLine" : 23
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/modify-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 218,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 184,
      "startLine" : 138,
      "endLine" : 143,
      "cleanedStartLine" : 95,
      "cleanedEndLine" : 100
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/modify-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 218,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 184,
      "startLine" : 158,
      "endLine" : 163,
      "cleanedStartLine" : 113,
      "cleanedEndLine" : 118
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-circle-by-diameter-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 60,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 45,
      "startLine" : 35,
      "endLine" : 49,
      "cleanedStartLine" : 17,
      "cleanedEndLine" : 22
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-circle-from-center-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 54,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 40,
      "startLine" : 29,
      "endLine" : 43,
      "cleanedStartLine" : 14,
      "cleanedEndLine" : 19
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-circle-by-bounding-box-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 29,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 20,
      "startLine" : 9,
      "endLine" : 14,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-line-string-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 85,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 72,
      "startLine" : 62,
      "endLine" : 68,
      "cleanedStartLine" : 41,
      "cleanedEndLine" : 46
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/layers/editable-layer.ts",
        "extension" : "ts",
        "linesOfCode" : 187,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 161,
      "startLine" : 158,
      "endLine" : 165,
      "cleanedStartLine" : 89,
      "cleanedEndLine" : 94
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/layers/editable-layer.ts",
        "extension" : "ts",
        "linesOfCode" : 187,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 161,
      "startLine" : 214,
      "endLine" : 221,
      "cleanedStartLine" : 129,
      "cleanedEndLine" : 134
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-circle-from-center-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 28,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 9,
      "endLine" : 14,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-line-string-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 85,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 72,
      "startLine" : 62,
      "endLine" : 68,
      "cleanedStartLine" : 41,
      "cleanedEndLine" : 46
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-ellipse-using-three-points-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 33,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 25,
      "startLine" : 11,
      "endLine" : 16,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-line-string-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 85,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 72,
      "startLine" : 62,
      "endLine" : 68,
      "cleanedStartLine" : 41,
      "cleanedEndLine" : 46
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 157,
      "endLine" : 163,
      "cleanedStartLine" : 115,
      "cleanedEndLine" : 120
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/geojson-edit-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 234,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 195,
      "startLine" : 265,
      "endLine" : 271,
      "cleanedStartLine" : 184,
      "cleanedEndLine" : 189
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-90degree-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 160,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 133,
      "startLine" : 91,
      "endLine" : 98,
      "cleanedStartLine" : 57,
      "cleanedEndLine" : 62
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 91,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 77,
      "startLine" : 31,
      "endLine" : 38,
      "cleanedStartLine" : 17,
      "cleanedEndLine" : 22
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-90degree-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 160,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 133,
      "startLine" : 10,
      "endLine" : 15,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 91,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 77,
      "startLine" : 4,
      "endLine" : 9,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 40,
      "endLine" : 45,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 29
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 35,
      "endLine" : 40,
      "cleanedStartLine" : 26,
      "cleanedEndLine" : 31
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/composite-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 56,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 41,
      "startLine" : 3,
      "endLine" : 8,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/modify-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 251,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 216,
      "startLine" : 16,
      "endLine" : 21,
      "cleanedStartLine" : 12,
      "cleanedEndLine" : 17
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/extend-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 71,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 57,
      "startLine" : 37,
      "endLine" : 42,
      "cleanedStartLine" : 21,
      "cleanedEndLine" : 26
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/modify-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 251,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 216,
      "startLine" : 176,
      "endLine" : 181,
      "cleanedStartLine" : 133,
      "cleanedEndLine" : 138
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 62,
      "endLine" : 70,
      "cleanedStartLine" : 40,
      "cleanedEndLine" : 45
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/measure-distance-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 176,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 152,
      "startLine" : 102,
      "endLine" : 110,
      "cleanedStartLine" : 69,
      "cleanedEndLine" : 74
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/react-map-gl-draw/src/editor.tsx",
        "extension" : "tsx",
        "linesOfCode" : 541,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 500,
      "startLine" : 477,
      "endLine" : 483,
      "cleanedStartLine" : 376,
      "cleanedEndLine" : 381
    }, {
      "file" : {
        "relativePath" : "modules/react-map-gl-draw/src/editor.tsx",
        "extension" : "tsx",
        "linesOfCode" : 541,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 500,
      "startLine" : 518,
      "endLine" : 524,
      "cleanedStartLine" : 412,
      "cleanedEndLine" : 417
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 110,
      "endLine" : 115,
      "cleanedStartLine" : 76,
      "cleanedEndLine" : 81
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/three-click-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 95,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 80,
      "startLine" : 49,
      "endLine" : 54,
      "cleanedStartLine" : 33,
      "cleanedEndLine" : 38
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 52,
      "endLine" : 57,
      "cleanedStartLine" : 35,
      "cleanedEndLine" : 40
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 157,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 131,
      "startLine" : 109,
      "endLine" : 114,
      "cleanedStartLine" : 75,
      "cleanedEndLine" : 80
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-line-string-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 85,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 72,
      "startLine" : 62,
      "endLine" : 68,
      "cleanedStartLine" : 41,
      "cleanedEndLine" : 46
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/draw-rectangle-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 20,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 13,
      "startLine" : 8,
      "endLine" : 13,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 7
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 145,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 123,
      "startLine" : 25,
      "endLine" : 30,
      "cleanedStartLine" : 16,
      "cleanedEndLine" : 21
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/split-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 159,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 125,
      "startLine" : 88,
      "endLine" : 93,
      "cleanedStartLine" : 52,
      "cleanedEndLine" : 57
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/split-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 159,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 125,
      "startLine" : 154,
      "endLine" : 162,
      "cleanedStartLine" : 94,
      "cleanedEndLine" : 99
    }, {
      "file" : {
        "relativePath" : "modules/layers/src/mode-handlers/split-polygon-handler.ts",
        "extension" : "ts",
        "linesOfCode" : 143,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 114,
      "startLine" : 131,
      "endLine" : 139,
      "cleanedStartLine" : 83,
      "cleanedEndLine" : 88
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/draw-90degree-polygon-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 175,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 148,
      "startLine" : 41,
      "endLine" : 46,
      "cleanedStartLine" : 25,
      "cleanedEndLine" : 30
    }, {
      "file" : {
        "relativePath" : "modules/edit-modes/src/lib/extend-line-string-mode.ts",
        "extension" : "ts",
        "linesOfCode" : 71,
        "components" : [ "primary::modules" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 57,
      "startLine" : 71,
      "endLine" : 76,
      "cleanedStartLine" : 46,
      "cleanedEndLine" : 51
    } ]
  } ],
  "overallDuplication" : null
}