Abstract

Il nostro database, estrapolato dal sito https://www.statslectures.com/r-scripts-datasets, prende a confronto una terapia innovativa per ridurre la pressione arteriosa sistolica (PAS) contro placebo (assenza di farmaco). La pressione è definita sistolica quando è costantemente superiore a 120 mmHg ma inferiore a 140 mmHg. Il proposito di questo elaborato è valutare l’efficacia di un nuovo farmaco anti-ipertensivo prima dell’immissione in commercio. L’ipotesi zero è che non ci sia differenza tra i trattamenti. Utilizzeremo il test ANOVA per confrontare i due gruppi di dati ottenuti dall’esperimento, confrontando la variabilità interna a questi gruppi con la variabilità tra i gruppi.

INTRODUZIONE:

Prendendo a riferimento 25 osservazioni di pazienti, di cui si riconosce il limite del campionamento ridotto, si confronta la riduzione media della PAS (variabile dipendente - v_dip) in relazione all’utilizzo del tipo di terapia (variabile indipendente_v_indip)

Una volta inserito il database nel sistema di R, assegnati i vettori “PAS” e “TYPE”, e caratterizzati i livelli del fattore, si va a delineare il boxplot come segue:

plot(PAS~TYPE, col = c("blue", 602, "turquoise"))

Già da questo boxplot iniziale si può vedere una differenza tra le medie di PAS in chi ha assunto il farmaco e chi no; la media di P (cioè coloro che hanno assunto il placebo) è di pochissimo sopra lo zero. la media di A (cioè coloro che hanno assunto il farmaco sperimentale) si avvicina ma non raggiunge il valore 10. Una osservazione è fuori dall’intervallo di confidenza del grafico in colore blu. Il che è un primo segnale sull’andamento di questo studio.

Proseguo con la verifica delle assunzioni di ANOVA, cioè : 1) La variabile dipendente quantitativa deve avere una distribuzione Normale in tutte le popolazioni corrispondenti ai gruppi campionati; 2) Le varianze in tutte le popolazioni corrispondenti ai gruppi campionati devono essere uguali o non devono contenere valori anomali;

boxplot(PAS, main="Boxplot variabile effetto", col = "green")

Per compredere se la variabile dipendente quantitativa si distribuisce come una Normale possiamo avvalerci sia dell’utilizzo di metodi grafiCi e differenti test statistici. Il primo grafico necessita del calcolo dei residui standardizzati, che devono ricadere nell’intervallo +/- 1.96, ossia nell’area di probabilità +/- 0.025, in quanto il test è di tipo bidirezionale, con alfa=0.05. In altre parole, dovremmo avere tutte le osservazioni disposte casualmente ma nel intervallo delineato, invece abbiamo un valore fuori dall’intervallo il che metterebbe in discussione l’applicabilità del test.


plot(resid, ylim=c(-3,3), main = "Residui standardizzati",
     xlab = "Osservazioni", ylab = "Residui")
abline(h=-1.96, col="red")
abline(h=1.96, col="red")

La realizzazione del grafico quantile-quantile plot non chiarisce ancora il nostro dubbio. La retta, definita intercetta, ossia il valore che assume la y quando la x è uguale a 0 ed il coefficiente di regressione, che esprime la variazione della y data una variazione unitaria della x. il calcolo dell’intercetta e del suo coefficiente angolare effettuato da R ci restituisce un grafico che non si discosta dalle attese, la retta attraversa il più vicino possibile i punti osservati.


qqnorm(PAS, main="Normalità dei dati", pch=20, col="gray")      
qqline(PAS, col="darkblue")

Il grafico raffigura una bisettrice attorno a cui sono presenti i punti del nostro data, salvo eccezioni in 3 osservazioni inferiori al primo quantile e 3 osservazioni nel quarto quantile.

I test grafici non ci hanno restituito con sicurezza la prima assunzione di ANOVA. Per dimostrare la nostra ipotesi ci siamo avvalsi del test non parametrico di *Shpariro-Wilk**.


shapiro.test(PAS)

    Shapiro-Wilk normality test

data:  PAS
W = 0.96797, p-value = 0.5941

Dall’output ottenuto il valore di W è molto vicino ad 1. Inoltre, partendo dall’assunto che l’ipotesi nulla sia che i dati seguono una distribuzione normale, con p-value > 0.05, posso accettare l’ipotesi nulla di normalità dei dati.

Per verificare il secondo assunto, Le varianze in tutte le popolazioni corrispondenti ai gruppi campionati devono essere uguali o non devono contenere valori anomali proseguo con i test di Levene e Bartlett.

leveneTest(PAS ~ TYPE, data = ANOVA.FARMACO)
Levene's Test for Homogeneity of Variance (center = median)
      Df F value Pr(>F)
group  1  0.0456 0.8328
      23               

I gradi di libertà indicati sono 1 e 23, il valore di P è 0.8328. Quindi l’ipotesi di partenza è confermata.
Di seguito invece ho utilizzato il test di Bartlett per verificare se k campioni provengono da popolazioni con varianze uguali. Le varianze uguali tra le popolazioni sono chiamate omoscedasticità o omogeneità delle varianze.In questo caso, otteniamo p-value > 0.05. Quindi accettiamo (o per meglio dire, non rifiutiamo) l’ipotesi nulla: le varianze sono omogenee. Il test di ANOVA può essere utilizzato.

Inseriamo su R il comando di calcolo di ANOVA sul nostro dataset.

aov_1w
Call:
   aov(formula = PAS ~ TYPE, data = ANOVA.FARMACO)

Terms:
                     TYPE Residuals
Sum of Squares   190.4067 1487.4333
Deg. of Freedom         1        23

Residual standard error: 8.041829
Estimated effects may be unbalanced
summary(aov_1w)
            Df Sum Sq Mean Sq F value Pr(>F)  
TYPE         1  190.4  190.41   2.944 0.0996 .
Residuals   23 1487.4   64.67                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Il risultato della summary fornisce un dato di p-value di 0.0996, confermando con margine minimo l’ipotesi nulla cioè che non ci sia differenza tra i trattamenti e che il farmaco non abbia effetto rispetto al placebo.

Effettuiamo il test HSD di Tukey, per capire su quale gruppo esista o meno la differenza tra le medie:

hsd
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = PAS ~ TYPE, data = ANOVA.FARMACO)

$TYPE
         diff       lwr      upr     p adj
P-A -5.633333 -12.42487 1.158199 0.0996264

L’output evidenzia i due intervalli di confidenza dei valori tra le differenze delle medie. Stabilendo un valore di alpha = 0.05 è possibile affermare che la sicurezza di ottenere un valore di differenza tra le medie compreso negli intervalli di confidenza pari a 1-alpha.

plot(hsd)

Il grafico realizzato consente di visualizzare l’intervallo di confidenza all’interno del quale si pone lo 0 come variabile auspicabile; nel nostro caso, lo 0 rientra nell’intervallo plausibile. Non permette di sottolineare alcuna differenza tra le medie. Considerando l’ANOVA come generalizzazione del modello di regressione, esplicitiamo dunque la regressione (reg.lm)

summary(reg.lm)

Call:
lm(formula = PAS ~ TYPE, data = ANOVA.FARMACO)

Residuals:
     Min       1Q   Median       3Q      Max 
-17.3333  -5.7000  -0.3333   5.3000  12.6667 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)    9.333      2.076   4.495 0.000164 ***
TYPEP         -5.633      3.283  -1.716 0.099626 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 8.042 on 23 degrees of freedom
Multiple R-squared:  0.1135,    Adjusted R-squared:  0.07494 
F-statistic: 2.944 on 1 and 23 DF,  p-value: 0.09963

calcoliamo l’intercetta del campione:

aov_1w$coefficients
(Intercept)       TYPEP 
   9.333333   -5.633333 

CONCLUSIONI

Il farmaco ha una tendenza non statisticamente significativa. l’“ipotesi zero”, cioè che il farmaco e il placebo non avessero influenza sulle condizioni dei pazienti è confermata. Il valore p-value è di poco superiore a 0.05 il chè darebbe un margine alla considerazione della ipotesi che il farmaco abbia effetto positivo, ipotesi che potrebbe essere confutata allargando a più di 25 pazienti il campione statistico su cui testarlo.

Pierluigi Mancarella

LS0tDQp0aXRsZTogIkFOT1ZBIC0gQkxPT0QgUFJFU1NVUkUiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KQWJzdHJhY3QNCg0KSWwgbm9zdHJvIGRhdGFiYXNlLCBlc3RyYXBvbGF0byBkYWwgc2l0byAqImh0dHBzOi8vd3d3LnN0YXRzbGVjdHVyZXMuY29tL3Itc2NyaXB0cy1kYXRhc2V0cyIqLCBwcmVuZGUgYSBjb25mcm9udG8gdW5hIHRlcmFwaWEgaW5ub3ZhdGl2YSBwZXIgcmlkdXJyZSBsYSBwcmVzc2lvbmUgYXJ0ZXJpb3NhIHNpc3RvbGljYSAoUEFTKSBjb250cm8gcGxhY2VibyAoYXNzZW56YSBkaSBmYXJtYWNvKS4gTGEgcHJlc3Npb25lIMOoIGRlZmluaXRhIHNpc3RvbGljYSBxdWFuZG8gw6ggY29zdGFudGVtZW50ZSBzdXBlcmlvcmUgYSAxMjAgbW1IZyBtYSBpbmZlcmlvcmUgYSAxNDAgbW1IZy4NCklsIHByb3Bvc2l0byBkaSBxdWVzdG8gZWxhYm9yYXRvIMOoIHZhbHV0YXJlIGwnZWZmaWNhY2lhIGRpIHVuIG51b3ZvIGZhcm1hY28gYW50aS1pcGVydGVuc2l2byBwcmltYSBkZWxsJ2ltbWlzc2lvbmUgaW4gY29tbWVyY2lvLg0KTCdpcG90ZXNpIHplcm8gw6ggY2hlIG5vbiBjaSBzaWEgZGlmZmVyZW56YSB0cmEgaSB0cmF0dGFtZW50aS4gVXRpbGl6emVyZW1vIGlsIHRlc3QgQU5PVkEgcGVyIGNvbmZyb250YXJlIGkgZHVlIGdydXBwaSBkaSBkYXRpIG90dGVudXRpIGRhbGwnZXNwZXJpbWVudG8sIGNvbmZyb250YW5kbyBsYSB2YXJpYWJpbGl0w6AgaW50ZXJuYSBhIHF1ZXN0aSBncnVwcGkgY29uIGxhIHZhcmlhYmlsaXTDoCB0cmEgaSBncnVwcGkuDQoNCg0KYGBge3J9DQpBTk9WQS5GQVJNQUNPDQoNCmBgYA0KDQoNCklOVFJPRFVaSU9ORToNCg0KUHJlbmRlbmRvIGEgcmlmZXJpbWVudG8gMjUgb3NzZXJ2YXppb25pIGRpIHBhemllbnRpLCBkaSBjdWkgc2kgcmljb25vc2NlIGlsIGxpbWl0ZSBkZWwgY2FtcGlvbmFtZW50byByaWRvdHRvLCBzaSBjb25mcm9udGEgbGEgcmlkdXppb25lIG1lZGlhIGRlbGxhIFBBUyAodmFyaWFiaWxlIGRpcGVuZGVudGUgLSAqKnZfZGlwKiopIGluIHJlbGF6aW9uZSBhbGwndXRpbGl6em8gZGVsIHRpcG8gZGkgdGVyYXBpYSAodmFyaWFiaWxlIGluZGlwZW5kZW50ZV8qKnZfaW5kaXAqKikNCg0KVW5hIHZvbHRhIGluc2VyaXRvIGlsIGRhdGFiYXNlIG5lbCBzaXN0ZW1hIGRpIFIsIGFzc2VnbmF0aSBpIHZldHRvcmkgIlBBUyIgZSAiVFlQRSIsIGUgY2FyYXR0ZXJpenphdGkgaSBsaXZlbGxpIGRlbCBmYXR0b3JlLCBzaSB2YSBhIGRlbGluZWFyZSBpbCBib3hwbG90IGNvbWUgc2VndWU6DQoNCmBgYHtyfQ0KcGxvdChQQVN+VFlQRSwgY29sID0gYygiYmx1ZSIsIDYwMiwgInR1cnF1b2lzZSIpKQ0KYGBgDQoNCkdpw6AgZGEgcXVlc3RvIGJveHBsb3QgaW5pemlhbGUgc2kgcHXDsiB2ZWRlcmUgdW5hIGRpZmZlcmVuemEgdHJhIGxlIG1lZGllIGRpIFBBUyBpbiBjaGkgaGEgYXNzdW50byBpbCBmYXJtYWNvIGUgY2hpIG5vOyBsYSBtZWRpYSBkaSBQIChjaW/DqCBjb2xvcm8gY2hlIGhhbm5vIGFzc3VudG8gaWwgcGxhY2Vibykgw6ggZGkgcG9jaGlzc2ltbyBzb3ByYSBsbyB6ZXJvLiBsYSBtZWRpYSBkaSBBIChjaW/DqCBjb2xvcm8gY2hlIGhhbm5vIGFzc3VudG8gaWwgZmFybWFjbyBzcGVyaW1lbnRhbGUpIHNpIGF2dmljaW5hIG1hIG5vbiByYWdnaXVuZ2UgaWwgdmFsb3JlIDEwLiBVbmEgb3NzZXJ2YXppb25lIMOoIGZ1b3JpIGRhbGwnaW50ZXJ2YWxsbyBkaSBjb25maWRlbnphIGRlbCBncmFmaWNvIGluIGNvbG9yZSBibHUuIElsIGNoZSDDqCB1biBwcmltbyBzZWduYWxlIHN1bGwnYW5kYW1lbnRvIGRpIHF1ZXN0byBzdHVkaW8uIA0KDQpQcm9zZWd1byBjb24gbGEgdmVyaWZpY2EgZGVsbGUgYXNzdW56aW9uaSBkaSBBTk9WQSwgY2lvw6ggOg0KMSkgIExhIHZhcmlhYmlsZSBkaXBlbmRlbnRlIHF1YW50aXRhdGl2YSBkZXZlIGF2ZXJlIHVuYSBkaXN0cmlidXppb25lIE5vcm1hbGUgaW4gdHV0dGUgbGUgcG9wb2xhemlvbmkgY29ycmlzcG9uZGVudGkgYWkgZ3J1cHBpIGNhbXBpb25hdGk7DQoyKSAgTGUgdmFyaWFuemUgaW4gdHV0dGUgbGUgcG9wb2xhemlvbmkgY29ycmlzcG9uZGVudGkgYWkgZ3J1cHBpIGNhbXBpb25hdGkgZGV2b25vIGVzc2VyZSB1Z3VhbGkgbyBub24gZGV2b25vIGNvbnRlbmVyZSB2YWxvcmkgYW5vbWFsaTsNCg0KYGBge3J9DQpib3hwbG90KFBBUywgbWFpbj0iQm94cGxvdCB2YXJpYWJpbGUgZWZmZXR0byIsIGNvbCA9ICJncmVlbiIpDQoNCmBgYA0KUGVyIGNvbXByZWRlcmUgc2UgKipsYSB2YXJpYWJpbGUgZGlwZW5kZW50ZSBxdWFudGl0YXRpdmEgc2kgZGlzdHJpYnVpc2NlIGNvbWUgdW5hIE5vcm1hbGUqKiBwb3NzaWFtbyBhdnZhbGVyY2kgc2lhIGRlbGwndXRpbGl6em8gZGkgbWV0b2RpIGdyYWZpQ2kgZSBkaWZmZXJlbnRpIHRlc3Qgc3RhdGlzdGljaS4gSWwgcHJpbW8gZ3JhZmljbyBuZWNlc3NpdGEgZGVsIGNhbGNvbG8gZGVpIHJlc2lkdWkgc3RhbmRhcmRpenphdGksIGNoZSBkZXZvbm8gcmljYWRlcmUgbmVsbCdpbnRlcnZhbGxvICsvLSAxLjk2LCBvc3NpYSBuZWxsJ2FyZWEgZGkgcHJvYmFiaWxpdMOgICsvLSAwLjAyNSwgaW4gcXVhbnRvIGlsIHRlc3Qgw6ggZGkgdGlwbyBiaWRpcmV6aW9uYWxlLCBjb24gYWxmYT0wLjA1LiBJbiBhbHRyZSBwYXJvbGUsIGRvdnJlbW1vIGF2ZXJlIHR1dHRlIGxlIG9zc2VydmF6aW9uaSBkaXNwb3N0ZSBjYXN1YWxtZW50ZSBtYSBuZWwgaW50ZXJ2YWxsbyBkZWxpbmVhdG8sIGludmVjZSBhYmJpYW1vIHVuIHZhbG9yZSBmdW9yaSBkYWxsJ2ludGVydmFsbG8gaWwgY2hlIG1ldHRlcmViYmUgaW4gZGlzY3Vzc2lvbmUgbCdhcHBsaWNhYmlsaXTDoCBkZWwgdGVzdC4gDQoNCmBgYHtyfQ0KDQpwbG90KHJlc2lkLCB5bGltPWMoLTMsMyksIG1haW4gPSAiUmVzaWR1aSBzdGFuZGFyZGl6emF0aSIsDQogICAgIHhsYWIgPSAiT3NzZXJ2YXppb25pIiwgeWxhYiA9ICJSZXNpZHVpIikNCmFibGluZShoPS0xLjk2LCBjb2w9InJlZCIpDQphYmxpbmUoaD0xLjk2LCBjb2w9InJlZCIpDQoNCmBgYA0KTGEgcmVhbGl6emF6aW9uZSBkZWwgZ3JhZmljbyBxdWFudGlsZS1xdWFudGlsZSBwbG90IG5vbiBjaGlhcmlzY2UgYW5jb3JhIGlsIG5vc3RybyBkdWJiaW8uIExhIHJldHRhLCBkZWZpbml0YSBpbnRlcmNldHRhLCBvc3NpYSBpbCB2YWxvcmUgY2hlIGFzc3VtZSBsYSB5IHF1YW5kbyBsYSB4IMOoIHVndWFsZSBhIDAgZWQgaWwgY29lZmZpY2llbnRlIGRpIHJlZ3Jlc3Npb25lLCBjaGUgZXNwcmltZSBsYSB2YXJpYXppb25lIGRlbGxhIHkgZGF0YSB1bmEgdmFyaWF6aW9uZSB1bml0YXJpYSBkZWxsYSB4LiBpbCBjYWxjb2xvIGRlbGwnaW50ZXJjZXR0YSBlIGRlbCBzdW8gY29lZmZpY2llbnRlIGFuZ29sYXJlIGVmZmV0dHVhdG8gZGEgUiBjaSByZXN0aXR1aXNjZSB1biBncmFmaWNvIGNoZSBub24gc2kgZGlzY29zdGEgZGFsbGUgYXR0ZXNlLCBsYSByZXR0YSBhdHRyYXZlcnNhIGlsIHBpw7kgdmljaW5vIHBvc3NpYmlsZSBpIHB1bnRpIG9zc2VydmF0aS4gDQoNCmBgYHtyfQ0KDQpxcW5vcm0oUEFTLCBtYWluPSJOb3JtYWxpdMOgIGRlaSBkYXRpIiwgcGNoPTIwLCBjb2w9ImdyYXkiKSAgICAgIA0KcXFsaW5lKFBBUywgY29sPSJkYXJrYmx1ZSIpDQoNCmBgYA0KSWwgZ3JhZmljbyByYWZmaWd1cmEgdW5hIGJpc2V0dHJpY2UgYXR0b3JubyBhIGN1aSBzb25vIHByZXNlbnRpIGkgcHVudGkgZGVsIG5vc3RybyBkYXRhLCBzYWx2byBlY2NlemlvbmkgaW4gMyBvc3NlcnZhemlvbmkgaW5mZXJpb3JpIGFsIHByaW1vIHF1YW50aWxlIGUgMyBvc3NlcnZhemlvbmkgbmVsIHF1YXJ0byBxdWFudGlsZS4gDQoNCkkgdGVzdCBncmFmaWNpIG5vbiBjaSBoYW5ubyByZXN0aXR1aXRvIGNvbiBzaWN1cmV6emEgbGEgcHJpbWEgYXNzdW56aW9uZSBkaSBBTk9WQS4gUGVyIGRpbW9zdHJhcmUgbGEgbm9zdHJhIGlwb3Rlc2kgY2kgc2lhbW8gYXZ2YWxzaSBkZWwgdGVzdCBub24gcGFyYW1ldHJpY28gZGkgKlNocGFyaXJvLVdpbGsqKi4gDQoNCmBgYHtyfQ0KDQpzaGFwaXJvLnRlc3QoUEFTKQ0KDQpgYGANCkRhbGwnb3V0cHV0IG90dGVudXRvIGlsIHZhbG9yZSBkaSBXIMOoIG1vbHRvIHZpY2lubyBhZCAxLiBJbm9sdHJlLCBwYXJ0ZW5kbyBkYWxsJ2Fzc3VudG8gY2hlIGwnaXBvdGVzaSBudWxsYSBzaWEgY2hlIGkgZGF0aSBzZWd1b25vIHVuYSBkaXN0cmlidXppb25lIG5vcm1hbGUsIGNvbiBwLXZhbHVlID4gMC4wNSwgcG9zc28gYWNjZXR0YXJlIGwnaXBvdGVzaSBudWxsYSBkaSBub3JtYWxpdMOgIGRlaSBkYXRpLiANCg0KUGVyIHZlcmlmaWNhcmUgaWwgc2Vjb25kbyBhc3N1bnRvLCAqKkxlIHZhcmlhbnplIGluIHR1dHRlIGxlIHBvcG9sYXppb25pIGNvcnJpc3BvbmRlbnRpIGFpIGdydXBwaSBjYW1waW9uYXRpIGRldm9ubyBlc3NlcmUgdWd1YWxpIG8gbm9uIGRldm9ubyBjb250ZW5lcmUgdmFsb3JpIGFub21hbGkqKiBwcm9zZWd1byBjb24gaSB0ZXN0IGRpIExldmVuZSBlIEJhcnRsZXR0Lg0KYGBge3J9DQpsZXZlbmVUZXN0KFBBUyB+IFRZUEUsIGRhdGEgPSBBTk9WQS5GQVJNQUNPKQ0KDQpgYGANCkkgZ3JhZGkgZGkgbGliZXJ0w6AgaW5kaWNhdGkgc29ubyAxIGUgMjMsIGlsIHZhbG9yZSBkaSBQIMOoIDAuODMyOC4gUXVpbmRpIGwnaXBvdGVzaSBkaSBwYXJ0ZW56YSDDqCBjb25mZXJtYXRhLiAgDQpEaSBzZWd1aXRvIGludmVjZSBobyB1dGlsaXp6YXRvIGlsIHRlc3QgZGkgQmFydGxldHQgIHBlciB2ZXJpZmljYXJlIHNlIGsgY2FtcGlvbmkgcHJvdmVuZ29ubyBkYSBwb3BvbGF6aW9uaSBjb24gdmFyaWFuemUgdWd1YWxpLiBMZSB2YXJpYW56ZSB1Z3VhbGkgdHJhIGxlIHBvcG9sYXppb25pIHNvbm8gY2hpYW1hdGUgb21vc2NlZGFzdGljaXTDoCBvIG9tb2dlbmVpdMOgIGRlbGxlIHZhcmlhbnplLkluIHF1ZXN0byBjYXNvLCBvdHRlbmlhbW8gcC12YWx1ZSA+IDAuMDUuIFF1aW5kaSBhY2NldHRpYW1vIChvIHBlciBtZWdsaW8gZGlyZSwgbm9uIHJpZml1dGlhbW8pIGwnaXBvdGVzaSBudWxsYTogbGUgdmFyaWFuemUgc29ubyBvbW9nZW5lZS4gSWwgdGVzdCBkaSBBTk9WQSBwdcOyIGVzc2VyZSB1dGlsaXp6YXRvLiANCg0KSW5zZXJpYW1vIHN1IFIgaWwgY29tYW5kbyBkaSBjYWxjb2xvIGRpIEFOT1ZBIHN1bCBub3N0cm8gZGF0YXNldC4gDQoNCmBgYHtyfQ0KYW92XzF3DQpgYGANCmBgYHtyfQ0Kc3VtbWFyeShhb3ZfMXcpDQpgYGANCklsIHJpc3VsdGF0byBkZWxsYSBzdW1tYXJ5IGZvcm5pc2NlIHVuIGRhdG8gZGkgcC12YWx1ZSBkaSAwLjA5OTYsIGNvbmZlcm1hbmRvIGNvbiBtYXJnaW5lIG1pbmltbyBsJ2lwb3Rlc2kgbnVsbGEgY2lvw6ggY2hlIG5vbiBjaSBzaWEgZGlmZmVyZW56YSB0cmEgaSB0cmF0dGFtZW50aSBlIGNoZSBpbCBmYXJtYWNvIG5vbiBhYmJpYSBlZmZldHRvIHJpc3BldHRvIGFsIHBsYWNlYm8uIA0KDQpFZmZldHR1aWFtbyBpbCB0ZXN0IEhTRCBkaSBUdWtleSwgcGVyIGNhcGlyZSBzdSBxdWFsZSBncnVwcG8gZXNpc3RhIG8gbWVubyBsYSBkaWZmZXJlbnphIHRyYSBsZSBtZWRpZToNCg0KYGBge3J9DQpoc2QNCmBgYA0KTCdvdXRwdXQgZXZpZGVuemlhIGkgZHVlIGludGVydmFsbGkgZGkgY29uZmlkZW56YSBkZWkgdmFsb3JpIHRyYSBsZSBkaWZmZXJlbnplIGRlbGxlIG1lZGllLiBTdGFiaWxlbmRvIHVuIHZhbG9yZSBkaSBhbHBoYSA9IDAuMDUgw6ggcG9zc2liaWxlIGFmZmVybWFyZSBjaGUgbGEgc2ljdXJlenphIGRpIG90dGVuZXJlIHVuIHZhbG9yZSBkaSBkaWZmZXJlbnphIHRyYSBsZSBtZWRpZSBjb21wcmVzbyBuZWdsaSBpbnRlcnZhbGxpIGRpIGNvbmZpZGVuemEgcGFyaSBhIDEtYWxwaGEuDQoNCmBgYHtyfQ0KcGxvdChoc2QpDQoNCmBgYA0KSWwgZ3JhZmljbyByZWFsaXp6YXRvIGNvbnNlbnRlIGRpIHZpc3VhbGl6emFyZSBsJ2ludGVydmFsbG8gZGkgY29uZmlkZW56YSBhbGwnaW50ZXJubyBkZWwgcXVhbGUgc2kgcG9uZSBsbyAwIGNvbWUgdmFyaWFiaWxlIGF1c3BpY2FiaWxlOyBuZWwgbm9zdHJvIGNhc28sIGxvIDAgcmllbnRyYSBuZWxsJ2ludGVydmFsbG8gcGxhdXNpYmlsZS4gTm9uIHBlcm1ldHRlIGRpIHNvdHRvbGluZWFyZSBhbGN1bmEgZGlmZmVyZW56YSB0cmEgbGUgbWVkaWUuIA0KQ29uc2lkZXJhbmRvIGwnQU5PVkEgY29tZSBnZW5lcmFsaXp6YXppb25lIGRlbCBtb2RlbGxvIGRpIHJlZ3Jlc3Npb25lLCBlc3BsaWNpdGlhbW8gZHVucXVlIGxhIHJlZ3Jlc3Npb25lIChyZWcubG0pDQpgYGB7cn0NCnN1bW1hcnkocmVnLmxtKQ0KDQpgYGANCg0KY2FsY29saWFtbyBsJ2ludGVyY2V0dGEgZGVsIGNhbXBpb25lOg0KYGBge3J9DQphb3ZfMXckY29lZmZpY2llbnRzDQoNCmBgYA0KQ09OQ0xVU0lPTkkNCg0KSWwgZmFybWFjbyBoYSB1bmEgdGVuZGVuemEgbm9uIHN0YXRpc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZhLiBs4oCZ4oCcaXBvdGVzaSB6ZXJv4oCdLCBjaW/DqCBjaGUgaWwgZmFybWFjbyBlIGlsIHBsYWNlYm8gbm9uIGF2ZXNzZXJvIGluZmx1ZW56YSBzdWxsZSBjb25kaXppb25pIGRlaSBwYXppZW50aSDDqCBjb25mZXJtYXRhLiBJbCB2YWxvcmUgcC12YWx1ZSDDqCBkaSBwb2NvIHN1cGVyaW9yZSBhIDAuMDUgaWwgY2jDqCBkYXJlYmJlIHVuIG1hcmdpbmUgYWxsYSBjb25zaWRlcmF6aW9uZSBkZWxsYSBpcG90ZXNpIGNoZSBpbCBmYXJtYWNvIGFiYmlhIGVmZmV0dG8gcG9zaXRpdm8sIGlwb3Rlc2kgY2hlIHBvdHJlYmJlIGVzc2VyZSBjb25mdXRhdGEgYWxsYXJnYW5kbyBhIHBpw7kgZGkgMjUgcGF6aWVudGkgaWwgY2FtcGlvbmUgc3RhdGlzdGljbyBzdSBjdWkgdGVzdGFybG8uICANCg0KUGllcmx1aWdpIE1hbmNhcmVsbGENCg==