Introduction

This is the Somalia December Sorghum forecast report. The goal is to assist users in evaluating current forecasts in the context of past forecasts and to translate the forecast component into key assumptions about food security.

The report includes the following key components:

  1. A verbal summary of assumptions based on the statistics in this forecast

  2. Mean Area, Production, and Yield over the years 2010-2020:This provides context for interpreting the grain data

  3. Historical Out of Sample Forecast Error Averaged Over a 10 Year+ Period. We show the Mean Absolute Percent Error (MAPE).

  4. Yield Forecast, (based on December 2022 Precip, NDVI, Et0 ) expressed as percent of mean yield over the period 2012 - 2022.

Assumption Statements

Average Forecast Error For This Point in the Season

At this point in the season historical forecast error, is on average, below 40% for the admin units used in the forecast.


Admin Units Forecast to have Above or Below Average Yields

Of the admin units used in the forecast:

Averages are based on the most recent 10 year period of observed yields: (2010-2020)


The forecast identifies severe yield issues (lowest on record) in the following Admin Unit 2-zones:

The forecast identifies substantially below-average yields (among the lowest 3 on record) in the following Admin Unit 2-zones:


Summary Figures

Mean area, production, and yields for the years 2010-2020 .



Out of Sample Forecast Error (MAPE)

Mean Absolute Percent Error (MAPE) calculated based on historical out of sample seasonal forecasts. Lower scores indicate greater accuracy. Forecasts are based on model type MODEL1



Yield Forecast for December 2022

Forecast values expressed as percent of Mean Yields over the Years 2010-2020 .

The figure shows predicted percent of mean (center) as well as lower (left) and higher (right) predicted percent of mean intervals.



Static and Dynamic Version of Main Forecast

Roll over the polygon borders to get the district name and % of mean forecast value.

Static Version

This map shows the main % of mean forecast value along with district labels for reference.

Discrete Map

This map shows the main % of mean forecast binned into discrete values. Averages are based on the most recent 10 year period of observed yields: 2012 - 2022

This table shows the forecast percentage of mean values in the above table along with the mean yield values from the first figure.


Table of Mean Yields and Predicted Percent of Mean Values
District % of mean % of mean (low) % of mean (high)
Hargeysa 149 123 149
Gabiley 96 66 96
Beledweyn 144 87 144
Bulo-Burte 130 83 130
Jalalaqsi 153 116 153
Jowhar 82 44 82
Aadan Yabaal 110 69 110
Balcad 117 85 117
Cadale 108 106 108
Afgooye 104 81 104
Qoryooley 96 70 96
Wanla Weyn 83 51 83
Baydhabo 98 83 98
Buur Hakaba 100 80 100
Diinsoor 134 113 134
Qansax Dheere 116 88 116
Xudur 113 102 113
Tiyeglow 52 40 52
Waajid 109 105 109
Garbahaarey 129 127 129
Baardheere 104 81 104
Beled-Xaawo 114 94 114
Doolow 115 107 115
Luuq 91 80 91
Bu'aale 85 44 85
Saakow 96 54 96
Afmadow 138 96 138

# Analog Year Forecasts Yield forecasts in analog years. <–DESCRIPTION OF ANALOG YEAR PROCESS–>.
*** –>


# Analog Year Forecasts Errors Forecast errors in analog years. If observed data is not available in a given year we cannot calculate forecast errors. Values are expressed a percentage of observed yields in a given year (t):


\[\frac{(observed_{(t)}-forecast_{(t)})}{observed_{(t)}}\] ***

Positive (+) values indicate an under prediction. Negative (-) values indicate an over prediction.

*** –>


  1. Extra/Extended Trees. A type of Random Forest Model↩︎

LS0tCnRpdGxlOiAiRm9yZWNhc3QgUmVwb3J0IHdpdGggQW5hbG9nIFllYXJzLVNvbWFsaWEgT05EIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCmZpZ193aWR0aDogNwpmaWdfaGVpZ2h0OiA2CmZpZ19jYXB0aW9uOiB0cnVlCi0tLQoKYGBge3IsZXZhbD1UUlVFLGVjaG89RkFMU0Usd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFLHJlc3VsdHM9J2hpZGUnfQojLS0tLS0tLS0tLS0tLS0tLS0tLUJhc2UgU2V0dXAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpybShsaXN0PWxzKCkpCgpMQVBUT1A8LUZBTFNFCgojLS0tU2V0IFByb2plY3QgRGlyZWN0b3JpZXMKZGlyRzwtJy9Wb2x1bWVzL0dvb2dsZURyaXZlLycKaWYoTEFQVE9QPT1UUlVFKXtkaXJHPC0iL1ZvbHVtZXMvR29vZ2xlRHJpdmUtMTE2MTA5NzI1OTE4MTkzNzMzNDU0LyJ9CgpkaXJCYXNlPC1wYXN0ZTAoZGlyRywnTXkgRHJpdmUvJykKCgpkaXJCYXNlMjwtcGFzdGUwKGRpckcsJ1NoYXJlZCBkcml2ZXMvQ0hDIFRlYW0gRHJpdmUgLycpCgojLVByb2plY3QgRGlyZWN0b3JpZXMKZGlyUHJvajwtcGFzdGUwKGRpckJhc2UyLCdwcm9qZWN0X21hY2hpbmVfbGVhcm5pbmdfZm9yZWNhc3RpbmcvJykgI3Byb2plY3QgZGlyZWN0b3J5CgpkaXJWaWV3ZXI8LXBhc3RlMChkaXJQcm9qLCd2aWV3ZXIvJykKZGlyVmlld2VyT3V0U3RhdGljPC1wYXN0ZTAoZGlyVmlld2VyLCd2aWV3ZXJfc3RhdGljX3NoYXBlcy8nKQpkaXJWaWV3ZXJEeW5hbWljPC1wYXN0ZTAoZGlyVmlld2VyLCd2aWV3ZXJfZHluYW1pY19zaGFwZXMvJykKCmRpclJlcG9ydDwtcGFzdGUwKGRpclByb2osJ2ZvcmVjYXN0X3JlcG9ydGluZy8nKQpkaXJSZXBvcnRSZGF0YTwtcGFzdGUwKGRpclJlcG9ydCwnZm9yZWNhc3RfcmVwb3J0aW5nX1JkYXRhLycpCmRpclJlcG9ydE91dDwtcGFzdGUwKGRpclJlcG9ydCwnZm9yZWNhc3RfcmVwb3J0aW5nX291dHB1dHMvJykKCgpsaWJyYXJ5KHN0cmluZ3IpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikKbGlicmFyeShyYXN0ZXIpCmxpYnJhcnkocmdkYWwpCmxpYnJhcnkobWdjdikKbGlicmFyeSh0aWR5cikKbGlicmFyeShsdWJyaWRhdGUpCmxpYnJhcnkoc2YpCmxpYnJhcnkocm1hcHNoYXBlcikKbGlicmFyeSh2aXJpZGlzKQpsaWJyYXJ5KHNjYWxlcykKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoZm9yY2F0cykKbGlicmFyeShrbml0cikKbGlicmFyeShrYWJsZUV4dHJhKQpsaWJyYXJ5KHNoaW55KQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKI1BhcmFtZXRlcnMKQ1VSUkVOVF9ZRUFSPC0yMDIyCk1PTlRIPC0xMgpERUtBRDwtMwpNT0RFTDwtJ0VUJwpDT1VOVFJZPC0nU29tYWxpYScKUFJPRFVDVDwtJ1NvcmdodW0nCiNDUk9QX0FSRUE8LTIgICNQZXJjZW50CkFOQUxPR19ZRUFSUzwtYygxOTk2LCAxOTk4LCAyMDA1LCAyMDEwLCAyMDE2LCAyMDIwLCAyMDIxKQoKbW9udGhfbmFtZTwtbW9udGgubmFtZVtNT05USF0gI21vbnRoIHRoZSBwcm9kdWN0IGlzIGJhc2VkIG9uCgojLS1Mb2FkIEV4aXN0aW5nIFBsb3RzCnNldHdkKGRpclJlcG9ydFJkYXRhKQpsb2FkKGZpbGU9cGFzdGUwKCcyMF9mb3JlY2FzdF9yZXBvcnRpbmdfbWFpbl9wbG90cycsbW9udGhfbmFtZSxDT1VOVFJZLCdfJyxNT0RFTCwnXycsUFJPRFVDVCwnLlJkYXRhJykpCmxvYWQoZmlsZT1wYXN0ZTAoJzAxX2ZvcmVjYXN0X3JlcG9ydF9hZ3N0YXRtYXBzXycsQ09VTlRSWSwnXycsUFJPRFVDVCwnLlJkYXRhJykpCmBgYAojIEludHJvZHVjdGlvbgpUaGlzIGlzIHRoZSBgciBDT1VOVFJZYCBgciBtb250aF9uYW1lYCBgciBQUk9EVUNUYCBmb3JlY2FzdCByZXBvcnQuICoqVGhlIGdvYWwgaXMgdG8gYXNzaXN0IHVzZXJzIGluIGV2YWx1YXRpbmcgY3VycmVudCBmb3JlY2FzdHMgaW4gdGhlIGNvbnRleHQgb2YgcGFzdCBmb3JlY2FzdHMqKiBhbmQgKip0byB0cmFuc2xhdGUgdGhlIGZvcmVjYXN0IGNvbXBvbmVudCBpbnRvIGtleSBhc3N1bXB0aW9ucyBhYm91dCBmb29kIHNlY3VyaXR5LioqCgpUaGUgcmVwb3J0IGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbXBvbmVudHM6CgoxLiAqKipBIHZlcmJhbCBzdW1tYXJ5IG9mIGFzc3VtcHRpb25zIGJhc2VkIG9uIHRoZSBzdGF0aXN0aWNzIGluIHRoaXMgZm9yZWNhc3QqKiogCgoyLiAqKipNZWFuIEFyZWEsIFByb2R1Y3Rpb24sIGFuZCBZaWVsZCBvdmVyIHRoZSB5ZWFycyAyMDEwLTIwMjA6KioqVGhpcyBwcm92aWRlcyBjb250ZXh0IGZvciBpbnRlcnByZXRpbmcgdGhlIGdyYWluIGRhdGEKCjMuICoqKkhpc3RvcmljYWwgT3V0IG9mIFNhbXBsZSBGb3JlY2FzdCBFcnJvciBBdmVyYWdlZCBPdmVyIGEgMTAgWWVhcisgUGVyaW9kKioqLiBXZSBzaG93IHRoZSAqKipNKioqZWFuICoqKkEqKipic29sdXRlICoqKlAqKiplcmNlbnQgKioqRSoqKnJyb3IgKCoqKk1BUEUqKiopLgoKNC4gKioqWWllbGQgRm9yZWNhc3QqKiosIChiYXNlZCBvbiBgciBsaXNfdmFyc19yZXBvcnQkbW9udGhfbmFtZWAgYHIgbGlzX3ZhcnNfcmVwb3J0JG1heF9ldmFyX3llYXJgIGByIGxpc192YXJzX3JlcG9ydCR2YXJfbmFtZWAgKSBleHByZXNzZWQgYXMgKipwZXJjZW50IG9mIG1lYW4geWllbGQqKiBvdmVyIHRoZSBwZXJpb2QgYHIgbGlzX3ZhcnNfcmVwb3J0JG1pbl9hZ2AgLSBgciBsaXNfdmFyc19yZXBvcnQkbWF4X2FnYC4KCjwhLS0gNS4gKioqRm9yZWNhc3RzIGFuZCBGb3JlY2FzdCBFcnJvciBpbiBBbmFsb2cgWWVhcnMqKiogV2Ugc2hvdyBzcGVjaWZpYyBmb3JlY2FzdHMgYW5kIGZvcmVjYXN0IGVycm9yIGZvciB5ZWFycyB3ZXJlIGNsaW1hdG9sb2dpY2FsbHkgc2ltaWxhciB0byB0aG9zZSBpbiB0aGlzIHJlcG9ydC4gLS0+CgojIEFzc3VtcHRpb24gU3RhdGVtZW50cyAKIyMjIyBBdmVyYWdlIEZvcmVjYXN0IEVycm9yIEZvciBUaGlzIFBvaW50IGluIHRoZSBTZWFzb24KQXQgdGhpcyBwb2ludCBpbiB0aGUgc2Vhc29uICoqKmhpc3RvcmljYWwgZm9yZWNhc3QgZXJyb3IsIGlzIG9uIGF2ZXJhZ2UsIGJlbG93IDQwJSBmb3IgdGhlIGFkbWluIHVuaXRzKioqIHVzZWQgaW4gdGhlIGZvcmVjYXN0LgoKCioqKgoKIyMjIyBBZG1pbiBVbml0cyBGb3JlY2FzdCB0byBoYXZlIEFib3ZlIG9yIEJlbG93IEF2ZXJhZ2UgWWllbGRzCk9mIHRoZSAqKiphZG1pbiB1bml0cyB1c2VkIGluIHRoZSBmb3JlY2FzdDoqKioKCjwhLS0gKiAxIGFyZSBmb3JlY2FzdCB0byBiZSBzZXZlcmVseSBiZWxvdyBhdmVyYWdlICg8NTAlIG9mIGF2ZXJhZ2UpICAgLS0+CjwhLS0gKiAxMiBhcmUgZm9yZWNhc3QgdG8gYmUgYmVsb3cgYXZlcmFnZSAoPCA5MCUgb2YgYXZlcmFnZSkgICAtLT4KPCEtLSAqIDMgYXJlIGZvcmVjYXN0IHRvIGJlIGF2ZXJhZ2UgKGJldHdlZW4gOTAgdG8gMTEwJSBvZiBhdmVyYWdlKSAgIC0tPgo8IS0tICogMiBhcmUgZm9yZWNhc3QgdG8gYmUgYWJvdmUgYXZlcmFnZSAoPiAxMTAlIG9mIGF2ZXJhZ2UpICAgLS0+CgoqKkF2ZXJhZ2VzKiogYXJlIGJhc2VkIG9uIHRoZSBtb3N0IHJlY2VudCAxMCB5ZWFyIHBlcmlvZCBvZiBvYnNlcnZlZCB5aWVsZHM6ICgyMDEwLTIwMjApIDwhLS1gciBsaXNfdmFyc19yZXBvcnQkbWluX2FnYCAtIGByIGxpc192YXJzX3JlcG9ydCRtYXhfYWdgIC0tPgoKKioqIAoKKioqVGhlIGZvcmVjYXN0IGlkZW50aWZpZXMgc2V2ZXJlIHlpZWxkIGlzc3VlcyAobG93ZXN0IG9uIHJlY29yZCkgaW4gdGhlIGZvbGxvd2luZyBBZG1pbiBVbml0IDItem9uZXM6KioqCjwhLS0gTWlkZGxlIEp1YmEtQnUnYWFsZSAtLT4KCioqKlRoZSBmb3JlY2FzdCBpZGVudGlmaWVzIHN1YnN0YW50aWFsbHkgYmVsb3ctYXZlcmFnZSB5aWVsZHMgKGFtb25nIHRoZSBsb3dlc3QgMyBvbiByZWNvcmQpIGluIHRoZSBmb2xsb3dpbmcgQWRtaW4gVW5pdCAyLXpvbmVzOioqKgo8IS0tIEJheS1EaWluc29vciwgQmF5LVFhbnNheCBEaGVlcmUsIE1pZGRsZSBKdWJhLUJ1J2FhbGUgLS0+CgoKCioqKgoKIyBTdW1tYXJ5IEZpZ3VyZXMKCiMjIyMgTWVhbiBhcmVhLCBwcm9kdWN0aW9uLCBhbmQgeWllbGRzIGZvciB0aGUgeWVhcnMgMjAxMC0yMDIwIDwhLS1gciBsaXNfdmFyc19yZXBvcnQkbWluX2FnYCB0byBgciBsaXNfdmFyc19yZXBvcnQkbWF4X2FnYC0tPi4KCioqKgpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRX0KcDFhbGwKYGBgCioqKgoKCgoKCiMjIyMgT3V0IG9mIFNhbXBsZSBGb3JlY2FzdCBFcnJvciAoTUFQRSkKTWVhbiBBYnNvbHV0ZSBQZXJjZW50IEVycm9yIChNQVBFKSBjYWxjdWxhdGVkIGJhc2VkIG9uIGhpc3RvcmljYWwgb3V0IG9mIHNhbXBsZSBzZWFzb25hbCBmb3JlY2FzdHMuICoqTG93ZXIgc2NvcmVzIGluZGljYXRlIGdyZWF0ZXIgYWNjdXJhY3kqKi4gRm9yZWNhc3RzIGFyZSBiYXNlZCBvbiBtb2RlbCB0eXBlIGBNT0RFTGBeW0V4dHJhL0V4dGVuZGVkIFRyZWVzLiBBIHR5cGUgb2YgUmFuZG9tIEZvcmVzdCBNb2RlbF0KCioqKgpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRX0KcDIKYGBgCioqKgoKCiMgWWllbGQgRm9yZWNhc3QgZm9yIGByIGxpc192YXJzX3JlcG9ydCRtb250aF9uYW1lYCBgciBsaXNfdmFyc19yZXBvcnQkbWF4X2V2YXJfeWVhcmAgCkZvcmVjYXN0IHZhbHVlcyBleHByZXNzZWQgYXMgcGVyY2VudCBvZiBNZWFuIFlpZWxkcyBvdmVyIHRoZSBZZWFycyAgMjAxMC0yMDIwIDwhLS1gciBsaXNfdmFyc19yZXBvcnQkbWluX2FnYCAtIGByIGxpc192YXJzX3JlcG9ydCRtYXhfYWdgIC0tPi4gCgpUaGUgZmlndXJlIHNob3dzICoqKnByZWRpY3RlZCBwZXJjZW50IG9mIG1lYW4qKiogKGNlbnRlcikgYXMgd2VsbCBhcyBsb3dlciAobGVmdCkgYW5kIGhpZ2hlciAocmlnaHQpICoqKnByZWRpY3RlZCBwZXJjZW50IG9mIG1lYW4qKiogaW50ZXJ2YWxzLgoKKioqCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFLGZpZy53aWR0aD04LGZpZy5oZWlnaHQ9OH0KI3AzPC1nZ3Bsb3RseShwPXAzLHRvb2x0aXA9YygnZGlzdHJpY3QnLCdwZXJfb2ZfbWVhbicpKQpwMQpgYGAKKioqCgojIyMjIFN0YXRpYyBhbmQgRHluYW1pYyBWZXJzaW9uIG9mIE1haW4gRm9yZWNhc3QKUm9sbCBvdmVyIHRoZSBwb2x5Z29uIGJvcmRlcnMgdG8gZ2V0IHRoZSBkaXN0cmljdCBuYW1lIGFuZCAlIG9mIG1lYW4gZm9yZWNhc3QgdmFsdWUuCgpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRSxmaWcuYWxpZ249J2NlbnRlcicsZmlnLndpZHRoPTgsZmlnLmhlaWdodD04fQojcDFMcwpwMUw8LWdncGxvdGx5KHAxTCx0b29sdGlwPWMoJ2FkbWluMicsJ3ZhbHVlJykpICU+JSBsYXlvdXQobGVnZW5kID0gbGlzdChvcmllbnRhdGlvbiA9ICJoIiwgeCA9IDAuNCwgeSA9IC0wLjIpKQpwMUwKYGBgCiMjIyMgU3RhdGljIFZlcnNpb24KVGhpcyBtYXAgc2hvd3MgdGhlIG1haW4gJSBvZiBtZWFuIGZvcmVjYXN0IHZhbHVlIGFsb25nIHdpdGggZGlzdHJpY3QgbGFiZWxzIGZvciByZWZlcmVuY2UuCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFLGZpZy5hbGlnbj0nY2VudGVyJyxmaWcud2lkdGg9OCxmaWcuaGVpZ2h0PTh9CnAxTHMKCmBgYAojIyMjIERpc2NyZXRlIE1hcApUaGlzIG1hcCBzaG93cyB0aGUgbWFpbiAlIG9mIG1lYW4gZm9yZWNhc3QgYmlubmVkIGludG8gZGlzY3JldGUgdmFsdWVzLiAqKkF2ZXJhZ2VzKiogYXJlIGJhc2VkIG9uIHRoZSBtb3N0IHJlY2VudCAxMCB5ZWFyIHBlcmlvZCBvZiBvYnNlcnZlZCB5aWVsZHM6IGByIGxpc192YXJzX3JlcG9ydCRtaW5fYWdgIC0gYHIgbGlzX3ZhcnNfcmVwb3J0JG1heF9hZ2AKYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0UsZmlnLmFsaWduPSdjZW50ZXInLGZpZy53aWR0aD04LGZpZy5oZWlnaHQ9OH0KcDFMYwoKYGBgCgojIyMjIFRoaXMgdGFibGUgc2hvd3MgdGhlIGZvcmVjYXN0IHBlcmNlbnRhZ2Ugb2YgbWVhbiB2YWx1ZXMgaW4gdGhlIGFib3ZlIHRhYmxlIGFsb25nIHdpdGggdGhlIG1lYW4geWllbGQgdmFsdWVzIGZyb20gdGhlIGZpcnN0IGZpZ3VyZS4gCioqKgpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRX0KdDE8LWtuaXRyOjprYWJsZShkdGFiLCBjYXB0aW9uID0gJ1RhYmxlIG9mIE1lYW4gWWllbGRzIGFuZCBQcmVkaWN0ZWQgUGVyY2VudCBvZiBNZWFuIFZhbHVlcycpCnQxPC1rYWJsZV9zdHlsaW5nKHQxLGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsImNvbmRlbnNlZCIpKQpzY3JvbGxfYm94KHQxLCBoZWlnaHQgPSAnMzAwcHgnLCB3aWR0aCA9ICcxMDAlJywKICBib3hfY3NzID0gImJvcmRlcjogMXB4IHNvbGlkICNkZGQ7IHBhZGRpbmc6IDFweDsgIiwgZXh0cmFfY3NzID0gTlVMTCwKICBmaXhlZF90aGVhZCA9IFRSVUUpCgoKYGBgCioqKgoKICMgQW5hbG9nIFllYXIgRm9yZWNhc3RzCllpZWxkIGZvcmVjYXN0cyBpbiBhbmFsb2cgeWVhcnMuIDwtLURFU0NSSVBUSU9OIE9GIEFOQUxPRyBZRUFSIFBST0NFU1MtLT4uICAKKioqIC0tPgpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRSxmaWcud2lkdGg9Ny41LGZpZy5oZWlnaHQ9Ny41fQpwMwpgYGAKKioqCgogIyBBbmFsb2cgWWVhciBGb3JlY2FzdHMgRXJyb3JzCkZvcmVjYXN0IGVycm9ycyBpbiBhbmFsb2cgeWVhcnMuIElmIG9ic2VydmVkIGRhdGEgaXMgbm90IGF2YWlsYWJsZSBpbiBhIGdpdmVuIHllYXIgd2UgY2Fubm90IGNhbGN1bGF0ZSBmb3JlY2FzdCBlcnJvcnMuIFZhbHVlcyBhcmUgZXhwcmVzc2VkIGEgcGVyY2VudGFnZSAgb2Ygb2JzZXJ2ZWQgeWllbGRzIGluIGEgZ2l2ZW4geWVhciBfKHQpXzoKCioqKgokJFxmcmFjeyhvYnNlcnZlZF97KHQpfS1mb3JlY2FzdF97KHQpfSl9e29ic2VydmVkX3sodCl9fSQkCioqKiAKCioqKlBvc2l0aXZlICgrKSoqKiB2YWx1ZXMgaW5kaWNhdGUgYW4gX3VuZGVyIHByZWRpY3Rpb25fLiAqKipOZWdhdGl2ZSAoLSkqKiogdmFsdWVzIGluZGljYXRlIGFuIF9vdmVyIHByZWRpY3Rpb25fLgoKKioqIC0tPgpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRSxmaWcud2lkdGg9Ny41LGZpZy5oZWlnaHQ9Ny41fQpwNApgYGA=