• Summary
  • Introduction
    • Climate Change vs. Yields
    • Use Case
    • Soybean
      • Seventh Largest Crop Globally
      • Top Soybean Producers
      • US Soybean Production
  • Methodology
    • Data
      • Sources:
      • Collection:
      • Cleaning:
      • Analysis:
      • Scope and Limitations:
  • Analysis
    • Time Series of Weather, Yield, and Price
    • Statistical Summary
    • Precipitation vs Yield
    • Yield vs Price
    • Temps vs. Yield
  • Conclusions
    • Statistically Significant Findings
    • Statistically Insignificant Findings
    • Additional Analysis
  • References
    • Soybean Data
    • Weather Data
    • Data Cleaning Processes


Do Soybean Yields Correlate to Temperature and Precipitation Variations?

Soybean Field


Summary

This report sought to assess the impact of climate change on crop yields by analyzing weather data, soybean yields, and soybean prices between 2000 and 2022 for the Top 11 soybean producing States. Data was obtained from public sources at USDA, NOAA, and FAO.

Linear regressions were performed to assess the relationship between:

  • Max, mean, and min temperatures and soybean yield,
  • Precipitation and soybean yield
  • Soybean yield and soybean price

The analysis determined the following:

  • Precipitation was strongly correlated to yield and accounted for 67% of yield variation.
  • Yield was moderately correlated to soybean price and accounted for 17% of price variation.
  • Max, mean, and min temperatures were not correlated to yield (nearly zero correlation)

Introduction

Given the widespread media reports on extreme weather events, it is evident that global climate change is a growing concern and its impacts may be increasing. One aspect of concern is whether global climate change will impact food security.

This report sought to assess the impact of global climate change on crop yields by analyzing weather data, soybean crop yields, and soybean prices in the United States between 2000 and 2022. Public datasets from the USDA and NOAA were used for the analysis.

Climate Change vs. Yields

Climate change has reduced food security and affected water security. . . .Although overall agricultural productivity has increased, climate change has slowed this growth over the past 50 years globally (medium confidence), with related negative impacts mainly in mid and low latitude regions but positive impacts in some high latitude regions (high confidence).
IPCC (emphasis added)

Use Case

To assess the impact of climate change on crop yields, this report used public data from USDA and NOAA to analyze soybean yields in the United States from 2000 to 2022. Specifically, this report examined:

  • Whether soybean yields are correlated to temperatures and precipitation

  • Whether soybean prices are correlated to yields  

Soybean

Soybean (Glycine max) is one of the most important world crops and is grown for oil and protein. FAO (emphasis added)

Seventh Largest Crop Globally

Top Soybean Producers

US Soybean Production

Soybean is a major U.S. crop, with 87 million planted acres in 2022, making it the second-most planted crop after corn. Soybean is a key source of livestock feed and also an export crop.
USDA (emphasis added)

Methodology

The weather and soybean data analyzed for this report were collected from the Top 11 soybean producing States, which together produced 83% of US soybean from 2000 to 2022.

Daily weather and monthly soybean price data were annualized to synchronize measurement periods with the annual soybean yield data.

Data imputation and linear regression analysis were carried out using the R programming language.

Data

The primary data were obtained from public datasets made available by US government agencies (USDA and NOAA). The data were processed using SQL on BigQuery and analyzed with R programming language using RStudio.

Sources:

  • National Oceanic and Atmospheric Administration (NOAA)
    • Global Surface Summary of the Day (GSOD)
  • US Dept of Agriculture (USDA):
    • National Agricultural Statistics Service (NASS)
    • Foreign Agricultural Service / Int’l Production Assessment Division (FAS/IPAD)
  • UN Food and Agriculture Organization (FAO)
    • FAOSTAT

Collection:

  • Selected relevant data from public datasets to create SQL tables and Excel sheets from CSV files
    • Soybean yield per acre (USDA/NASS)
    • Soybean prices (USDA/NASS)
    • Global crop production (FAOSTAT)
  • Queried BigQuery GSOD datasets to select data and create new SQL tables
    • NOAA reporting stations in the Top 11 soybean States
    • Weather data (temps and precip) in the Top 11 soybean States for 2000 - 2022

Cleaning:

  • Combined annual weather data from 2000 - 2022 tables to create a single weather table
  • Joined SQL tables to filter weather and soybean data to relevant States
  • Validated data types and values in SQL tables
  • Harmonized varied NULL value formats
  • Used R to impute missing weather data values using MICE method
  • Created change log to document cleaning process and data transformations
  • Created metadata file to document dataset information

Analysis:

  • Used R programming language to create data frames from SQL tables
  • Plotted time series graph of temperatures, precipitation, yield, and price
  • Performed bivariate regression analysis of weather and soybean data
    • Max, Mean, Min Temperatures vs. Yield
    • Precipitation vs. Yield
    • Yield vs. Price
  • Plotted linear regression models
  • Evaluated R-squared and P value outcomes of the regression analysis

Scope and Limitations:

  • Data taken only from Top 11 Soybean Producing States between 2000-2022
  • Sub-annual weather data measurements might offer additional insights but would require statistical analysis beyond the scope of this report.
  • Analysis did not include other relevant factors, including irrigation, planting dates, seed types, fertilizer applications, herbicides & pesticides, etc.

Analysis

  • This report aggregated and averaged the data for weather, soybean yields, and soybean prices from 2000 to 2022 for the Top 11 States, which produced 83% of US soybeans.

  • Daily weather and monthly price data were annualized to synchronize measurement periods with annual yield measurements.

  • The following variables were analyzed:

    • Maximum Daily Temperature
    • Median Daily Temperature
    • Minimum Daily Temperature
    • Daily Precipitation
    • Monthly Soybean Price (USD/Bushel)
    • Annual Soybean Yield (Bushels/Acre)

Time Series of Weather, Yield, and Price

Statistical Summary

Independent Dependent Sample Pearson R^2 P-Value
Precip Yield 23 .82 .67 .001
Yield Price 23 .42 .17 .05
Max Temp Yield 23 .05 .002 .83
Mean Temp Yield 23 .02 .0004 .93
Min Temp Yield 23 .01 .0002 .95
  • Precipitation is strongly correlated with Yield at a .001 level of statistical significance.
  • Yield is moderately correlated with Price at a .05 level of statistical significance.
  • Max, Mean, and Min Temps are NOT correlated with Yield.

Precipitation vs Yield

Yield vs Price

Temps vs. Yield

Conclusions

The regression analysis of the weather, yield, and price data provides three key findings with respect to the impact of climate change on soybean yields and prices in the Top 11 Soybean Producing States between 2000 and 2022.

Statistically Significant Findings

  1. Annual precipitation is strongly correlated with annual soybean yields at a .001 level of significance and explains 67% of the variation in annual yields.

  2. Annual soybean yields are moderately correlated to annual soybean prices at a .05 level of significance but only explain 17% of variation in annual prices.

Statistically Insignificant Findings

  1. There is no statistically significant correlation between annual Max, Mean, and Min temperatures and soybean yields. Indeed, the correlations betweenk the temperatures and yield are nearly zero.

With respect to the impact of weather on soybean yields in the Midwest United States between 2000-2022, precipitation levels explain 67% of yield variation, while temperatures had no correlation to yields.

Additional Analysis

Given additional time and resources, particularly regarding statistical methodology, it would be valuable to analyze the following parameters not included in this report:

  • Sub-annual measurement periods for temperatures and precipitation
  • Planting dates
  • Irrigation status
  • Seed varieties
  • Fertilizer, pesticide, & herbicide applications
  • Additional crops
  • Additional geographic regions of the world

References

Soybean Data

  • USDA
    • National Agricultural Statistics Service (NASS)
    • International Production Assessment Division (IPAD)
  • Food and Agriculture Organization (FAO)

Weather Data

  • NOAA Global Surface Summary of the Day - GSOD on Google Cloud BigQuery

Data Cleaning Processes

LS0tDQp0aXRsZTogIlNveWJlYW4gWWllbGRzIGluIGEgQ2hhbmdpbmcgQ2xpbWF0ZSINCmF1dGhvcjogIlJlZWQgU2xhY2siDQpkYXRlOiAnTGFzdCBVcGRhdGVkOiBgciBTeXMuRGF0ZSgpYCcNCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0aGVtZTogY2VydWxlYW4NCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6ICc0Jw0KICAgIGRmX3ByaW50OiBwYWdlZA0KLS0tDQoNCmBgYHtjc3MsIGVjaG89RkFMU0V9DQpwLCBib2R5IHsNCiAgZm9udC1zaXplOiAxNnB4Ow0KfQ0KDQouaW1hZ2UtdGV4dC1jb250YWluZXIgew0KICBkaXNwbGF5OiBmbGV4OyAvKiBVc2UgZmxleGJveCBmb3IgbGF5b3V0ICovDQogIGFsaWduLWl0ZW1zOiBjZW50ZXI7IC8qIENlbnRlciB2ZXJ0aWNhbGx5ICovXw0KfQ0KDQouaW1hZ2Ugew0KICBib3JkZXI6IDRweCBzb2xpZCAjMDA3QkE3OyAvKiBNYWtlIGJvcmRlciBjb2xvciBjZXJ1bGVhbiAqLw0KICBtYXgtd2lkdGg6IDEwMCU7IC8qIEFkanVzdCB0aGUgd2lkdGggb2YgdGhlIGltYWdlIGFzIG5lZWRlZCAqLw0KICBtYXJnaW4tbGVmdDogMTBweDsgLyogQWRkIHNvbWUgc3BhY2luZyBiZXR3ZWVuIHRoZSBpbWFnZSBhbmQgdGV4dCAqLw0KfQ0KDQouc2NyZWVuLXBlcmNlbnQgew0KICB3aWR0aDogODAlOyAvKiBBZGp1c3QgdGhlIHBlcmNlbnRhZ2UgYXMgbmVlZGVkICovDQogIG1heC13aWR0aDogMTAwJTsgLyogRW5zdXJlIHRoZSBpbWFnZSBkb2Vzbid0IGV4Y2VlZCB0aGUgc2NyZWVuIHdpZHRoICovDQogIGhlaWdodDogYXV0bzsgLyogTWFpbnRhaW4gdGhlIGFzcGVjdCByYXRpbyAqLw0KfQ0KDQouaW1hZ2UtY2FwdGlvbiB7DQogICAgY29sb3I6ICMwMDdCQTc7IC8qIE1ha2UgZm9udCBjb2xvciBjZXJ1bGVhbiAqLw0KICAgIGZvbnQtc2l6ZTogMjBweDsgLyogQWRqdXN0IHRoZSBmb250IHNpemUgYXMgbmVlZGVkICovDQp9DQoNCg0KYGBgDQpcDQoNCjxkaXYgY2xhc3M9ImltYWdlLXRleHQtY29udGFpbmVyIj4NCiAgPHAgY2xhc3M9ImltYWdlLWNhcHRpb24iPkRvIFNveWJlYW4gWWllbGRzIENvcnJlbGF0ZSB0byBUZW1wZXJhdHVyZSBhbmQgUHJlY2lwaXRhdGlvbiBWYXJpYXRpb25zPzwvcD4NCiAgPGltZyBzcmM9Ii4vaW1nL3NveWJlYW5zLnBuZyIgYWx0PSJTb3liZWFuIEZpZWxkIiBjbGFzcz0iaW1hZ2UiPg0KPC9kaXY+DQoNClwNCg0KDQojIyBTdW1tYXJ5IFwNCg0KVGhpcyByZXBvcnQgc291Z2h0IHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIGNsaW1hdGUgY2hhbmdlIG9uIGNyb3AgeWllbGRzIGJ5IGFuYWx5emluZyB3ZWF0aGVyIGRhdGEsIHNveWJlYW4geWllbGRzLCBhbmQgc295YmVhbiBwcmljZXMgYmV0d2VlbiAyMDAwIGFuZCAyMDIyIGZvciB0aGUgVG9wIDExIHNveWJlYW4gcHJvZHVjaW5nIFN0YXRlcy4gRGF0YSB3YXMgb2J0YWluZWQgZnJvbSBwdWJsaWMgc291cmNlcyBhdCBVU0RBLCBOT0FBLCBhbmQgRkFPLg0KXA0KDQpMaW5lYXIgcmVncmVzc2lvbnMgd2VyZSBwZXJmb3JtZWQgdG8gYXNzZXNzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbjoNClwNCg0KLSBNYXgsIG1lYW4sIGFuZCBtaW4gdGVtcGVyYXR1cmVzIGFuZCBzb3liZWFuIHlpZWxkLCANCi0gUHJlY2lwaXRhdGlvbiBhbmQgc295YmVhbiB5aWVsZA0KLSBTb3liZWFuIHlpZWxkIGFuZCBzb3liZWFuIHByaWNlDQpcDQoNClRoZSBhbmFseXNpcyBkZXRlcm1pbmVkIHRoZSBmb2xsb3dpbmc6DQpcDQoNCi0gUHJlY2lwaXRhdGlvbiB3YXMgc3Ryb25nbHkgY29ycmVsYXRlZCB0byB5aWVsZCBhbmQgYWNjb3VudGVkIGZvciA2NyUgb2YgeWllbGQgdmFyaWF0aW9uLiANCi0gWWllbGQgd2FzIG1vZGVyYXRlbHkgY29ycmVsYXRlZCB0byBzb3liZWFuIHByaWNlIGFuZCBhY2NvdW50ZWQgZm9yIDE3JSBvZiBwcmljZSB2YXJpYXRpb24uDQotIE1heCwgbWVhbiwgYW5kIG1pbiB0ZW1wZXJhdHVyZXMgd2VyZSBub3QgY29ycmVsYXRlZCB0byB5aWVsZCAobmVhcmx5IHplcm8gY29ycmVsYXRpb24pDQpcDQpcDQoNCg0KIyMgSW50cm9kdWN0aW9uIA0KDQpHaXZlbiB0aGUgd2lkZXNwcmVhZCBtZWRpYSByZXBvcnRzIG9uIGV4dHJlbWUgd2VhdGhlciBldmVudHMsIGl0IGlzIGV2aWRlbnQgdGhhdCBnbG9iYWwgY2xpbWF0ZSBjaGFuZ2UgaXMgYSBncm93aW5nIGNvbmNlcm4gYW5kIGl0cyBpbXBhY3RzIG1heSBiZSBpbmNyZWFzaW5nLiBPbmUgYXNwZWN0IG9mIGNvbmNlcm4gaXMgd2hldGhlciBnbG9iYWwgY2xpbWF0ZSBjaGFuZ2Ugd2lsbCBpbXBhY3QgZm9vZCBzZWN1cml0eS4gIA0KXA0KVGhpcyByZXBvcnQgc291Z2h0IHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIGdsb2JhbCBjbGltYXRlIGNoYW5nZSBvbiBjcm9wIHlpZWxkcyBieSBhbmFseXppbmcgd2VhdGhlciBkYXRhLCBzb3liZWFuIGNyb3AgeWllbGRzLCBhbmQgc295YmVhbiBwcmljZXMgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgYmV0d2VlbiAyMDAwIGFuZCAyMDIyLiBQdWJsaWMgZGF0YXNldHMgZnJvbSB0aGUgVVNEQSBhbmQgTk9BQSB3ZXJlIHVzZWQgZm9yIHRoZSBhbmFseXNpcy4NClwNCg0KIyMjIENsaW1hdGUgQ2hhbmdlIHZzLiBZaWVsZHMgXA0KICANCj4gKipDbGltYXRlIGNoYW5nZSBoYXMgcmVkdWNlZCBmb29kIHNlY3VyaXR5KiogYW5kIGFmZmVjdGVkIHdhdGVyIHNlY3VyaXR5LiAuIC4gLkFsdGhvdWdoIG92ZXJhbGwgYWdyaWN1bHR1cmFsIHByb2R1Y3Rpdml0eSBoYXMgaW5jcmVhc2VkLCBjbGltYXRlIGNoYW5nZSBoYXMgc2xvd2VkIHRoaXMgZ3Jvd3RoIG92ZXIgdGhlIHBhc3QgNTAgeWVhcnMgZ2xvYmFsbHkgKG1lZGl1bSBjb25maWRlbmNlKSwgd2l0aCByZWxhdGVkICoqbmVnYXRpdmUgaW1wYWN0cyBtYWlubHkgaW4gbWlkIGFuZCBsb3cgbGF0aXR1ZGUqKiByZWdpb25zIGJ1dCAqKnBvc2l0aXZlIGltcGFjdHMgaW4gc29tZSBoaWdoIGxhdGl0dWRlKiogcmVnaW9ucyAoaGlnaCBjb25maWRlbmNlKS4gIA0KW0lQQ0NdKGh0dHBzOi8vd3d3LmlwY2MuY2gvcmVwb3J0L2FyNi9zeXIvZG93bmxvYWRzL3JlcG9ydC9JUENDX0FSNl9TWVJfU1BNLnBkZikgKGVtcGhhc2lzIGFkZGVkKQ0KXA0KDQojIyMgVXNlIENhc2VcDQoNClRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIGNsaW1hdGUgY2hhbmdlIG9uIGNyb3AgeWllbGRzLCB0aGlzIHJlcG9ydCB1c2VkIHB1YmxpYyBkYXRhIGZyb20gVVNEQSBhbmQgTk9BQSB0byBhbmFseXplIHNveWJlYW4geWllbGRzIGluIHRoZSBVbml0ZWQgU3RhdGVzIGZyb20gMjAwMCB0byAyMDIyLiBTcGVjaWZpY2FsbHksIHRoaXMgcmVwb3J0IGV4YW1pbmVkOiAgXA0KDQotIFdoZXRoZXIgc295YmVhbiAqKnlpZWxkcyoqIGFyZSBjb3JyZWxhdGVkIHRvICoqdGVtcGVyYXR1cmVzKiogYW5kICoqcHJlY2lwaXRhdGlvbioqIFwNCg0KLSBXaGV0aGVyIHNveWJlYW4gKipwcmljZXMqKiBhcmUgY29ycmVsYXRlZCB0byAqKnlpZWxkcyoqIFwgIA0KDQojIyMgU295YmVhblwNCg0KPiAqKlNveWJlYW4qKiAoR2x5Y2luZSBtYXgpIGlzICoqb25lIG9mIHRoZSBtb3N0IGltcG9ydGFudCB3b3JsZCBjcm9wcyoqIGFuZCBpcyBncm93biBmb3Igb2lsIGFuZCBwcm90ZWluLiBbRkFPXShodHRwczovL3d3dy5mYW8ub3JnL2xhbmQtd2F0ZXIvZGF0YWJhc2VzLWFuZC1zb2Z0d2FyZS9jcm9wLWluZm9ybWF0aW9uL3NveWJlYW4vZW4vKSAoZW1waGFzaXMgYWRkZWQpICBcDQoNCiMjIyMgU2V2ZW50aCBMYXJnZXN0IENyb3AgR2xvYmFsbHkgDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdC50b3AxMF9jcm9wcw0KYGBgDQoNCiMjIyMgVG9wIFNveWJlYW4gUHJvZHVjZXJzIFwNCg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QudG9wNQ0KYGBgDQoNCg0KIyMjIyBVUyBTb3liZWFuIFByb2R1Y3Rpb24NCg0KPiAqKlNveWJlYW4gaXMgYSBtYWpvciBVLlMuIGNyb3AsKiogd2l0aCA4NyBtaWxsaW9uIHBsYW50ZWQgYWNyZXMgaW4gMjAyMiwgbWFraW5nIGl0IHRoZSAqKnNlY29uZC1tb3N0IHBsYW50ZWQgY3JvcCoqIGFmdGVyIGNvcm4uIFNveWJlYW4gaXMgYSBrZXkgc291cmNlIG9mIGxpdmVzdG9jayBmZWVkIGFuZCBhbHNvIGFuIGV4cG9ydCBjcm9wLiAgDQpbVVNEQV0oaHR0cHM6Ly93d3cuaXBjYy5jaC9yZXBvcnQvYXI2L3N5ci9kb3dubG9hZHMvcmVwb3J0L0lQQ0NfQVI2X1NZUl9TUE0ucGRmKSAoZW1waGFzaXMgYWRkZWQpICBcDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdC5tYXBfdG9wMTENCmBgYA0KDQojIyBNZXRob2RvbG9neSANCg0KDQpUaGUgd2VhdGhlciBhbmQgc295YmVhbiBkYXRhIGFuYWx5emVkIGZvciB0aGlzIHJlcG9ydCB3ZXJlIGNvbGxlY3RlZCBmcm9tIHRoZSBUb3AgMTEgc295YmVhbiBwcm9kdWNpbmcgU3RhdGVzLCB3aGljaCB0b2dldGhlciBwcm9kdWNlZCA4MyUgb2YgVVMgc295YmVhbiBmcm9tIDIwMDAgdG8gMjAyMi4gDQoNCkRhaWx5IHdlYXRoZXIgYW5kIG1vbnRobHkgc295YmVhbiBwcmljZSBkYXRhIHdlcmUgYW5udWFsaXplZCB0byBzeW5jaHJvbml6ZSBtZWFzdXJlbWVudCBwZXJpb2RzIHdpdGggdGhlIGFubnVhbCBzb3liZWFuIHlpZWxkIGRhdGEuICANCg0KRGF0YSBpbXB1dGF0aW9uIGFuZCBsaW5lYXIgcmVncmVzc2lvbiBhbmFseXNpcyB3ZXJlIGNhcnJpZWQgb3V0IHVzaW5nIHRoZSBSIHByb2dyYW1taW5nIGxhbmd1YWdlLg0KXA0KDQojIyMgRGF0YQ0KDQpUaGUgcHJpbWFyeSBkYXRhIHdlcmUgb2J0YWluZWQgZnJvbSBwdWJsaWMgZGF0YXNldHMgbWFkZSBhdmFpbGFibGUgYnkgVVMgZ292ZXJubWVudCBhZ2VuY2llcyAoVVNEQSBhbmQgTk9BQSkuIFRoZSBkYXRhIHdlcmUgcHJvY2Vzc2VkIHVzaW5nIFNRTCBvbiBCaWdRdWVyeSBhbmQgYW5hbHl6ZWQgd2l0aCBSIHByb2dyYW1taW5nIGxhbmd1YWdlIHVzaW5nIFJTdHVkaW8uIA0KDQojIyMjIFNvdXJjZXM6IA0KLSBOYXRpb25hbCBPY2VhbmljIGFuZCBBdG1vc3BoZXJpYyBBZG1pbmlzdHJhdGlvbiAoKipOT0FBKiopDQogIC0gR2xvYmFsIFN1cmZhY2UgU3VtbWFyeSBvZiB0aGUgRGF5IChHU09EKQ0KLSBVUyBEZXB0IG9mIEFncmljdWx0dXJlICgqKlVTREEqKik6IA0KICAtIE5hdGlvbmFsIEFncmljdWx0dXJhbCBTdGF0aXN0aWNzIFNlcnZpY2UgKE5BU1MpDQogIC0gRm9yZWlnbiBBZ3JpY3VsdHVyYWwgU2VydmljZSAvIEludCdsIFByb2R1Y3Rpb24gQXNzZXNzbWVudCBEaXZpc2lvbiAoRkFTL0lQQUQpDQotIFVOIEZvb2QgYW5kIEFncmljdWx0dXJlIE9yZ2FuaXphdGlvbiAoKipGQU8qKikNCiAgLSBGQU9TVEFUDQoNCg0KIyMjIyBDb2xsZWN0aW9uOg0KLSBTZWxlY3RlZCByZWxldmFudCBkYXRhIGZyb20gcHVibGljIGRhdGFzZXRzIHRvIGNyZWF0ZSBTUUwgdGFibGVzIGFuZCBFeGNlbCBzaGVldHMgZnJvbSBDU1YgZmlsZXMgDQogIC0gU295YmVhbiB5aWVsZCBwZXIgYWNyZSAoVVNEQS9OQVNTKQ0KICAtIFNveWJlYW4gcHJpY2VzIChVU0RBL05BU1MpDQogIC0gR2xvYmFsIGNyb3AgcHJvZHVjdGlvbiAoRkFPU1RBVCkNCi0gUXVlcmllZCBCaWdRdWVyeSBHU09EIGRhdGFzZXRzIHRvIHNlbGVjdCBkYXRhIGFuZCBjcmVhdGUgbmV3IFNRTCB0YWJsZXMNCiAgLSBOT0FBIHJlcG9ydGluZyBzdGF0aW9ucyBpbiB0aGUgVG9wIDExIHNveWJlYW4gU3RhdGVzDQogIC0gV2VhdGhlciBkYXRhICh0ZW1wcyBhbmQgcHJlY2lwKSBpbiB0aGUgVG9wIDExIHNveWJlYW4gU3RhdGVzIGZvciAyMDAwIC0gMjAyMg0KDQoNCiMjIyMgQ2xlYW5pbmc6DQotIENvbWJpbmVkIGFubnVhbCB3ZWF0aGVyIGRhdGEgZnJvbSAyMDAwIC0gMjAyMiB0YWJsZXMgdG8gY3JlYXRlIGEgc2luZ2xlIHdlYXRoZXIgdGFibGUNCi0gSm9pbmVkIFNRTCB0YWJsZXMgdG8gZmlsdGVyIHdlYXRoZXIgYW5kIHNveWJlYW4gZGF0YSB0byByZWxldmFudCBTdGF0ZXMNCi0gVmFsaWRhdGVkIGRhdGEgdHlwZXMgYW5kIHZhbHVlcyBpbiBTUUwgdGFibGVzDQotIEhhcm1vbml6ZWQgdmFyaWVkIE5VTEwgdmFsdWUgZm9ybWF0cw0KLSBVc2VkIFIgdG8gaW1wdXRlIG1pc3Npbmcgd2VhdGhlciBkYXRhIHZhbHVlcyB1c2luZyBNSUNFIG1ldGhvZA0KLSBDcmVhdGVkIFtjaGFuZ2UgbG9nXSguL2NoYW5nZV9sb2cubmIuaHRtbCkgdG8gZG9jdW1lbnQgY2xlYW5pbmcgcHJvY2VzcyBhbmQgZGF0YSB0cmFuc2Zvcm1hdGlvbnMNCi0gQ3JlYXRlZCBbbWV0YWRhdGFdKC4vbWV0YWRhdGEubmIuaHRtbCkgZmlsZSB0byBkb2N1bWVudCBkYXRhc2V0IGluZm9ybWF0aW9uDQoNCg0KIyMjIyBBbmFseXNpczoNCi0gVXNlZCBSIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIGNyZWF0ZSBkYXRhIGZyYW1lcyBmcm9tIFNRTCB0YWJsZXMNCi0gUGxvdHRlZCB0aW1lIHNlcmllcyBncmFwaCBvZiB0ZW1wZXJhdHVyZXMsIHByZWNpcGl0YXRpb24sIHlpZWxkLCBhbmQgcHJpY2UNCi0gUGVyZm9ybWVkIGJpdmFyaWF0ZSByZWdyZXNzaW9uIGFuYWx5c2lzIG9mIHdlYXRoZXIgYW5kIHNveWJlYW4gZGF0YSANCiAgLSBNYXgsIE1lYW4sIE1pbiBUZW1wZXJhdHVyZXMgdnMuIFlpZWxkDQogIC0gUHJlY2lwaXRhdGlvbiB2cy4gWWllbGQNCiAgLSBZaWVsZCB2cy4gUHJpY2UNCi0gUGxvdHRlZCBsaW5lYXIgcmVncmVzc2lvbiBtb2RlbHMgDQotIEV2YWx1YXRlZCBSLXNxdWFyZWQgYW5kIFAgdmFsdWUgb3V0Y29tZXMgb2YgdGhlIHJlZ3Jlc3Npb24gYW5hbHlzaXMNCg0KIyMjIyBTY29wZSBhbmQgTGltaXRhdGlvbnM6DQotIERhdGEgdGFrZW4gb25seSBmcm9tIFRvcCAxMSBTb3liZWFuIFByb2R1Y2luZyBTdGF0ZXMgYmV0d2VlbiAyMDAwLTIwMjINCi0gU3ViLWFubnVhbCB3ZWF0aGVyIGRhdGEgbWVhc3VyZW1lbnRzIG1pZ2h0IG9mZmVyIGFkZGl0aW9uYWwgaW5zaWdodHMgYnV0IHdvdWxkIHJlcXVpcmUgc3RhdGlzdGljYWwgYW5hbHlzaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIHJlcG9ydC4NCi0gQW5hbHlzaXMgZGlkIG5vdCBpbmNsdWRlIG90aGVyIHJlbGV2YW50IGZhY3RvcnMsIGluY2x1ZGluZyBpcnJpZ2F0aW9uLCBwbGFudGluZyBkYXRlcywgc2VlZCB0eXBlcywgZmVydGlsaXplciBhcHBsaWNhdGlvbnMsIGhlcmJpY2lkZXMgJiBwZXN0aWNpZGVzLCBldGMuDQoNCg0KDQojIyBBbmFseXNpcw0KDQotIFRoaXMgcmVwb3J0ICoqYWdncmVnYXRlZCoqIGFuZCAqKmF2ZXJhZ2VkKiogdGhlIGRhdGEgZm9yIHdlYXRoZXIsIHNveWJlYW4geWllbGRzLCBhbmQgc295YmVhbiBwcmljZXMgZnJvbSAyMDAwIHRvIDIwMjIgZm9yIHRoZSBUb3AgMTEgU3RhdGVzLCB3aGljaCBwcm9kdWNlZCA4MyUgb2YgVVMgc295YmVhbnMuIFwNCg0KLSBEYWlseSB3ZWF0aGVyIGFuZCBtb250aGx5IHByaWNlIGRhdGEgd2VyZSBhbm51YWxpemVkIHRvIHN5bmNocm9uaXplIG1lYXN1cmVtZW50IHBlcmlvZHMgd2l0aCBhbm51YWwgeWllbGQgbWVhc3VyZW1lbnRzLiANCg0KLSBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyB3ZXJlIGFuYWx5emVkOg0KICAtIE1heGltdW0gRGFpbHkgVGVtcGVyYXR1cmUNCiAgLSBNZWRpYW4gRGFpbHkgVGVtcGVyYXR1cmUNCiAgLSBNaW5pbXVtIERhaWx5IFRlbXBlcmF0dXJlDQogIC0gRGFpbHkgUHJlY2lwaXRhdGlvbg0KICAtIE1vbnRobHkgU295YmVhbiBQcmljZSAoVVNEL0J1c2hlbCkNCiAgLSBBbm51YWwgU295YmVhbiBZaWVsZCAoQnVzaGVscy9BY3JlKQ0KXA0KDQojIyMgVGltZSBTZXJpZXMgb2YgV2VhdGhlciwgWWllbGQsIGFuZCBQcmljZQ0KYGBge3IsIGVjaG89RkFMU0V9DQpwbG90LmNvbWJpbmVkX2xpbmVzDQpgYGANCg0KIyMjIFN0YXRpc3RpY2FsIFN1bW1hcnkNCnxJbmRlcGVuZGVudHxEZXBlbmRlbnR8U2FtcGxlfFBlYXJzb258Ul4yfFAtVmFsdWV8DQp8Oi18Oi18Oi06fDotOnw6LTp8Oi06fA0KfFByZWNpcHxZaWVsZHwyM3wuODJ8LjY3fC4wMDF8DQp8WWllbGR8UHJpY2V8MjN8LjQyfC4xN3wuMDV8DQp8TWF4IFRlbXB8WWllbGR8MjN8LjA1fC4wMDJ8LjgzfA0KfE1lYW4gVGVtcHxZaWVsZHwyM3wuMDJ8LjAwMDR8LjkzfA0KfE1pbiBUZW1wfFlpZWxkfDIzfC4wMXwuMDAwMnwuOTV8DQoNCg0KLSBQcmVjaXBpdGF0aW9uIGlzIHN0cm9uZ2x5IGNvcnJlbGF0ZWQgd2l0aCBZaWVsZCBhdCBhIC4wMDEgbGV2ZWwgb2Ygc3RhdGlzdGljYWwgc2lnbmlmaWNhbmNlLg0KLSBZaWVsZCBpcyBtb2RlcmF0ZWx5IGNvcnJlbGF0ZWQgd2l0aCBQcmljZSBhdCBhIC4wNSBsZXZlbCBvZiBzdGF0aXN0aWNhbCBzaWduaWZpY2FuY2UuDQotIE1heCwgTWVhbiwgYW5kIE1pbiBUZW1wcyBhcmUgTk9UIGNvcnJlbGF0ZWQgd2l0aCBZaWVsZC4NCg0KDQojIyMgUHJlY2lwaXRhdGlvbiB2cyBZaWVsZA0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QuYXZnX3ByZWMuc295X3lpZWxkDQpgYGANCg0KIyMjIFlpZWxkIHZzIFByaWNlDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3Quc295X3lpZWxkLnNveV9wcmljZQ0KYGBgDQoNCiMjIyBUZW1wcyB2cy4gWWllbGQNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdC5tYXhfdC5zb3lfeWllbGQNCnBsb3QubWVhbl90LnNveV95aWVsZA0KcGxvdC5taW5fdC5zb3lfeWllbGQNCmBgYA0KDQojIyBDb25jbHVzaW9ucw0KDQpUaGUgcmVncmVzc2lvbiBhbmFseXNpcyBvZiB0aGUgd2VhdGhlciwgeWllbGQsIGFuZCBwcmljZSBkYXRhIHByb3ZpZGVzICoqdGhyZWUga2V5IGZpbmRpbmdzKiogd2l0aCByZXNwZWN0IHRvIHRoZSBpbXBhY3Qgb2YgY2xpbWF0ZSBjaGFuZ2Ugb24gc295YmVhbiB5aWVsZHMgYW5kIHByaWNlcyBpbiB0aGUgVG9wIDExIFNveWJlYW4gUHJvZHVjaW5nIFN0YXRlcyBiZXR3ZWVuIDIwMDAgYW5kIDIwMjIuDQpcDQoNCg0KIyMjIFN0YXRpc3RpY2FsbHkgU2lnbmlmaWNhbnQgRmluZGluZ3MNCg0KMS4gQW5udWFsICoqcHJlY2lwaXRhdGlvbioqIGlzICoqc3Ryb25nbHkgY29ycmVsYXRlZCoqIHdpdGggYW5udWFsIHNveWJlYW4gKip5aWVsZHMqKiBhdCBhICoqLjAwMSoqIGxldmVsIG9mIHNpZ25pZmljYW5jZSBhbmQgZXhwbGFpbnMgKio2NyUqKiBvZiB0aGUgdmFyaWF0aW9uIGluIGFubnVhbCB5aWVsZHMuDQoNCjIuIEFubnVhbCBzb3liZWFuICoqeWllbGRzKiogYXJlICoqbW9kZXJhdGVseSBjb3JyZWxhdGVkKiogdG8gYW5udWFsIHNveWJlYW4gKipwcmljZXMqKiBhdCBhICoqLjA1KiogbGV2ZWwgb2Ygc2lnbmlmaWNhbmNlIGJ1dCBvbmx5IGV4cGxhaW4gKioxNyUqKiBvZiB2YXJpYXRpb24gaW4gYW5udWFsIHByaWNlcy4NClwNCg0KIyMjIFN0YXRpc3RpY2FsbHkgSW5zaWduaWZpY2FudCBGaW5kaW5ncw0KDQozLiBUaGVyZSBpcyAqKm5vIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQqKiBjb3JyZWxhdGlvbiBiZXR3ZWVuIGFubnVhbCBNYXgsIE1lYW4sIGFuZCBNaW4gKip0ZW1wZXJhdHVyZXMqKiBhbmQgc295YmVhbiAqKnlpZWxkcyoqLiBJbmRlZWQsIHRoZSBjb3JyZWxhdGlvbnMgYmV0d2VlbmsgdGhlIHRlbXBlcmF0dXJlcyBhbmQgeWllbGQgYXJlICoqbmVhcmx5IHplcm8qKi4gIA0KDQoNCj4qKipXaXRoIHJlc3BlY3QgdG8gdGhlIGltcGFjdCBvZiB3ZWF0aGVyIG9uIHNveWJlYW4geWllbGRzIGluIHRoZSBNaWR3ZXN0IFVuaXRlZCBTdGF0ZXMgYmV0d2VlbiAyMDAwLTIwMjIsIHByZWNpcGl0YXRpb24gbGV2ZWxzIGV4cGxhaW4gNjclIG9mIHlpZWxkIHZhcmlhdGlvbiwgd2hpbGUgdGVtcGVyYXR1cmVzIGhhZCBubyBjb3JyZWxhdGlvbiB0byB5aWVsZHMuKioqDQoNCiMjIyBBZGRpdGlvbmFsIEFuYWx5c2lzDQoNCkdpdmVuIGFkZGl0aW9uYWwgdGltZSBhbmQgcmVzb3VyY2VzLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIHN0YXRpc3RpY2FsIG1ldGhvZG9sb2d5LCBpdCB3b3VsZCBiZSB2YWx1YWJsZSB0byBhbmFseXplIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBub3QgaW5jbHVkZWQgaW4gdGhpcyByZXBvcnQ6DQoNCi0gU3ViLWFubnVhbCBtZWFzdXJlbWVudCBwZXJpb2RzIGZvciB0ZW1wZXJhdHVyZXMgYW5kIHByZWNpcGl0YXRpb24NCi0gUGxhbnRpbmcgZGF0ZXMNCi0gSXJyaWdhdGlvbiBzdGF0dXMNCi0gU2VlZCB2YXJpZXRpZXMNCi0gRmVydGlsaXplciwgcGVzdGljaWRlLCAmIGhlcmJpY2lkZSBhcHBsaWNhdGlvbnMNCi0gQWRkaXRpb25hbCBjcm9wcw0KLSBBZGRpdGlvbmFsIGdlb2dyYXBoaWMgcmVnaW9ucyBvZiB0aGUgd29ybGQNCg0KDQojIyBSZWZlcmVuY2VzDQoNCiMjIyBTb3liZWFuIERhdGENCi0gVVNEQQ0KICAtIE5hdGlvbmFsIEFncmljdWx0dXJhbCBTdGF0aXN0aWNzIFNlcnZpY2UgWyhOQVNTKV0oaHR0cHM6Ly9xdWlja3N0YXRzLm5hc3MudXNkYS5nb3YvcmVzdWx0cy8xN0VGRDk3My1BNUE5LTNERTUtOEIzNy02QTAzOTIyODdGRUMpDQogIC0gSW50ZXJuYXRpb25hbCBQcm9kdWN0aW9uIEFzc2Vzc21lbnQgRGl2aXNpb24gWyhJUEFEKV0oaHR0cHM6Ly9pcGFkLmZhcy51c2RhLmdvdi9jcm9wZXhwbG9yZXIvY3JvcHZpZXcvY29tbW9kaXR5Vmlldy5hc3B4P2Nyb3BpZD0yMjIyMDAwJnNlbF95ZWFyPTIwMjImcmFua2J5PVByb2R1Y3Rpb24pDQotIEZvb2QgYW5kIEFncmljdWx0dXJlIE9yZ2FuaXphdGlvbiBbKEZBTyldKGh0dHBzOi8vd3d3LmZhby5vcmcvZmFvc3RhdC9lbi8jZGF0YS9RQ0wpDQoNCiMjIyBXZWF0aGVyIERhdGENCi0gTk9BQSBHbG9iYWwgU3VyZmFjZSBTdW1tYXJ5IG9mIHRoZSBEYXkgLSBHU09EIG9uIEdvb2dsZSBDbG91ZCBCaWdRdWVyeSAgDQoNCg0KIyMjIERhdGEgQ2xlYW5pbmcgUHJvY2Vzc2VzDQotIFtNZXRhZGF0YV0oLi9tZXRhZGF0YS5uYi5odG1sKSBmaWxlDQotIFtDaGFuZ2VdKC4vY2hhbmdlX2xvZy5uYi5odG1sKSBsb2cNCg0KDQo=