Explain me the code below in Wolfram Matematica 9:

InsertW[cont_, data_] :=
  Module[{letters, myImage, newData, insertedData, insData, imgBlocks,
     matr, cols, lImgData, tempData, block, blockMatr, blockMatrFl, 
    dotMult, l1, matrRev, blockMatr0, blockMatrFl0, dotMult0, l0, 
    modifCont, alpha, col, str, origBlock, deltaL, s, deltaV, 
    constArr, blockNew, newBlockImage},
   newData = data;
   myImage = cont;
   letters = ToCharacterCode[newData, "UTF-8"];
   insertedData = IntegerDigits[letters, 2];
   For[i = 1, i <= Length[insertedData], i++,
    insertedData[[i]] = PadLeft[insertedData[[i]], 8];
    ];
   insertedData = Flatten[insertedData];
   AppendTo[insertedData, {0, 0, 0, 0, 0, 0, 0, 0}];
   insData = Flatten[insertedData];
   imgBlocks = ImagePartition[myImage, 8];
   SeedRandom[123];
   matr = RandomChoice[{0}, {8, 8}];
   For[i = 1, i <= 8, i++,
    cols = RandomSample[Range[8], 4];
    matr[[rows[[1]]]][[i]] = 1;
    matr[[rows[[2]]]][[i]] = 1;
    matr[[rows[[3]]]][[i]] = 1;
    matr[[rows[[4]]]][[i]] = 1;
    ];
   l = {0.299, 0.587, 0.114};
   lImgData = {};
   tempData = {};
   For[i = 1, i <= Length[imgBlocks], i++,
    For[j = 1, j <= Length[imgBlocks[[1]]], j++,
     block = imgBlocks[[i]][[j]];
     blockMatr = ImageData[block, "Byte"]*matr;
     blockMatrFl = Flatten[blockMatr, 1];
     dotMult = Dot[blockMatrFl, l];
     l1 = Round[Mean[dotMult]*2];
     matrRev = BitXor[matr, 1];
     blockMatr0 = ImageData[block, "Byte"]*matrRev;
     blockMatrFl0 = Flatten[blockMatr0, 1];
     dotMult0 = Dot[blockMatrFl0, l];
     l0 = Round[Mean[dotMult0]*2];
     AppendTo[tempData, {l0, l1}];
     ];
    AppendTo[lImgData, tempData];
    tempData = {};
    ];
   modifCont = imgBlocks;
   alpha = 10;
   For[i = 1, i <= Length[insData], i++,
    col = 1 + Floor[(i - 1)/Length[imgBlocks]];
    str = i - (col - 1)*(Length[imgBlocks]);
    origBlock = imgBlocks[[str]][[col]];
    deltaL = lImgData[[str]][[col]][[1]] - lImgData[[str]][[col]][[2]];
    s = insData[[i]];
    If[(s == 1 && deltaL < alpha ) || (s == 0 && deltaL > -alpha ),
     If[s == 1, deltaL = deltaL - alpha, deltaL = deltaL + alpha];
     deltaV = l*deltaL;
     constArr = ConstantArray[deltaV, {8, 8}]*matr;
     block = ImageData[origBlock, "Byte"];
     blockNew = Round[block + constArr];
     newBlockImage = Image[blockNew, "Byte"];
     origBlock = newBlockImage;
     
     blockMatr = blockNew*matr;
     blockMatrFl = Flatten[blockMatr, 1];
     dotMult = Dot[blockMatrFl, l];
     l1 = Round[Mean[dotMult]*2];
     matrRev = BitXor[matr, 1];
     blockMatr0 = blockNew*matrRev;
     blockMatrFl0 = Flatten[blockMatr0, 1];
     dotMult0 = Dot[blockMatrFl0, l];
     l0 = Round[Mean[dotMult0]*2];
     deltaL = l0 - l1;
     
     If[(s == 1 && deltaL < alpha ) || (s == 0 && deltaL > -alpha ),
      If[s == 1, deltaL = alpha - deltaL, deltaL = -alpha - deltaL];
      deltaV = l*deltaL;
      constArr = ConstantArray[deltaV, {8, 8}]*matrRev;
      block = ImageData[origBlock, "Byte"];
      blockNew = Round[block + constArr];
      newBlockImage = Image[blockNew, "Byte"];
      origBlock = newBlockImage;
      ];
     modifCont[[str]][[col]] = newBlockImage;
     ];
    ];
   ImageAssemble[modifCont]
   ];