Área de estudo

[1] -53.14791
[1] -30.2771

Dados da direção predominante do vento

Importando da dados.

 [1] "cod"                     "ano"                     "mes"                    
 [4] "dia"                     "DJ"                      "HHMM"                   
 [7] "Bateria"                 "Ptemp"                   "u"                      
[10] "v"                       "w"                       "Ts"                     
[13] "Td"                      "e"                       "es"                     
[16] "VPD"                     "RHs"                     "H2O_molar_density"      
[19] "H2O_flux"                "H2O_inc"                 "H2O_Stg"                
[22] "H2O_Flag"                "ET"                      "LE_flux"                
[25] "LE_inc"                  "LE_Stg"                  "LE_Flag"                
[28] "H_flux"                  "H_inc"                   "H_Stg"                  
[31] "H_Flag"                  "BRatio"                  "CO2_molar_density"      
[34] "CO2_flux"                "CO2_inc"                 "CO2_Stg"                
[37] "CO2_Flag"                "CH4_molar_density"       "CH4_flux"               
[40] "CH4_inc"                 "CH4_Stg"                 "CH4_Flag"               
[43] "L"                       "ustar"                   "Tstar"                  
[46] "TKE"                     "Tau"                     "Tau_inc"                
[49] "Tau_Flag"                "vento"                   "dirvento"               
[52] "spikes_hf"               "amplitude_resolution_hf" "drop_out_hf"            
[55] "absolute_limits_hf"      "descontinuidade_hf"      "Temp"                   
[58] "RH"                      "Pmb"                     "Prec"                   
[61] "Rn"                      "PAR"                     "SWin"                   
[64] "SWout"                   "LWin"                    "LWout"                  
[67] "Tsolo1"                  "Tsolo2"                  "Tsolo3"                 
[70] "Fsolo1"                  "Fsolo2"                  "Fsolo3"                 
[73] "H2OSolo1"                "H2OSolo2"                "H2OSolo3"               
[76] "Tskin"                   "Molhamento1"             "Molhamento2"            
[79] "Molhamento3"             "Molhamento4"             "d_alvo"                 
[82] "q_sinal"                 "d_alvo_corr"             "alt_doss"               
[1] "2015-01-01 00:30:00 UTC" "2016-01-01 00:00:00 UTC"
[1] 17520    89

Direção predominante do vento

Anemograma com dados de cs_dirvento=x(:,51) e cs_vento=x(:,50)

windRose(x_ok, paddle = FALSE)

Anemograma com dados do Anemômetro sônico (ws e wd calculados de u e v por JDT)

windRose(x_ok, wd = "wd_ec", ws = "ws_ec", paddle = FALSE)

Anemograma com dados de 2015 das estações do INMET mais próximas a CAS

[1] -53.14791
[1] -30.2771

Cálculo do footprint (Shuepp 1990, BLM)

O método selecionado é um dos mais simples (analítico) e foi selecionado por praticidade. Existem outros métodos bem mais sofisticados, mas para essa aplicação serve como uma primeira estimativa.

Dados necessários:

Fluxos: L, u*, H, U

      date                          hora           ustar              ws         
 Min.   :2015-01-01 00:30:00   Min.   : 0.00   Min.   :0.0044   Min.   : 0.0066  
 1st Qu.:2015-04-02 06:22:30   1st Qu.: 5.75   1st Qu.:0.0984   1st Qu.: 0.8104  
 Median :2015-07-02 12:15:00   Median :11.50   Median :0.1701   Median : 1.5615  
 Mean   :2015-07-02 12:15:00   Mean   :11.50   Mean   :0.2020   Mean   : 1.8935  
 3rd Qu.:2015-10-01 18:07:30   3rd Qu.:17.25   3rd Qu.:0.2664   3rd Qu.: 2.7034  
 Max.   :2016-01-01 00:00:00   Max.   :23.00   Max.   :2.9625   Max.   :14.8021  
                                               NA's   :2726     NA's   :2726     
     H_flux               wd                zeta              h        
 Min.   :-95.9900   Min.   :  0.0041   Min.   :-1.999   Min.   :0.424  
 1st Qu.: -7.1013   1st Qu.: 82.3576   1st Qu.:-0.063   1st Qu.:0.781  
 Median : -0.2937   Median :141.2587   Median : 0.002   Median :0.934  
 Mean   : 10.5258   Mean   :155.9584   Mean   :-0.010   Mean   :0.945  
 3rd Qu.: 15.7266   3rd Qu.:220.4517   3rd Qu.: 0.074   3rd Qu.:1.039  
 Max.   :376.2750   Max.   :359.9960   Max.   : 1.498   Max.   :5.864  
 NA's   :2812       NA's   :2726       NA's   :3171     NA's   :6948   

Histogramas

# U
ggplot(fpdata, 
       aes(ws)) + 
  geom_histogram(na.rm = TRUE) + 
  labs(x = expression(U), y = "Frequência de ocorrência") +
  scale_y_continuous(expand = c(0.01, 0.01), 
                     breaks = scales::pretty_breaks(10)) +
  scale_x_continuous(expand = c(0.01, 0.01), 
                     breaks = scales::pretty_breaks(10)) +
  theme_bw(base_size = 16)

# ustar
ggplot(fpdata, 
       aes(ustar)) + 
  geom_histogram(na.rm = TRUE) + 
  labs(x = expression(Ustar ~~ (m~s^-1)), y = "Frequência de ocorrência") +
  scale_y_continuous(expand = c(0.01, 0.01), 
                     breaks = scales::pretty_breaks(10)) +
  scale_x_continuous(expand = c(0.01, 0.01), 
                     breaks = scales::pretty_breaks(10)) +
  theme_bw(base_size = 16)

# z/L
ggplot(fpdata, 
       aes(zeta)) + 
  geom_histogram(na.rm = TRUE) + 
  labs(x = expression(z/L), y = "Frequência de ocorrência") +
  scale_y_continuous(expand = c(0.01, 0.01), 
                     breaks = scales::pretty_breaks(10)) +
  scale_x_continuous(expand = c(0.01, 0.01), 
                     breaks = scales::pretty_breaks(10)) +
  theme_bw(base_size = 16)

quantile(fpdata$zeta, probs = 0:3/3,na.rm = TRUE)
         0%   33.33333%   66.66667%        100% 
-1.99886436 -0.02925033  0.03717201  1.49760093 
quantile(fpdata$zeta, na.rm = TRUE)
          0%          25%          50%          75%         100% 
-1.998864363 -0.062906312  0.002142131  0.073755623  1.497600931 
# h
ggplot(fpdata, 
       aes(h)) + 
  geom_histogram(na.rm = TRUE) + 
  labs(x = expression(h), y = "Frequência de ocorrência") +
  scale_y_continuous(expand = c(0.01, 0.01), 
                     breaks = scales::pretty_breaks(10)) +
  scale_x_continuous(expand = c(0.01, 0.01), 
                     breaks = scales::pretty_breaks(10)) +
  theme_bw(base_size = 16)

Condições neutras predominam.

Cálculo footprint para condições neutras:

Calculando xmax, a posição máxima de footprint, ou seja, a área em que a observação (0,z) é mais sensível. É estimada igualando a zero a primeira derivada da função do footprint com relação a x.

Frequência de ocorrência de xmax (barra de cores) em função da direção do vento. Círculos cinza indicam xmax.

Período diurno e noturno:

Geral:

Pontos selecionados:

X indica local da amostra, arcos são as distâncias.

X indica local da amostra, arcos são as distâncias.

  • Amostra 1, na torre à alguns metros dos sensores de umidade do solo, profundidade 1 m (níveis 5, 15, 30, 50, 75, 100 cm).

  • Amostra 2, a 25 m na direção entre os setores Leste-Nordeste da torre, profundidade 50 cm (níveis 5, 15, 30, 50 cm).

  • Amostra 3, a 35 m na direção Sudeste da torre, profundidade 50 cm (níveis 5, 15, 30, 50 cm).

  • Amostra 4, a 15 m na direção entre os setores Sul-Sudeste da torre, profundidade 50 cm (níveis 5, 15, 30, 50 cm).

  • Amostra 5, a 25 m na direção Sudeste da torre, profundidade 50 cm (níveis 5, 15, 30, 50 cm).

No total 22 pontos de amostra (anéis).

Só marcar no Google Earth.

LS0tCnRpdGxlOiAiU2VsZcOnw6NvIGRlIMOhcmVhIHBhcmEgYW1vc3RyYWdlbSBkbyBzb2xvIGVtIENhY2hvZWlyYS1SUyIKYXV0aG9yOiAiSm9uYXRhbiBUYXRzY2giCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBjb21tZW50ID0gIiIpCmxpYnJhcnkoZGF0YS50YWJsZSkKbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWJibGUpCmxpYnJhcnkoc3RyaW5ncikKbGlicmFyeShwdXJycikKbGlicmFyeShSRWRkeVByb2MpCmxpYnJhcnkob3BlbmFpcikKbGlicmFyeShsdWJyaWRhdGUpCmxpYnJhcnkobWFncml0dHIpCmxpYnJhcnkobWV0dnVyc3QpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShnZ21hcCkKc291cmNlKCIuLi9SL2FycmFuZ2VfdmFycy5SIikKc291cmNlKCIvaG9tZS9oaWRyb21ldGVvcm9sb2dpc3RhL1VGU00vb3JpZW50YWNvZXMvaW5pY2lhY2FvQ2llbnRpZmljYS9jYXJvbGluZS93b3JrL2lubWV0X0Nhcm9saW5lL1IvcmVhZF9hd3NfaW5tZXQuUiIpCmBgYAoKCgoKYGBge3IsIGVjaG8gPSBGQUxTRX0KIyBEYWRvcwphd3NfcnMgPC0gcmVhZFJEUygiL2hvbWUvaGlkcm9tZXRlb3JvbG9naXN0YS9VRlNNL29yaWVudGFjb2VzL2luaWNpYWNhb0NpZW50aWZpY2EvY2Fyb2xpbmUvd29yay9pbm1ldF9DYXJvbGluZS9vdXRwdXQvZGF0YV9pbm1ldF9zdWxfMjAxNS5yZHMiKSAlPiUKICBhc190aWJibGUoKQppbmZvX3JzIDwtIHJlYWRSRFMoIi9ob21lL2hpZHJvbWV0ZW9yb2xvZ2lzdGEvVUZTTS9vcmllbnRhY29lcy9pbmljaWFjYW9DaWVudGlmaWNhL2Nhcm9saW5lL3dvcmsvaW5tZXRfQ2Fyb2xpbmUvb3V0cHV0L2luZm9faW5tZXRfc3VsXzIwMDBfMjAxNS5yZHMiKSAlPiUKICBhc190aWJibGUoKQpgYGAKCiMgw4FyZWEgZGUgZXN0dWRvCgpgYGB7ciwgZWNobyA9IEZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlcnJvcj1GQUxTRX0KIyBjb29yZGVuZGFzCihsb24wIDwtICg1MyArIDgvNjAgKyA1Mi40Ni8zNjAwKSotMSkKKGxhdDAgPC0gKDMwICsgMTYvNjAgKyAzNy41Ny8zNjAwKSotMSkKTWFwIDwtIGdldF9tYXAobG9jYXRpb24gPSBjKGxvbjAsIGxhdDApLCAKICAgICAgICAgICAgICBzb3VyY2UgPSAiZ29vZ2xlIiwKICAgICAgICAgICAgICB6b29tID0gMTQsCiAgICAgICAgICAgICAgY29sb3IgPSAiY29sb3IiLAogICAgICAgICAgICAgIG1hcHR5cGUgPSAic2F0ZWxsaXRlIikKCnAxIDwtIGdnbWFwKE1hcCwgZGV2ID0gImV4dGVudCIpICsKICAgICAgZ2VvbV9wb2ludCh4ID0gbG9uMCwgIAogICAgICAgICAgICAgICAgIHkgPSBsYXQwLAogICAgICAgICAgICAgICAgIGNvbG91ciA9ICJyZWQiLAogICAgICAgICAgICAgICAgIHNpemUgPSA1KSArCiAgICAgIGdlb21fdGV4dCh4ID0gbG9uMCwgeSA9IGxhdDAsIGxhYmVsPSJDQVMiKSArIAogICMgZ2VvbV9zZWdtZW50KGFlcyh4ID0gLTg0LjMxOTc3LAogICMgICAgICAgICAgICAgICAgICB4ZW5kID0gLTg0LjIxNTc0LAogICMgICAgICAgICAgICAgICAgICB5ID0gMzAuMjU1MTMsCiAgIyAgICAgICAgICAgICAgICAgIHllbmQgPSAzMC4yNTUxMyksIAogICMgICAgICAgICAgICBjb2xvciA9ICJyZWQiKSArCiAgIyBnZW9tX3NlZ21lbnQoYWVzKHggPSAtODQuMzE5NzcsCiAgIyAgICAgICAgICAgICAgICAgIHhlbmQgPSAtODQuMjE1NzQsCiAgIyAgICAgICAgICAgICAgICAgIHkgPSAzMC4xNjQ5MSwKICAjICAgICAgICAgICAgICAgICAgeWVuZCA9IDMwLjE2NDkxKSwgCiAgIyAgICAgICAgICAgIGNvbG9yID0gInJlZCIpICsKICAjIGdlb21fc2VnbWVudChhZXMoeCA9IC04NC4zMTk3NywKICAjICAgICAgICAgICAgICAgICAgeGVuZCA9IC04NC4zMTk3NywKICAjICAgICAgICAgICAgICAgICAgeSA9IDMwLjI1NTEzLAogICMgICAgICAgICAgICAgICAgICB5ZW5kID0gMzAuMTY0OTEpLCAKICAjICAgICAgICAgICAgY29sb3IgPSAicmVkIikgKwogICMgZ2VvbV9zZWdtZW50KGFlcyh4ID0gLTg0LjIxNTc0ICwKICAjICAgICAgICAgICAgICAgICAgeGVuZCA9IC04NC4yMTU3NCwKICAjICAgICAgICAgICAgICAgICAgeSA9IDMwLjI1NTEzLAogICMgICAgICAgICAgICAgICAgICB5ZW5kID0gMzAuMTY0OTEpLCAKICAjICAgICAgICAgICAgY29sb3IgPSAicmVkIikgKyAKICBsYWJzKHggPSBleHByZXNzaW9uKHBhc3RlKCJMb25naXR1ZGUgKCIsIGRlZ3JlZSwgIlcpIikpLCAKICAgICAgIHkgPSBleHByZXNzaW9uKHBhc3RlKCJMYXRpdHVkZSAoIiwgZGVncmVlLCAiTikiKSkpCnAxCmBgYAoKCgoKIyBEYWRvcyBkYSBkaXJlw6fDo28gcHJlZG9taW5hbnRlIGRvIHZlbnRvCgpJbXBvcnRhbmRvIGRhIGRhZG9zLgoKYGBge3IsIGVjaG8gPSBGQUxTRX0KIyB2YXJuYW1lcwp2bmFtZXMgPC0gcmVhZExpbmVzKCIuLi9kYXRhL2NhY2hvZWlyYS9ub21lX2RhZG9zLnR4dCIpICU+JQogIHN0cl9zcGxpdCgiPSIpICU+JQogIHB1cnJyOjptYXAoMSkgJT4lCiAgc3RyaW5ncjo6c3RyX3JlcGxhY2VfYWxsKCJjc18iLCAiIikgJT4lCiAgc3RyaW5ncjo6c3RyX3RyaW0oKQp2bmFtZXMKIyBpbXBvcnRhbmRvIGRhZG9zIAp4IDwtIGZyZWFkKCIuLi9kYXRhL2NhY2hvZWlyYS8xMTFfMjAxNV8wMDFfMzY1LmRhdCIsIG5hLnN0cmluZ3MgPSAiLTk5OS45OSIpICU+JQogIGFzX3RpYmJsZSgpCnggPC0geFssIDE6bGVuZ3RoKHZuYW1lcyldICU+JQogICNuYW1lcyh4KSAlVD4lCiAgc2V0TmFtZXModm5hbWVzKQojeApgYGAKCgpgYGB7ciwgZWNobz1GQUxTRX0KIyByZW1vdmVuZG8gdmFyaWF2ZWlzIHZhemlhcyBlIGNvbSBvIHRlcm1vIEgyMAp4IDwtIHhbLCAhdm5hbWVzICVpbiUgYygiTmFOIiwgIkgyTyIpXQojbmFtZXMoeCkKIyBjb3JyaWdpbmRvIEhITU0gcGFyYSA0IGRpZ2l0b3MgZSBjcmlhbmRvIGhvcmEgZSBtaW51dG8gcGFyYSBSRWRkeVByb2MKeHggPC0gbXV0YXRlKHgsIAogICAgICAgICAgICBISE1NID0gZm9ybWF0QyhISE1NLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0gMCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gNCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAnMCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSAnZicpLAogICAgICAgICAgICBob3JhID0gYXMuaW50ZWdlcihzdHJfc3ViKEhITU0sIDEsIDIpKSwKICAgICAgICAgICAgbWludXRvID0gYXMuaW50ZWdlcihzdHJfc3ViKEhITU0sIDMsIDQpKSwKICAgICAgICAgICAgZGF0ZSA9IHBhc3RlMChhbm8sICItIiwgbWVzLCAiLSIsIGRpYSwgIiAiLCBob3JhLCAiOiIsIG1pbnV0bywgIjowMCIpLAogICAgICAgICAgICBkYXRlID0gYXMuUE9TSVhjdChkYXRlLCB0eiA9ICJVVEMiKSkKIyBwYXNzYW5kbyBkYXRlIHBhcmEgZnJlbnRlCnh4IDwtIGFycmFuZ2VfdmFycyh4eCwgYygiZGF0ZSI9IDEsICJjb2QiPSA4MikpCiMgYXJydW1hbmRvIGhvcmEgMAp6ZXJvaCA8LSBmaWx0ZXIoeHgsIGhvdXIoZGF0ZSkgPT0gMCwgbWludXRlKGRhdGUpID09IDApCnplcm9oX29rIDwtIG11dGF0ZSh6ZXJvaCwgZGF0ZSAgPSBkYXRlICsgZGRheXMoMSkpCnh4X29rIDwtIGZpbHRlcih4eCwgISAoaG91cihkYXRlKSA9PSAwICYgbWludXRlKGRhdGUpID09IDApKQp4X29rIDwtIGJpbmRfcm93cyh4eF9vaywgemVyb2hfb2spICU+JQogIGFycmFuZ2UoZGF0ZSkKIyB2ZXJpZmljYW5kbyBkYXRhcwojIGZDaGVja0hIVGltZVNlcmllcyhUaW1lLlYucCA9IHhfb2skZGF0ZSwgCiMgICAgICAgICAgICAgICAgICAgIERUUy5uID0gNDgsIAojICAgICAgICAgICAgICAgICAgICBDYWxsRnVuY3Rpb24ucyA9ICIiKQojIGRhZG9zIGNvbnNpc3RlbnRlcyBjcm9ub2xvZ2ljYW1lbnRlCnhfb2sgPC0gbXV0YXRlKHhfb2ssCiAgICAgICAgICAgICAgIHdzX2VjID0gc3FydCh1XjIgKyB2XjIpLCAKICAgICAgICAgICAgICAgd2RfZWMgID0gYXRhbjIoLXUsIC12KSAqIDE4MC9waSwKICAgICAgICAgICAgICAgd2RfZWMgID0gaWZlbHNlKHdkX2VjIDw9IDAsIHdkX2VjICsgMzYwLCB3ZF9lYyksCiAgICAgICAgICAgICAgIHdkX2VjICA9IGlmZWxzZSh1ID09IDAgJiB2ID09IDAsIDAsIHdkX2VjKSkgJT4lCiAgcmVuYW1lKCJ3cyIgPSB2ZW50bywKICAgICAgICAgIndkIiA9IGRpcnZlbnRvKQp4X29rCnJhbmdlKHhfb2skZGF0ZSkKZGltKHhfb2spCmBgYAoKIyBEaXJlw6fDo28gcHJlZG9taW5hbnRlIGRvIHZlbnRvCgojIyBBbmVtb2dyYW1hIGNvbSBkYWRvcyBkZSBjc19kaXJ2ZW50bz14KDosNTEpIGUgY3NfdmVudG89eCg6LDUwKQoKYGBge3IsIGZpZy5hbGlnbj0nY2VudGVyJ30Kd2luZFJvc2UoeF9vaywgcGFkZGxlID0gRkFMU0UpCmBgYAoKIyMgQW5lbW9ncmFtYSBjb20gZGFkb3MgZG8gQW5lbcO0bWV0cm8gc8O0bmljbyAod3MgZSB3ZCBjYWxjdWxhZG9zIGRlIHUgZSB2IHBvciBKRFQpCgpgYGB7ciwgbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFLCBmaWcuYWxpZ249J2NlbnRlcid9CndpbmRSb3NlKHhfb2ssIHdkID0gIndkX2VjIiwgd3MgPSAid3NfZWMiLCBwYWRkbGUgPSBGQUxTRSkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRSwgZmlnLmFsaWduPSdjZW50ZXInLCBvdXQuaGVpZ2h0ID0gMTB9CndpbmRDb250b3Vycyhob3VyID0geF9vayRob3JhLAogICAgICAgICAgICAgd2QgPSB4X29rJHdkX2VjLAogICAgICAgICAgICAgd3MgPSB4X29rJHdzX2VjLAogICAgICAgICAgICAgc3BlZWRsaW0gPSAxMSwKICAgICAgICAgICAgIGNlbnRyZSA9ICJOIiwKICAgICAgICAgICAgIGtleXRpdGxlID0gImhvdXJseSB3aW5kIGZyZXF1ZW5jaWVzIFslXSIsCiAgICAgICAgICAgICBjb2xvdXIgPSByZXYoYnJld2VyLnBhbCgxMSwgIlNwZWN0cmFsIikpKQpgYGAKCgpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQp3aW5kUm9zZSh4X29rLCB3ZCA9ICJ3ZF9lYyIsIHdzID0gImhvcmEiLCBwYWRkbGUgPSBGQUxTRSwgd3MuaW50ID0gMSwgYnJlYWtzID0gMjQpCmBgYAoKIyMgQW5lbW9ncmFtYSBjb20gZGFkb3MgZGUgMjAxNSBkYXMgZXN0YcOnw7VlcyBkbyBJTk1FVCBtYWlzIHByw7N4aW1hcyBhIENBUwoKYGBge3IsIGVjaG8gPSBGQUxTRSwgZmlnLmFsaWduPSdjZW50ZXInLCBmaWcud2lkdGg9MTAsIGZpZy5oZWlnaHQ9MTB9CgoKZGlzdHMgPC0gcmFzdGVyOjpwb2ludERpc3RhbmNlKGMobG9uMCwgbGF0MCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMubWF0cml4KGluZm9fcnNbLCBjKCJsb24iLCAibGF0IildKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25sYXQgPSBUUlVFKS8xMDAwCm8gPC0gb3JkZXIoZGlzdHMpCmluZm9fcnMkZGlzdCA8LSBkaXN0cwojIDUgbWFpcyBwcsOzeGltYXMKaW5mb19yc181IDwtIGluZm9fcnNbbywgXVsxOjUsXQpzZWxlY3QoaW5mb19yc181LCBzaXRlLCBuYW1lLCBhbHQsIGRpc3QpCiMgZGFkb3MgcGxvdAphd3Nfc2VsIDwtIGZpbHRlcihhd3NfcnMsIHNpdGUgJWluJSBpbmZvX3JzXzUkc2l0ZSkgJT4lCiAgc2VsZWN0KG5hbWUsIGRhdGUsIHdzLCB3ZCwgd3NtYXgpCndpbmRSb3NlKGF3c19zZWwsIAogICAgICAgICBwYWRkbGUgPSBGQUxTRSwKICAgICAgICAgdHlwZSA9ICJuYW1lIikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQp3aW5kUm9zZSh4X29rLCB3ZCA9ICJ3ZF9lYyIsIHdzID0gIndzX2VjIiwgcGFkZGxlID0gRkFMU0UsIG1haW4gPSAiQ0FTIikKYGBgCgoKIyBDw6FsY3VsbyBkbyAqZm9vdHByaW50KiAoU2h1ZXBwIDE5OTAsIEJMTSkKCk8gbcOpdG9kbyBzZWxlY2lvbmFkbyDDqSB1bSBkb3MgbWFpcyBzaW1wbGVzIChhbmFsw610aWNvKSBlIGZvaSBzZWxlY2lvbmFkbyBwb3IgcHJhdGljaWRhZGUuIEV4aXN0ZW0gb3V0cm9zIG3DqXRvZG9zIGJlbSBtYWlzIHNvZmlzdGljYWRvcywgbWFzIHBhcmEgZXNzYSBhcGxpY2HDp8OjbyBzZXJ2ZSBjb21vIHVtYSBwcmltZWlyYSBlc3RpbWF0aXZhLgoKRGFkb3MgbmVjZXNzw6FyaW9zOgoKLSBhbHR1cmEgZG8gc2Vuc29yICgqeiogPSAzIG0pCgotIGFsdHVyYSBkbyBkb3NzZWwgKCpoYyogPSAwLjMgbSkgCgotIGNvbXByaW1lbnRvIGRlIHJ1Z29zaWRhZGUgKCp6MCogfiAwLjAxIG0gcGFyYSBzb2xvIG91IDEvMTAgZGUgaGMpLCBhbHR1cmEgb25kZSBvIHZlbnRvIMOpIHplcm8uCgotIGFsdHVyYSBkZSBkZXNsb2NhbWVudG8gZG8gcGxhbm8gemVybyAoKmQqIH4gMC43MyBoYykKYWxndW5zIGF1dG9yZXMgdXNhbSBkID0gMi8zIGhjIHBhcmEgZmxvcmVzdGFzIGUgMS84IGhjIHBhcmEgY3VsdHVyYXMgYWdyw61jb2xhcyB1bmlmb3JtZXMuCgpGbHV4b3M6IEwsIHUqLCBILCBVIAoKYGBge3IsIGVjaG8gPSBGQUxTRSxmaWcuYWxpZ249J2NlbnRlcicsIGZpZy53aWR0aD0xMCwgZmlnLmhlaWdodD04fQp6IDwtIDMKaGMgPC0gMC4zCnowIDwtIDAuMSAqIGhjCmQgPC0gMC43MypoYwprIDwtIDAuNAojZm9vdHByaW50IGRhdGEKZnBkYXRhIDwtIHhfb2sgJT4lCiAgc2VsZWN0KGRhdGUsIGhvcmEsIEwsIHVzdGFyLCB3c19lYywgSF9mbHV4LCB3c19lYywgd2RfZWMpICU+JQogIHJlbmFtZSgid3MiID0gIHdzX2VjLCAid2QiID0gd2RfZWMpICU+JQogIG11dGF0ZSh6ZXRhID0gKHotZCkvTCwKICAgICAgICAgIyB6L0wKICAgICAgICAgemV0YSA9IGlmZWxzZSh6ZXRhIDwgLTIgfCB6ZXRhID4gMS41LCBOQSwgemV0YSksCiAgICAgICAgIEhfZmx1eCA9IGlmZWxzZShIX2ZsdXggPCAtMTAwIHwgSF9mbHV4ID4gNDAwLCBOQSwgSF9mbHV4KSwKICAgICAgICAgTCA9IE5VTEwsCiAgICAgICAgIGggPSAoMSAtIDE1KnpldGEpXigtMS80KSkKZnBkYXRhCnN1bW1hcnkoZnBkYXRhKQpmcGRhdGEgJT4lCiAgc2VsZWN0KC1ob3JhLCAtaCkgJT4lCnRpbWVQbG90KG5hbWVzKC4pWy0xXSkKYGBgCgpIaXN0b2dyYW1hcwoKYGBge3J9CiMgVQpnZ3Bsb3QoZnBkYXRhLCAKICAgICAgIGFlcyh3cykpICsgCiAgZ2VvbV9oaXN0b2dyYW0obmEucm0gPSBUUlVFKSArIAogIGxhYnMoeCA9IGV4cHJlc3Npb24oVSksIHkgPSAiRnJlcXXDqm5jaWEgZGUgb2NvcnLDqm5jaWEiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMC4wMSwgMC4wMSksIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBzY2FsZXM6OnByZXR0eV9icmVha3MoMTApKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGV4cGFuZCA9IGMoMC4wMSwgMC4wMSksIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBzY2FsZXM6OnByZXR0eV9icmVha3MoMTApKSArCiAgdGhlbWVfYncoYmFzZV9zaXplID0gMTYpCiMgdXN0YXIKZ2dwbG90KGZwZGF0YSwgCiAgICAgICBhZXModXN0YXIpKSArIAogIGdlb21faGlzdG9ncmFtKG5hLnJtID0gVFJVRSkgKyAKICBsYWJzKHggPSBleHByZXNzaW9uKFVzdGFyIH5+IChtfnNeLTEpKSwgeSA9ICJGcmVxdcOqbmNpYSBkZSBvY29ycsOqbmNpYSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLjAxLCAwLjAxKSwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNjYWxlczo6cHJldHR5X2JyZWFrcygxMCkpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLjAxLCAwLjAxKSwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNjYWxlczo6cHJldHR5X2JyZWFrcygxMCkpICsKICB0aGVtZV9idyhiYXNlX3NpemUgPSAxNikKIyB6L0wKZ2dwbG90KGZwZGF0YSwgCiAgICAgICBhZXMoemV0YSkpICsgCiAgZ2VvbV9oaXN0b2dyYW0obmEucm0gPSBUUlVFKSArIAogIGxhYnMoeCA9IGV4cHJlc3Npb24oei9MKSwgeSA9ICJGcmVxdcOqbmNpYSBkZSBvY29ycsOqbmNpYSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLjAxLCAwLjAxKSwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNjYWxlczo6cHJldHR5X2JyZWFrcygxMCkpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLjAxLCAwLjAxKSwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNjYWxlczo6cHJldHR5X2JyZWFrcygxMCkpICsKICB0aGVtZV9idyhiYXNlX3NpemUgPSAxNikKcXVhbnRpbGUoZnBkYXRhJHpldGEsIHByb2JzID0gMDozLzMsbmEucm0gPSBUUlVFKQpxdWFudGlsZShmcGRhdGEkemV0YSwgbmEucm0gPSBUUlVFKQojIGgKZ2dwbG90KGZwZGF0YSwgCiAgICAgICBhZXMoaCkpICsgCiAgZ2VvbV9oaXN0b2dyYW0obmEucm0gPSBUUlVFKSArIAogIGxhYnMoeCA9IGV4cHJlc3Npb24oaCksIHkgPSAiRnJlcXXDqm5jaWEgZGUgb2NvcnLDqm5jaWEiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMC4wMSwgMC4wMSksIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBzY2FsZXM6OnByZXR0eV9icmVha3MoMTApKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGV4cGFuZCA9IGMoMC4wMSwgMC4wMSksIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBzY2FsZXM6OnByZXR0eV9icmVha3MoMTApKSArCiAgdGhlbWVfYncoYmFzZV9zaXplID0gMTYpCmBgYAoKQ29uZGnDp8O1ZXMgbmV1dHJhcyBwcmVkb21pbmFtLgoKYGBge3IsIGVjaG89RkFMU0V9CmZwZGF0YV9taCA8LSBmcGRhdGEgJT4lCiAgZmlsdGVyKGhvcmEgPj0gOCAmIGhvcmEgPD0gMTcpICU+JQogIHNlbGVjdCgtZGF0ZSkgJT4lCiAgZ3JvdXBfYnkoaG9yYSkgJT4lCiAgc3VtbWFyaXNlX2FsbChtZWFuLCBuYS5ybSA9IFRSVUUpICU+JQogIGRhdGEuZnJhbWUoKQpgYGAKCkPDoWxjdWxvICpmb290cHJpbnQqIHBhcmEgY29uZGnDp8O1ZXMgbmV1dHJhczoKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmZwZGF0YV9taApGUCA8LSBmdW5jdGlvbihVID0gMyAgICAgICAjIG0vcwogICAgICAgICAgICAgICx1c3RhciA9IDAuMyAjIG0vcwogICAgICAgICAgICAgICx6ID0gMi41ICAgICAjIG0KICAgICAgICAgICAgICAsaGMgPSAwLjMgICAgIyBtCiAgICAgICAgICAgICAgLGsgID0gMC40MSAKICAgICAgICAgICAgICAseCA9IDA6NTAwICAjIG0KICAgICAgICAgICAgICAseG1heCA9IEZBTFNFKXsKICBkIDwtIDAuNzMqaGMgIyBtCiAgZmV0Y2ggPC0gKFUvdXN0YXIpKigoei9kKS9rKSooMS94XjIpKmV4cCgoLVUvdXN0YXIpKigoei1kKS9rKSooMS94KSkKICBmZXRjaFtpcy5uYShmZXRjaCldIDwtIE5BCiAgaWYoeG1heCkgcmV0dXJuKHhbd2hpY2gubWF4KGZldGNoKV0pCiAgcmV0dXJuKGZldGNoKQp9CmRpc3QgPC0gMDo1MDAKZmV0Y2ggPC0gRlAoeCA9IGRpc3QpCnBsb3QoZGlzdCwgZmV0Y2gsIHR5cGUgPSAibCIsIGxhcyA9IDEpCmBgYAoKQ2FsY3VsYW5kbyAqeG1heCosIGEgcG9zacOnw6NvIG3DoXhpbWEgZGUgKmZvb3RwcmludCosIG91IHNlamEsIGEgw6FyZWEgZW0gcXVlIGEgb2JzZXJ2YcOnw6NvICgwLHopIMOpIG1haXMgc2Vuc8OtdmVsLiDDiSBlc3RpbWFkYSBpZ3VhbGFuZG8gYSB6ZXJvIGEgcHJpbWVpcmEgZGVyaXZhZGEgZGEgZnVuw6fDo28gZG8gKmZvb3RwcmludCogY29tIHJlbGHDp8OjbyBhIHguCgpgYGB7ciwgZWNobyAgPSBGQUxTRX0KWG1heCA8LSBmdW5jdGlvbihVLCB1c3Rhcil7CihVL3VzdGFyKSooMi41LSgwLjczKjAuMykpLygyKmspICAKfQpmcGRhdGEgPC0gbXV0YXRlKGZwZGF0YSwgeG1heCA9IFhtYXgoVSA9IHdzLCB1c3RhciA9IHVzdGFyKSkKZnBkYXRhCnRpbWVQbG90KGZwZGF0YSwgInhtYXgiKQojIGhpc3RvZ3JhbWEgZGUgeG1heApnZ3Bsb3QoZnBkYXRhLCAKICAgICAgIGFlcyh4bWF4KSkgKyAKICBnZW9tX2hpc3RvZ3JhbShuYS5ybSA9IFRSVUUpICsgCiAgbGFicyh4ID0gZXhwcmVzc2lvbih4bWF4IH5+IChtKSksIHkgPSAiRnJlcXXDqm5jaWEgZGUgb2NvcnLDqm5jaWEiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMC4wMSwgMC4wMSksIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBzY2FsZXM6OnByZXR0eV9icmVha3MoMTApKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGV4cGFuZCA9IGMoMC4wMSwgMC4wMSksIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBzY2FsZXM6OnByZXR0eV9icmVha3MoMTApKSArCiAgdGhlbWVfYncoYmFzZV9zaXplID0gMTYpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRSxyZXN1bHRzPSdoaWRlJywgZmlnLnNob3c9J2hpZGUnfQp0diA8LSB0aW1lVmFyaWF0aW9uKGZwZGF0YSwgInhtYXgiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CnBsb3QodHYsICJob3VyIikKcGxvdCh0diwgIm1vbnRoIikKYGBgCgoKYGBge3IsIGVjaG8gPSBGQUxTRX0KcG9sbHV0aW9uUm9zZShmcGRhdGEsICJ4bWF4IiwgcGFkZGxlID0gRkFMU0UpCmBgYAoKCmBgYHtyLCBlY2hvID0gRkFMU0UsIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLndpZHRoPTEwLCBmaWcuaGVpZ2h0PTEyfQpmcGRhdGEgJT4lIAogICAjZmlsdGVyKGhvcmEgPj0gOCAmIGhvcmEgPD0gMTcpICAlPiUKcG9sbHV0aW9uUm9zZSgieG1heCIsIHBhZGRsZSA9IEZBTFNFLCB0eXBlID0gImhvdXIiLCBsYXlvdSA9IGMoNiw0KSkKYGBgCgpGcmVxdcOqbmNpYSBkZSBvY29ycsOqbmNpYSBkZSBgeG1heGAgKGJhcnJhIGRlIGNvcmVzKSBlbSBmdW7Dp8OjbyBkYSBkaXJlw6fDo28gZG8gdmVudG8uIEPDrXJjdWxvcyBjaW56YSBpbmRpY2FtIGB4bWF4YC4KClBlcsOtb2RvIGRpdXJubyBlIG5vdHVybm86CgpgYGB7ciwgZWNobyA9IEZBTFNFLCBmaWcuYWxpZ249J2NlbnRlcicsIGZpZy53aWR0aD0xMiwgZmlnLmhlaWdodD01fQojIHhtYXggbcOpZGlvIHBvciB2ZWxvY2lkYWRlIGUgc2UKZnBkYXRhICU+JSAKICBtdXRhdGUod3MgPXhtYXgsIHhtYXggPSBOVUxMKSAlPiUKICAgI2ZpbHRlcihob3JhID49IDggJiBob3JhIDw9IDE3KSAlPiUKcG9sYXJGcmVxKHdzLmludCA9IDEwLCB3cy51cHBlciA9IDgwLCBvZmZzZXQgPSAyLCB0eXBlID0gImRheWxpZ2h0IikKIyBmcGRhdGEgJT4lIAojIHBvbGFyUGxvdChwb2xsdXRhbnQgPSAieG1heCIpCmBgYAoKR2VyYWw6CgpgYGB7ciwgZWNobyA9IEZBTFNFLCBmaWcuYWxpZ249J2NlbnRlcicsIGZpZy53aWR0aD04LCBmaWcuaGVpZ2h0PTh9CiMgeG1heCBtw6lkaW8gcG9yIHZlbG9jaWRhZGUgZSBzZQpwZiA8LSAKZnBkYXRhICU+JSAKICBtdXRhdGUod3MgPXhtYXgsIHhtYXggPSBOVUxMKSAlPiUKICAgI2ZpbHRlcihob3JhID49IDggJiBob3JhIDw9IDE3KSAlPiUKcG9sYXJGcmVxKHdzLmludCA9IDEwLCB3cy51cHBlciA9IDgwLCBvZmZzZXQgPSAyKQojIGZwZGF0YSAlPiUgCiMgcG9sYXJQbG90KHBvbGx1dGFudCA9ICJ4bWF4IikKcGYkZGF0YQpwc3ljaDo6ZGVzY3JpYmUocGYkZGF0YSkKYGBgCgojIyBQb250b3Mgc2VsZWNpb25hZG9zOgoKIVsqKlgqKiBpbmRpY2EgbG9jYWwgZGEgYW1vc3RyYSwgYXJjb3Mgc8OjbyBhcyBkaXN0w6JuY2lhcy5dKC4uL2ZpZ3MvcG9udG9zX2Ftb3N0cmFfc29sb19DQVMucG5nICJQb250b3MgcGFyYSBhbW9zdHJhZ2VtLiIpCgotIEFtb3N0cmEgMSwgbmEgdG9ycmUgw6AgYWxndW5zIG1ldHJvcyBkb3Mgc2Vuc29yZXMgZGUgdW1pZGFkZSBkbyBzb2xvLCBwcm9mdW5kaWRhZGUgMSBtIChuw612ZWlzIDUsIDE1LCAzMCwgNTAsIDc1LCAxMDAgY20pLgoKLSBBbW9zdHJhIDIsIGEgMjUgbSBuYSBkaXJlw6fDo28gZW50cmUgb3Mgc2V0b3JlcyBMZXN0ZS1Ob3JkZXN0ZSBkYSB0b3JyZSwgcHJvZnVuZGlkYWRlIDUwIGNtIChuw612ZWlzIDUsIDE1LCAzMCwgNTAgY20pLgoKLSBBbW9zdHJhIDMsIGEgMzUgbSBuYSBkaXJlw6fDo28gU3VkZXN0ZSBkYSB0b3JyZSwgcHJvZnVuZGlkYWRlIDUwIGNtIChuw612ZWlzIDUsIDE1LCAzMCwgNTAgY20pLgoKLSBBbW9zdHJhIDQsIGEgIDE1IG0gbmEgZGlyZcOnw6NvIGVudHJlIG9zIHNldG9yZXMgU3VsLVN1ZGVzdGUgZGEgdG9ycmUsIHByb2Z1bmRpZGFkZSA1MCBjbSAobsOtdmVpcyA1LCAxNSwgMzAsIDUwIGNtKS4KCi0gQW1vc3RyYSA1LCBhICAyNSBtIG5hIGRpcmXDp8OjbyBTdWRlc3RlIGRhIHRvcnJlLCBwcm9mdW5kaWRhZGUgNTAgY20gKG7DrXZlaXMgNSwgMTUsIDMwLCA1MCBjbSkuCgpObyB0b3RhbCAgYHIgKDQqNCArIDEqNilgIHBvbnRvcyBkZSBhbW9zdHJhIChhbsOpaXMpLgoKU8OzIG1hcmNhciBubyBHb29nbGUgRWFydGguCgoKCgoK