Librería GWmodel

La librería GWmodel (Modelos ponderados geográficamente (GW)) incluye funciones para calibrar, estadísticas de resumen de GW, análisis de componentes principales de GW, análisis discriminante de GW y varias formas de regresión de GW; algunos de los cuales se proporcionan en formas básicas y robustas (resistentes a valores atípicos).

library(GWmodel)

Datos: DubVoter

Son los datos de participación de votantes y personajes sociales en el Gran Dublín para las elecciones generales de 2002 y el censo de 2002. Algunos de sus atributos son:

data('DubVoter')
#class(Dub.voter) # SpatialPolygonsDataFrame
dim(Dub.voter)
head(Dub.voter)
#?Dub.voter

GWSS: Estadísticas resumidas ponderadas geográficamente

Esta función calcula GWSS básico y robusto. Esto incluye medias ponderadas geográficamente, desviaciones estándar y sesgo.

Estadísticos = gwss(Dub.voter,
                    vars = c("GenEl2004", "LARent", "Unempl"), 
                    kernel = "bisquare", # Funcion kernel
                    adaptive = TRUE, # Bw es adaptativo a vecinos mas cercanos
                    bw = 48) # Ancho de banda
Estadísticos
   ***********************************************************************
   *                       Package   GWmodel                             *
   ***********************************************************************

   ***********************Calibration information*************************

   Local summary statistics calculated for variables:
    GenEl2004 LARent Unempl
   Number of summary points: 322
   Kernel function: bisquare 
   Summary points: the same locations as observations are used.
   Adaptive bandwidth: 48 (number of nearest neighbours)
   Distance metric: Euclidean distance metric is used.

   ************************Local Summary Statistics:**********************
   Summary information for Local means:
                   Min. 1st Qu.  Median 3rd Qu.    Max.
   GenEl2004_LM 51.5132 54.0718 55.1561 56.1063 57.5607
   LARent_LM    11.0421 14.4222 17.0290 20.2421 31.7201
   Unempl_LM     5.7340  6.9811  8.0931  8.9572  9.9021
   Summary information for local standard deviation :
                    Min. 1st Qu.  Median 3rd Qu.    Max.
   GenEl2004_LSD  7.4372  8.6188  8.9408  9.4066  9.8911
   LARent_LSD    20.1806 24.3825 26.5003 29.6696 37.4172
   Unempl_LSD     4.1540  4.9932  5.4572  5.7331  6.3354
   Summary information for local variance :
                     Min. 1st Qu.  Median 3rd Qu.     Max.
   GenEl2004_LVar  55.312  74.284  79.938  88.484   97.834
   LARent_LVar    407.255 594.505 702.265 880.283 1400.046
   Unempl_LVar     17.256  24.932  29.782  32.868   40.137
   Summary information for Local skewness:
                      Min.  1st Qu.   Median  3rd Qu.    Max.
   GenEl2004_LSKe -0.80507 -0.68985 -0.57686 -0.45446 -0.0863
   LARent_LSKe     0.96624  1.80785  2.08370  2.42642  3.1065
   Unempl_LSKe     0.86075  1.19091  1.41118  1.64968  2.1461
   Summary information for localized coefficient of variation:
                    Min. 1st Qu.  Median 3rd Qu.   Max.
   GenEl2004_LCV 0.12932 0.15426 0.16272 0.17508 0.1904
   LARent_LCV    1.17356 1.43387 1.58074 1.70126 1.8826
   Unempl_LCV    0.57279 0.64790 0.68731 0.70391 0.7601
   Summary information for localized Covariance and Correlation between these variables:
                                       Min.    1st Qu.     Median    3rd Qu.
   Cov_GenEl2004.LARent          -280.10224 -198.52680 -166.86324 -145.23307
   Cov_GenEl2004.Unempl           -43.41703  -35.80206  -32.21179  -28.82365
   Cov_LARent.Unempl               59.11462   82.82905   94.62761  108.94614
   Corr_GenEl2004.LARent           -0.76412   -0.70794   -0.69022   -0.67828
   Corr_GenEl2004.Unempl           -0.71371   -0.69029   -0.66717   -0.63791
   Corr_LARent.Unempl               0.54758    0.62270    0.66601    0.68135
   Spearman_rho_GenEl2004.LARent   -0.80902   -0.77184   -0.73452   -0.69298
   Spearman_rho_GenEl2004.Unempl   -0.73661   -0.70675   -0.68729   -0.65235
   Spearman_rho_LARent.Unempl       0.72420    0.74965    0.77185    0.78776
                                     Max.
   Cov_GenEl2004.LARent          -95.9297
   Cov_GenEl2004.Unempl          -19.8503
   Cov_LARent.Unempl             134.7817
   Corr_GenEl2004.LARent          -0.6346
   Corr_GenEl2004.Unempl          -0.5598
   Corr_LARent.Unempl              0.7025
   Spearman_rho_GenEl2004.LARent  -0.6079
   Spearman_rho_GenEl2004.Unempl  -0.6195
   Spearman_rho_LARent.Unempl      0.8150

   ************************************************************************

Como se puede observar, la función gwss calculó para cada variable escogida: GenEl2004, LARent, Unempl, la media, desviación estándar, varianza, asimetría, coeficiente de variación, covarianza y correlación entre las mismas, locales.

Además se agregan algunos parámetros, detalles y paletas de colores, para los gráficos

# Parámetros para graficar
#---------------------------------------------------------------------
# Simbolo Norte
map.na = list("SpatialPolygonsRescale", layout.north.arrow(), 
              offset = c(329000, 261500), scale = 4000, col = 1)
# Barra 0-5km
map.scale.1 = list("SpatialPolygonsRescale", layout.scale.bar(),
                   offset = c(326500, 216000), scale = 5000, col = 1, 
                   fill = c("transparent", "blue"))
# 0 km
map.scale.2 = list("sp.text", c(326500, 217900), "0", cex = 0.8, col = 1)
# 5 km
map.scale.3 = list("sp.text", c(331500, 217900), "5km", cex = 0.8, col = 1)
map.layout = list(map.na, map.scale.1, map.scale.2, map.scale.3)

# Paleta de colores
#----------------------------------------------------------------
library("RColorBrewer") 
mypalette = brewer.pal(9, "YlGnBu")
mypalette.1 = brewer.pal(8, "Reds")
mypalette.2 = brewer.pal(6, "Greens")

Media geográficamente ponderada

A continuación se grafica la media local para el porcentaje de personas votaron en las elecciones del 2004.

Podemos observar que en el centro del mapa se concentran el menor porcentaje de personas que votaron en las elecciones del 2004, mientras que en el sureste se concentran el mayor porcentaje. Esta variable, varía en las distintas regiones del mapa.

Desviación estándar geográficamente ponderada

A continuación se grafica la desviación estándar local para el porcentaje de personas que votaron en las elecciones del 2004.

spplot(Estadisticos$SDF, 
       "GenEl2004_LSD",
       key.space = "right",
       col.regions = mypalette.1,
       cuts = 7, 
       main = "Desviación estándar GP para GenEl2004",
       sp.layout = map.layout)

Esta gráfica indica que en el centro del mapa hubo mayor dispersión en el porcentaje de votantes de las elecciones del 2004, es decir, el porcentajes de votos varió en esa zona. Mientras que en el sureste del mapa hubo menor dispersión y por ende, el porcentaje de votantes fue similar.

Coeficiente de variacion geométricamente ponderado

A continuación se grafica el coeficiente de variación local para el porcentaje de personas que votaron en las elecciones del 2004.

En estadística, mientras mayor sea el valor del coeficiente de variación hay mayor heterogeneidad de los valores de la variable; y a menor C.V., mayor homogeneidad en los valores de la variable. Esta gráfica indica que en el centro del mapa hubo mayor dispersión en el porcentaje de votantes de las elecciones del 2004, es decir, el porcentajes de votos varió en esa zona. Mientras que en el sureste del mapa hubo menor dispersión y por ende, el porcentaje de votantes fue similar. Sin embargo, al variar entre 0.12 y 0.19 indica que el porcentaje de personas que votaron no varió mucho.

Correlación geográficamente ponderada entre GenEl2004 and LARent

A continuación se grafica la correlación local entre el porcentaje de personas que votaron en las elecciones del 2004 y el porcentaje de personas que son renteros de autoridades locales.

spplot(Estadisticos$SDF, 
       "Corr_GenEl2004.LARent",
       key.space = "right",
       col.regions = mypalette, 
       cut=5, 
       main = "Correlación GP entre LARent y GenEl",
       sp.layout = map.layout)

Como se puede observar, los valores de la correlación entre estas dos variables resultaron negativos, por lo que existe una relación inversa de las variables. Es decir, entre menor es el porcentaje de personas renteras de autoridades locales, mayor es el número de personas que votaron y viceversa. Entre más claro es el color, dicha relación inversa se hace más sólida, por ejemplo en el centro del mapa.

LS0tDQp0aXRsZTogIjIuIEVzdGFkw61zdGljb3MgcmVzdW1lbiBnZW9ncsOhZmljYW1lbnRlIHBvbmRlcmFkb3MiDQphdXRob3I6ICJFaWxpbiBMdW5hIE0uIg0KZGF0ZTogIjE5IGRlIGZlYnJlcm8gZGUgMjAyMSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQotLS0NCiMgTGlicmVyw61hIEdXbW9kZWwNCg0KTGEgbGlicmVyw61hIEdXbW9kZWwgKE1vZGVsb3MgcG9uZGVyYWRvcyBnZW9ncsOhZmljYW1lbnRlIChHVykpIGluY2x1eWUgZnVuY2lvbmVzIHBhcmEgY2FsaWJyYXIsIGVzdGFkw61zdGljYXMgZGUgcmVzdW1lbiBkZSBHVywgYW7DoWxpc2lzIGRlIGNvbXBvbmVudGVzIHByaW5jaXBhbGVzIGRlIEdXLCBhbsOhbGlzaXMgZGlzY3JpbWluYW50ZSBkZSBHVyB5IHZhcmlhcyBmb3JtYXMgZGUgcmVncmVzacOzbiBkZSBHVzsgYWxndW5vcyBkZSBsb3MgY3VhbGVzIHNlIHByb3BvcmNpb25hbiBlbiBmb3JtYXMgYsOhc2ljYXMgeSByb2J1c3RhcyAocmVzaXN0ZW50ZXMgYSB2YWxvcmVzIGF0w61waWNvcykuDQoNCmBgYHtyfQ0KbGlicmFyeShHV21vZGVsKQ0KYGBgDQoNCiMgRGF0b3M6IER1YlZvdGVyDQoNClNvbiBsb3MgZGF0b3MgZGUgcGFydGljaXBhY2nDs24gZGUgdm90YW50ZXMgeSBwZXJzb25hamVzIHNvY2lhbGVzIGVuIGVsIEdyYW4gRHVibMOtbiBwYXJhIGxhcyBlbGVjY2lvbmVzIGdlbmVyYWxlcyBkZSAyMDAyIHkgZWwgY2Vuc28gZGUgMjAwMi4gQWxndW5vcyBkZSBzdXMgYXRyaWJ1dG9zIHNvbjogIA0KDQoqICoqR2VuRWwyMDA0OioqIFBvcmNlbnRhamUgZGUgbGEgcG9ibGFjacOzbiBlbiBjYWRhIEVEIHF1ZSB2b3TDsyBlbiBsYXMgZWxlY2Npb25lcyBkZSAyMDA0DQoqICoqTEFSZW50OioqIFBvcmNlbnRhamUgZGUgbGEgcG9ibGFjacOzbiBlbiBjYWRhIEVEIHF1ZSBzb24gaW5xdWlsaW5vcyBkZSBsYXMgYXV0b3JpZGFkZXMgbG9jYWxlcw0KKiAqKlVuZW1wbCoqIFBvcmNlbnRhamUgZGUgbGEgcG9ibGFjacOzbiBlbiBjYWRhIEVEIHF1ZSBlc3TDoSBkZXNlbXBsZWFkYS4NCiAgDQoNCmBgYHtyfQ0KZGF0YSgnRHViVm90ZXInKQ0KI2NsYXNzKER1Yi52b3RlcikgIyBTcGF0aWFsUG9seWdvbnNEYXRhRnJhbWUNCmRpbShEdWIudm90ZXIpDQpoZWFkKER1Yi52b3RlcikNCiM/RHViLnZvdGVyDQpgYGANCg0KIyBHV1NTOiBFc3RhZMOtc3RpY2FzIHJlc3VtaWRhcyBwb25kZXJhZGFzIGdlb2dyw6FmaWNhbWVudGUNCg0KRXN0YSBmdW5jacOzbiBjYWxjdWxhIEdXU1MgYsOhc2ljbyB5IHJvYnVzdG8uIEVzdG8gaW5jbHV5ZSBtZWRpYXMgcG9uZGVyYWRhcyBnZW9ncsOhZmljYW1lbnRlLCBkZXN2aWFjaW9uZXMgZXN0w6FuZGFyIHkgc2VzZ28uDQoNCmBgYHtyfQ0KRXN0YWRpc3RpY29zID0gZ3dzcyhEdWIudm90ZXIsDQogICAgICAgICAgICAgICAgICAgIHZhcnMgPSBjKCJHZW5FbDIwMDQiLCAiTEFSZW50IiwgIlVuZW1wbCIpLCANCiAgICAgICAgICAgICAgICAgICAga2VybmVsID0gImJpc3F1YXJlIiwgIyBGdW5jaW9uIGtlcm5lbA0KICAgICAgICAgICAgICAgICAgICBhZGFwdGl2ZSA9IFRSVUUsICMgQncgZXMgYWRhcHRhdGl2byBhIHZlY2lub3MgbWFzIGNlcmNhbm9zDQogICAgICAgICAgICAgICAgICAgIGJ3ID0gNDgpICMgQW5jaG8gZGUgYmFuZGENCkVzdGFkaXN0aWNvcw0KYGBgDQoNCkNvbW8gc2UgcHVlZGUgb2JzZXJ2YXIsIGxhIGZ1bmNpw7NuIGd3c3MgY2FsY3Vsw7MgcGFyYSBjYWRhIHZhcmlhYmxlIGVzY29naWRhOiAqR2VuRWwyMDA0KiwgKkxBUmVudCosICpVbmVtcGwqLCBsYSBtZWRpYSwgZGVzdmlhY2nDs24gZXN0w6FuZGFyLCB2YXJpYW56YSwgYXNpbWV0csOtYSwgY29lZmljaWVudGUgZGUgdmFyaWFjacOzbiwgY292YXJpYW56YSB5IGNvcnJlbGFjacOzbiBlbnRyZSBsYXMgbWlzbWFzLCBsb2NhbGVzLg0KDQoqKkFkZW3DoXMgc2UgYWdyZWdhbiBhbGd1bm9zIHBhcsOhbWV0cm9zLCBkZXRhbGxlcyB5IHBhbGV0YXMgZGUgY29sb3JlcywgcGFyYSBsb3MgZ3LDoWZpY29zKioNCg0KYGBge3J9DQojIFBhcsOhbWV0cm9zIHBhcmEgZ3JhZmljYXINCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgU2ltYm9sbyBOb3J0ZQ0KbWFwLm5hID0gbGlzdCgiU3BhdGlhbFBvbHlnb25zUmVzY2FsZSIsIGxheW91dC5ub3J0aC5hcnJvdygpLCANCiAgICAgICAgICAgICAgb2Zmc2V0ID0gYygzMjkwMDAsIDI2MTUwMCksIHNjYWxlID0gNDAwMCwgY29sID0gMSkNCiMgQmFycmEgMC01a20NCm1hcC5zY2FsZS4xID0gbGlzdCgiU3BhdGlhbFBvbHlnb25zUmVzY2FsZSIsIGxheW91dC5zY2FsZS5iYXIoKSwNCiAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBjKDMyNjUwMCwgMjE2MDAwKSwgc2NhbGUgPSA1MDAwLCBjb2wgPSAxLCANCiAgICAgICAgICAgICAgICAgICBmaWxsID0gYygidHJhbnNwYXJlbnQiLCAiYmx1ZSIpKQ0KIyAwIGttDQptYXAuc2NhbGUuMiA9IGxpc3QoInNwLnRleHQiLCBjKDMyNjUwMCwgMjE3OTAwKSwgIjAiLCBjZXggPSAwLjgsIGNvbCA9IDEpDQojIDUga20NCm1hcC5zY2FsZS4zID0gbGlzdCgic3AudGV4dCIsIGMoMzMxNTAwLCAyMTc5MDApLCAiNWttIiwgY2V4ID0gMC44LCBjb2wgPSAxKQ0KbWFwLmxheW91dCA9IGxpc3QobWFwLm5hLCBtYXAuc2NhbGUuMSwgbWFwLnNjYWxlLjIsIG1hcC5zY2FsZS4zKQ0KDQojIFBhbGV0YSBkZSBjb2xvcmVzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KbGlicmFyeSgiUkNvbG9yQnJld2VyIikgDQpteXBhbGV0dGUgPSBicmV3ZXIucGFsKDksICJZbEduQnUiKQ0KbXlwYWxldHRlLjEgPSBicmV3ZXIucGFsKDgsICJSZWRzIikNCm15cGFsZXR0ZS4yID0gYnJld2VyLnBhbCg2LCAiR3JlZW5zIikNCmBgYA0KDQojIE1lZGlhIGdlb2dyw6FmaWNhbWVudGUgcG9uZGVyYWRhDQoNCkEgY29udGludWFjacOzbiBzZSBncmFmaWNhIGxhIG1lZGlhIGxvY2FsIHBhcmEgZWwgcG9yY2VudGFqZSBkZSBwZXJzb25hcyB2b3Rhcm9uIGVuIGxhcyBlbGVjY2lvbmVzIGRlbCAyMDA0Lg0KDQpgYGB7ciBlY2hvPVRSVUUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpzcHBsb3QoRXN0YWRpc3RpY29zJFNERiwgI1NwYWNpYWxEYXRhRnJhbWUNCiAgICAgICAiR2VuRWwyMDA0X0xNIiwgICMgTWVkaWFMb2NhbCANCiAgICAgICBrZXkuc3BhY2UgPSAicmlnaHQiLCANCiAgICAgICBjb2wucmVnaW9ucyA9IG15cGFsZXR0ZSwgDQogICAgICAgY3V0cyA9IDgsIA0KICAgICAgIG1haW4gPSAiTWVkaWEgR1AgcGFyYSBHZW5FbDIwMDQiLA0KICAgICAgIHNwLmxheW91dCA9IG1hcC5sYXlvdXQpDQpgYGANCg0KUG9kZW1vcyBvYnNlcnZhciBxdWUgZW4gZWwgY2VudHJvIGRlbCBtYXBhIHNlIGNvbmNlbnRyYW4gZWwgbWVub3IgcG9yY2VudGFqZSBkZSBwZXJzb25hcyBxdWUgdm90YXJvbiBlbiBsYXMgZWxlY2Npb25lcyBkZWwgMjAwNCwgbWllbnRyYXMgcXVlIGVuIGVsIHN1cmVzdGUgc2UgY29uY2VudHJhbiBlbCBtYXlvciBwb3JjZW50YWplLiBFc3RhIHZhcmlhYmxlLCB2YXLDrWEgZW4gbGFzIGRpc3RpbnRhcyByZWdpb25lcyBkZWwgbWFwYS4NCg0KIyBEZXN2aWFjacOzbiBlc3TDoW5kYXIgZ2VvZ3LDoWZpY2FtZW50ZSBwb25kZXJhZGENCg0KQSBjb250aW51YWNpw7NuIHNlIGdyYWZpY2EgbGEgZGVzdmlhY2nDs24gZXN0w6FuZGFyIGxvY2FsIHBhcmEgZWwgcG9yY2VudGFqZSBkZSBwZXJzb25hcyBxdWUgdm90YXJvbiBlbiBsYXMgZWxlY2Npb25lcyBkZWwgMjAwNC4NCg0KYGBge3IgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0Kc3BwbG90KEVzdGFkaXN0aWNvcyRTREYsIA0KICAgICAgICJHZW5FbDIwMDRfTFNEIiwNCiAgICAgICBrZXkuc3BhY2UgPSAicmlnaHQiLA0KICAgICAgIGNvbC5yZWdpb25zID0gbXlwYWxldHRlLjEsDQogICAgICAgY3V0cyA9IDcsIA0KICAgICAgIG1haW4gPSAiRGVzdmlhY2nDs24gZXN0w6FuZGFyIEdQIHBhcmEgR2VuRWwyMDA0IiwNCiAgICAgICBzcC5sYXlvdXQgPSBtYXAubGF5b3V0KQ0KYGBgDQpFc3RhIGdyw6FmaWNhIGluZGljYSBxdWUgZW4gZWwgY2VudHJvIGRlbCBtYXBhIGh1Ym8gbWF5b3IgZGlzcGVyc2nDs24gZW4gZWwgcG9yY2VudGFqZSBkZSB2b3RhbnRlcyBkZSBsYXMgZWxlY2Npb25lcyBkZWwgMjAwNCwgZXMgZGVjaXIsIGVsIHBvcmNlbnRhamVzIGRlIHZvdG9zIHZhcmnDsyBlbiBlc2Egem9uYS4gTWllbnRyYXMgcXVlIGVuIGVsIHN1cmVzdGUgZGVsIG1hcGEgaHVibyBtZW5vciBkaXNwZXJzacOzbiB5IHBvciBlbmRlLCBlbCBwb3JjZW50YWplIGRlIHZvdGFudGVzIGZ1ZSBzaW1pbGFyLg0KDQojIENvZWZpY2llbnRlIGRlIHZhcmlhY2lvbiBnZW9tw6l0cmljYW1lbnRlIHBvbmRlcmFkbw0KDQpBIGNvbnRpbnVhY2nDs24gc2UgZ3JhZmljYSBlbCBjb2VmaWNpZW50ZSBkZSB2YXJpYWNpw7NuIGxvY2FsIHBhcmEgZWwgcG9yY2VudGFqZSBkZSBwZXJzb25hcyBxdWUgdm90YXJvbiBlbiBsYXMgZWxlY2Npb25lcyBkZWwgMjAwNC4NCg0KYGBge3IgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0Kc3BwbG90KEVzdGFkaXN0aWNvcyRTREYsIA0KICAgICAgICJHZW5FbDIwMDRfTENWIiwNCiAgICAgICBrZXkuc3BhY2UgPSAicmlnaHQiLA0KICAgICAgIGNvbC5yZWdpb25zID0gbXlwYWxldHRlLjIsIA0KICAgICAgIGN1dHMgPSA1LCAgDQogICAgICAgbWFpbiA9ICJDb2VmIGRlIHZhcmlhY2nDs24gcGFyYSBHZW5FbDIwMDQiLA0KICAgICAgIHNwLmxheW91dCA9IG1hcC5sYXlvdXQpDQpgYGANCg0KRW4gZXN0YWTDrXN0aWNhLCBtaWVudHJhcyBtYXlvciBzZWEgZWwgdmFsb3IgZGVsIGNvZWZpY2llbnRlIGRlIHZhcmlhY2nDs24gaGF5IG1heW9yIGhldGVyb2dlbmVpZGFkIGRlIGxvcyB2YWxvcmVzIGRlIGxhIHZhcmlhYmxlOyB5IGEgbWVub3IgQy5WLiwgbWF5b3IgaG9tb2dlbmVpZGFkIGVuIGxvcyB2YWxvcmVzIGRlIGxhIHZhcmlhYmxlLiBFc3RhIGdyw6FmaWNhIGluZGljYSBxdWUgZW4gZWwgY2VudHJvIGRlbCBtYXBhIGh1Ym8gbWF5b3IgZGlzcGVyc2nDs24gZW4gZWwgcG9yY2VudGFqZSBkZSB2b3RhbnRlcyBkZSBsYXMgZWxlY2Npb25lcyBkZWwgMjAwNCwgZXMgZGVjaXIsIGVsIHBvcmNlbnRhamVzIGRlIHZvdG9zIHZhcmnDsyBlbiBlc2Egem9uYS4gTWllbnRyYXMgcXVlIGVuIGVsIHN1cmVzdGUgZGVsIG1hcGEgaHVibyBtZW5vciBkaXNwZXJzacOzbiB5IHBvciBlbmRlLCBlbCBwb3JjZW50YWplIGRlIHZvdGFudGVzIGZ1ZSBzaW1pbGFyLiBTaW4gZW1iYXJnbywgYWwgdmFyaWFyIGVudHJlIDAuMTIgeSAwLjE5IGluZGljYSBxdWUgZWwgcG9yY2VudGFqZSBkZSBwZXJzb25hcyBxdWUgdm90YXJvbiBubyB2YXJpw7MgbXVjaG8uDQoNCiMgQ29ycmVsYWNpw7NuIGdlb2dyw6FmaWNhbWVudGUgcG9uZGVyYWRhIGVudHJlIEdlbkVsMjAwNCBhbmQgTEFSZW50DQoNCkEgY29udGludWFjacOzbiBzZSBncmFmaWNhIGxhIGNvcnJlbGFjacOzbiBsb2NhbCBlbnRyZSBlbCBwb3JjZW50YWplIGRlIHBlcnNvbmFzIHF1ZSB2b3Rhcm9uIGVuIGxhcyBlbGVjY2lvbmVzIGRlbCAyMDA0IHkgZWwgcG9yY2VudGFqZSBkZSBwZXJzb25hcyBxdWUgc29uIHJlbnRlcm9zIGRlIGF1dG9yaWRhZGVzIGxvY2FsZXMuDQoNCmBgYHtyIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnNwcGxvdChFc3RhZGlzdGljb3MkU0RGLCANCiAgICAgICAiQ29ycl9HZW5FbDIwMDQuTEFSZW50IiwNCiAgICAgICBrZXkuc3BhY2UgPSAicmlnaHQiLA0KICAgICAgIGNvbC5yZWdpb25zID0gbXlwYWxldHRlLCANCiAgICAgICBjdXQ9NSwgDQogICAgICAgbWFpbiA9ICJDb3JyZWxhY2nDs24gR1AgZW50cmUgTEFSZW50IHkgR2VuRWwiLA0KICAgICAgIHNwLmxheW91dCA9IG1hcC5sYXlvdXQpDQpgYGANCg0KQ29tbyBzZSBwdWVkZSBvYnNlcnZhciwgbG9zIHZhbG9yZXMgZGUgbGEgY29ycmVsYWNpw7NuIGVudHJlIGVzdGFzIGRvcyB2YXJpYWJsZXMgcmVzdWx0YXJvbiBuZWdhdGl2b3MsIHBvciBsbyBxdWUgZXhpc3RlIHVuYSByZWxhY2nDs24gaW52ZXJzYSBkZSBsYXMgdmFyaWFibGVzLiBFcyBkZWNpciwgZW50cmUgbWVub3IgZXMgZWwgcG9yY2VudGFqZSBkZSBwZXJzb25hcyByZW50ZXJhcyBkZSBhdXRvcmlkYWRlcyBsb2NhbGVzLCBtYXlvciBlcyBlbCBuw7ptZXJvIGRlIHBlcnNvbmFzIHF1ZSB2b3Rhcm9uIHkgdmljZXZlcnNhLiBFbnRyZSBtw6FzIGNsYXJvIGVzIGVsIGNvbG9yLCBkaWNoYSByZWxhY2nDs24gaW52ZXJzYSBzZSBoYWNlIG3DoXMgc8OzbGlkYSwgcG9yIGVqZW1wbG8gZW4gZWwgY2VudHJvIGRlbCBtYXBhLg0KDQo=