Função xR1 com especificações para média e desvio-padrão
Função xR2 sem especificações para média e desvio-padrão
Funções
# m = número de amostras observadas.
# n = número de observações de cada amostra.
# y = vetor com as observações, ordenadas por amostra, da variável observada.
# mi = especificação para a média do processo.
# sigma = especificação para o desvio-padrão do processo.
xR1=function(m,n,y,mi,sigma){
if (n>1) {
amplit=numeric(m)
mat=matrix(y,m,n,byrow=T)
media=apply(mat,1,mean)
for (i in 1:m) {
amplit[i]=max(mat[i,])-min(mat[i,])}
}
else {
amplit=numeric(m-1)
media=y
for (i in 2:m)
amplit[i-1]=sqrt((y[i]-y[i-1])^2)
}
d2=c(1.1296,1.6918,2.0535,2.3248,2.5404,2.7074, 2.8501,2.9677,3.0737,3.1696)
d3=c(.8541,.8909,.8800,.8674,.8508, .8326,.8209,.8102,.7978,.7890)
LIC1=mi-3*sigma/sqrt(n)
LSC1=mi+3*sigma/sqrt(n)
if(n>1) {
LIC2=d2[n-1]*sigma-3*d3[n-1]*sigma
LSC2=d2[n-1]*sigma+3*d3[n-1]*sigma
if (LIC2 < 0)
LIC2=0
} else {
LIC2=d2[n]*sigma-3*d3[n]*sigma
LSC2=d2[n]*sigma+3*d3[n]*sigma
if (LIC2 < 0)
LIC2=0
}
par(mfrow=c(2,1))
amostra1=matrix(rep(seq(1,m),4),m,4,byrow=F)
if (n>1) amostra2=amostra1 else amostra2=amostra1[-1,]
xbar=cbind(rep(mi,m),rep(LIC1,m),rep(LSC1,m),media)
if (n>1) {
rbar=cbind(rep(sigma,m),rep(LIC2,m),rep(LSC2,m),amplit)
}
else rbar=cbind(rep(sigma,m-1),rep(LIC2,m-1),
rep(LSC2,m-1),amplit)
matplot(amostra2,rbar,type="o",ylab="Amplitude",
col=c("black","red","red","blue"),
ylim=c(min(rbar),max(rbar)),
xlab="Amostras",main="Gráfico R",pch=20, lty=1, lwd=2)
matplot(amostra1,xbar,type="o",ylab="Média",xlab="Amostras",
main=expression(paste("Gráfico " * bar(x))),col=c("black","red","red", "blue"),ylim=c(min(xbar),max(xbar)),pch=20, lty=1, lwd=2)
out=rbind(round(xbar[1,1:3],2),round(rbar[1,1:3],2))
colnames(out)=c("Referência","LIC","LSC")
out
}
xR2=function(m,n,y){
if (n>1) {
amplit=numeric(m)
mat=matrix(y,m,n,byrow=T)
media=apply(mat,1,mean)
for (i in 1:m)
amplit[i]=max(mat[i,])-min(mat[i,])
x2barras=mean(media)
Rbarra=mean(amplit)
d2=c(1.1296,1.6918,2.0535,2.3248,2.5404,2.7074,2.8501, 2.9677,3.0737,3.1696)
d3=c(.8541,.8909,.8800,.8674,.8508,.8326,.8209, .8102,.7978,.7890)
LIC1=x2barras-3*Rbarra/(d2[n-1]*sqrt(n))
LSC1=x2barras+3*Rbarra/(d2[n-1]*sqrt(n))
LIC2=Rbarra-3*d3[n-1]*Rbarra/d2[n-1]
LSC2=Rbarra+3*d3[n-1]*Rbarra/d2[n-1]
if (LIC2 < 0)
LIC2=0
}
else {
amplit=numeric(m-1)
media=y
for (i in 2:m)
amplit[i-1]=sqrt((y[i]-y[i-1])^2)
x2barras=mean(media)
Rbarra=mean(amplit)
d2=1.1296
d3=.8541
LIC1=x2barras-3*Rbarra/(d2*sqrt(n))
LSC1=x2barras+3*Rbarra/(d2*sqrt(n))
LIC2=Rbarra-3*d3*Rbarra/d2
LSC2=Rbarra+3*d3*Rbarra/d2
if (LIC2 < 0) LIC2=0 }
par(mfrow=c(2,1))
amostra1=matrix(rep(seq(1,m),4),m,4,byrow=F)
if (n>1) amostra2=amostra1
else amostra2=amostra1[-1,]
xbar=cbind(rep(x2barras,m),rep(LIC1,m),rep(LSC1,m),media)
if (n>1) {
rbar=cbind(rep(Rbarra,m),rep(LIC2,m),rep(LSC2,m),amplit)
}
else
rbar=cbind(rep(Rbarra,m-1),rep(LIC2,m-1),
rep(LSC2,m-1),amplit)
matplot(amostra2,rbar,type="o",ylab="Amplitude",
col=c("black","red","red","blue"),
ylim=c(min(rbar),max(rbar)),
xlab="Amostras",main="Gráfico R",pch=20, lty=1, lwd=2)
matplot(amostra1,xbar,type="o",ylab="Média",xlab="Amostras",
main=expression(paste("Gráfico " * bar(x))),col=c("black","red","red", "blue"),ylim=c(min(xbar),max(xbar)),pch=20, lty=1,lwd=2)
out=rbind(round(xbar[1,1:3],2),round(rbar[1,1:3],2))
colnames(out)=c("Referência","LIC","LSC")
out
#print(Rbarra)
#print(x2barras)
#print(LIC1)
#print(LSC1)
#print(LIC2)
#print(LSC2)
#print(d2[n-1])
#print(d3[n-1])
}
Exemplo
# m = número de amostras observadas.
# n = número de observações de cada amostra.
# y = vetor com as observações, ordenadas por amostra, da variável observada.
# mi = especificação para a média do processo.
# sigma = especificação para o desvio-padrão do processo.
#simular
y1 <- rnorm(100, mean = 50, sd = 5)
y2 <- rnorm(100, mean = 70, sd = 5)
dados <- c(y1,y2)
m=40
n=5
xR2(m,n,y=dados)
Referência LIC LSC
[1,] 59.83 52.92 66.74
[2,] 11.97 0.00 25.37

#simular
y1 <- rnorm(100, mean = 50, sd = 5)
y2 <- rnorm(100, mean = 70, sd = 5)
dados <- c(y1,y2)
m=40
n=5
xR1(m,n,y=dados,mi=50,sigma=5)
Referência LIC LSC
[1,] 50 43.29 56.71
[2,] 5 0.00 24.63

TCC Robson
dados <- c(311.29,
310.87,
311.2,
311.13,
311.08,
311.13,
310.98,
310.63,
310.76,
311.37,
311.02,
311.13,
311.12,
311,
311.08,
311.08,
311.12,
311.1,
311.21,
311.25,
311.17,
310.89,
311.38,
311.32,
311.02,
310.75,
310.93,
310.96,
311.03,
311.22,
310.97,
311.3,
311.13,
311.29,
311.14,
311.46,
311.33,
311.37,
311.12,
311.42,
310.69,
311,
311.15,
311.16,
310.97,
310.97,
311.36,
311.03,
311.22,
311.22,
310.97,
310.83,
311.21,
310.97,
310.87,
311.37,
311.08,
310.99,
311.19,
311.12,
311.1,
311.18,
311.16,
311.28,
311.34,
311.32,
311.3,
311.16,
311.02,
311.03,
311.05,
311.18,
311.22,
311.33,
311.24,
311.41,
311.34,
311.44,
310.76,
310.78,
310.92,
310.92,
310.95,
310.99,
311.23,
311.26,
310.77,
310.84)
m=22
n=4
xR2(m,n,y=dados)
Referência LIC LSC
[1,] 311.11 310.86 311.36
[2,] 0.34 0.00 0.77

LS0tDQp0aXRsZTogIkdyw6FmaWNvcyBkZSBDb250cm9sZSBYX2JhciBlIFIiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQogDQogICAgRnVuw6fDo28geFIxIGNvbSBlc3BlY2lmaWNhw6fDtWVzIHBhcmEgbcOpZGlhIGUgZGVzdmlvLXBhZHLDo28NCiAgICBGdW7Dp8OjbyB4UjIgc2VtIGVzcGVjaWZpY2HDp8O1ZXMgcGFyYSBtw6lkaWEgZSBkZXN2aW8tcGFkcsOjbw0KDQojIyBGdW7Dp8O1ZXMNCmBgYHtyfQ0KDQojIG0gPSBudcyBbWVybyBkZSBhbW9zdHJhcyBvYnNlcnZhZGFzLg0KIyBuID0gbnXMgW1lcm8gZGUgb2JzZXJ2YWPMp2/Mg2VzIGRlIGNhZGEgYW1vc3RyYS4NCiMgeSA9IHZldG9yIGNvbSBhcyBvYnNlcnZhY8ynb8yDZXMsIG9yZGVuYWRhcyBwb3IgYW1vc3RyYSwgZGEgdmFyaWHMgXZlbCBvYnNlcnZhZGEuDQojIG1pID0gZXNwZWNpZmljYWPMp2HMg28gcGFyYSBhIG1lzIFkaWEgZG8gcHJvY2Vzc28uDQojIHNpZ21hID0gZXNwZWNpZmljYWPMp2HMg28gcGFyYSBvIGRlc3Zpby1wYWRyYcyDbyBkbyBwcm9jZXNzby4NCg0KDQp4UjE9ZnVuY3Rpb24obSxuLHksbWksc2lnbWEpeyANCiAgaWYgKG4+MSkgeyANCiAgICBhbXBsaXQ9bnVtZXJpYyhtKSANCiAgICBtYXQ9bWF0cml4KHksbSxuLGJ5cm93PVQpIA0KICAgIG1lZGlhPWFwcGx5KG1hdCwxLG1lYW4pIA0KICAgIGZvciAoaSBpbiAxOm0pIHsNCiAgYW1wbGl0W2ldPW1heChtYXRbaSxdKS1taW4obWF0W2ksXSl9DQogfSANCiAgZWxzZSB7IA0KICAgIGFtcGxpdD1udW1lcmljKG0tMSkgDQogICAgbWVkaWE9eSANCiAgICBmb3IgKGkgaW4gMjptKSANCiAgICAgIGFtcGxpdFtpLTFdPXNxcnQoKHlbaV0teVtpLTFdKV4yKSANCiAgICB9IA0KICANCiAgZDI9YygxLjEyOTYsMS42OTE4LDIuMDUzNSwyLjMyNDgsMi41NDA0LDIuNzA3NCwgMi44NTAxLDIuOTY3NywzLjA3MzcsMy4xNjk2KQ0KICBkMz1jKC44NTQxLC44OTA5LC44ODAwLC44Njc0LC44NTA4LCAuODMyNiwuODIwOSwuODEwMiwuNzk3OCwuNzg5MCkgDQogIExJQzE9bWktMypzaWdtYS9zcXJ0KG4pIA0KICBMU0MxPW1pKzMqc2lnbWEvc3FydChuKSANCiAgaWYobj4xKSB7IA0KICAgIExJQzI9ZDJbbi0xXSpzaWdtYS0zKmQzW24tMV0qc2lnbWEgDQogICAgTFNDMj1kMltuLTFdKnNpZ21hKzMqZDNbbi0xXSpzaWdtYSANCiAgICBpZiAoTElDMiA8IDApIA0KICAgICAgTElDMj0wIA0KICAgIH0gZWxzZSB7IA0KICAgICAgTElDMj1kMltuXSpzaWdtYS0zKmQzW25dKnNpZ21hIA0KICAgICAgTFNDMj1kMltuXSpzaWdtYSszKmQzW25dKnNpZ21hIA0KICAgICAgaWYgKExJQzIgPCAwKQ0KICAgICAgICBMSUMyPTANCiAgICAgIH0NCiAgDQogIHBhcihtZnJvdz1jKDIsMSkpIA0KICBhbW9zdHJhMT1tYXRyaXgocmVwKHNlcSgxLG0pLDQpLG0sNCxieXJvdz1GKQ0KICBpZiAobj4xKSBhbW9zdHJhMj1hbW9zdHJhMSBlbHNlIGFtb3N0cmEyPWFtb3N0cmExWy0xLF0gDQogIHhiYXI9Y2JpbmQocmVwKG1pLG0pLHJlcChMSUMxLG0pLHJlcChMU0MxLG0pLG1lZGlhKSANCiAgaWYgKG4+MSkgeyANCiAgICByYmFyPWNiaW5kKHJlcChzaWdtYSxtKSxyZXAoTElDMixtKSxyZXAoTFNDMixtKSxhbXBsaXQpIA0KICAgIH0gDQogIGVsc2UgcmJhcj1jYmluZChyZXAoc2lnbWEsbS0xKSxyZXAoTElDMixtLTEpLCANCiAgICAgICAgICAgICAgICAgIHJlcChMU0MyLG0tMSksYW1wbGl0KSANCiAgDQogIG1hdHBsb3QoYW1vc3RyYTIscmJhcix0eXBlPSJvIix5bGFiPSJBbXBsaXR1ZGUiLA0KICAgICAgICAgIGNvbD1jKCJibGFjayIsInJlZCIsInJlZCIsImJsdWUiKSwNCiAgICAgICAgICB5bGltPWMobWluKHJiYXIpLG1heChyYmFyKSksDQogICAgICAgICAgeGxhYj0iQW1vc3RyYXMiLG1haW49Ikdyw6FmaWNvIFIiLHBjaD0yMCwgbHR5PTEsIGx3ZD0yKQ0KICANCiAgbWF0cGxvdChhbW9zdHJhMSx4YmFyLHR5cGU9Im8iLHlsYWI9Ik3DqWRpYSIseGxhYj0iQW1vc3RyYXMiLA0KICAgICAgICAgIG1haW49ZXhwcmVzc2lvbihwYXN0ZSgiR3LDoWZpY28gIiAqIGJhcih4KSkpLGNvbD1jKCJibGFjayIsInJlZCIsInJlZCIsICJibHVlIikseWxpbT1jKG1pbih4YmFyKSxtYXgoeGJhcikpLHBjaD0yMCwgbHR5PTEsIGx3ZD0yKSANCiAgb3V0PXJiaW5kKHJvdW5kKHhiYXJbMSwxOjNdLDIpLHJvdW5kKHJiYXJbMSwxOjNdLDIpKQ0KICBjb2xuYW1lcyhvdXQpPWMoIlJlZmVyw6puY2lhIiwiTElDIiwiTFNDIikNCiAgb3V0IA0KICB9DQoNCg0KeFIyPWZ1bmN0aW9uKG0sbix5KXsNCiAgaWYgKG4+MSkgeyANCiAgICBhbXBsaXQ9bnVtZXJpYyhtKSANCiAgICBtYXQ9bWF0cml4KHksbSxuLGJ5cm93PVQpIA0KICAgIG1lZGlhPWFwcGx5KG1hdCwxLG1lYW4pIA0KICAgIGZvciAoaSBpbiAxOm0pIA0KICAgICAgYW1wbGl0W2ldPW1heChtYXRbaSxdKS1taW4obWF0W2ksXSkgDQogICAgeDJiYXJyYXM9bWVhbihtZWRpYSkgDQogICAgUmJhcnJhPW1lYW4oYW1wbGl0KSANCiAgICBkMj1jKDEuMTI5NiwxLjY5MTgsMi4wNTM1LDIuMzI0OCwyLjU0MDQsMi43MDc0LDIuODUwMSwgMi45Njc3LDMuMDczNywzLjE2OTYpDQogICAgZDM9YyguODU0MSwuODkwOSwuODgwMCwuODY3NCwuODUwOCwuODMyNiwuODIwOSwgLjgxMDIsLjc5NzgsLjc4OTApIA0KICAgIExJQzE9eDJiYXJyYXMtMypSYmFycmEvKGQyW24tMV0qc3FydChuKSkgDQogICAgTFNDMT14MmJhcnJhcyszKlJiYXJyYS8oZDJbbi0xXSpzcXJ0KG4pKSANCiAgICBMSUMyPVJiYXJyYS0zKmQzW24tMV0qUmJhcnJhL2QyW24tMV0gDQogICAgTFNDMj1SYmFycmErMypkM1tuLTFdKlJiYXJyYS9kMltuLTFdIA0KICAgIGlmIChMSUMyIDwgMCkgDQogICAgICBMSUMyPTAgDQogICAgfSANCiAgZWxzZSB7IA0KICAgICAgYW1wbGl0PW51bWVyaWMobS0xKSANCiAgICAgIG1lZGlhPXkgDQogICAgICBmb3IgKGkgaW4gMjptKQ0KICAgICAgICBhbXBsaXRbaS0xXT1zcXJ0KCh5W2ldLXlbaS0xXSleMikNCiAgICAgIHgyYmFycmFzPW1lYW4obWVkaWEpIA0KICAgICAgUmJhcnJhPW1lYW4oYW1wbGl0KSANCiAgICAgIGQyPTEuMTI5NiANCiAgICAgIGQzPS44NTQxIA0KICAgICAgTElDMT14MmJhcnJhcy0zKlJiYXJyYS8oZDIqc3FydChuKSkgDQogICAgICBMU0MxPXgyYmFycmFzKzMqUmJhcnJhLyhkMipzcXJ0KG4pKSANCiAgICAgIExJQzI9UmJhcnJhLTMqZDMqUmJhcnJhL2QyIA0KICAgICAgTFNDMj1SYmFycmErMypkMypSYmFycmEvZDIgDQogICAgICBpZiAoTElDMiA8IDApIExJQzI9MCB9IA0KICANCiAgcGFyKG1mcm93PWMoMiwxKSkgDQogIGFtb3N0cmExPW1hdHJpeChyZXAoc2VxKDEsbSksNCksbSw0LGJ5cm93PUYpIA0KICBpZiAobj4xKSBhbW9zdHJhMj1hbW9zdHJhMSANCiAgZWxzZSBhbW9zdHJhMj1hbW9zdHJhMVstMSxdIA0KICB4YmFyPWNiaW5kKHJlcCh4MmJhcnJhcyxtKSxyZXAoTElDMSxtKSxyZXAoTFNDMSxtKSxtZWRpYSkgDQogIGlmIChuPjEpIHsNCiAgICByYmFyPWNiaW5kKHJlcChSYmFycmEsbSkscmVwKExJQzIsbSkscmVwKExTQzIsbSksYW1wbGl0KSANCiAgfSANCiAgZWxzZQ0KICAgIHJiYXI9Y2JpbmQocmVwKFJiYXJyYSxtLTEpLHJlcChMSUMyLG0tMSksDQogICAgICAgICAgICAgICByZXAoTFNDMixtLTEpLGFtcGxpdCkgDQogIA0KICBtYXRwbG90KGFtb3N0cmEyLHJiYXIsdHlwZT0ibyIseWxhYj0iQW1wbGl0dWRlIiwNCiAgICAgICAgICBjb2w9YygiYmxhY2siLCJyZWQiLCJyZWQiLCJibHVlIiksDQogICAgICAgICAgeWxpbT1jKG1pbihyYmFyKSxtYXgocmJhcikpLA0KICAgICAgICAgIHhsYWI9IkFtb3N0cmFzIixtYWluPSJHcsOhZmljbyBSIixwY2g9MjAsIGx0eT0xLCBsd2Q9MikNCiAgDQogIG1hdHBsb3QoYW1vc3RyYTEseGJhcix0eXBlPSJvIix5bGFiPSJNw6lkaWEiLHhsYWI9IkFtb3N0cmFzIiwNCiAgICAgICAgICBtYWluPWV4cHJlc3Npb24ocGFzdGUoIkdyw6FmaWNvICIgKiBiYXIoeCkpKSxjb2w9YygiYmxhY2siLCJyZWQiLCJyZWQiLCAiYmx1ZSIpLHlsaW09YyhtaW4oeGJhciksbWF4KHhiYXIpKSxwY2g9MjAsIGx0eT0xLGx3ZD0yKQ0KICBvdXQ9cmJpbmQocm91bmQoeGJhclsxLDE6M10sMikscm91bmQocmJhclsxLDE6M10sMikpIA0KICBjb2xuYW1lcyhvdXQpPWMoIlJlZmVyw6puY2lhIiwiTElDIiwiTFNDIikNCiAgb3V0DQojcHJpbnQoUmJhcnJhKQ0KI3ByaW50KHgyYmFycmFzKQ0KI3ByaW50KExJQzEpDQojcHJpbnQoTFNDMSkNCiNwcmludChMSUMyKQ0KI3ByaW50KExTQzIpDQojcHJpbnQoZDJbbi0xXSkNCiNwcmludChkM1tuLTFdKSANCiAgfQ0KDQpgYGANCg0KDQojIyBFeGVtcGxvDQoNCiAgICAjIG0gPSBudcyBbWVybyBkZSBhbW9zdHJhcyBvYnNlcnZhZGFzLg0KICAgICMgbiA9IG51zIFtZXJvIGRlIG9ic2VydmFjzKdvzINlcyBkZSBjYWRhIGFtb3N0cmEuDQogICAgIyB5ID0gdmV0b3IgY29tIGFzIG9ic2VydmFjzKdvzINlcywgb3JkZW5hZGFzIHBvciBhbW9zdHJhLCBkYSB2YXJpYcyBdmVsIG9ic2VydmFkYS4NCiAgICAjIG1pID0gZXNwZWNpZmljYWPMp2HMg28gcGFyYSBhIG1lzIFkaWEgZG8gcHJvY2Vzc28uDQogICAgIyBzaWdtYSA9IGVzcGVjaWZpY2FjzKdhzINvIHBhcmEgbyBkZXN2aW8tcGFkcmHMg28gZG8gcHJvY2Vzc28uDQoNCmBgYHtyfQ0KI3NpbXVsYXIgDQp5MSA8LSBybm9ybSgxMDAsIG1lYW4gPSA1MCwgc2QgPSA1KQ0KeTIgPC0gcm5vcm0oMTAwLCBtZWFuID0gNzAsIHNkID0gNSkNCmRhZG9zIDwtIGMoeTEseTIpDQoNCm09NDANCm49NQ0KDQp4UjIobSxuLHk9ZGFkb3MpDQpgYGANCg0KDQpgYGB7cn0NCiNzaW11bGFyIA0KeTEgPC0gcm5vcm0oMTAwLCBtZWFuID0gNTAsIHNkID0gNSkNCnkyIDwtIHJub3JtKDEwMCwgbWVhbiA9IDcwLCBzZCA9IDUpDQpkYWRvcyA8LSBjKHkxLHkyKQ0KDQptPTQwDQpuPTUNCg0KeFIxKG0sbix5PWRhZG9zLG1pPTUwLHNpZ21hPTUpDQpgYGANCg0KIyMgVENDIFJvYnNvbg0KDQpgYGB7ciBmaWcuaGVpZ2h0PTE1LCBmaWcud2lkdGg9MTJ9DQpkYWRvcyA8LSBjKDMxMS4yOSwNCjMxMC44NywNCjMxMS4yLA0KMzExLjEzLA0KMzExLjA4LA0KMzExLjEzLA0KMzEwLjk4LA0KMzEwLjYzLA0KMzEwLjc2LA0KMzExLjM3LA0KMzExLjAyLA0KMzExLjEzLA0KMzExLjEyLA0KMzExLA0KMzExLjA4LA0KMzExLjA4LA0KMzExLjEyLA0KMzExLjEsDQozMTEuMjEsDQozMTEuMjUsDQozMTEuMTcsDQozMTAuODksDQozMTEuMzgsDQozMTEuMzIsDQozMTEuMDIsDQozMTAuNzUsDQozMTAuOTMsDQozMTAuOTYsDQozMTEuMDMsDQozMTEuMjIsDQozMTAuOTcsDQozMTEuMywNCjMxMS4xMywNCjMxMS4yOSwNCjMxMS4xNCwNCjMxMS40NiwNCjMxMS4zMywNCjMxMS4zNywNCjMxMS4xMiwNCjMxMS40MiwNCjMxMC42OSwNCjMxMSwNCjMxMS4xNSwNCjMxMS4xNiwNCjMxMC45NywNCjMxMC45NywNCjMxMS4zNiwNCjMxMS4wMywNCjMxMS4yMiwNCjMxMS4yMiwNCjMxMC45NywNCjMxMC44MywNCjMxMS4yMSwNCjMxMC45NywNCjMxMC44NywNCjMxMS4zNywNCjMxMS4wOCwNCjMxMC45OSwNCjMxMS4xOSwNCjMxMS4xMiwNCjMxMS4xLA0KMzExLjE4LA0KMzExLjE2LA0KMzExLjI4LA0KMzExLjM0LA0KMzExLjMyLA0KMzExLjMsDQozMTEuMTYsDQozMTEuMDIsDQozMTEuMDMsDQozMTEuMDUsDQozMTEuMTgsDQozMTEuMjIsDQozMTEuMzMsDQozMTEuMjQsDQozMTEuNDEsDQozMTEuMzQsDQozMTEuNDQsDQozMTAuNzYsDQozMTAuNzgsDQozMTAuOTIsDQozMTAuOTIsDQozMTAuOTUsDQozMTAuOTksDQozMTEuMjMsDQozMTEuMjYsDQozMTAuNzcsDQozMTAuODQpDQoNCm09MjINCm49NA0KDQp4UjIobSxuLHk9ZGFkb3MpDQoNCmBgYA0KDQog