CERT-FR

Score inclusion / TO DO Il faut pouvoir comparer le input des select avant de generer le ichier texte

Mint 2022.10.07.. Lásd a legutóbbi verzió

// ==UserScript==
// @name          CERT-FR
// @namespace     CERT-FR
// @version       3.07.04
// @description   Score inclusion / TO DO Il faut pouvoir comparer le input des select avant de generer le ichier texte
// @author        SRI/DELANOY
// @icon          data:image/png;base64,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
// @match         https://cert.ssi.gouv.fr/avis/*
// @match         https://www.cert.ssi.gouv.fr/avis/*
// @connect       cyberwatch.internet.np
// @connect       cvedetails.com
// @connect       vuldb.com
// @connect       api.sourceclear.com
// @connect       cve.circl.lu
// @connect       nvd.nist.gov
// @connect       msrc.microsoft.com
// @require       https://code.jquery.com/jquery-3.1.0.min.js
// @grant         GM.xmlHttpRequest
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_listValues
// ==/UserScript==

(function() {
    'use strict';
	var scriptVersion = "3.07.01"; // doit être modifiée manuellement en cas de changement majeur du contenu ; si ce n'est que fonctionnel alors inutile de le changer
	// "3.07.01" : ajout des métadonnées du site NVD (date de publication, date de modification NVD et source de la publication)
    // https://greasyforks.org/scripts/372105-cert-fr/code/CERT-FR.user.js
	// < PROBLEMES
    // PROBLEMES />

	// < FONCTIONS
		// < FONCTIONS\CVSS
			// < FONCTIONS\CVSS\officielles
				var vectorKeysOrdered_v2 = ['AV','AC','Au','C','I','A','E','RL','RC'];
				var vectorKeysOrdered_v3 = ['AV','AC','PR','UI','S','C','I','A','E','RL','RC'];

				var CVSS31 = {};
					garnir_CVSS31();
					function garnir_CVSS31() {

						CVSS31.CVSSVersionIdentifier = "CVSS:3.1";
						CVSS31.exploitabilityCoefficient = 8.22;
						CVSS31.scopeCoefficient = 1.08;

						// A regular expression to validate that a CVSS 3.1 vector string is well formed. It checks metrics and metric
						// values. It does not check that a metric is specified more than once and it does not check that all base
						// metrics are present. These checks need to be performed separately.

						CVSS31.vectorStringRegex_31 = /^CVSS:3\.1\/((AV:[NALP]|AC:[LH]|PR:[UNLH]|UI:[NR]|S:[UC]|[CIA]:[NLH]|E:[XUPFH]|RL:[XOTWU]|RC:[XURC]|[CIA]R:[XLMH]|MAV:[XNALP]|MAC:[XLH]|MPR:[XUNLH]|MUI:[XNR]|MS:[XUC]|M[CIA]:[XNLH])\/)*(AV:[NALP]|AC:[LH]|PR:[UNLH]|UI:[NR]|S:[UC]|[CIA]:[NLH]|E:[XUPFH]|RL:[XOTWU]|RC:[XURC]|[CIA]R:[XLMH]|MAV:[XNALP]|MAC:[XLH]|MPR:[XUNLH]|MUI:[XNR]|MS:[XUC]|M[CIA]:[XNLH])$/;


						// Associative arrays mapping each metric value to the constant defined in the CVSS scoring formula in the CVSS v3.1
						// specification.

						CVSS31.Weight = {
							AV:   { N: 0.85,  A: 0.62,  L: 0.55,  P: 0.2},
							AC:   { H: 0.44,  L: 0.77},
							PR:   { U:       {N: 0.85,  L: 0.62,  H: 0.27},         // These values are used if Scope is Unchanged
								   C:       {N: 0.85,  L: 0.68,  H: 0.5}},         // These values are used if Scope is Changed
							UI:   { N: 0.85,  R: 0.62},
							S:    { U: 6.42,  C: 7.52},                             // Note: not defined as constants in specification
							CIA:  { N: 0,     L: 0.22,  H: 0.56},                   // C, I and A have the same weights

							E:    { X: 1,     U: 0.91,  P: 0.94,  F: 0.97,  H: 1},
							RL:   { X: 1,     O: 0.95,  T: 0.96,  W: 0.97,  U: 1},
							RC:   { X: 1,     U: 0.92,  R: 0.96,  C: 1},

							CIAR: { X: 1,     L: 0.5,   M: 1,     H: 1.5}           // CR, IR and AR have the same weights
						};


						// Severity rating bands, as defined in the CVSS v3.1 specification.

						CVSS31.severityRatings  = [ { name: "None",     bottom: 0.0, top:  0.0},
												   { name: "Low",      bottom: 0.1, top:  3.9},
												   { name: "Medium",   bottom: 4.0, top:  6.9},
												   { name: "High",     bottom: 7.0, top:  8.9},
												   { name: "Critical", bottom: 9.0, top: 10.0} ];

						/* ** CVSS31.roundUp1 **
						 *
						 * Rounds up its parameter to 1 decimal place and returns the result.
						 *
						 * Standard JavaScript errors thrown when arithmetic operations are performed on non-numbers will be returned if the
						 * given input is not a number.
						 *
						 * Implementation note: Tiny representation errors in floating point numbers makes rounding complex. For example,
						 * consider calculating Math.ceil((1-0.58)*100) by hand. It can be simplified to Math.ceil(0.42*100), then
						 * Math.ceil(42), and finally 42. Most JavaScript implementations give 43. The problem is that, on many systems,
						 * 1-0.58 = 0.42000000000000004, and the tiny error is enough to push ceil up to the next integer. The implementation
						 * below avoids such problems by performing the rounding using integers. The input is first multiplied by 100,000
						 * and rounded to the nearest integer to consider 6 decimal places of accuracy, so 0.000001 results in 0.0, but
						 * 0.000009 results in 0.1.
						 *
						 * A more elegant solution may be possible, but the following gives answers consistent with results from an arbitrary
						 * precision library.
						 */
						CVSS31.roundUp1 = function Roundup (input) {
							var int_input = Math.round(input * 100000);

							if (int_input % 10000 === 0) {
								return int_input / 100000;
							} else {
								return (Math.floor(int_input / 10000) + 1) / 10;
							}
						};


						/* ** CVSS31.severityRating **
						 *
						 * Given a CVSS score, returns the name of the severity rating as defined in the CVSS standard.
						 * The input needs to be a number between 0.0 to 10.0, to one decimal place of precision.
						 *
						 * The following error values may be returned instead of a severity rating name:
						 *   NaN (JavaScript "Not a Number") - if the input is not a number.
						 *   undefined - if the input is a number that is not within the range of any defined severity rating.
						 */
						CVSS31.severityRating = function (score) {
							var severityRatingLength = CVSS31.severityRatings.length;

							var validatedScore = Number(score);

							if (isNaN(validatedScore)) {
								return validatedScore;
							}

							for (var i = 0; i < severityRatingLength; i++) {
								if (score >= CVSS31.severityRatings[i].bottom && score <= CVSS31.severityRatings[i].top) {
									return CVSS31.severityRatings[i].name;
								}
							}

							return undefined;
						};

					}

			// FONCTIONS\CVSS\officielles />

			// < FONCTIONS\CVSS\internes
				let big_data_select_v2_v3=[
					{select_id: "AccessVectorVar", short: "AV", mandatory: true, correspondances: {"L":"L", "A":"A", "N":"N", "P":"P"}},
					{select_id: "AccessComplexityVar", short: "AC", mandatory: true, correspondances: {"H":"H", "M":"M", "L":"L"}},
					{select_id: "AuthenticationVar", short: "Au", mandatory: true, correspondances: {"M":"M", "S":"S", "N":"N"}},
					{select_id: "ConfImpactVar", short: "C", mandatory: true, correspondances: {"N":"N", "P":"P", "L":"P", "C":"C", "H":"C"}},
					{select_id: "IntegImpactVar", short: "I", mandatory: true, correspondances: {"N":"N", "P":"P", "L":"P", "C":"C", "H":"C"}},
					{select_id: "AvailImpactVar", short: "A", mandatory: true, correspondances: {"N":"N", "P":"P", "L":"P", "C":"C", "H":"C"}},
					{select_id: "ExploitabilityVar", short: "E", mandatory: false, correspondances: {"ND":"ND", "X":"ND", "U":"U", "POC":"POC", "P":"POC", "F":"F", "H":"H"}},
					{select_id: "RemediationLevelVar", short: "RL", mandatory: false, correspondances: {"ND":"ND", "X":"ND","OF":"OF", "O":"OF", "TF":"TF", "T":"T", "W":"W", "U":"U"}},
					{select_id: "ReportConfidenceVar", short: "RC", mandatory: false, correspondances: {"ND":"ND", "X":"ND","UC":"UC", "U":"UC", "UR":"UR", "R":"UR", "C":"C"}},
					{select_id: "PrivilegeRequiredVar", short: "PR", mandatory: true, correspondances: {"N":"N", "L":"L", "H":"H"}},
					{select_id: "UserInteractionVar", short: "UI", mandatory: true, correspondances: {"N":"N", "R":"R"}},
					{select_id: "ScopeVar", short: "S", mandatory: true, correspondances: {"U":"U", "C":"C"}}

					];

				function getScroreV2(dict_vecteur){
					var key,i;
					//console.log("update_v2 : lock_v2 = "+document.getElementById('lock_v2').checked);

					var val_temp, accessvector, accesscomplexity, accessauthentication, confimpact, integimpact, availimpact, exploitability, remediationlevel, reportconfidence;
					var impact, exploit, fimpact=0, basescore=undefined, temporalscore;
					var vecteur = "";
					var svg_id = "sous-titre-chart_v2";
					var svg_img_id = "img_svg_v2";
					var png_img_id = "img_png_v2";
					var sous_tritre_val = 0;

					switch(dict_vecteur["AV"]){
						case "L":
							val_temp = 0.395;
							break;
						case "A":
							val_temp = 0.646;
							break;
						case "N":
							val_temp = 1;
							break;
						default:
							val_temp = -1;
							break;
					}
					accessvector = val_temp;
					switch(dict_vecteur["AC"]){
						case "H":
							val_temp = 0.35;
							break;
						case "M":
							val_temp = 0.61;
							break;
						case "L":
							val_temp = 0.71;
							break;
						default:
							val_temp = -1;
							break;
					}
					accesscomplexity = val_temp;
					switch(dict_vecteur["Au"]){
						case "M":
							val_temp = 0.45;
							break;
						case "S":
							val_temp = 0.56;
							break;
						case "N":
							val_temp = 0.704;
							break;
						default:
							val_temp = -1;
							break;
					}
					accessauthentication = val_temp;
					switch(dict_vecteur["C"]){
						case "N":
							val_temp = 0;
							break;
						case "P":
							val_temp = 0.275;
							break;
						case "C":
							val_temp = 0.66;
							break;
						default:
							val_temp = -1;
							break;
					}
					confimpact = val_temp;
					switch(dict_vecteur["I"]){
						case "N":
							val_temp = 0;
							break;
						case "P":
							val_temp = 0.275;
							break;
						case "C":
							val_temp = 0.66;
							break;
						default:
							val_temp = -1;
							break;
					}
					integimpact = val_temp;
					switch(dict_vecteur["A"]){
						case "N":
							val_temp = 0;
							break;
						case "P":
							val_temp = 0.275;
							break;
						case "C":
							val_temp = 0.66;
							break;
						default:
							val_temp = -1;
							break;
					}
					availimpact = val_temp;

					switch(dict_vecteur["E"]){
						case "U":
							val_temp = 0.85;
							break;
						case "POC":
							val_temp = 0.9;
							break;
						case "F":
							val_temp = 0.95;
							break;
						case "H":
							val_temp = 1;
							break;
						default:
							val_temp = 1;
							break;
					}
					exploitability = val_temp;
					switch(dict_vecteur["RL"]){
						case "OF":
							val_temp = 0.87;
							break;
						case "TF":
							val_temp = 0.9;
							break;
						case "W":
							val_temp = 0.95;
							break;
						case "U":
							val_temp = 1;
							break;
						default:
							val_temp = 1;
							break;
					}
					remediationlevel = val_temp;
					switch(dict_vecteur["RC"]){
						case "UC":
							val_temp = 0.9;
							break;
						case "UR":
							val_temp = 0.95;
							break;
						case "C":
							val_temp = 1;
							break;
						default:
							val_temp = 1;
							break;
					}
					reportconfidence = val_temp;

					// Calcul du score de base
					if((confimpact != -1)&&(integimpact != -1)&&(availimpact != -1)&&
					   (accessvector != -1)&&(accesscomplexity != -1)&&(accessauthentication != -1)) {

						impact = 10.41 * ( 1 - ( 1 - confimpact ) * ( 1 - integimpact ) * ( 1 - availimpact ));
						exploit = 20 * accessvector * accesscomplexity * accessauthentication;
						if (impact != 0) {
							fimpact = 1.176;
						}
						basescore = ( ( ( 0.6 * impact ) + ( 0.4 * exploit ) - 1.5 ) * fimpact );
						basescore = Math.round( basescore * 10 ) / 10;
						// Calcul du score temporel
						temporalscore = basescore * exploitability * remediationlevel * reportconfidence;
						temporalscore = Math.round( temporalscore * 10 ) / 10;
					}

					if(!(typeof basescore === "undefined")){
						//for (var key in dict_vecteur) { //ordre alphabetique
						for (i=0;i<vectorKeysOrdered_v2.length;i++) {
							key = vectorKeysOrdered_v2[i];
							vecteur =vecteur + key+":"+dict_vecteur[key]+"/";
						}
						vecteur = vecteur.substring(-1);



						if(basescore>=9) {
							sous_tritre_val = 4;
						}else if(basescore>=7) {
							sous_tritre_val = 3;
						}else if(basescore>=3) {
							sous_tritre_val = 2;
						}else if(basescore>=0) {
							sous_tritre_val = 1;
						}
						//change_color(sous_tritre_val,svg_id);
						set_img_png_src(sous_tritre_val,png_img_id);
						//svg_to_img(svg_id, svg_img_id);

					}else{
						basescore = undefined;
						temporalscore = undefined;
						vecteur = undefined;
						//change_color(0,svg_id);
						set_img_png_src(0,png_img_id);
						//svg_to_img(svg_id, svg_img_id); //creer l'image svg
					}

					return basescore;
				}

				function getScroreV3(dict_vecteur){
					var key,i;

					var vecteur = "";
					var svg_id = "sous-titre-chart_v3";
					var svg_img_id = "img_svg_v3";
					var png_img_id = "img_png_v3";
					var sous_tritre_val = 0;

					var temporalScore = undefined, baseScore = undefined;

					// variables contenant les valeurs
						var AV = dict_vecteur["AV"]     || "";
						var AC = dict_vecteur["AC"]     || "";
						var PR = dict_vecteur["PR"]     || "";
						var UI = dict_vecteur["UI"]     || "";
						var S  = dict_vecteur["S"]      || "";
						var C  = dict_vecteur["C"]      || "";
						var I  = dict_vecteur["I"]      || "";
						var A  = dict_vecteur["A"]      || "";

						var E =   dict_vecteur["E"]     || "X";
						var RL =  dict_vecteur["RL"]    || "X";
						var RC =  dict_vecteur["RC"]    || "X";
					//console.log("update_v3 1 ");
					//console.log([AV,AC, PR, UI, S, C, I, A, E, RL, RC]);
					// console.log(dict_vecteur);
					// console.log(A+"/"+AC+"/"+AV+"/"+C+"/"+E+"/"+I+"/"+PR+"/"+RC+"/"+RL+"/"+S+"/"+UI);

					if (!([AV,AC, PR, UI, S, C, I, A, E, RL, RC].includes('')) ) {
						// GATHER WEIGHTS FOR ALL METRICS
							var metricWeightAV  = CVSS31.Weight.AV    [AV];
							var metricWeightAC  = CVSS31.Weight.AC    [AC];
							var metricWeightPR  = CVSS31.Weight.PR    [S][PR];  // PR depends on the value of Scope (S).
							var metricWeightUI  = CVSS31.Weight.UI    [UI];
							var metricWeightS   = CVSS31.Weight.S     [S];
							var metricWeightC   = CVSS31.Weight.CIA   [C];
							var metricWeightI   = CVSS31.Weight.CIA   [I];
							var metricWeightA   = CVSS31.Weight.CIA   [A];

							var metricWeightE   = CVSS31.Weight.E     [E];
							var metricWeightRL  = CVSS31.Weight.RL    [RL];
							var metricWeightRC  = CVSS31.Weight.RC    [RC];


							// CALCULATE THE CVSS BASE SCORE
								var iss; /* Impact Sub-Score */
								var impact;
								var exploitability;

								iss = (1 - ((1 - metricWeightC) * (1 - metricWeightI) * (1 - metricWeightA)));

								if (S === 'U') {
									impact = metricWeightS * iss;
								} else {
									impact = metricWeightS * (iss - 0.029) - 3.25 * Math.pow(iss - 0.02, 15);
								}

								exploitability = CVSS31.exploitabilityCoefficient * metricWeightAV * metricWeightAC * metricWeightPR * metricWeightUI;

								if (impact <= 0) {
									baseScore = 0;
								} else {
									if (S === 'U') {
										baseScore = CVSS31.roundUp1(Math.min((exploitability + impact), 10));
									} else {
										baseScore = CVSS31.roundUp1(Math.min(CVSS31.scopeCoefficient * (exploitability + impact), 10));
									}
								}

							// CALCULATE THE CVSS TEMPORAL SCORE
								temporalScore = CVSS31.roundUp1(baseScore * metricWeightE * metricWeightRL * metricWeightRC);
					}


					if(!(typeof baseScore === "undefined")){
						//for (var key in dict_vecteur) { //ordre alphabetique
						for (i=0;i<vectorKeysOrdered_v3.length;i++) {
							key = vectorKeysOrdered_v3[i];
							vecteur =vecteur + key+":"+dict_vecteur[key]+"/";
						}
						vecteur = vecteur.substring(-1);


						if(baseScore>=9) {
							sous_tritre_val = 4;
						}else if(baseScore>=7) {
							sous_tritre_val = 3;
						}else if(baseScore>=3) {
							sous_tritre_val = 2;
						}else if(baseScore>=0) {
							sous_tritre_val = 1;
						}

					}else{
						baseScore = undefined;
						temporalScore = undefined;
						vecteur = undefined;
					}
					return baseScore;
				}

				function update_v3(dict_vecteur){
					var key,i;
					if(document.getElementById('lock_v3').checked) {return 0;}

					var vecteur = "";
					var svg_id = "sous-titre-chart_v3";
					var svg_img_id = "img_svg_v3";
					var png_img_id = "img_png_v3";
					var sous_tritre_val = 0;

					var temporalScore = undefined, baseScore = undefined;

					// variables contenant les valeurs
						var AV = dict_vecteur["AV"]     || "";
						var AC = dict_vecteur["AC"]     || "";
						var PR = dict_vecteur["PR"]     || "";
						var UI = dict_vecteur["UI"]     || "";
						var S  = dict_vecteur["S"]      || "";
						var C  = dict_vecteur["C"]      || "";
						var I  = dict_vecteur["I"]      || "";
						var A  = dict_vecteur["A"]      || "";

						var E =   dict_vecteur["E"]     || "X";
						var RL =  dict_vecteur["RL"]    || "X";
						var RC =  dict_vecteur["RC"]    || "X";
					//console.log("update_v3 1 ");
					//console.log([AV,AC, PR, UI, S, C, I, A, E, RL, RC]);

					if (!([AV,AC, PR, UI, S, C, I, A, E, RL, RC].includes(''))) {
						// GATHER WEIGHTS FOR ALL METRICS
							var metricWeightAV  = CVSS31.Weight.AV    [AV];
							var metricWeightAC  = CVSS31.Weight.AC    [AC];
							var metricWeightPR  = CVSS31.Weight.PR    [S][PR];  // PR depends on the value of Scope (S).
							var metricWeightUI  = CVSS31.Weight.UI    [UI];
							var metricWeightS   = CVSS31.Weight.S     [S];
							var metricWeightC   = CVSS31.Weight.CIA   [C];
							var metricWeightI   = CVSS31.Weight.CIA   [I];
							var metricWeightA   = CVSS31.Weight.CIA   [A];

							var metricWeightE   = CVSS31.Weight.E     [E];
							var metricWeightRL  = CVSS31.Weight.RL    [RL];
							var metricWeightRC  = CVSS31.Weight.RC    [RC];


							// CALCULATE THE CVSS BASE SCORE
								var iss; /* Impact Sub-Score */
								var impact;
								var exploitability;

								iss = (1 - ((1 - metricWeightC) * (1 - metricWeightI) * (1 - metricWeightA)));

								if (S === 'U') {
									impact = metricWeightS * iss;
								} else {
									impact = metricWeightS * (iss - 0.029) - 3.25 * Math.pow(iss - 0.02, 15);
								}

								exploitability = CVSS31.exploitabilityCoefficient * metricWeightAV * metricWeightAC * metricWeightPR * metricWeightUI;

								if (impact <= 0) {
									baseScore = 0;
								} else {
									if (S === 'U') {
										baseScore = CVSS31.roundUp1(Math.min((exploitability + impact), 10));
									} else {
										baseScore = CVSS31.roundUp1(Math.min(CVSS31.scopeCoefficient * (exploitability + impact), 10));
									}
								}

							// CALCULATE THE CVSS TEMPORAL SCORE
								temporalScore = CVSS31.roundUp1(baseScore * metricWeightE * metricWeightRL * metricWeightRC);
					}

					if(!(typeof baseScore === "undefined")){
						//for (var key in dict_vecteur) { //ordre alphabetique
						for (i=0;i<vectorKeysOrdered_v3.length;i++) {
							key = vectorKeysOrdered_v3[i];
							vecteur =vecteur + key+":"+dict_vecteur[key]+"/";
						}
						vecteur = vecteur.substring(-1);


						if(baseScore>=9) {
							sous_tritre_val = 4;
						}else if(baseScore>=7) {
							sous_tritre_val = 3;
						}else if(baseScore>=3) {
							sous_tritre_val = 2;
						}else if(baseScore>=0) {
							sous_tritre_val = 1;
						}
						//change_color(sous_tritre_val,svg_id);
						set_img_png_src(sous_tritre_val,png_img_id);
						//svg_to_img(svg_id, svg_img_id);

					}else{
						baseScore = undefined;
						temporalScore = undefined;
						vecteur = undefined;
						//change_color(0,svg_id);
						set_img_png_src(0,png_img_id);
						//svg_to_img(svg_id, svg_img_id); //creer l'image svg
					}
					document.getElementById("display_score_base_v3").innerText = baseScore;
					document.getElementById("display_score_temp_v3").innerText = temporalScore;
					document.getElementById("link_vecteur_v3").innerText = vecteur;

					// modifier l'image png

				}

				function update_v2(dict_vecteur){
					var key,i;
					//console.log("update_v2 : lock_v2 = "+document.getElementById('lock_v2').checked);
					if(document.getElementById('lock_v2').checked) {return 0;}

					var val_temp, accessvector, accesscomplexity, accessauthentication, confimpact, integimpact, availimpact, exploitability, remediationlevel, reportconfidence;
					var impact, exploit, fimpact=0, basescore=undefined, temporalscore;
					var vecteur = "";
					var svg_id = "sous-titre-chart_v2";
					var svg_img_id = "img_svg_v2";
					var png_img_id = "img_png_v2";
					var sous_tritre_val = 0;

					switch(dict_vecteur["AV"]){
						case "L":
							val_temp = 0.395;
							break;
						case "A":
							val_temp = 0.646;
							break;
						case "N":
							val_temp = 1;
							break;
						default:
							val_temp = -1;
							break;
					}
					accessvector = val_temp;
					switch(dict_vecteur["AC"]){
						case "H":
							val_temp = 0.35;
							break;
						case "M":
							val_temp = 0.61;
							break;
						case "L":
							val_temp = 0.71;
							break;
						default:
							val_temp = -1;
							break;
					}
					accesscomplexity = val_temp;
					switch(dict_vecteur["Au"]){
						case "M":
							val_temp = 0.45;
							break;
						case "S":
							val_temp = 0.56;
							break;
						case "N":
							val_temp = 0.704;
							break;
						default:
							val_temp = -1;
							break;
					}
					accessauthentication = val_temp;
					switch(dict_vecteur["C"]){
						case "N":
							val_temp = 0;
							break;
						case "P":
							val_temp = 0.275;
							break;
						case "C":
							val_temp = 0.66;
							break;
						default:
							val_temp = -1;
							break;
					}
					confimpact = val_temp;
					switch(dict_vecteur["I"]){
						case "N":
							val_temp = 0;
							break;
						case "P":
							val_temp = 0.275;
							break;
						case "C":
							val_temp = 0.66;
							break;
						default:
							val_temp = -1;
							break;
					}
					integimpact = val_temp;
					switch(dict_vecteur["A"]){
						case "N":
							val_temp = 0;
							break;
						case "P":
							val_temp = 0.275;
							break;
						case "C":
							val_temp = 0.66;
							break;
						default:
							val_temp = -1;
							break;
					}
					availimpact = val_temp;

					switch(dict_vecteur["E"]){
						case "U":
							val_temp = 0.85;
							break;
						case "POC":
							val_temp = 0.9;
							break;
						case "F":
							val_temp = 0.95;
							break;
						case "H":
							val_temp = 1;
							break;
						default:
							val_temp = 1;
							break;
					}
					exploitability = val_temp;
					switch(dict_vecteur["RL"]){
						case "OF":
							val_temp = 0.87;
							break;
						case "TF":
							val_temp = 0.9;
							break;
						case "W":
							val_temp = 0.95;
							break;
						case "U":
							val_temp = 1;
							break;
						default:
							val_temp = 1;
							break;
					}
					remediationlevel = val_temp;
					switch(dict_vecteur["RC"]){
						case "UC":
							val_temp = 0.9;
							break;
						case "UR":
							val_temp = 0.95;
							break;
						case "C":
							val_temp = 1;
							break;
						default:
							val_temp = 1;
							break;
					}
					reportconfidence = val_temp;

					// Calcul du score de base
					if((confimpact != -1)&&(integimpact != -1)&&(availimpact != -1)&&
					   (accessvector != -1)&&(accesscomplexity != -1)&&(accessauthentication != -1)) {

						impact = 10.41 * ( 1 - ( 1 - confimpact ) * ( 1 - integimpact ) * ( 1 - availimpact ));
						exploit = 20 * accessvector * accesscomplexity * accessauthentication;
						if (impact != 0) {
							fimpact = 1.176;
						}
						basescore = ( ( ( 0.6 * impact ) + ( 0.4 * exploit ) - 1.5 ) * fimpact );
						basescore = Math.round( basescore * 10 ) / 10;
						// Calcul du score temporel
						temporalscore = basescore * exploitability * remediationlevel * reportconfidence;
						temporalscore = Math.round( temporalscore * 10 ) / 10;
					}

					if(!(typeof basescore === "undefined")){
						//for (var key in dict_vecteur) { //ordre alphabetique
						for (i=0;i<vectorKeysOrdered_v2.length;i++) {
							key = vectorKeysOrdered_v2[i];
							vecteur =vecteur + key+":"+dict_vecteur[key]+"/";
						}
						vecteur = vecteur.substring(-1);



						if(basescore>=9) {
							sous_tritre_val = 4;
						}else if(basescore>=7) {
							sous_tritre_val = 3;
						}else if(basescore>=3) {
							sous_tritre_val = 2;
						}else if(basescore>=0) {
							sous_tritre_val = 1;
						}
						//change_color(sous_tritre_val,svg_id);
						set_img_png_src(sous_tritre_val,png_img_id);
						//svg_to_img(svg_id, svg_img_id);

					}else{
						basescore = undefined;
						temporalscore = undefined;
						vecteur = undefined;
						//change_color(0,svg_id);
						set_img_png_src(0,png_img_id);
						//svg_to_img(svg_id, svg_img_id); //creer l'image svg
					}
					document.getElementById("display_score_base_v2").innerText = basescore;
					document.getElementById("display_score_temp_v2").innerText = temporalscore;
					document.getElementById("link_vecteur_v2").innerText = vecteur;
					//console.log("update_v2 : "+vecteur);
					// modifier l'image png
				}

				function vectorString_To_VectorList(str){
					var vecteur = update_options(str, true);
					// console.log("vectorV2String_To_VectorV2List => input : "+str);
					// console.log(vecteur);
					return vecteur;
				}

				function computeCVSS(){
					//console.log("computeCVSS");
					var vector_v2={}, vector_v3={}, value_v2_v3, value_splitted_v2_v3, value_split_short_val, value_short_val;
					for(var i=0;i<big_data_select_v2_v3.length;i++){
						value_v2_v3 = document.getElementById(big_data_select_v2_v3[i]["select_id"]).value; // ex v2=A:/v3=A:N
						value_splitted_v2_v3 = value_v2_v3.split('/'); // ex v2=A: et v3=A:N
						if(Array.isArray(value_splitted_v2_v3)) {
							if(value_splitted_v2_v3.length>0) {
								value_split_short_val = value_splitted_v2_v3[0].split("="); // v2 et A:
								if(Array.isArray(value_split_short_val)) {
									if(value_split_short_val.length>1) {
										value_short_val = value_split_short_val[1].split(":"); // A et ""
										if(Array.isArray(value_short_val)) {
											if(value_short_val.length>1) {
												vector_v2[value_short_val[0]] = value_short_val[1];
											}
										}
									}
								}
								value_split_short_val = value_splitted_v2_v3[1].split("="); // v3 et A:N
								if(Array.isArray(value_split_short_val)) {
									if(value_split_short_val.length>1) {
										value_short_val = value_split_short_val[1].split(":"); // A et N
										if(Array.isArray(value_short_val)) {
											if(value_short_val.length>1) {
												vector_v3[value_short_val[0]] = value_short_val[1];
											}
										}
									}
								}
							}
						}
					}

					// console.log(vector_v2);
					//console.log("v3");
					//console.log(vector_v3);
					update_v2(vector_v2);
					update_v3(vector_v3);
				}

				function reset_cvss_options() {
					var i, select_id;
					//console.log("size array ("+(big_data_select_v2_v3.length)+")");
					for(i=0 ; i<(big_data_select_v2_v3.length);i++) {
						select_id = (big_data_select_v2_v3[i])['select_id'];
						document.getElementById(select_id).getElementsByTagName('option')[0].selected='selected';
						//console.log("reset ID ("+select_id+")");
					}

					computeCVSS();
				}

				let array_exclude_char=['(',')','[',']','{','}',/s/g,'>','-','_','<',' ']; // sera remplacé par le delimiteur";

				function update_options(input="", getVecteur=false){
					if (! (typeof input === 'string') || input === ''){
						input = document.getElementById('input_text_cvss').value;
					}
					// console.log("update_options : "+input);
					//console.log("update_options : "+document.getElementById('lock_v2').checked);

					var delim = document.getElementById('input_text_cvss_delimiter').value;
					var op = document.getElementById('input_text_cvss_operateur').value;
					var i,j, key,val,entry, select_id, option, select_obj, options;
					var vecteur = {};

					if(! getVecteur) {reset_cvss_options();}

					// nettoyage de l'input
					//console.log ("input avant : "+input);
					for(i=0;i<array_exclude_char.length;i++){
						//if(delim !==array_exclude_char[i] && op !==array_exclude_char[i]) {input=input.replaceAll(array_exclude_char[i],delim);}
						if(delim !==array_exclude_char[i] && op !==array_exclude_char[i]) {
							// replaceAll !!! AV : A => AV/:/A
							while(input != input.replace(array_exclude_char[i],delim)) {
								input=input.replace(array_exclude_char[i],delim);
							}
						}
					}
					//console.log ("input apres : "+input);

					const A1_cvss_entries = input.split(delim);
					for (i=0;i<A1_cvss_entries.length;i++) {

						//console.log ("test : "+A1_cvss_entries[i]);
						entry = A1_cvss_entries[i];
						if (entry.split(op).length == 2) {
							key = entry.split(op)[0];
							val = entry.split(op)[1];


							// is the key OK then get option value
							for(j=0 ; j<(big_data_select_v2_v3.length);j++) {
								//console.log(key+" => "+val);
								if((big_data_select_v2_v3[j])['short'] === key) {
									// console.log("apres "+key+" trouvé val => "+val);
									vecteur[key] = val;

									if(! getVecteur) {
										select_id = (big_data_select_v2_v3[j])['select_id'];
										val = ((big_data_select_v2_v3[j])['correspondances'])[val];
										select_obj = document.getElementById(select_id);
										options = Array.from(select_obj.options);
										option = options.find(item => item.text === val);
										option.selected = true;
									}

								}
							}
						}
					}
					if(! getVecteur){
						computeCVSS();
					}else{
						return vecteur;
					}


				}

				function scoreString_to_float(str, defaultValue=-1){
					var output=defaultValue;
					try {
						str=(str==""?defaultValue:str);
						output = +(str);
						if(!output && output!=0){
							output=defaultValue;
						}
					}catch{

					}

					return output;
				}

				function getStorageScore_if_ActualScoreIsUnkown(cveID, actualScore, storageType="CVEv2") {
					var maxScore = actualScore;
					var avi, vecteurFromStorage, scoreFromStorage
					if(actualScore<=0){ // pas de score V2 pour cette CVE (NA ou vide) ; on vérifie si il existe une version dans le stockage
						avi = getCVSS_fromStorage(cveID, storageType);
						if(avi) {
							if(storageType=="CVEv3") {vecteurFromStorage = getVecteurV2fromStorageAVI(avi);}
							else {vecteurFromStorage = getVecteurV3fromStorageAVI(avi);}
							
							scoreFromStorage = getScroreV2(vectorString_To_VectorList(vecteurFromStorage));
							maxScore = scoreFromStorage;
						}
					}
					
					return maxScore;
				}

			// FONCTIONS\CVSS\internes />

			// < FONCTIONS\CVSS\externes
				// < TO DO
						function getCyberwatchScore(cve_id) {
							var url = "https://cyberwatch.internet.np/cve_announcements/"+cve_id;
							return 0;
							// a completer ou utiliser l'API
							GM.xmlHttpRequest({
								method: "GET",
								url: url,
								onload: function(response) {
									console.log("getCyberwatchScore onload");
									console.log(response.responseText);
								}
							});
						}
				// TO DO />

				function get_MS_score(cve_id) {
					var url = "https://msrc.microsoft.com/update-guide/vulnerability/"+cve_id+"";
					// verifier les flux xhr
					GM.XMLHttpRequest.responseXML({
						method: "GET",
						url: url,
						onload: function(response) {
							var el = document.createElement( 'html' );
							el.innerHTML = response.responseText;
							var score = el.getElementsByClassName('root-204');
							//console.log(response.responseText);
						}
					});
				}

				function get_vuldb(id) {
					GM.xmlHttpRequest({
						method: "POST",
						url: "https://vuldb.com/?search",
						data: "search="+id,
						headers: {
							"Content-Type": "application/x-www-form-urlencoded"
						},
						onload: function(response) {
							var vul_html = response.responseText;
							var res = vul_html.match(/VulDB \[.{1,3}\]/m);
							if (res != null) {
								$('#'+id+'_vuldb').before('<span style="padding-left: 30px;">'+res+'(V3)</span>');
							}
						}
					});
				}

				function get_sourceclear(id) {
					var url_sourceclear = "https://api.sourceclear.com/catalog/search?q="+id+"%20type%3Avulnerability";
					GM.xmlHttpRequest({
						method: "GET",
						url: url_sourceclear,
						onload: function(response) {
							var veracode = JSON.parse(response.responseText);
							if (veracode['metadata']['hits'] == 0) {
								document.getElementById(id+'_sourceclear').style.display = "none";
							}
						}
					});
				}

				function get_circl(id) {
					var url_circl = "https://cve.circl.lu/cve/"+id;
					GM.xmlHttpRequest({
						method: "GET",
						url: url_circl,
						onload: function(response) {
							var circl = response.responseText;
							// if (circl.includes("This CVE does not exist")) {
							if (circl.indexOf('This CVE does not exist') !== -1) {
								document.getElementById(id+'_circl').style.display = "none";
							}
						}
					});
				}


				var compteurCVEloaded = 0;
				var compteurCVEtoLoad = 0;
				var compteur403 = 0;
				var nombre403max = 50;
				function get_NVD(id, intervalAnimation="") {
					var url_NVD = "https://nvd.nist.gov/vuln/detail/"+id;
					// declaration de variables NVD
						var class_baseScores = 'severityDetail';
						var class_NVD_vector_v3 = 'tooltipCvss3NistMetrics';
						var class_NVD_vector_v2 = 'tooltipCvss2NistMetrics';
						var class_CNA_vector_v3 = 'tooltipCvss3CnaMetrics';

					var tempBS, tempBS_NVD, tempBS_CNA;

					var nvd_return = new Map();
						nvd_return.set("score",0);
						nvd_return.set("cartouche","");

						nvd_return.set("v2_BaseScore","");
						nvd_return.set("v2_Vector","");
						nvd_return.set("v3_BaseScore","");
						nvd_return.set("v3_Vector","");
						nvd_return.set("v3_CNA_BaseScore","");
						nvd_return.set("v3_CNA_Vector","");

					GM.xmlHttpRequest({
						method: "GET",
						url: url_NVD,
						onload: function(response) {
							//console.log(id+" : "+response.status);
							if(response.status==403) {
								// erreur de chargement, on relance
								console.log("erreur 403 pour : "+id);
								compteur403 = compteur403+1;
								if(compteur403>=nombre403max){
									if(confirm("trop d'erreur de chargement NVD,\nrecharger la page ?\n(\n\tsi vous rechargez, attendez un peu \n\tou retourner sur NVD pour verifier l'état :\n\thttps://nvd.nist.gov/vuln/detail/"+id+"\n)")){location.reload();}else{compteur403=0;}
								}else{
									get_NVD(id);
								}
								return false;
							}
							
							var elem = document.createElement( 'html' );
							elem.innerHTML = response.responseText;
							// récupération des infos de la publication NVD
								var NVDpublishDate = "";
								var NVDmodifiedDate = "";
								var NVDsource = "";
								// console.log(elem);
								try {
									var spanItem = elem.querySelectorAll('[data-testid]');
									var NVDpublishDateDOM = getDOMitemFromitems_withASpecificAttribValue(spanItem, "data-testid", "vuln-published-on");
									var NVDmodifiedDateDOM = getDOMitemFromitems_withASpecificAttribValue(spanItem, "data-testid", "vuln-last-modified-on");
									var NVDsourceDOM = getDOMitemFromitems_withASpecificAttribValue(spanItem, "data-testid", "vuln-current-description-source");
									if(NVDpublishDateDOM){NVDpublishDate = dateUStoFR(NVDpublishDateDOM.innerText);}
									if(NVDmodifiedDateDOM){NVDmodifiedDate = dateUStoFR(NVDmodifiedDateDOM.innerText);}
									if(NVDsourceDOM){NVDsource = NVDsourceDOM.innerText;}
								} catch{

								}

							// récupération des scores
								var nvd_DOM = elem.getElementsByClassName(class_baseScores);
								var nvd=[];
									for(var i=0;i<nvd_DOM.length;i++) {
										tempBS = (nvd_DOM[i]).innerText.trim();
										if(tempBS === 'N/A') {
											nvd.push('N/A');
										}else{
											tempBS = tempBS.split(' ')[0];
											tempBS = parseInt(tempBS.replace(/\./g, ''),10)/10;
											nvd.push(tempBS);
										}
									}
							// récupération des cartouches
								var cartouche_v2 = elem.getElementsByClassName(class_NVD_vector_v2);
									if (cartouche_v2.length==0) {cartouche_v2="";}else{cartouche_v2=(cartouche_v2[0]).innerText;}
								var cartouche_v3 = elem.getElementsByClassName(class_NVD_vector_v3);
									if (cartouche_v3.length==0) {cartouche_v3="";}else{cartouche_v3=(cartouche_v3[0]).innerText;}
								var cartouche_v3_CNA = elem.getElementsByClassName(class_CNA_vector_v3);
									if (cartouche_v3_CNA.length==0) {cartouche_v3_CNA="";}else{cartouche_v3_CNA=(cartouche_v3_CNA[0]).innerText;}

							switch(nvd.length) {
								case 1:
									tempBS = nvd[0];
									// récupération de l'élément
									if(cartouche_v2){
										nvd_return.set("v2_BaseScore",tempBS);
										nvd_return.set("v2_Vector",cartouche_v2);
									}else if(cartouche_v3){
										nvd_return.set("v3_BaseScore",tempBS);
										nvd_return.set("v3_Vector",cartouche_v3);
									}else if(cartouche_v3_CNA){
										nvd_return.set("v3_CNA_BaseScore",tempBS);
										nvd_return.set("v3_CNA_Vector",cartouche_v3_CNA);
									}else{// pas de cartouche mais NVD à 1
										document.getElementById("tableCVEs_Td_"+id+"_CVE").innerText = document.getElementById("tableCVEs_Td_"+id+"_CVE").innerText + " (anomalie NVD)";
									}
									break;
								case 2:
									// récupération du score v2
									tempBS = nvd[(nvd.length)-1];
									nvd_return.set("v2_BaseScore",tempBS);
									nvd_return.set("v2_Vector",cartouche_v2);
									// récupération du score v3
									tempBS = nvd[0];
									if(cartouche_v3) {
										nvd_return.set("v3_BaseScore",tempBS);
										nvd_return.set("v3_Vector",cartouche_v3);
									}else{
										nvd_return.set("v3_CNA_BaseScore",tempBS);
										nvd_return.set("v3_CNA_Vector",cartouche_v3_CNA);
									}
									break;

								case 3:
									// récupération du score v2
									tempBS = nvd[2];
									nvd_return.set("v2_BaseScore",tempBS);
									nvd_return.set("v2_Vector",cartouche_v2);

									// récupération du score v3
									tempBS_NVD = nvd[0];
									nvd_return.set("v3_BaseScore",tempBS_NVD);
									nvd_return.set("v3_Vector",cartouche_v3);
									tempBS_CNA = nvd[1];
									nvd_return.set("v3_CNA_BaseScore",tempBS_CNA);
									nvd_return.set("v3_CNA_Vector",cartouche_v3_CNA);

									break;
							}

							if (nvd_DOM.length == 0) {
								nvd_DOM = 'ØØ';
							} else {
								nvd_DOM = nvd_DOM.item(1).innerText.trim(); // item(0) == CVSS V3
								nvd_DOM = nvd_DOM.split(' ')[0];
								nvd_return.set("score",parseInt(nvd_DOM.replace(/\./g, ''),10)/10); // remplace le texte x.y en xy puis divise par 10 pour recuperer la version numérique
							}
							var score_NVD = '<a href=https://nvd.nist.gov/vuln/detail/'+id+' target="_blank">'+nvd_DOM+'</a>';
							document.getElementById(id+"_NVD").innerHTML = score_NVD;

							// remplissage du tableau
								document.getElementById("tableCVEs_Td_"+id+"_v2_score").innerText = nvd_return.get("v2_BaseScore");
								document.getElementById("tableCVEs_Td_"+id+"_v2_vector").value = nvd_return.get("v2_Vector");
								document.getElementById("tableCVEs_Td_"+id+"_v3_score").innerText = nvd_return.get("v3_BaseScore");
								document.getElementById("tableCVEs_Td_"+id+"_v3_vector").value = nvd_return.get("v3_Vector");
								document.getElementById("tableCVEs_Td_"+id+"_v3_CNA_score").innerText = nvd_return.get("v3_CNA_BaseScore");
								document.getElementById("tableCVEs_Td_"+id+"_v3_CNA_vector").value = nvd_return.get("v3_CNA_Vector");

								document.getElementById("tableCVEs_Td_"+id+"_NVDpublishDate").value = NVDpublishDate;
								document.getElementById("tableCVEs_Td_"+id+"_NVDmodifiedDate").value = NVDmodifiedDate;
								document.getElementById("tableCVEs_Td_"+id+"_NVDsource").value = NVDsource;
								
							// colorisation
								document.getElementById("tableCVEs_Td_"+id+"_CVE").style.color = "black";
								if(nvd_return.get("v2_BaseScore")=== "N/A" || nvd_return.get("v2_BaseScore") === ""){
									// Highlight les CVE sans résultats
									document.getElementById("tableCVEs_Td_"+id+"_CVE").style.color = "red";
									document.getElementById("tableCVEs_Td_"+id+"_CVE").style.fontWeight = "bold";
								}

							// colorisation en orange de l'entete du tableau des que fini
								compteurCVEloaded = compteurCVEloaded+1;
								if(compteurCVEloaded>= compteurCVEtoLoad){
									document.getElementById("tableCVEs_THs").style.color = "orange";
									if(intervalAnimation){
										getMaxScroreFromListCVE(intervalAnimation);
										document.getElementById("pProcessMessage").innerText = "Chargement des scores terminé, Selection du plus elevé"
									}
								}
						},
						onerror: function(error) {
							console.log("get_NVD("+id+")");
						}
					});
				}


				function get_score(id) {
					var url_cveD = "https://www.cvedetails.com/cve-details.php?cve_id="+id;
					GM.xmlHttpRequest({
						method: "GET",
						url: url_cveD,
						onload: function(response) {
							var el = document.createElement( 'html' );
							el.innerHTML = response.responseText;
							var score = el.getElementsByClassName('cvssbox');
							if (score.length == 0) {
								var score_item = 'ØØ';
								var color = 'rgb(242, 242, 242)';
							} else {
								color = score.item(0).style.backgroundColor;
								score_item = score.item(0).innerText;
							}
							//get_MS_score(id);
							document.getElementById(id+'_cveDetails').innerText = score_item;
							document.getElementById(id+'_cveDetails').style="background-color:"+color;

							var list_cwe = el.getElementsByClassName('details');
							$(list_cwe).find('a').each(function() {
								if (this.href.indexOf("/cwe.html") > -1) {
									var cwe = this.href.split("/");
									if (CWEs.includes(cwe[4])) {
										// négation !
									} else {
										CWEs.push(cwe[4]);
									}
								}
							});
						}
					});
				}

			// FONCTIONS\CVSS\externes />
		// FONCTIONS\CVSS />

		// FONCTIONS\graphique + alteration de page
			var chart_color_list_of_map;
			initialisation_svg_variables();
			function initialisation_svg_variables(){
				var chart_contour_grey = "#9c9c9c";
				var chart_inside_left_grey = "#efefef";
				var chart_inside_center_grey = "#f6f6f6";
				var chart_inside_right_grey = "#c9c9c9";

				var chart_contour_green = "#007f00";
				var chart_inside_left_green = "#b9eca3";
				var chart_inside_center_green = "#55d337";
				var chart_inside_right_green = "#00c000";

				var chart_contour_yellow = "#b69f0f";
				var chart_inside_left_yellow = "#fce700";
				var chart_inside_center_yellow = "#dac800";
				var chart_inside_right_yellow = "#c4b400";

				var chart_contour_orange = "#b47700";
				var chart_inside_left_orange = "#ffe6b4";
				var chart_inside_center_orange = "#ffc656";
				var chart_inside_right_orange = "#ffb012";

				var chart_contour_red = "#9a0808";
				var chart_inside_left_red = "#f7c5c5";
				var chart_inside_center_red = "#ee7c7c";
				var chart_inside_right_red = "#e94545";

				chart_color_list_of_map = [new Map(),new Map(),new Map(),new Map(),new Map()];
					// 0 : grey/undifened
						chart_color_list_of_map[0].set("chart_contour",chart_contour_grey);
						chart_color_list_of_map[0].set("chart_inside_left",chart_inside_left_grey);
						chart_color_list_of_map[0].set("chart_inside_center",chart_inside_center_grey);
						chart_color_list_of_map[0].set("chart_inside_right",chart_inside_right_grey);
					// 1 : green
						chart_color_list_of_map[1].set("chart_contour",chart_contour_green);
						chart_color_list_of_map[1].set("chart_inside_left",chart_inside_left_green);
						chart_color_list_of_map[1].set("chart_inside_center",chart_inside_center_green);
						chart_color_list_of_map[1].set("chart_inside_right",chart_inside_right_green);
					// 2 : yellow
						chart_color_list_of_map[2].set("chart_contour",chart_contour_yellow);
						chart_color_list_of_map[2].set("chart_inside_left",chart_inside_left_yellow);
						chart_color_list_of_map[2].set("chart_inside_center",chart_inside_center_yellow);
						chart_color_list_of_map[2].set("chart_inside_right",chart_inside_right_yellow);
					// 3 : orange
						chart_color_list_of_map[3].set("chart_contour",chart_contour_orange);
						chart_color_list_of_map[3].set("chart_inside_left",chart_inside_left_orange);
						chart_color_list_of_map[3].set("chart_inside_center",chart_inside_center_orange);
						chart_color_list_of_map[3].set("chart_inside_right",chart_inside_right_orange);
					// 4 : red
						chart_color_list_of_map[4].set("chart_contour",chart_contour_red);
						chart_color_list_of_map[4].set("chart_inside_left",chart_inside_left_red);
						chart_color_list_of_map[4].set("chart_inside_center",chart_inside_center_red);
						chart_color_list_of_map[4].set("chart_inside_right",chart_inside_right_red);
			}

			function set_img_png_src(index_color_set=0,img_id){ // dans à la source la valeur base64 de l'image cible
				var liste_img = [
					"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"
					];
				var liste_img_portail = [
					"images/VULNERABILITES/gris.png"
					,"images/VULNERABILITES/vert.png"
					,"images/VULNERABILITES/jaune.png"
					,"images/VULNERABILITES/orange.png"
					,"images/VULNERABILITES/rouge.png"
					];
				var prefixe = "data:image/png;base64,";
				var index = (index_color_set>=liste_img.length || index_color_set<0 ? 0 : index_color_set);
				document.getElementById(img_id).src = prefixe+liste_img[index];
				document.getElementById(img_id).setAttribute("src_portail",liste_img_portail[index]);
			}

			function change_color(index_color_set=0,svg_id) {
				// declaration de variables
					var items, index, item, max_strips_count = 0 ;
					var color_set = chart_color_list_of_map[(index_color_set>=0 && index_color_set<chart_color_list_of_map.length ? index_color_set : 0 )];

				//console.log(color_set);
				color_set.forEach((color_value, class_name)=>{
					items = document.getElementById(svg_id).getElementsByClassName(class_name);
					//console.log(class_name+" : "+color_value + " ; "+index_color_set);
					//console.log(contours);
					max_strips_count = (index_color_set>=items.length || index_color_set<=0 ? items.length : index_color_set);
					for (index = 0; index < max_strips_count; index++) {
						item = items[index];
						if((class_name.toLowerCase()).includes("contour")){
							//console.log(item.getAttribute('stroke') + " couleur devient : "+color_value);
							item.setAttribute('stroke', color_value);
						}else{
								//console.log(item.getAttribute('fill') + " couleur devient : "+color_value);
								item.setAttribute('fill', color_value);
						}
						//console.log(item);
					}
					// blanchir le reste et continuer avec le contour
						for (index = max_strips_count; index < items.length; index++) {
							item = items[index];
							if((class_name.toLowerCase()).includes("contour")){
								item.setAttribute('stroke', color_value);
							}else{
								item.setAttribute('fill', "white");
							}
							//console.log(item);
						}
				},index_color_set)
			}

			function svg_to_img(svg_id, img_id){
				//console.log("cration de l'image");
				var svgElement = document.getElementById(svg_id);

				// Create your own image
				//var img = document.createElement('img');
				var img = document.getElementById(img_id);
				// Serialize the svg to string
				var svgString = new XMLSerializer().serializeToString(svgElement);
				//console.log("======================== av svgString");
				//console.log(svgString);

				// Remove any characters outside the Latin1 range
				var decoded = unescape(encodeURIComponent(svgString));
				//console.log("======================== av decoded");
				//console.log(decoded);

				// Now we can use btoa to convert the svg to base64
				var base64 = btoa(decoded);
				//console.log("taille base64 : "+base64.length);
				//console.log(base64);

				var imgSource = `data:image/svg+xml;base64,${btoa(decoded)}`;

				img.setAttribute('src', imgSource);
				//document.getElementById(svg_id).after(img);

			}

			function make_download_txt(){
				var doc_title = window.location.href;
				doc_title = doc_title.split("/");
				doc_title = doc_title[4];
				document.title = doc_title;
				$("li.link-pdf").after('<li class="link-txt" id="link-txt-btn"><a id="txt_gen" title="Télécharger au format TXT"><i class="fa fa-fw fa-clipboard" aria-hidden="true"></i></a></li>');
			}

			function make_download_html(){
				var doc_title = window.location.href;
				doc_title = doc_title.split("/");
				doc_title = doc_title[4];
				document.title = doc_title;
				$("li.link-txt").after('<li class="link-html" id="link-html-btn"><a id="html_gen" title="Télécharger au format html"><i class="fa fa-fw fa-clipboard" aria-hidden="true"></i></a></li>');
			}

			function make_html_from_list_of_dict(item_before=document.querySelector('body'), list_input, debug=false) {
				var item,dict_item, value, key, parent_id, has_parent, i, j, classes;

				// fonctions principales : parcourir le tableau d'objet à creer
				for(i=0 ; i<list_input.length ; i++) {
					dict_item = list_input[i];
					item = document.createElement(dict_item["object"]);
					has_parent = false;
					for(key in dict_item){
						value = dict_item[key];
						//console.log (key + " : "+value);
						switch(key){
							case "strokewidth" :
								key = "stroke-width";
							case "x" :
							case "y" :
							case "stroke" :
							case "fill" :
							case "viewBox":
							case "width":
							case "height":
								item.setAttribute(key,value);
								break;
							case "class" :
								classes = value.split(" ");
								for(j=0;j<classes.length;j++){
									item.classList.add(classes[j]);
								}
								break;
							case "parent_id":
								parent_id = value;
								has_parent = true;
								//console.log("le parent : "+value);console.log(parent_id);
								break;
							case "object":
								break;
							case "appendChildText" :
								item.appendChild(document.createTextNode(value));
								break;
							default :
								item.setAttribute(key,value);
								//item[key] = value;
								break;
						}
					}
					//console.log(item);
					if(debug) {
						console.log("object : "+dict_item["object"]+" ; parent : "+parent_id+" ; id : "+dict_item["id"]);
					}
					if(has_parent){
						document.getElementById(parent_id).appendChild(item);
					} else {
						$(item_before).after(item);
					}
					item_before = item;
				}

			}

			var cveMaxScoreV2 = "";
			var cveMaxScoreV3 = "";
			var cveMaxScoreV3_type = "";
			var cveMaxScoreV3_NVD = "";
			var cveMaxScoreV3_CNA = "";

			var colorV2 = "rgb(250, 171, 239)";
			var colorV3_NVD = "rgb(124, 124, 226)" ;
			var colorV3_CNA = "rgb(103, 218, 232)" ;
			var colorMixedV2V3_NVD = "rgb(187, 148, 233)" ;
			var colorMixedV2V3_CNA = "rgb(177, 195, 236)" ;
			function getMaxScroreFromListCVE(intervalAnimation){
				// fonction qui récupère les scores v2 et v3 les plus elevés parmis le tableau des CVE
				// les id des tds sont composés comme suit :
				// CVE : tableCVEs_Td_<CVE id>_CVE
				// v2 : tableCVEs_Td_<CVE id>_v2\tableCVEs_Td_<CVE id>_v2_score
				// 		tableCVEs_Td_<CVE id>_v2\tableCVEs_Td_<CVE id>_v2_vecteur
				// v3 : tableCVEs_Td_<CVE id>_v2\tableCVEs_Td_<CVE id>_v3_score
				// 		tableCVEs_Td_<CVE id>_v2\tableCVEs_Td_<CVE id>_v3_vecteur
				// v3 CNA : tableCVEs_Td_<CVE id>_v3\tableCVEs_Td_<CVE id>_v3_CNA_score
				// 			tableCVEs_Td_<CVE id>_v3\tableCVEs_Td_<CVE id>_v3_CNA_vecteur

				// initialisation de variables
					var fctName = "getMaxScroreFromListCVE";
					var td_prefixe = "tableCVEs_Td_";
					var row, cveID, td_cve, td_v2, score_v2, td_v3, score_v3, td_v3_CNA, score_v3_CNA;
					var cveMaxScoreV2_score, cveMaxScoreV3_score, cveMaxScoreV3_CNA_score;
					var v2Source = "";
					var v3Source = "";
					var aviV2, aviV3, vecteurFromStorage, scoreFromStorage;


				console.log("["+fctName+"]"+"\n########################\n");
				console.log("["+fctName+"]"+" Parcours du tableau");
				// Parcours du tableau
					var table = document.getElementById("tableCVEs");
					var trs = table.querySelectorAll("tr");
					for(var i=1;i<trs.length;i++){
						// console.log(trs[i]);
						row=trs[i].id;
						// console.log(row);
						// TR example : tableCVEs_Tr_CVE-2022-31143
						cveID = row.substring(13); //
						// TD example  : tableCVEs_Td_CVE-2022-31143_CVE
						td_cve = document.getElementById(td_prefixe+cveID+"_CVE");
						td_v2 = document.getElementById(td_prefixe+cveID+"_v2");
							score_v2 = scoreString_to_float(td_v2.innerText) ;
						td_v3 = document.getElementById(td_prefixe+cveID+"_v3");
							score_v3 = scoreString_to_float(td_v3.innerText);
						td_v3_CNA = document.getElementById(td_prefixe+cveID+"_v3_CNA");
							score_v3_CNA = scoreString_to_float(td_v3_CNA.innerText);


						console.log("["+fctName+"]"+" "+cveID);
						console.log("["+fctName+"]"+" score_v2="+score_v2+" VS "+cveMaxScoreV2+" ("+cveMaxScoreV2_score+")");
						console.log("["+fctName+"]"+" score_v3="+score_v3+" VS "+cveMaxScoreV3_NVD+" ("+cveMaxScoreV3_score+")");
						console.log("["+fctName+"]"+" score_v3_CNA="+score_v3_CNA+" VS "+cveMaxScoreV3_CNA+" ("+cveMaxScoreV3_CNA_score+")");

						// comparaison v2
							if(!cveMaxScoreV2){
								// c'est la premiere valeur
								cveMaxScoreV2 = cveID;
								cveMaxScoreV2_score = score_v2;
							}else{
								// cveMaxScoreV2_score = scoreString_to_float(document.getElementById(td_prefixe+cveMaxScoreV2+"_v2").innerText);
								// cas particulier : La premiere CVE etait choisie automatiquement mais sans valeurs, mais les suivantes aussi hors leur scrore proviendrai du stockage
								score_v2 = getStorageScore_if_ActualScoreIsUnkown(cveID, score_v2, "CVEv2");
								
								cveMaxScoreV2_score = getStorageScore_if_ActualScoreIsUnkown(cveMaxScoreV2, cveMaxScoreV2_score, "CVEv2");

								if(score_v2>cveMaxScoreV2_score){
									cveMaxScoreV2 = cveID;
									cveMaxScoreV2_score = score_v2;
								}
							}
						// comparaison v3
							if(!cveMaxScoreV3_NVD){
								// c'est la premiere valeur
								cveMaxScoreV3_NVD = cveID;
								cveMaxScoreV3_score = score_v3;
							}else{
								// cveMaxScoreV3_score = scoreString_to_float(document.getElementById(td_prefixe+cveMaxScoreV3_NVD+"_v3").innerText);
								// cas particulier : La premiere CVE etait choisie automatiquement mais sans valeurs, mais les suivantes aussi hors leur scrore proviendrai du stockage
								score_v3 = getStorageScore_if_ActualScoreIsUnkown(cveID, score_v3, "CVEv3");
								
								cveMaxScoreV3_score = getStorageScore_if_ActualScoreIsUnkown(cveMaxScoreV3_NVD, cveMaxScoreV3_score, "CVEv3");
								
								if(score_v3>cveMaxScoreV3_score){
									cveMaxScoreV3_NVD = cveID;
									cveMaxScoreV3_score = score_v3;
								}
							}
						// comparaison v3_CNA
							if(!cveMaxScoreV3_CNA){
								// c'est la premiere valeur
								cveMaxScoreV3_CNA = cveID;
								cveMaxScoreV3_CNA_score = score_v3_CNA;
							}else{
								// cveMaxScoreV3_CNA_score = scoreString_to_float(document.getElementById(td_prefixe+cveMaxScoreV3_CNA+"_v3_CNA").innerText);
								// cas particulier : La premiere CVE etait choisie automatiquement mais sans valeurs, mais les suivantes aussi hors leur scrore proviendrai du stockage
								score_v3_CNA = getStorageScore_if_ActualScoreIsUnkown(cveID, score_v3_CNA, "CVEv3");
								
								cveMaxScoreV3_CNA_score = getStorageScore_if_ActualScoreIsUnkown(cveMaxScoreV3_NVD, cveMaxScoreV3_CNA_score, "CVEv3");
								
								if(score_v3_CNA>cveMaxScoreV3_CNA_score){
									cveMaxScoreV3_CNA = cveID;
									cveMaxScoreV3_CNA_score = score_v3_CNA;
								}
							}
					}

					// unification v2, v3 et v3_CNA si possible
						// console.log("avant unification : "+cveMaxScoreV2+" ; "+cveMaxScoreV3_NVD+" ; "+cveMaxScoreV3_CNA);
						cveMaxScoreV2_score = scoreString_to_float(document.getElementById(td_prefixe+cveMaxScoreV2+"_v2").innerText);
						cveMaxScoreV3_score = scoreString_to_float(document.getElementById(td_prefixe+cveMaxScoreV3_NVD+"_v3").innerText);
						cveMaxScoreV3_CNA_score = scoreString_to_float(document.getElementById(td_prefixe+cveMaxScoreV3_CNA+"_v3_CNA").innerText);
						
						console.log("["+fctName+"]"+"\n########################\n");
						console.log("["+fctName+"]"+" Résultat AVANT unification");
						console.log("["+fctName+"]"+" cveMaxScoreV2="+cveMaxScoreV2+" ("+cveMaxScoreV2_score+")");
						console.log("["+fctName+"]"+" cveMaxScoreV3_NVD="+cveMaxScoreV3_NVD+" ("+cveMaxScoreV3_score+")");
						console.log("["+fctName+"]"+" cveMaxScoreV3_CNA="+cveMaxScoreV3_CNA+" ("+cveMaxScoreV3_CNA_score+")");
						// console.log("v2 = "+cveMaxScoreV2+"("+cveMaxScoreV2_score+") ; v3 = "+cveMaxScoreV3_NVD+"("+cveMaxScoreV3_score+") ; v3_CNA = "+cveMaxScoreV3_CNA+"("+cveMaxScoreV3_CNA_score+")");

						if(cveMaxScoreV2 === cveMaxScoreV3_NVD && cveMaxScoreV3_NVD === cveMaxScoreV3_CNA) {
							// deja le meme id
							if(cveMaxScoreV3_CNA_score > cveMaxScoreV3_score) {
								cveMaxScoreV3 = cveMaxScoreV3_CNA;
								cveMaxScoreV3_type = "_CNA";
							}else{
								cveMaxScoreV3 = cveMaxScoreV3_NVD;
							}
						}else{

							// comparaison du score v3 et v3_cna
								if(cveMaxScoreV3_CNA_score > cveMaxScoreV3_score) {
									// on garde le score v3_cna
										cveMaxScoreV3 = cveMaxScoreV3_CNA;
										cveMaxScoreV3_type = "_CNA";
									// on compare le score v2
										if(cveMaxScoreV2_score == scoreString_to_float(document.getElementById(td_prefixe+cveMaxScoreV3_CNA+"_v2").innerText)) {
											// score identique, on applique la cve v3 cna a v2
											cveMaxScoreV2 = cveMaxScoreV3_CNA;
										}
								}else{
									// on garde le score v3 nvd
										cveMaxScoreV3 = cveMaxScoreV3_NVD;
										cveMaxScoreV3_type = "";
									// on compare le score v2
										if(cveMaxScoreV2_score == scoreString_to_float(document.getElementById(td_prefixe+cveMaxScoreV3_NVD+"_v2").innerText)) {
											// score identique, on applique la cve v3 nvd a v2
											cveMaxScoreV2 = cveMaxScoreV3_NVD;
										}
								}
						}
						
						console.log("["+fctName+"]"+"\n########################\n");
						console.log("["+fctName+"]"+" Résultat APRES unification");
						// pour le log uniquement 
							cveMaxScoreV2_score = scoreString_to_float(document.getElementById(td_prefixe+cveMaxScoreV2+"_v2").innerText);
							cveMaxScoreV3_score = scoreString_to_float(document.getElementById(td_prefixe+cveMaxScoreV3_NVD+"_v3").innerText);
							cveMaxScoreV3_CNA_score = scoreString_to_float(document.getElementById(td_prefixe+cveMaxScoreV3_CNA+"_v3_CNA").innerText);
						console.log("["+fctName+"]"+" cveMaxScoreV2="+cveMaxScoreV2+" ("+cveMaxScoreV2_score+")");
						console.log("["+fctName+"]"+" cveMaxScoreV3_NVD="+cveMaxScoreV3_NVD+" ("+cveMaxScoreV3_score+")");
						console.log("["+fctName+"]"+" cveMaxScoreV3_CNA="+cveMaxScoreV3_CNA+" ("+cveMaxScoreV3_CNA_score+")");
					
					// console.log("après unification : "+cveMaxScoreV2+" ; "+cveMaxScoreV3_NVD+" ; "+cveMaxScoreV3_CNA+" (v3 choosed = "+cveMaxScoreV3+")");

					// si il y a un champs N/A on utilise le stockage pour comparer :
						var scoreV2_from_V3max = scoreString_to_float(document.getElementById(td_prefixe+cveMaxScoreV3+"_v2").innerText)
						var scoreV3_NVD_from_V2max = scoreString_to_float(document.getElementById(td_prefixe+cveMaxScoreV2+"_v3").innerText)
						var scoreV3_CNA_from_V2max = scoreString_to_float(document.getElementById(td_prefixe+cveMaxScoreV2+"_v3_CNA").innerText)
						// console.log("v2 du v3 : "+scoreV2_from_V3max);
						// console.log("v3 nvd du v2 : "+scoreV3_NVD_from_V2max);
						// console.log("v3 cna du v2 : "+scoreV3_CNA_from_V2max);
						// console.log("Avi cve V2 depuis V3 :"+getCVSS_fromStorage(cveMaxScoreV3, "CVEv2"));
						// console.log("vecteur V2 depuis V3 :"+getVecteurV2fromStorageAVI(getCVSS_fromStorage(cveMaxScoreV3, "CVEv2")));
						// console.log("score V2 depuis V3 :"+getScroreV2(vectorString_To_VectorList(getVecteurV2fromStorageAVI(getCVSS_fromStorage(cveMaxScoreV3, "CVEv2")))));
						var aviV2_from_V3max = getCVSS_fromStorage(cveMaxScoreV3, "CVEv2");
						var aviV3_from_V2max = getCVSS_fromStorage(cveMaxScoreV2, "CVEv3");
						
						console.log("["+fctName+"]"+"\n########################\n");
						console.log("["+fctName+"]"+" Valeurs Stockage");
						console.log("["+fctName+"]"+"cveMaxScoreV3_v2 ="+cveMaxScoreV3+" ("+scoreV2_from_V3max+")");
						console.log("["+fctName+"]"+"cveMaxScoreV2_v3 ="+cveMaxScoreV2+" ("+scoreV3_NVD_from_V2max+")");
						console.log("["+fctName+"]"+"cveMaxScoreV2_v3_CNA ="+cveMaxScoreV2+" ("+scoreV3_CNA_from_V2max+")");
						console.log("["+fctName+"]"+"aviV2_from_V3max ="+aviV2_from_V3max);
						console.log("["+fctName+"]"+"aviV3_from_V2max ="+aviV3_from_V2max);

						// console.log("les avis trouvés : v2/v3 : "+aviV2_from_V3max+"/"+aviV3_from_V2max);

						if(aviV2_from_V3max) {
							var VecteurStorageV2_from_V3max = getVecteurV2fromStorageAVI(aviV2_from_V3max);
							var scoreStorageV2_from_V3max = getScroreV2(vectorString_To_VectorList(VecteurStorageV2_from_V3max));
							if(scoreV2_from_V3max < scoreStorageV2_from_V3max) {
								cveMaxScoreV2 = cveMaxScoreV3;
								document.getElementById('tableCVEs_Td_'+cveMaxScoreV2+'_v2_vector').value = VecteurStorageV2_from_V3max;
								v2Source = getSourceV2fromStorageAVI(aviV2_from_V3max);
							}
						}


						if(aviV3_from_V2max) {
							var VecteurStorageV3_from_V2max = getVecteurV3fromStorageAVI(aviV3_from_V2max);

							// console.log("avant : "+aviV3_from_V2max+"...");
							// console.log(vectorString_To_VectorList(VecteurStorageV3_from_V2max));

							var scoreStorageV3_from_V2max = getScroreV3(vectorString_To_VectorList(VecteurStorageV3_from_V2max));
							if(scoreV3_NVD_from_V2max < scoreStorageV3_from_V2max && scoreV3_CNA_from_V2max < scoreStorageV3_from_V2max){
								cveMaxScoreV3 = cveMaxScoreV2;
								document.getElementById('tableCVEs_Td_'+cveMaxScoreV3+'_v3_vector').value = VecteurStorageV3_from_V2max;
								v3Source = getSourceV3fromStorageAVI(aviV3_from_V2max);
							}
						}

						console.log("["+fctName+"]"+"\n########################\n");
						console.log("["+fctName+"]"+" Apres vérif valeurs Stockage");
						console.log("["+fctName+"]"+" cveMaxScoreV2="+cveMaxScoreV2);
						console.log("["+fctName+"]"+" cveMaxScoreV3="+cveMaxScoreV3);
						
						
				// colorisation de la CVE la plus critique
					console.log("["+fctName+"]"+"");
					document.getElementById("tableCVEs_Td_"+cveMaxScoreV2+"_v2").style.backgroundColor = colorV2;
					document.getElementById("tableCVEs_Td_"+cveMaxScoreV2+"_CVE").style.backgroundColor = colorV2;
					if(cveMaxScoreV3_type){
						document.getElementById("tableCVEs_Td_"+cveMaxScoreV3+"_v3"+cveMaxScoreV3_type).style.backgroundColor = colorV3_CNA;
						if(cveMaxScoreV2==cveMaxScoreV3){
							document.getElementById("tableCVEs_Td_"+cveMaxScoreV2+"_CVE").style.backgroundColor = colorMixedV2V3_CNA;
						}else{
							document.getElementById("tableCVEs_Td_"+cveMaxScoreV3+"_CVE").style.backgroundColor = colorV3_CNA;
						}
					}else{
						document.getElementById("tableCVEs_Td_"+cveMaxScoreV3+"_v3"+cveMaxScoreV3_type).style.backgroundColor = colorV3_NVD;
						if(cveMaxScoreV2==cveMaxScoreV3){
							document.getElementById("tableCVEs_Td_"+cveMaxScoreV2+"_CVE").style.backgroundColor = colorMixedV2V3_NVD;
						}else{
							document.getElementById("tableCVEs_Td_"+cveMaxScoreV3+"_CVE").style.backgroundColor = colorV3_NVD;
						}
					}

				// application de la selection
					console.log("["+fctName+"]"+"");
					// on applique la modification du cartouche que si la case from stockage est désactivée
						var IDcheckBoxVersion = 'v2boxFromGMstorage';
						if(document.getElementById(IDcheckBoxVersion)){document.getElementById(IDcheckBoxVersion).checked = false;}
						set_v2_cartouche(cveMaxScoreV2,v2Source);

						IDcheckBoxVersion = 'v3boxFromGMstorage';
						if(document.getElementById(IDcheckBoxVersion)){document.getElementById(IDcheckBoxVersion).checked = false;}
						set_v3_cartouche(cveMaxScoreV3,cveMaxScoreV3_type,v3Source);

				// colorisation en vert de l'entete du tableau des que fini
					console.log("["+fctName+"]"+"");
					document.getElementById("tableCVEs_THs").style.color = "green";
					if(intervalAnimation){
						console.log("arret de l'interval de chargement");
						clearInterval(intervalAnimation);
					}
					document.getElementById("pProcessMessage").innerText = "Selection du plus elevé terminé"
			}

			function make_input_cartouche_out(item_before=document.querySelector('body')){
				// variables graphiques
				var font_size = "14px" ;
				var border_size = "0" ;
				var indentation_td = '25px';

				// autres variables
				var list_input = [
					{object : "div", id :'div_input', style : "font-size :"+font_size},
					{object : "label", parent_id : "div_input", appendChildText: "ENTREE Vecteur v2 ou v3 :"},
					{object : "input", parent_id : "div_input", type : "text", id : 'input_text_cvss', size : 70 , value : ''},

					{object : "label", parent_id : "div_input", appendChildText: "Delimiteur entre entrées"},
					{object : "input", parent_id : "div_input", type : "text", id : 'input_text_cvss_delimiter', size : 3, value : '/'},

					{object : "label", parent_id : "div_input", appendChildText: "Delimiteur entrée-valeur"},
					{object : "input", parent_id : "div_input", type : "text", id : 'input_text_cvss_operateur', size : 3, value : ':'},

					{object : "table", parent_id : "div_input", id : "cvss_table", border : border_size},

					{object : "tr", parent_id : "cvss_table", id : "cvss_table_tr1"},
					{object : "td", parent_id : "cvss_table_tr1", colSpan:"7", appendChildText: "Métrique de base"},

					{object : "tr", parent_id : "cvss_table", id : "cvss_table_tr2"},
					{object : "td", parent_id : "cvss_table_tr2"},
					{object : "td", parent_id : "cvss_table_tr2", colSpan :'7', appendChildText: "Exploitabilité"},

					{object : "tr", parent_id : "cvss_table", id : "cvss_table_tr3"},
					{object : "td", parent_id : "cvss_table_tr3", width: indentation_td},
					{object : "td", parent_id : "cvss_table_tr3", width: indentation_td},
					{object : "td", parent_id : "cvss_table_tr3", appendChildText: "Vecteur d'attaque (AV)"},
					{object : "td", parent_id : "cvss_table_tr3", appendChildText: "Complexité d'attaque (AC)", style :"padding-right:10px"},
					{object : "td", parent_id : "cvss_table_tr3", appendChildText: "Authentification (Au)"},
					{object : "td", parent_id : "cvss_table_tr3", appendChildText: "Privilèges requis (PR)", style :"padding-right:10px"},
					{object : "td", parent_id : "cvss_table_tr3", appendChildText: "Interaction utilisateur (UI)"},

					{object : "tr", parent_id : "cvss_table", id : "cvss_table_tr4"},
					{object : "td", parent_id : "cvss_table_tr4", width :'25px'},
					{object : "td", parent_id : "cvss_table_tr4", width :'25px'},
					{object : "td", parent_id : "cvss_table_tr4", id : "cvss_table_tr4_td1"},
					{object : "select", parent_id : "cvss_table_tr4_td1", id : 'AccessVectorVar', width :'100%'},
					{object : "option", parent_id : "AccessVectorVar", value :'v2=AV:/v3=AV:', selected:'selected', label:'?',appendChildText:"?"},
					{object : "option", parent_id : "AccessVectorVar", value :'v2=AV:L/v3=AV:L', label:'Local',appendChildText:"L"},
					{object : "option", parent_id : "AccessVectorVar", value :'v2=AV:A/v3=AV:A', label:'Réseau contigue',appendChildText:"A"},
					{object : "option", parent_id : "AccessVectorVar", value :'v2=AV:N/v3=AV:N', label:'Réseau',appendChildText:"N"},
					{object : "option", parent_id : "AccessVectorVar", value :'v2=AV:L/v3=AV:P', label:'Physique',appendChildText:"P"},

					{object : "td", parent_id : "cvss_table_tr4", id : "cvss_table_tr4_td2"},
					{object : "select", parent_id : "cvss_table_tr4_td2", id : 'AccessComplexityVar'},
					{object : "option", parent_id : "AccessComplexityVar", value :'v2=AC:/v3=AC:', selected: 'selected', label: '?',appendChildText:"?"},
					{object : "option", parent_id : "AccessComplexityVar", value :'v2=AC:H/v3=AC:H', label: 'Haute',appendChildText:"H"},
					{object : "option", parent_id : "AccessComplexityVar", value :'v2=AC:M/v3=AC:H', label: 'Moyenne/haute',appendChildText:"M"},
					{object : "option", parent_id : "AccessComplexityVar", value :'v2=AC:M/v3=AC:L', label: 'Moyenne/faible',appendChildText:"M"},
					{object : "option", parent_id : "AccessComplexityVar", value :'v2=AC:L/v3=AC:L', label: 'Faible',appendChildText:"L"},

					{object : "td", parent_id : "cvss_table_tr4", id : "cvss_table_tr4_td3"},
					{object : "select", parent_id : "cvss_table_tr4_td3", id : 'AuthenticationVar'},
					{object : "option", parent_id : "AuthenticationVar", value :'v2=Au:/v3: ', selected: 'selected', label: '?',appendChildText:"?"},
					{object : "option", parent_id : "AuthenticationVar", value :'v2=Au:M/v3: ', label: 'Nécessite plusieurs instances',appendChildText:"M"},
					{object : "option", parent_id : "AuthenticationVar", value :'v2=Au:S/v3: ', label: 'Nécessite une seule instance',appendChildText:"S"},
					{object : "option", parent_id : "AuthenticationVar", value :'v2=Au:N/v3: ', label: 'Aucune',appendChildText:"N"},

					{object : "td", parent_id : "cvss_table_tr4", id : "cvss_table_tr4_td4"},
					{object : "select", parent_id : "cvss_table_tr4_td4", id : 'PrivilegeRequiredVar'},
					{object : "option", parent_id : "PrivilegeRequiredVar", value :'v2=/v3=PR:', selected: 'selected', label: '?',appendChildText:"?"},
					{object : "option", parent_id : "PrivilegeRequiredVar", value :'v2=/v3=PR:N', label: 'Aucun',appendChildText:"N"},
					{object : "option", parent_id : "PrivilegeRequiredVar", value :'v2=/v3=PR:L', label: 'Bas',appendChildText:"L"},
					{object : "option", parent_id : "PrivilegeRequiredVar", value :'v2=/v3=PR:H', label: 'Hauts',appendChildText:"H"},

					{object : "td", parent_id : "cvss_table_tr4", id : "cvss_table_tr4_td5"},
					{object : "select", parent_id : "cvss_table_tr4_td5", id : 'UserInteractionVar'},
					{object : "option", parent_id : "UserInteractionVar", value :'v2=/v3=UI:', selected: 'selected', label: '?',appendChildText:"?"},
					{object : "option", parent_id : "UserInteractionVar", value :'v2=/v3=UI:N', label: 'Aucune',appendChildText:"N"},
					{object : "option", parent_id : "UserInteractionVar", value :'v2=/v3=UI:R', label: 'Requise',appendChildText:"R"},

					{object : "tr", parent_id : "cvss_table", id : "cvss_table_tr5"},
					{object : "td", parent_id : "cvss_table_tr5"},
					{object : "td", parent_id : "cvss_table_tr5", colSpan :'7', appendChildText: "Impact"},

					{object : "tr", parent_id : "cvss_table", id : "cvss_table_tr6"},
					{object : "td", parent_id : "cvss_table_tr6"},
					{object : "td", parent_id : "cvss_table_tr6"},
					{object : "td", parent_id : "cvss_table_tr6", appendChildText: "Portée (S)"},
					{object : "td", parent_id : "cvss_table_tr6", appendChildText: "Confidentialité (C)"},
					{object : "td", parent_id : "cvss_table_tr6", appendChildText: "Intégrité (I)"},
					{object : "td", parent_id : "cvss_table_tr6", appendChildText: "Disponibilité (A)"},

					{object : "tr", parent_id : "cvss_table", id : "cvss_table_tr7"},
					{object : "td", parent_id : "cvss_table_tr7"},
					{object : "td", parent_id : "cvss_table_tr7"},
					{object : "td", parent_id : "cvss_table_tr7", id : "cvss_table_tr7_td1"},
					{object : "select", parent_id : "cvss_table_tr7_td1", id : 'ScopeVar'},
					{object : "option", parent_id : "ScopeVar", value :'v2=/v3=S:', selected: 'selected', label: '?', appendChildText:"?"},
					{object : "option", parent_id : "ScopeVar", value :'v2=/v3=S:U', label: 'Pas de débordement', appendChildText:"U"},
					{object : "option", parent_id : "ScopeVar", value :'v2=/v3=S:C', label: 'Débordement', appendChildText:"C"},

					{object : "td", parent_id : "cvss_table_tr7", id : "cvss_table_tr7_td2"},
					{object : "select", parent_id : "cvss_table_tr7_td2", id : 'ConfImpactVar'},
					{object : "option", parent_id : "ConfImpactVar", value :'v2=C:/v3=C:', selected: 'selected', label: '?', appendChildText:"ND"},
					{object : "option", parent_id : "ConfImpactVar", value :'v2=C:N/v3=C:N', label: 'Aucun', appendChildText:"N"},
					{object : "option", parent_id : "ConfImpactVar", value :'v2=C:P/v3=C:L', label: 'Partiel/bas', appendChildText:"P"},
					{object : "option", parent_id : "ConfImpactVar", value :'v2=C:C/v3=C:H', label: 'Complet/haut', appendChildText:"C"},

					{object : "td", parent_id : "cvss_table_tr7", id : "cvss_table_tr7_td3"},
					{object : "select", parent_id : "cvss_table_tr7_td3", id : 'IntegImpactVar'},
					{object : "option", parent_id : "IntegImpactVar", value :'v2=I:/v3=I:', selected: 'selected', label: '?', appendChildText:"ND"},
					{object : "option", parent_id : "IntegImpactVar", value :'v2=I:N/v3=I:N', label: 'Aucun', appendChildText:"N"},
					{object : "option", parent_id : "IntegImpactVar", value :'v2=I:P/v3=I:L', label: 'Partiel/bas', appendChildText:"P"},
					{object : "option", parent_id : "IntegImpactVar", value :'v2=I:C/v3=I:H', label: 'Complet/haut', appendChildText:"C"},

					{object : "td", parent_id : "cvss_table_tr7", id : "cvss_table_tr7_td4"},
					{object : "select", parent_id : "cvss_table_tr7_td4", id : 'AvailImpactVar'},
					{object : "option", parent_id : "AvailImpactVar", value :'v2=A:/v3=A:', selected: 'selected', label: '?', appendChildText:"?"},
					{object : "option", parent_id : "AvailImpactVar", value :'v2=A:N/v3=A:N', label: 'Aucun', appendChildText:"N"},
					{object : "option", parent_id : "AvailImpactVar", value :'v2=A:P/v3=A:L', label: 'Partiel/bas', appendChildText:"P"},
					{object : "option", parent_id : "AvailImpactVar", value :'v2=A:C/v3=A:H', label: 'Complet/haut', appendChildText:"C"},

					{object : "tr", parent_id : "cvss_table", id : "cvss_table_tr8"},
					{object : "td", parent_id : "cvss_table_tr8", colSpan:"7", appendChildText: "Score Temporel"},

					{object : "tr", parent_id : "cvss_table", id : "cvss_table_tr9"},
					{object : "td", parent_id : "cvss_table_tr9"},
					{object : "td", parent_id : "cvss_table_tr9"},
					{object : "td", parent_id : "cvss_table_tr9", appendChildText: "Exploitabilité (E)"},
					{object : "td", parent_id : "cvss_table_tr9", appendChildText: "Remediation (RL)"},
					{object : "td", parent_id : "cvss_table_tr9", appendChildText: "Confiance (RC)"},

					{object : "tr", parent_id : "cvss_table", id : "cvss_table_tr10"},
					{object : "td", parent_id : "cvss_table_tr10"},
					{object : "td", parent_id : "cvss_table_tr10"},
					{object : "td", parent_id : "cvss_table_tr10", id : "cvss_table_tr10_td1"},
					{object : "select", parent_id : "cvss_table_tr10_td1", id : 'ExploitabilityVar'},
					{object : "option", parent_id : "ExploitabilityVar", value :'v2=E:ND/v3=E:X', selected: 'selected', label: 'Non défini', appendChildText:"ND"},
					{object : "option", parent_id : "ExploitabilityVar", value :'v2=E:U/v3=E:U', label: 'Non prouvé', appendChildText:"U"},
					{object : "option", parent_id : "ExploitabilityVar", value :'v2=E:POC/v3=E:P', label: 'Programme de démonstration (PoC)', appendChildText:"POC"},
					{object : "option", parent_id : "ExploitabilityVar", value :'v2=E:F/v3=E:F', label: 'Fonctionnel', appendChildText:"F"},
					{object : "option", parent_id : "ExploitabilityVar", value :'v2=E:H/v3=E:H', label: 'Haut', appendChildText:"H"},

					{object : "td", parent_id : "cvss_table_tr10", id : "cvss_table_tr10_td2"},
					{object : "select", parent_id : "cvss_table_tr10_td2", id : 'RemediationLevelVar'},
					{object : "option", parent_id : "RemediationLevelVar", value :'v2=RL:ND/v3=RL:X', selected: 'selected', label: 'Non défini', appendChildText:"ND"},
					{object : "option", parent_id : "RemediationLevelVar", value :'v2=RL:OF/v3=RL:O', label: 'Correctif officiel', appendChildText:"OF"},
					{object : "option", parent_id : "RemediationLevelVar", value :'v2=RL:TF/v3=RL:T', label: 'Correctif provisoire', appendChildText:"TF"},
					{object : "option", parent_id : "RemediationLevelVar", value :'v2=RL:W/v3=RL:W', label: 'Palliatif', appendChildText:"W"},
					{object : "option", parent_id : "RemediationLevelVar", value :'v2=RL:U/v3=RL:U', label: 'Non disponible', appendChildText:"U"},


					{object : "td", parent_id : "cvss_table_tr10", id : "cvss_table_tr10_td3"},
					{object : "select", parent_id : "cvss_table_tr10_td3", id : 'ReportConfidenceVar'},
					{object : "option", parent_id : "ReportConfidenceVar", value :'v2=RC:ND/v3=RC:X', label: 'Non défini', appendChildText:"ND"},
					{object : "option", parent_id : "ReportConfidenceVar", value :'v2=RC:UC/v3=RC:U', label: 'Non confirmé', appendChildText:"UC"},
					{object : "option", parent_id : "ReportConfidenceVar", value :'v2=RC:UR/v3=RC:R', label: 'Présumé', appendChildText:"UR"},
					{object : "option", parent_id : "ReportConfidenceVar", value :'v2=RC:C/v3=RC:C', selected: 'selected', label: 'Confirmé', appendChildText:"C"},

					//{object : "td", parent_id : "cvss_table_tr10", id : "cvss_table_tr10_td4"},
					//{object : "input", parent_id : "cvss_table_tr10_td4", type : "button", id : 'btn_add_RLof_RCc', size : 3, value : 'Ajouter RL:OF + RC:C'},


					{object : "br", parent_id : "div_input"},
					{object : "input", type : "checkbox", parent_id : "div_input", id: "lock_v2"},
					{object : "label", parent_id : "div_input", for : "lock_v2", appendChildText: "Verrouiller v2", id: "lock_v2_from_label", style :"padding-right:10px"},
					{object : "input", type : "checkbox", parent_id : "div_input", id: "lock_v3"},
					{object : "label", parent_id : "div_input", for : "lock_v3", appendChildText: "Verrouiller v3", id: "lock_v3_from_label", style :"padding-right:10px"},

					{object : "input", type : "checkbox", parent_id : "div_input", id: "v2boxFromGMstorage"},
					{object : "label", parent_id : "div_input", for : "v2boxFromGMstorage", appendChildText: "V2 from storage", id: "v2boxFromGMstorage_label", style :"padding-right:10px"},
					{object : "input", type : "checkbox", parent_id : "div_input", id: "v3boxFromGMstorage"},
					{object : "label", parent_id : "div_input", for : "v3boxFromGMstorage", appendChildText: "V3 from storage", id: "v3boxFromGMstorage_label", style :"padding-right:10px"}

				];

				make_html_from_list_of_dict(item_before, list_input);
			}

			function add_functions_onchange(){
				var items = document.querySelectorAll('select');

				for(var i=0;i<items.length;i++) {
					//items[i].setAttribute("onchange", update_output); // inside the code
					items[i].addEventListener('change', computeCVSS,false);
				}
				items = document.querySelectorAll('input');
				for(i=0;i<items.length;i++) {
					if(items[i].type==="text"){
						items[i].addEventListener('change', update_options);
						items[i].addEventListener('keyup', update_options);
						//items[i].setAttribute("onchange", update_options());//update_options lancera update_output // inside the code
					}
				}
			}

			function add_functions_onclick(){
				document.getElementById('link_vecteur_v2').setAttribute('onclick',"document.getElementById('input_text_cvss').value = this.innerText;document.getElementById('lock_v3').checked = true;document.getElementById('lock_v2').checked = false;");
				document.getElementById('link_vecteur_v3').setAttribute('onclick',"document.getElementById('input_text_cvss').value = this.innerText;document.getElementById('lock_v2').checked = true;document.getElementById('lock_v3').checked = false;");

				document.getElementById('link_vecteur_v2').addEventListener('click',update_options);
				document.getElementById('link_vecteur_v3').addEventListener('click',update_options);

				document.getElementById('btn_add_RLof_RCc').addEventListener('click',addDefaultTempo);

			}

			function selectOption(select_id, optionText){
				var select_obj = document.getElementById(select_id);
				var options = Array.from(select_obj.options);
				var option = options.find(item => item.text === optionText);
				option.selected = true;
			}

			function addDefaultTempo(){
				addDefaultTempo_version('link_vecteur_v2');
				addDefaultTempo_version('link_vecteur_v3');
			}

			function addDefaultTempo_version(idLink){
				document.getElementById(idLink).click();

				var idSelect = 'RemediationLevelVar';
				var optionText = 'OF';
				selectOption(idSelect, optionText);

				idSelect = 'ReportConfidenceVar';
				optionText = 'C';
				selectOption(idSelect, optionText);

				computeCVSS();
			}

			function set_v2_cartouche(cveID, source=""){
				var TargetVersion="_v2";
				// console.log("cliqued ("+cveID+") : " +document.getElementById('tableCVEs_Td_'+cveID+TargetVersion+'_vector').value );
				document.getElementById('input_text_cvss').value = document.getElementById('tableCVEs_Td_'+cveID+TargetVersion+'_vector').value;
				document.getElementById('refCVE_vecteur'+TargetVersion).value = cveID;
				document.getElementById('refCVE_vecteur'+TargetVersion+'_source').value = (source ? source : "NVD auto");
				document.getElementById('lock_v2').checked = false;
				document.getElementById('lock_v3').checked = true;
				
				var lstMetaNVD=["NVDpublishDate","NVDmodifiedDate","NVDsource"];
				var metaValue, metaID;
				for(var i=0 ; i<lstMetaNVD.length;i++) {
					metaValue = "";
					metaID = 'tableCVEs_Td_'+cveID+'_'+lstMetaNVD[i];
					if(document.getElementById(metaID)) {
						metaValue = document.getElementById(metaID).value;
					}
					document.getElementById('refCVE'+TargetVersion+'_'+lstMetaNVD[i]).value = metaValue;
					console.log("application de '"+metaValue+"' a "+'refCVE'+TargetVersion+'_'+lstMetaNVD[i]);
				}
				
				update_options();
			}
			function set_v3_cartouche(cveID,CNA="", source=""){
				var TargetVersion="_v3";
				// console.log("cliqued ("+cveID+") : " +document.getElementById('tableCVEs_Td_'+cveID+TargetVersion+CNA+'_vector').value );
				document.getElementById('input_text_cvss').value = document.getElementById('tableCVEs_Td_'+cveID+TargetVersion+CNA+'_vector').value;
				document.getElementById('refCVE_vecteur'+TargetVersion).value = cveID;
				document.getElementById('refCVE_vecteur'+TargetVersion+'_source').value = (source ? source : "NVD "+(CNA ? "(CNA) " : '')+"auto");
				document.getElementById('lock_v2').checked = true;
				document.getElementById('lock_v3').checked = false;
				
				var lstMetaNVD=["NVDpublishDate","NVDmodifiedDate","NVDsource"];
				var metaValue, metaID;
				for(var i=0 ; i<lstMetaNVD.length;i++) {
					metaValue = "";
					metaID = 'tableCVEs_Td_'+cveID+'_'+lstMetaNVD[i];
					if(document.getElementById(metaID)) {
						metaValue = document.getElementById(metaID).value;
					}
					document.getElementById('refCVE'+TargetVersion+'_'+lstMetaNVD[i]).value = metaValue;
					console.log("application de '"+metaValue+"' a "+'refCVE'+TargetVersion+'_'+lstMetaNVD[i]);
				}
				
				update_options();				
			}

			function add_functions_onclick_arrayOfCVE(arrayOfCVE=[]){
				var id = "";
				for(var i=0;i<arrayOfCVE.length;i++){
					id = arrayOfCVE[i];

					// CVE updateClipboard
					document.getElementById('tableCVEs_Td_'+id+'_CVE').addEventListener('click', function(){
						const cveID = (/CVE-[0-9]+-[0-9]+/).exec(this.id);
						updateClipboard(cveID);
					},false);

					//v2
					document.getElementById('tableCVEs_Td_'+id+'_v2_score').addEventListener('click', function(){
						const cveID = (/CVE-[0-9]+-[0-9]+/).exec(this.id);
						var IDcheckBoxVersion = 'v2boxFromGMstorage';
						if(document.getElementById(IDcheckBoxVersion)){document.getElementById(IDcheckBoxVersion).checked = false;}
						set_v2_cartouche(cveID);
					},false);

					// v3
					document.getElementById('tableCVEs_Td_'+id+'_v3_score').addEventListener('click', function(){
						const cveID = (/CVE-[0-9]+-[0-9]+/).exec(this.id);
						var IDcheckBoxVersion = 'v3boxFromGMstorage';
						if(document.getElementById(IDcheckBoxVersion)){document.getElementById(IDcheckBoxVersion).checked = false;}
						set_v3_cartouche(cveID);
					},false);

					// v3 CNA
					document.getElementById('tableCVEs_Td_'+id+'_v3_CNA_score').addEventListener('click', function(){
						const cveID = (/CVE-[0-9]+-[0-9]+/).exec(this.id);
						var IDcheckBoxVersion = 'v3boxFromGMstorage';
						if(document.getElementById(IDcheckBoxVersion)){document.getElementById(IDcheckBoxVersion).checked = false;}
						set_v3_cartouche(cveID, "_CNA");
					},false);
				}
			}

			function updateCartoucheFromStorageOrAutoNVD() {
				if(document.getElementById("v2boxFromGMstorage").checked){
					document.getElementById('lock_v2').checked = false;
					document.getElementById('lock_v3').checked = true;
					stockageToFieldsV2();
				}else{
					set_v2_cartouche(cveMaxScoreV2);
				}
				if(document.getElementById("v3boxFromGMstorage").checked){
					document.getElementById('lock_v2').checked = true;
					document.getElementById('lock_v3').checked = false;
					stockageToFieldsV3();
				}else{
					set_v3_cartouche(cveMaxScoreV3);
				}
			}

			function make_display_cartouche_out(item_before){
				// variables graphiques
				var font_size = "20px" ;
				var border_size = "0" ;
				var indentation_td = '40px';

				document.querySelector("html").setAttribute("xmlns","http://www.w3.org/1999/xhtml");
				// autres variables
				var list_input = [
					{object : "div", id :'div_output', style : "font-size :"+font_size},
					{object: "input", parent_id : "div_output", type:"hidden", id: "scriptVersionUsed", value: scriptVersion, class: "only_for_html_export"},
					{object : "table", parent_id : "div_output" , id :'cartouche_table', class: "only_for_html_export", style:"display:block;", border: border_size},

					{object: "tr", parent_id : "cartouche_table", id: "cartouche_table_tr1"},
					{object: "td", parent_id : "cartouche_table_tr1", width: indentation_td, style :"padding-right:10px"},
					//{object: "td", parent_id : "cartouche_table_tr1", appendChildText: "Gravité svg", style :"padding-right:10px"},
					//{object: "td", parent_id : "cartouche_table_tr1", appendChildText: "Gravité img svg", style :"padding-right:10px"},
					{object: "td", parent_id : "cartouche_table_tr1", appendChildText: "Gravité", style :"padding-right:10px"}, //Gravité img png
					{object: "td", parent_id : "cartouche_table_tr1", appendChildText: "Score de base", style :"padding-right:10px"},
					{object: "td", parent_id : "cartouche_table_tr1", appendChildText: "Score temporel", style :"padding-right:10px"},
					{object: "td", parent_id : "cartouche_table_tr1", appendChildText: "Vecteur", style :"padding-right:10px", id : "cartouche_table_tr1_td5"},
						{object : "input", parent_id : "cartouche_table_tr1_td5", type : "button", id : 'btn_add_RLof_RCc', size : 3, value : 'Ajouter RL:OF + RC:C', style :"margin-left:10px", class: "avoid_from_selection"},

					{object: "tr", parent_id : "cartouche_table", id: "cartouche_table_tr2"},
					{object: "td", parent_id : "cartouche_table_tr2", appendChildText: "v2"},
					//{object: "td", parent_id : "cartouche_table_tr2", id: "cartouche_table_v2_pictogramme"},
						//{object: "svg", parent_id: "cartouche_table_v2_pictogramme", width: "40", height: "40", id: "sous-titre-chart_v2", viewBox: "0 0 80 80"},
							//{object: "rect", parent_id: "sous-titre-chart_v2", x: "0", y: "60", width: "20", height: "20", stroke: "black", fill: "white", strokewidth: "2", class: "chart_contour"},
							//{object: "rect", parent_id: "sous-titre-chart_v2", x: "20", y: "40", width: "20", height: "40", stroke: "black", fill: "white", strokewidth: "2", class: "chart_contour"},
							//{object: "rect", parent_id: "sous-titre-chart_v2", x: "40", y: "20", width: "20", height: "60", stroke: "black", fill: "white", strokewidth: "2", class: "chart_contour"},
							//{object: "rect", parent_id: "sous-titre-chart_v2", x: "60", y: "0", width: "20", height: "80", stroke: "black", fill: "white", strokewidth: "2", class: "chart_contour"},

							//{object: "rect", parent_id: "sous-titre-chart_v2", x: "1", y: "67", width: "6", height: "12", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_left"},
							//{object: "rect", parent_id: "sous-titre-chart_v2", x: "21", y: "47", width: "6", height: "32", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_left"},
							//{object: "rect", parent_id: "sous-titre-chart_v2", x: "41", y: "27", width: "6", height: "52", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_left"},
							//{object: "rect", parent_id: "sous-titre-chart_v2", x: "61", y: "7", width: "6", height: "72", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_left"},

							//{object: "rect", parent_id: "sous-titre-chart_v2", x: "7", y: "67", width: "6", height: "12", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_center"},
							//{object: "rect", parent_id: "sous-titre-chart_v2", x: "27", y: "47", width: "6", height: "32", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_center"},
							//{object: "rect", parent_id: "sous-titre-chart_v2", x: "47", y: "27", width: "6", height: "52", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_center"},
							//{object: "rect", parent_id: "sous-titre-chart_v2", x: "67", y: "7", width: "6", height: "72", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_center"},

							//{object: "rect", parent_id: "sous-titre-chart_v2", x: "13", y: "67", width: "6", height: "12", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_right"},
							//{object: "rect", parent_id: "sous-titre-chart_v2", x: "33", y: "47", width: "6", height: "32", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_right"},
							//{object: "rect", parent_id: "sous-titre-chart_v2", x: "53", y: "27", width: "6", height: "52", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_right"},
							//{object: "rect", parent_id: "sous-titre-chart_v2", x: "73", y: "7", width: "6", height: "72", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_right"},

					//{object: "td", parent_id : "cartouche_table_tr2", id: "cartouche_table_v2_pictogramme_image_svg"},
						//{object: "img", parent_id : "cartouche_table_v2_pictogramme_image_svg", id: "img_svg_v2", width: "40", height: "40"},
					{object: "td", parent_id : "cartouche_table_tr2", id: "cartouche_table_v2_pictogramme_image_png"},
						{object: "img", parent_id : "cartouche_table_v2_pictogramme_image_png", id: "img_png_v2", width: "40", height: "40"},
					{object: "td", parent_id : "cartouche_table_tr2", id: "display_score_base_v2", appendChildText: "undefined"},
					{object: "td", parent_id : "cartouche_table_tr2", id: "display_score_temp_v2", appendChildText: "undefined"},
					{object: "td", parent_id : "cartouche_table_tr2", id: "display_vecteur_v2"},
						{object: "a", parent_id : "display_vecteur_v2", id: "link_vecteur_v2", target: '_blank', appendChildText: "undefined"},
						{object: "input", parent_id : "display_vecteur_v2", type:"text", id: "refCVE_vecteur_v2", class: "only_for_html_export inputTypeTextToHidden", placeholder:"CVE de référence pour ce vecteur", readonly:"readonly", size:"13", title:"La CVE qui correspond au score/vecteur"},
						{object: "input", parent_id : "display_vecteur_v2", type:"text", id: "refCVE_vecteur_v2_source", class: "only_for_html_export inputTypeTextToHidden", placeholder:"origine du vecteur", title:"La source qui a fournit le vecteur"},
						{object: "input", parent_id : "display_vecteur_v2", type:"text", id: "refCVE_v2_NVDpublishDate", class: "only_for_html_export inputTypeTextToHidden", readonly:"readonly", size:"8", title:"Date de publication sur le site NVD"},
						{object: "input", parent_id : "display_vecteur_v2", type:"text", id: "refCVE_v2_NVDmodifiedDate", class: "only_for_html_export inputTypeTextToHidden", readonly:"readonly", size:"8", title:"Date de mise à jour sur le site NVD"},
						{object: "input", parent_id : "display_vecteur_v2", type:"text", id: "refCVE_v2_NVDsource", class: "only_for_html_export inputTypeTextToHidden", readonly:"readonly", title:"L'éditeur responsable de la publication sur le site NVD"},

					{object: "tr", parent_id : "cartouche_table", id: "cartouche_table_tr3"},
					{object: "td", parent_id : "cartouche_table_tr3", appendChildText: "v3.1"},
					//{object: "td", parent_id : "cartouche_table_tr3", id: "cartouche_table_v3_pictogramme"},
						//{object: "svg", parent_id: "cartouche_table_v3_pictogramme", width: "40", height: "40", id: "sous-titre-chart_v3", viewBox: "0 0 80 80"},
							//{object: "rect", parent_id: "sous-titre-chart_v3", x: "0", y: "60", width: "20", height: "20", stroke: "black", fill: "white", strokewidth: "2", class: "chart_contour"},
							//{object: "rect", parent_id: "sous-titre-chart_v3", x: "20", y: "40", width: "20", height: "40", stroke: "black", fill: "white", strokewidth: "2", class: "chart_contour"},
							//{object: "rect", parent_id: "sous-titre-chart_v3", x: "40", y: "20", width: "20", height: "60", stroke: "black", fill: "white", strokewidth: "2", class: "chart_contour"},
							//{object: "rect", parent_id: "sous-titre-chart_v3", x: "60", y: "0", width: "20", height: "80", stroke: "black", fill: "white", strokewidth: "2", class: "chart_contour"},

							//{object: "rect", parent_id: "sous-titre-chart_v3", x: "1", y: "67", width: "6", height: "12", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_left"},
							//{object: "rect", parent_id: "sous-titre-chart_v3", x: "21", y: "47", width: "6", height: "32", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_left"},
							//{object: "rect", parent_id: "sous-titre-chart_v3", x: "41", y: "27", width: "6", height: "52", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_left"},
							//{object: "rect", parent_id: "sous-titre-chart_v3", x: "61", y: "7", width: "6", height: "72", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_left"},

							//{object: "rect", parent_id: "sous-titre-chart_v3", x: "7", y: "67", width: "6", height: "12", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_center"},
							//{object: "rect", parent_id: "sous-titre-chart_v3", x: "27", y: "47", width: "6", height: "32", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_center"},
							//{object: "rect", parent_id: "sous-titre-chart_v3", x: "47", y: "27", width: "6", height: "52", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_center"},
							//{object: "rect", parent_id: "sous-titre-chart_v3", x: "67", y: "7", width: "6", height: "72", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_center"},

							//{object: "rect", parent_id: "sous-titre-chart_v3", x: "13", y: "67", width: "6", height: "12", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_right"},
							//{object: "rect", parent_id: "sous-titre-chart_v3", x: "33", y: "47", width: "6", height: "32", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_right"},
							//{object: "rect", parent_id: "sous-titre-chart_v3", x: "53", y: "27", width: "6", height: "52", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_right"},
							//{object: "rect", parent_id: "sous-titre-chart_v3", x: "73", y: "7", width: "6", height: "72", stroke: "black", fill: "black", strokewidth: "0", class: "chart_inside_right"},

					//{object: "td", parent_id : "cartouche_table_tr3", id: "cartouche_table_v3_pictogramme_image_svg"},
						//{object: "img", parent_id : "cartouche_table_v3_pictogramme_image_svg", id: "img_svg_v3", width: "40", height: "40"},
					{object: "td", parent_id : "cartouche_table_tr3", id: "cartouche_table_v3_pictogramme_image_png"},
						{object: "img", parent_id : "cartouche_table_v3_pictogramme_image_png", id: "img_png_v3", width: "40", height: "40"},
					{object: "td", parent_id : "cartouche_table_tr3", id: "display_score_base_v3", appendChildText: "undefined"},
					{object: "td", parent_id : "cartouche_table_tr3", id: "display_score_temp_v3", appendChildText: "undefined"},
					{object: "td", parent_id : "cartouche_table_tr3", id: "display_vecteur_v3"},
						{object: "a", parent_id : "display_vecteur_v3", id: "link_vecteur_v3", target: '_blank', appendChildText: "undefined"},
						{object: "input", parent_id : "display_vecteur_v3", type:"text", id: "refCVE_vecteur_v3", class: "only_for_html_export inputTypeTextToHidden", placeholder:"CVE de référence pour ce vecteur", readonly:"readonly", size:"13", title:"La CVE qui correspond au score/vecteur"},
						{object: "input", parent_id : "display_vecteur_v3", type:"text", id: "refCVE_vecteur_v3_source", class: "only_for_html_export inputTypeTextToHidden", placeholder:"origine du vecteur", title:"La source qui a fournit le vecteur"},
						{object: "input", parent_id : "display_vecteur_v3", type:"text", id: "refCVE_v3_NVDpublishDate", class: "only_for_html_export inputTypeTextToHidden", readonly:"readonly", size:"8", title:"Date de publication sur le site NVD"},
						{object: "input", parent_id : "display_vecteur_v3", type:"text", id: "refCVE_v3_NVDmodifiedDate", class: "only_for_html_export inputTypeTextToHidden", readonly:"readonly", size:"8", title:"Date de mise à jour sur le site NVD"},
						{object: "input", parent_id : "display_vecteur_v3", type:"text", id: "refCVE_v3_NVDsource", class: "only_for_html_export inputTypeTextToHidden", readonly:"readonly", title:"L'éditeur responsable de la publication sur le site NVD"}
				];
				


				if (item_before) {
					make_html_from_list_of_dict(item_before, list_input);
				}

			}

			function make_div_Left_content(item_before, arrayOfCVEs = []){
				// variables graphiques
				var font_size = "20px" ;
				var border_size = "1" ;
				var indentation_td = '40px';
				var id, mapGetNVD, v3_Vector, v2_Vector, v3_BaseScore, v2_BaseScore;



				var articleContent = document.getElementsByClassName('content')[0];
				articleContent.style = articleContent.style+";float: left;"

				// autres variables
				var list_input = [
					{object : "div", id :'div_CVEs', class: "content", style : "float: left;font-size :"+font_size},
					{object: "table", parent_id : "div_CVEs", appendChildText: "Cliquer sur le score pour l'utiliser"},
					{object: "table", parent_id : "div_CVEs", appendChildText: "En-tete rouge = travail en cours, vert = fini", id : "pProcessMessage"},
					{object: "table", parent_id : "div_CVEs", id: "tableCVEs", border : border_size},
						/*{object: "tr", parent_id : "tableCVEs", id: "tableCVEs_Tr_test"},
							{object: "td", parent_id : "tableCVEs_Tr_test", id: "tableCVEs_Td_test_CVE"},
								{object: "input", type:"text", parent_id : "tableCVEs_Td_test_CVE", id : "tableCVEs_Td_test_CVE_ipt"},
							{object: "td", parent_id : "tableCVEs_Tr_test", id: "tableCVEs_Td_test_v2"},
								{object: "p", parent_id : ("tableCVEs_Td_test_v2"), id : ("tableCVEs_Td_test_v2_score")},
								{object: "input", type:"hidden", parent_id : ("tableCVEs_Td_test_v2"), id : ("tableCVEs_Td_test_v2_vector")},
							{object: "td", parent_id : "tableCVEs_Tr_test", id: "tableCVEs_Td_test_v3"},
								{object: "p", parent_id : ("tableCVEs_Td_test_v3"), id : ("tableCVEs_Td_test_v3_score")},
								{object: "input", type:"hidden", parent_id : ("tableCVEs_Td_test_v3"), id : ("tableCVEs_Td_test_v3_vector")},*/
						{object: "tr", parent_id : "tableCVEs", id: "tableCVEs_THs", style : "color:red;"},
							{object: "th", parent_id : "tableCVEs_THs", style :"padding-right:10px", appendChildText: "CVE"},
							{object: "th", parent_id : "tableCVEs_THs", style :"padding-right:10px", appendChildText: "v2"},
							{object: "th", parent_id : "tableCVEs_THs", style :"padding-right:10px", appendChildText: "v3"},
							{object: "th", parent_id : "tableCVEs_THs", style :"padding-right:10px", appendChildText: "v3 CNA"},
							{object: "th", parent_id : "tableCVEs_THs", style :"padding-right:10px", appendChildText: "Liens", colspan:2}
							//{object: "th", parent_id : "tableCVEs_THs", style :"padding-right:10px", appendChildText: "vuldb"}
					];
				for(var i=0;i<arrayOfCVEs.length;i++){
					id = arrayOfCVEs[i];

					// récupération des valeurs NVD
					list_input.push({object: "tr", parent_id : "tableCVEs", id: "tableCVEs_Tr_"+id});
					list_input.push({object: "td", parent_id : "tableCVEs_Tr_"+id, id: "tableCVEs_Td_"+id+"_CVE", appendChildText: id, style : "color:red;"});
						list_input.push({object: "input", type:"hidden", parent_id : ("tableCVEs_Td_"+id+"_CVE"), id : ("tableCVEs_Td_"+id+"_NVDpublishDate")});
						list_input.push({object: "input", type:"hidden", parent_id : ("tableCVEs_Td_"+id+"_CVE"), id : ("tableCVEs_Td_"+id+"_NVDmodifiedDate")});
						list_input.push({object: "input", type:"hidden", parent_id : ("tableCVEs_Td_"+id+"_CVE"), id : ("tableCVEs_Td_"+id+"_NVDsource")});

					list_input.push({object: "td", parent_id : "tableCVEs_Tr_"+id, id: "tableCVEs_Td_"+id+"_v2"});
						list_input.push({object: "p", parent_id : ("tableCVEs_Td_"+id+"_v2"), id : ("tableCVEs_Td_"+id+"_v2_score")});
						list_input.push({object: "input", type:"hidden", parent_id : ("tableCVEs_Td_"+id+"_v2"), id : ("tableCVEs_Td_"+id+"_v2_vector")});

					list_input.push({object: "td", parent_id : "tableCVEs_Tr_"+id, id: "tableCVEs_Td_"+id+"_v3"});
						list_input.push({object: "p", parent_id : ("tableCVEs_Td_"+id+"_v3"), id : ("tableCVEs_Td_"+id+"_v3_score")});
						list_input.push({object: "input", type:"hidden", parent_id : ("tableCVEs_Td_"+id+"_v3"), id : ("tableCVEs_Td_"+id+"_v3_vector")});

					list_input.push({object: "td", parent_id : "tableCVEs_Tr_"+id, id: "tableCVEs_Td_"+id+"_v3_CNA"});
						list_input.push({object: "p", parent_id : ("tableCVEs_Td_"+id+"_v3_CNA"), id : ("tableCVEs_Td_"+id+"_v3_CNA_score")});
						list_input.push({object: "input", type:"hidden", parent_id : ("tableCVEs_Td_"+id+"_v3_CNA"), id : ("tableCVEs_Td_"+id+"_v3_CNA_vector")});

					list_input.push({object: "td", parent_id : "tableCVEs_Tr_"+id, id: "tableCVEs_Td_"+id+"_nvd"});
						list_input.push({object: "a", parent_id : ("tableCVEs_Td_"+id+"_nvd"), href : 'https://nvd.nist.gov/vuln/detail/'+id, target: "_blank", appendChildText : "NVD"});

					//list_input.push({object: "td", parent_id : "tableCVEs_Tr_"+id, id: "tableCVEs_Td_"+id+"_vuldb"});
						//list_input.push({object: "a", parent_id :  "tableCVEs_Td_"+id+"_vuldb", click : "$('#search_vuldb_'+id).submit();", appendChildText : "vuldb"});

					list_input.push({object: "td", parent_id : "tableCVEs_Tr_"+id, id: "tableCVEs_Td_"+id+"_google"});
						list_input.push({object: "a", parent_id :  "tableCVEs_Td_"+id+"_google", href : 'https://www.google.com/search?q=%22'+id+'%22', target: "_blank", appendChildText : "google"});
				}

				if (item_before) {
					make_html_from_list_of_dict(item_before, list_input);
				}

			}

			function set_visibility_class(classe,visibility){
				const items = document.querySelectorAll(classe);

				items.forEach(item => {
					item.style.display = visibility;
				});
			}

			function get_article_to_string(){
				set_visibility_class(".avoid_from_selection","none");
				set_visibility_class(".only_for_html_export","none");
				set_visibility_class(".avoid_from_selection_but_for_html_export","none");
				$('.article').selectText();
				var text_article = "";
				if (window.getSelection) {
					text_article = window.getSelection().toString();
				} else if (document.selection && document.selection.type != "Control") {
					text_article = document.selection.createRange().text;
				}

				set_visibility_class(".avoid_from_selection_but_for_html_export","block");
				set_visibility_class(".avoid_from_selection","block");
				set_visibility_class(".only_for_html_export","block");
				document.getSelection().removeAllRanges(); // supprime les selections
				return text_article;
			}

			function get_indent(nb_indent){
				var output="";
				var indent_text="\t";
				nb_indent = (nb_indent<0?0:nb_indent);
				for(var i =0 ; i<nb_indent;i++){
					output+=indent_text;
				}
				return output;
			}

			function get_text_and_child_from_innerHTML(innerHTML,children,indent=0) {
				// découpe du texte entre le texte dans des balise et le reste
				var regex_balise_html_complete = "<.*?>";
				var regex_balise_html_type="(?<=<)(.*?)(?=[ >])",balise_html_type="";
				var resultat_regex;
				var texte_avant_balise="";
				var output="";

				var balise_begin=0,balise_end=0;
				// parcours pour chaque enfant, rechercher le texte avant
					for(var i=0;i<children.length;i++){
						balise_html_type = children[i].nodeName.toLowerCase();
						regex_balise_html_complete="<"+balise_html_type+".*?>";

						//console.log("découpe de "+innerHTML);
						resultat_regex = innerHTML.match(regex_balise_html_complete);
						//console.log(i+"/"+children.length+" : "+balise_html_type+"\n=>");
						//console.log(children);
						//console.log(resultat_regex);
						// get position start de la balise
						balise_begin=resultat_regex.index;
						// texte avant balise = substrin(balise_end,balise_begin)
						//texte_avant_balise = get_indent(indent)+innerHTML.substring(0,balise_begin);  // test de correction de placement de texte interne une balise
						texte_avant_balise = innerHTML.substring(0,balise_begin);
							// néttoyage si le avant balise est rempli de vide
							if(/^\s*$/.test(texte_avant_balise)) { texte_avant_balise = "";}
						// get position fin de la balise
						balise_end= resultat_regex.index+resultat_regex[0].length+children[i].innerHTML.length; // avant une fermeture de balise eventuelle
						//console.log("fin de balise avant fermante : "+balise_end);
						innerHTML=innerHTML.substring(balise_end);// avant une fermeture de balise eventuelle
						// rechercher une balise fermante
						regex_balise_html_complete="</"+balise_html_type+">";
						resultat_regex = innerHTML.match(regex_balise_html_complete);
						//console.log("recherche "+regex_balise_html_complete+" dans \n"+innerHTML);
						//console.log(resultat_regex);
						if(resultat_regex){
							balise_end=resultat_regex.index+resultat_regex[0].length;
							//console.log("a trouver balise fermante: "+resultat_regex.index+" fin de la balise avant fermante : "+balise_end+" ; taille de la balise fermante : "+resultat_regex[0].length+" ==== > "+balise_end);
							// reste du texte apres la balise fermante
							innerHTML=innerHTML.substring(balise_end);
						}
						//console.log("texte avant balise : "+texte_avant_balise);
						//console.log("texte apres balise fermante eventuelle : \n"+innerHTML);
						output += texte_avant_balise;

						output += recursive_get_html(children[i],(indent+1));
					}
				// pour le dernier enfant rechercher le texte après

				output+=innerHTML;
				return output;
			}

			function dom_object_attributes_to_string(obj,array_attrib_to_exclude=[]){
				var str_obj="", attribut,attribut_name;
				// Get object of all {name: value}
				const attrs_names = obj.getAttributeNames();
				for(var i=0;i<attrs_names.length;i++){
					attribut_name = attrs_names[i];
					//console.log("attrib: "+attribut_name+" ; val : "+obj.getAttribute(attribut_name));
					if(array_attrib_to_exclude.includes(attribut_name)){
						// attribut a eviter, on passe à la suite
						continue ;
					}
					attribut = obj.getAttribute(attribut_name);
					if(Array.isArray(attribut)) {
					   str_obj =str_obj + " "+attrs_names[i]+'="';
						for(var j=0;j<attribut.length;j++){
							str_obj =str_obj +attribut[j]+" "
						}
					   str_obj +='" ';
					}else{
						str_obj =str_obj + " "+attribut_name+'="'+attribut+'" ';
					}
				}

				// vérification des propriétés qui ne sont pas des attributs
				if(obj.value && !(str_obj.includes("value="))){str_obj =str_obj + ' value="'+obj.value+'"';}

				return str_obj;
			}

			function recursive_get_html(dom_object,indent=0) {
				var a_exclure=false;
				var output="";
				var object_type = dom_object.nodeName.toLowerCase();
				var tag_begin="";
				var tag_end = "";
				var indent_text = get_indent(indent);

				var temp_value, has_changed;//utilisé pour une alteration le temps de la recuperation du code

				var array_attrib_to_exclude=['class', 'style', 'onclick', 'placeholder'];

				switch(object_type) {
					case 'area':
					case 'base':
					case 'br':
					case 'col':
					case 'command':
					case 'embed':
					case 'hr':
					case 'keygen':
					case 'link':
					case 'meta':
					case 'param':
					case 'source':
					case 'track':
					case 'wbr':
						tag_begin = indent_text+"<"+object_type+" />\n";
						tag_end="";
						break;
					case "input":
						if(dom_object.classList.contains("inputTypeTextToHidden")){
							//console.log(dom_object.id+" : "+dom_object.value);
							tag_begin = indent_text+"<"+object_type+" "+ ((dom_object_attributes_to_string(dom_object, array_attrib_to_exclude)).replace('type="text"','type="hidden"'))+" />\n";
						}else{
							tag_begin = indent_text+"<"+object_type+" "+ dom_object_attributes_to_string(dom_object, array_attrib_to_exclude)+" />\n";
						}
						tag_end="";
						break;
					case "img":
						// modification des sources d'images
						has_changed = false;
						if(dom_object.getAttribute("id") === "img_png_v2" || dom_object.getAttribute("id") === "img_png_v3") {
							temp_value = dom_object.getAttribute("src");
							dom_object.setAttribute("src", dom_object.getAttribute("src_portail"));
							has_changed = true;
						}
						tag_begin = indent_text+"<"+object_type+" "+dom_object_attributes_to_string(dom_object)+" />\n";
						tag_end="";
						if(has_changed) {dom_object.setAttribute("src" ,temp_value);}
						break;
					case "a" :
						// modification des liens pour le portail
						has_changed = false;
						if(dom_object.getAttribute("id") === "link_vecteur_v2"){
							temp_value = dom_object.getAttribute("href");
							//dom_object.setAttribute("href", "https://portail-calid.intradef.gouv.fr/index.php/publications/vulnerabilites/calculateur_cvss_v2");
							has_changed = true;

						}else if(dom_object.getAttribute("id") === "link_vecteur_v3") {
							temp_value = dom_object.getAttribute("href");
							//dom_object.setAttribute("href", "https://portail-calid.intradef.gouv.fr/index.php/publications/vulnerabilites/calculateur_cvss_v3");
							has_changed = true;
						}
						tag_begin = indent_text+"<"+object_type+" "+dom_object_attributes_to_string(dom_object,array_attrib_to_exclude)+">";
						tag_end="</"+object_type+">\n";
						//if(has_changed) {dom_object.setAttribute("href" ,temp_value);}
						break;
					case "svg":
						tag_begin = indent_text+"<"+object_type+" "+dom_object_attributes_to_string(dom_object,array_attrib_to_exclude)+">";
						tag_end="</"+object_type+">\n";
						break;
					case "rect":
						tag_begin = indent_text+"<"+object_type+" "+dom_object_attributes_to_string(dom_object,array_attrib_to_exclude)+"/>\n";
						break;
					case 'h1' : //passer les h1 en h3
					case 'h2' : //passer les h2 en h3
						object_type = 'h3';
						// repris de default
						tag_begin = indent_text+"<"+object_type+">";
						tag_end="</"+object_type+">\n";
						// avertissement si pas de break avant default
						break;
					case "td": // ajouter un espace apres les td
					case 'table' : // conserver le style
						// repris de default
						tag_begin = indent_text+"<"+object_type+" "+dom_object_attributes_to_string(dom_object,['class'])+">";
						tag_end="</"+object_type+">\n";//<td>&nbsp;</td>
						// avertissement si pas de break avant default
						break;
					default:
						tag_begin = indent_text+"<"+object_type+">";
						tag_end="</"+object_type+">\n";
				}
				if(object_type=="li") {
					//console.log(dom_object);
				}
				// objet a exclure via leur classe
					for (var ne_doit_pas_avoir of ['avoid_from_selection','meta-logo','meta-certfr','meta-affaire','meta-pub-date']){ // ,''
						a_exclure = a_exclure || dom_object.classList.contains(ne_doit_pas_avoir)
					}
				if(a_exclure){
					// on ne prend pas la section de bas de page
					// output devrait etre à  "";
				} else if (dom_object.classList.contains("post-type-title")){ // remlplacer le titre H2 par un titre H1
					output += indent_text+"<h1>"+dom_object.innerText+"</h1>";
				}else if(dom_object.children.length>0) {
					// enfant, on descend dans l'arborescence html
					output += tag_begin;
					output += "\n";
					//output +=
						output += get_text_and_child_from_innerHTML(dom_object.innerHTML,dom_object.children,(indent+1));
					output += indent_text;
					output += tag_end;
				}else{
					//console.log(dom_object);
					//console.log(dom_object.innerText);
					// pas d'enfants, on recupere le innerText
					output += tag_begin;
					output += dom_object.innerText;
					output += tag_end;
					//console.log(output);
				}
				return output;
			}

			function get_article_to_html(){
				set_visibility_class(".avoid_from_selection","none");
				set_visibility_class(".only_for_html_export","block");
				set_visibility_class(".avoid_from_selection_but_for_html_export","block");
				var regexCVE = /^CVE-[0-9]{4}-([0-9]*)$/gi ;

				document.getElementById("link_vecteur_v2").href = "/index.php/publications/vulnerabilites/14645-description-et-application-cvss";
				document.getElementById("link_vecteur_v3").href = "/index.php/publications/vulnerabilites/14645-description-et-application-cvss";

				if(regexCVE.test(document.getElementById("refCVE_vecteur_v2").value)){
					document.getElementById("link_vecteur_v2").href = "https://calid-cyberwatch-veille.intradef.gouv.fr/cve_announcements/"+(document.getElementById("refCVE_vecteur_v2").value).toUpperCase();
				}
				regexCVE = /^CVE-[0-9]{4}-([0-9]*)$/gi ; // repete car bug sinon ????
				if(regexCVE.test(document.getElementById("refCVE_vecteur_v3").value)){
					document.getElementById("link_vecteur_v3").href = "https://calid-cyberwatch-veille.intradef.gouv.fr/cve_announcements/"+(document.getElementById("refCVE_vecteur_v3").value).toUpperCase();
				}


				var article = document.querySelector('article');
				var code_article = "<!DOCTYPE html>\n" + recursive_get_html(article);

				//console.log(article);
				//console.log(code_article);


				//set_visibility_class(".only_for_html_export","block");
				set_visibility_class(".avoid_from_selection","block");
				return code_article;
			}

			function stockageToFieldsV2(){
				var referenceANSSI = document.title;
				if(GM_getValue(referenceANSSI+".vecteurV2")) {
					document.getElementById('lock_v2').checked = false;
					update_options(GM_getValue(referenceANSSI+".vecteurV2"));
					// lock v2
					document.getElementById('lock_v2').checked = true;
				}
				if(GM_getValue(referenceANSSI+".CVEv2")) document.getElementById("refCVE_vecteur_v2").value = GM_getValue(referenceANSSI+".CVEv2");
				if(GM_getValue(referenceANSSI+".vecteurV2Source")) document.getElementById("refCVE_vecteur_v2_source").value = GM_getValue(referenceANSSI+".vecteurV2Source");
				if(GM_getValue(referenceANSSI+".refCVE_v2_NVDpublishDate")) document.getElementById("refCVE_v2_NVDpublishDate").value = GM_getValue(referenceANSSI+".refCVE_v2_NVDpublishDate");
				if(GM_getValue(referenceANSSI+".refCVE_v2_NVDmodifiedDate")) document.getElementById("refCVE_v2_NVDmodifiedDate").value = GM_getValue(referenceANSSI+".refCVE_v2_NVDmodifiedDate");
				if(GM_getValue(referenceANSSI+".refCVE_v2_NVDsource")) document.getElementById("refCVE_v2_NVDsource").value = GM_getValue(referenceANSSI+".refCVE_v2_NVDsource");
			}
			function stockageToFieldsV3(){
				var referenceANSSI = document.title;
				if(GM_getValue(referenceANSSI+".vecteurV3")) {
					document.getElementById('lock_v3').checked = false;
					update_options(GM_getValue(referenceANSSI+".vecteurV3"));
				}
				if(GM_getValue(referenceANSSI+".vecteurV2") || GM_getValue(referenceANSSI+".vecteurV3")) {
					// unlock
					//document.getElementById('lock_v2').checked = false;
					//document.getElementById('lock_v3').checked = false;

				}
				if(GM_getValue(referenceANSSI+".CVEv3")) document.getElementById("refCVE_vecteur_v3").value = GM_getValue(referenceANSSI+".CVEv3");
				if(GM_getValue(referenceANSSI+".vecteurV3Source")) document.getElementById("refCVE_vecteur_v3_source").value = GM_getValue(referenceANSSI+".vecteurV3Source");
				if(GM_getValue(referenceANSSI+".refCVE_v3_NVDpublishDate")) document.getElementById("refCVE_v3_NVDpublishDate").value = GM_getValue(referenceANSSI+".refCVE_v3_NVDpublishDate");
				if(GM_getValue(referenceANSSI+".refCVE_v3_NVDmodifiedDate")) document.getElementById("refCVE_v3_NVDmodifiedDate").value = GM_getValue(referenceANSSI+".refCVE_v3_NVDmodifiedDate");
				if(GM_getValue(referenceANSSI+".refCVE_v3_NVDsource")) document.getElementById("refCVE_v3_NVDsource").value = GM_getValue(referenceANSSI+".refCVE_v3_NVDsource");
			}

			function stockageToFields(){
				stockageToFieldsV2();
				stockageToFieldsV3();
			}

			function fieldsToStockage(){
				var referenceANSSI = document.title;
				var titreText = $("h1").text();
				titreText = titreText.substr(titreText.indexOf(" ") + 1);

				//console.log("fieldsToStockage : CVE "+document.getElementById("refCVE_vecteur_v2").value);
				//console.log(document.getElementById("refCVE_vecteur_v2"));

				GM_setValue(referenceANSSI+".titre",titreText);
				GM_setValue(referenceANSSI+".vecteurV2",document.getElementById("link_vecteur_v2").innerText);
				GM_setValue(referenceANSSI+".vecteurV3",document.getElementById("link_vecteur_v3").innerText);
				GM_setValue(referenceANSSI+".CVEv2",document.getElementById("refCVE_vecteur_v2").value);
				GM_setValue(referenceANSSI+".CVEv3",document.getElementById("refCVE_vecteur_v3").value);
				GM_setValue(referenceANSSI+".vecteurV2Source",document.getElementById("refCVE_vecteur_v2_source").value);
				GM_setValue(referenceANSSI+".vecteurV3Source",document.getElementById("refCVE_vecteur_v3_source").value);
				
				GM_setValue(referenceANSSI+".refCVE_v2_NVDpublishDate",document.getElementById("refCVE_v2_NVDpublishDate").value);
				GM_setValue(referenceANSSI+".refCVE_v2_NVDmodifiedDate",document.getElementById("refCVE_v2_NVDmodifiedDate").value);
				GM_setValue(referenceANSSI+".refCVE_v2_NVDsource",document.getElementById("refCVE_v2_NVDsource").value);
				GM_setValue(referenceANSSI+".refCVE_v3_NVDpublishDate",document.getElementById("refCVE_v3_NVDpublishDate").value);
				GM_setValue(referenceANSSI+".refCVE_v3_NVDmodifiedDate",document.getElementById("refCVE_v3_NVDmodifiedDate").value);
				GM_setValue(referenceANSSI+".refCVE_v3_NVDsource",document.getElementById("refCVE_v3_NVDsource").value);
			}

			// fonction qui anime un message, retourne un interval ID
			function waitingAnimation(messageId){
				var compteur=0;
				var compteurMax=3;
				var returnedInterval = setInterval(function intervalAnimation(){
					var message = "Chargement des Score NVD "
					for(var i=0;i<compteur;i++){
						message = message + ". ";
					}
					document.getElementById(messageId).innerText = message;
					compteur+=1;
					if(compteur>compteurMax){compteur=0;}
				}, 250);

				return returnedInterval

			}

		// FONCTIONS\graphique + alteration de page />
		// < FONCTIONS\Click
			// < FONCTION\Click\get TXT
				$(document).delegate("#txt_gen","click",function(){
					var text_article = get_article_to_string();
					// remplacer cyberwatch np par cyberwatch dr
					//text_article = text_article.replaceAll("cyberwatch.internet.np","calid-cyberwatch-veille.intradef.gouv.fr");
					text_article = text_article.replace(/cyberwatch\.internet\.np/g,"calid-cyberwatch-veille.intradef.gouv.fr");

					text_article=text_article+"\n\nversion du script d'export utilisée : "+scriptVersion;
					text_article=text_article+"\nVecteur cvss V2 ("+document.getElementById("display_score_base_v2").innerText+") CVE : "+document.getElementById("refCVE_vecteur_v2").value+" from source : "+document.getElementById("refCVE_vecteur_v2_source").value+"\n";
					text_article+=document.getElementById("link_vecteur_v2").innerText; // ajout du cartouche input

					var lines = text_article.split('\n');
					lines.splice(1,1);
					var output = lines.join('\n');

					var title = $("h1").text();
					title = title.substr(title.indexOf(" ") + 1);
					var filename = '['+document.title+'] - '+title+'.txt';

					var a = window.document.createElement('a');
					a.href = window.URL.createObjectURL(new Blob([output], {type: 'text/plain'}));
					a.download = filename;
					document.body.appendChild(a);
					a.click();
					document.body.removeChild(a);

					fieldsToStockage();
				});
			// FONCTION\Click\get TXT />

			// < FONCTION\Click\get HTML
				$(document).delegate("#html_gen","click",function(){

					//location.href = "javascript:void(update_cartouche_input());";// mise à jour de l'input box (pour eviter le cas d'un collage de code v3 avec l'attribut authentification déja changé
					var text_article = get_article_to_html();
					// remplacer cyberwatch np par cyberwatch dr
					//text_article = text_article.replaceAll("cyberwatch.internet.np","calid-cyberwatch-veille.intradef.gouv.fr");
					text_article = text_article.replace(/cyberwatch\.internet\.np/g,"calid-cyberwatch-veille.intradef.gouv.fr");

					var lines = text_article.split('\n');
					lines.splice(1,1);
					var output = lines.join('\n');

					var title = $("h1").text();
					title = title.substr(title.indexOf(" ") + 1);
					var filename = '['+document.title+'] - '+title+'.html';

					var a = window.document.createElement('a');
					a.href = window.URL.createObjectURL(new Blob([output], {type: 'text/plain'}));
					a.download = filename;
					document.body.appendChild(a);
					a.click();
					document.body.removeChild(a);

					fieldsToStockage();

				});
			// FONCTION\Click\get HTML />
		// < FONCTIONS\Selection de text
			jQuery.fn.selectText = function(){
				var doc = document
				, element = this[0]
				, range, selection
				;
				if (doc.body.createTextRange) {
					range = document.body.createTextRange();
					range.moveToElementText(element);
					range.select();
				} else if (window.getSelection) {
					selection = window.getSelection();
					range = document.createRange();
					range.selectNodeContents(element);
					selection.removeAllRanges();
					selection.addRange(range);
				}
			};
		// FONCTIONS\Selection de text />
		// FONCTIONS\Divers
			function dateUStoFR(USdateSTR){
				return ((new Date(USdateSTR)).toLocaleDateString("fr"));
			}

			function getVecteurV2fromStorageAVI(avi){
				var vecteur="";
				if(GM_getValue(avi+".vecteurV2")) {vecteur=GM_getValue(avi+".vecteurV2");}
				return vecteur ;
			}
			function getVecteurV3fromStorageAVI(avi){
				var vecteur="";
				if(GM_getValue(avi+".vecteurV3")) {vecteur=GM_getValue(avi+".vecteurV3");}
				return vecteur ;
			}
			function getSourceV2fromStorageAVI(avi){
				var vecteur="";
				if(GM_getValue(avi+".vecteurV2Source")) {vecteur=GM_getValue(avi+".vecteurV2Source");}
				return vecteur ;
			}
			function getSourceV3fromStorageAVI(avi){
				var vecteur="";
				if(GM_getValue(avi+".vecteurV3Source")) {vecteur=GM_getValue(avi+".vecteurV3Source");}
				return vecteur ;
			}
			function getCVSS_fromStorage(cveID, field=""){
				var avi = "";
				var currentKey="";
				var currentValue="";
				//console.log("AVI : ###########################");
				var allValues=GM_listValues();
				//console.log(allValues);
				for(var i=(allValues.length)-1;i>=0;i--){
					currentKey=allValues[i];
					if(currentKey.includes(field) && GM_getValue(currentKey)) {
						currentValue = GM_getValue(currentKey);
						//console.log(currentKey+" : "+GM_getValue(currentKey)+" vs "+cveID);
						if(currentValue == cveID){
							avi=currentKey.split(".")[0];
							break;
						}
					}
				}
				//console.log("trouvé : "+avi);
				return (avi);

			}

			function updateClipboard(newClip) {
				navigator.clipboard.writeText(newClip).then(function() {
				/* le presse-papier est correctement paramétré */
					console.log ("clipboard ok");
				}, function() {
				/* l'écriture dans le presse-papier a échoué */
					console.log ("clipboard NOK");
				});
			}

			function getDOMitemFromitems_withASpecificAttribValue(items, attribute, value) {
				var itemOut
				for(var i=0;i<items.length;i++){
					if((items[i]).getAttribute(attribute) == value) {
						itemOut = items[i];
						break;
					}
				}
				return itemOut;
			}

		// FONCTIONS\Divers />
	// FONCTIONS />

	// < MAIN
        // Initialisation
			make_download_txt(); // crée le bouton de téléchargement au format txt
			make_download_html(); // crée le bouton de téléchargement au format html
			make_input_cartouche_out(document.getElementsByClassName("toolbox")[0]);
			document.getElementById('lock_v2').addEventListener('change', computeCVSS,false);
			document.getElementById('lock_v3').addEventListener('change', computeCVSS,false);
			document.getElementById('v2boxFromGMstorage').addEventListener('change', updateCartoucheFromStorageOrAutoNVD,false);
			document.getElementById('v3boxFromGMstorage').addEventListener('change', updateCartoucheFromStorageOrAutoNVD,false);
            add_functions_onchange();
			make_display_cartouche_out(document.getElementsByClassName("meta-title")[0]);
            add_functions_onclick();
			stockageToFields();
			computeCVSS();


		// récupération des CVE
			var CWEs = [];
			var CVEs=[];
			var regex_CVE = /((CVE)\-([0-9]{4})\-[0-9]*)/g;
			$('.article-content li').each(function(){
				var find_cve = $(this).text();
				if (find_cve.indexOf("Référence CVE") >= 0) {

					$(this).css("position","relative");
					$(this).find('a:first').css({
						'position' : 'absolute',
						'right' : '66%'
					});

					// récupération de l'ID CVE
						find_cve = find_cve.replace("http"," http") ;
						var cve="";
						// renvoie null dans certains cas alors que cela ne devrait pas
							// cve = regex_CVE.exec(find_cve);
							// cve =(Array.isArray(cve)?cve[0]:0);
						// remplacement par :
							var a1_txt_cve_space_splitted = find_cve.split(" ");
							if (Array.isArray(a1_txt_cve_space_splitted)) {
								for (var i = 0; i < a1_txt_cve_space_splitted.length; i++) {
									//console.log("test : "+a1_txt_cve_space_splitted[i]);
									cve = regex_CVE.exec(a1_txt_cve_space_splitted[i]);
									cve =(Array.isArray(cve)?cve[0]:0);
									//console.log("temp cve : "+cve);
									if(cve) {break;}
								}
							}
					// ajout du lien cyberwatch
						//var url_cyberwatch = "https://calid-cyberwatch-veille.intradef.gouv.fr/cve_announcements/"+cve;
						var url_cyberwatch = "https://cyberwatch.internet.np/cve_announcements/"+cve;
						$(this).append("<br class = 'avoid_from_selection_but_for_html_export' /><a href='"+url_cyberwatch+"' target='_blank' style=' right: 66%;' class='only_for_html_export'>"+url_cyberwatch+"</a>");

					// création de la div avec les différents ajouts de score
						$(this).append('<div id="' + cve + '" class = "avoid_from_selection"></div>'); // avoid from selection est utilisé dans get_article_to_string pour cacher les div et ainsi pas les enregistrer dans le fichier texte généré
						$('#'+cve).css({
							'display' : 'inline-flex',
							'position' : 'relative',
							'left' : '36%'
						});


						var score_cveD = '<a href="https://www.google.com/search?q=%22'+cve+'%22" target="_blank">Google:'+cve+'</a>&nbsp;'
						score_cveD = score_cveD +'<a style="background-color:black" href=https://www.cvedetails.com/cve-details.php?cve_id='+cve+' target="_blank" id="'+cve+'_cveDetails">??</a>';

						$('#'+cve).append(score_cveD);
						$('#'+cve).append('<span id="'+cve+'_NVD" style="margin-left:20px;"> </span>');
						$('#'+cve).append('<span id="'+cve+'_vuldb"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAALYSURBVEhL3VRJaFNRFD0qDqjgRhEUEVciKLoRwYULBRFRQRExY5sEimCaEkql4iKtocMmnUQoBAlOCwcCipIIgtJCS+mmi+66y77ddIbSenz3vd+X4f+FpF14OHz+O/e8d/4b/oNvi7HtAcFgsLm5ORaLSTMcDrMZiUTi8XhTU5OIDQ0NFPlsbGzkCz2i10RlQCgUWlhYmJyclGYul9vY2EilUktLS2NjYyL29/dT7OnpGRgY4Et3d7foNVFjiUZGRlZWVvh1fJ+enp6dnfX7/fUMyGQy7MYn12Rtba1QKFCsZwAXd3l5mfMYHh5m/46ODor1DCDGx8fn5+enpqbm5uYCgQAVbszExIRUBwcHOW5XV9e/BwwNDbEnUSwWRZmZmeFmtLS0cG9GR0fX19cTiYQEZLPZJwrJZFLMNmoHRKPR1dVVdu7s7BQlnU4vLi5S4dBEPp+nKAEOSqWSmG3UDiBaW1vb29t5fnTb5+PP0dvb29fXx3k4Cj0O2EV0G64B9QJObzGwTQgBj6oYBq4A+7VlE8eqnMIYcBs4oV3l+Az8dmFBJe3Sxr84X+Wx+QtIAju018AjQJiy+tgBHE7oKMJr2mvgBCSAC4qX1Lp9svrc0d6ygCPAXsUDwEXgi9Gfaq+BE3BPCxqHgDem9AHYqUQ7gAYb/D7ROeMyuAUQl02JlEPnEZA2+gMtGHgE7AF+mupNpdgBQeC+IkfkV4v4AtinnJvwCCA+mqpPNe2Aan5Tk66Ed8B7U32omnbAW+C14VdL58zK4BHAjf1uqteV4rYHdPqNzlXlAduER8A5UyJPKcVjk/k/Fk3pqtYU3AJ4wF+a0jvzr3kE7AZ+mJKcCA0n4DFwVpGj3AJeGZ28ob1lAYfVMRMeBdqs0hltV3AC3PjM5apwY6biOvII4GXHO0P+YYF3AO+l58BB7TWIAPFycq2i6s6qtALHq8xC3th3gZPa9Z8A+AMBzN5j3/tukQAAAABJRU5ErkJggg==" width="22" height="22" style="margin: 0 0 3px 20px"><form id="search_vuldb_'+cve+'" action="https://vuldb.com/?search#footerdetails" method="post" target="_blank"><input name="search" type="hidden" value="'+cve+'"></form></span>');
						$('#'+cve).append('<span id="'+cve+'_sourceclear" style="margin-left:20px;"> <a href="https://www.sourceclear.com/vulnerability-database/search#query='+cve+' type:vulnerability" target="_blank"><img src="https://www.sourceclear.com/vulnerability-database/images/vcfavicon.ico" width="22" height="22"></a> </span>');
						$('#'+cve).append('<span id="'+cve+'_circl" style="margin-left:20px;"> <a href="https://cve.circl.lu/cve/'+cve+'" target="_blank"><img src="https://cve.circl.lu/static/img/favicon.ico" width="22" height="22"></a> </span>');
						$("#"+cve+"_vuldb").mousedown(function(event) {
							switch (event.which) {
								case 1: // Left
									$('#'+cve+'_vuldb').children(":first").css({
										'outline-style' : 'solid',
										'outline-width' : '3px',
										'outline-color' : '#2860ff'
									});
									$(document).delegate("#"+cve+"_vuldb","click",function(){
										$('#search_vuldb_'+cve).submit();
									});
									break;
								case 2: // Middle
									$('#'+cve+'_vuldb').children(":first").removeAttr('style');
									$('#'+cve+'_vuldb').children(":first").css("margin","0 0 3px 20px");
									break;
								case 3: // Right
									$('#'+cve+'_vuldb').children(":first").css("filter","invert(1)");
									break;
							}
						});


						//getCyberwatchScore(cve);
						get_score(cve);
						CVEs.push(cve);
						//get_vuldb(cve[2]);
				}

			});

       // ajout du tableau des CVE à gauche du content
            make_div_Left_content(document.getElementById('header'),CVEs);
            compteurCVEtoLoad = CVEs.length;
            compteurCVEloaded = 0;
            var intervalAnimation = waitingAnimation("pProcessMessage"); // pour exemple d'animation, utiliser l'avis https://www.cert.ssi.gouv.fr/avis/CERTFR-2022-AVI-615/ et commenter le test d'abscence de CVE
            for(var j=0;j<CVEs.length;j++){ get_NVD(CVEs[j], intervalAnimation);}
            add_functions_onclick_arrayOfCVE(CVEs);
            if(CVEs.length<=0) {
                clearInterval(intervalAnimation);
                document.getElementById("pProcessMessage").innerText = "Pas de CVE"
                document.getElementById("tableCVEs_THs").style.color = "green";
                document.getElementById("refCVE_vecteur_v2_source").value = "Pas de CVE"
                document.getElementById("refCVE_vecteur_v3_source").value = "Pas de CVE"
            }


        if(CVEs.length==1){
            document.getElementById('refCVE_vecteur_v2').value = CVEs[0];
            document.getElementById('refCVE_vecteur_v3').value = CVEs[0];
        }
		getCVSS_fromStorage("CVE-2022-1012", "CVEv2");
	// MAIN />
})();
长期地址
遇到问题?请前往 GitHub 提 Issues。