VGhlIHF1ZXN0aW9uIGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIG91dCBvZiBjb250ZXh0Li4uIHdo aWNoIGlzIHRoZQpmb2xsb3dpbmcgKHF1aWNrbHkgYW5kIHBvb3JseSB3cml0dGVuKSBDIGNvZGUg d2hpY2ggd29ya3MgImdvb2QgZW5vdWdoIiBhbmQKSSdtIG5vdCBnb2luZyB0byBzcGVuZCBtb3Jl IHRpbWUgb24uIFlvdSBjYW4gcnVuIGl0IGF0OgoKaHR0cDovL2lkZW9uZS5jb20vQXRZeFBRCgph bmQgaGVyZSBpdCBpcywgd2FydHMgYW5kIGFsbC4gVGhlIHBvaW50IGlzIHRoYXQgSSdtIGEgbGl0 dGxlIHN1cnByaXNlZAp0aGF0IHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgZm9yIGZsb2F0cyBjYW4n dCBtYW5hZ2UgdG8gbXVsdGlwbGUgMC40NDQgYnkKMTAwMCBhbmQgZ2V0IDQ0NAoKI2luY2x1ZGUg PHN0ZGlvLmg+CgovKgpCZWNhdXNlIGxjZCBhbmQgc2VyaWFsIGRvbid0IHN1cHBvcnQgcHJpbnRm LCBhbmQgaXRzIHZlcnkgY29zdGx5LCBhbmQgYWxsCndlIG5lZWQKaXMgc2ltcGxlIGZvcm1hdGlu ZyB3aXRoIGEgY2VydGFpbiBudW1iZXIgb2YgZGlnaXRzIGFuZCBwcmVjaXNpb24sIHRoaXMKZnRv YSBpcyBlbm91Z2guCklmIGRpZ2l0cyBpcyBuZWdhdGl2ZSwgaXQgd2lsbCBwYWQgbGVmdC4KKi8K I2RlZmluZSAgQlVGX0xFTiAyMApjaGFyIGJ1ZltCVUZfTEVOXTsgLy9uZWVkIGEgYnVmZmVyIHRv IGhvbGQgZm9ybWF0dGVkIHN0cmluZ3MgdG8gc2VuZCB0byBMQ0QKCmludCBmdG9hKGNoYXIgKiBz dHIsIGZsb2F0IGYsIGNoYXIgZGlnaXRzLCBjaGFyIHByZWNpc2lvbikgewpjaGFyIGk9MCxrLGw9 MDsKbG9uZyBhLGM7CmxvbmcgcG93MTBbMTBdID0KezEsMTAsMTAwLDEwMDAsMTAwMDAsMTAwMDAw LDEwMDAwMDAsMTAwMDAwMDAsMTAwMDAwMDAwLDEwMDAwMDAwMDB9Owp1bnNpZ25lZCBjaGFyIGI7 CmNoYXIgZGVjaW1hbD0nLic7CgogIGlmKGRpZ2l0cz49MTApIHtyZXR1cm4gMDt9OwogIC8vIGNo ZWNrIGZvciBuZWdhdGl2ZSBmbG9hdAogIGlmKGY8MC4wKSB7CiAgICBzdHJbaSsrXT0nLSc7CiAg ICBmKj0tMTsKICAgICgwPGRpZ2l0cz9kaWdpdHMtLTpkaWdpdHMrKyk7CiAgICB9CiAgYT0oaW50 KWY7IC8vIGV4dHJhY3Rpbmcgd2hvbGUgbnVtYmVyCiAgZi09YTsgLy8gZXh0cmFjdGluZyBkZWNp bWFsIHBhcnQKICBrID0gZGlnaXRzOwogIC8vIG51bWJlciBvZiBkaWdpdHMgaW4gd2hvbGUgbnVt YmVyCiAgd2hpbGUoaz49MCkgewogICAgYyA9IHBvdzEwW2tdOwogICAgYyA9IGEvYzsKICAgIGlm KGM+MCkgeyBicmVhazsgfQogICAgay0tOwogICAgfSAvLyBudW1iZXIgb2YgZGlnaXRzIGluIHdo b2xlIG51bWJlciBhcmUgaysxCiAgaWYgKDA8ayAmJiBkaWdpdHM9PWsgJiYgYz4xMCkgeyAvL292 ZXJmbG93CiAgICBkZWNpbWFsID0gJ2UnOwogICAgfQovKgpleHRyYWN0aW5nIG1vc3Qgc2lnbmlm aWNhbnQgZGlnaXQgaS5lLiByaWdodCBtb3N0IGRpZ2l0ICwgYW5kIGNvbmNhdGVuYXRpbmcKdG8g c3RyaW5nCm9idGFpbmVkIGFzIHF1b3RpZW50IGJ5IGRpdmlkaW5nIG51bWJlciBieSAxMF5rIHdo ZXJlIGsgPSAobnVtYmVyIG9mIGRpZ2l0Ci0xKQoqLwogIGZvcihsPWFicyhrKTtsPj0wO2wtLSl7 CiAgICBjID0gcG93MTBbbF07CiAgICBiID0gYS9jOwogICAgc3RyW2krK109KGwmJiFiPycgJzpi KzQ4KTsgLy9kaWdpdCBvciBwYWQKICAgIGElPWM7CiAgICB9CiAgaWYgKHByZWNpc2lvbikge3N0 cltpKytdID0gZGVjaW1hbDt9OwovKiBleHRyYWN0aW5nIGRlY2ltYWwgZGlnaXRzIHRpbGwgcHJl Y2lzaW9uICovCiAgaWYgKDA+cHJlY2lzaW9uKSB7az0wOyBwcmVjaXNpb249YWJzKHByZWNpc2lv bik7fQogIGZvcihsPTA7bDxwcmVjaXNpb247bCsrKSB7CiAgICBmKj0xMC4wOwogICAgYiA9IChp bnQpZjsgLy9tYXRoIGZsb29yCiAgICBzdHJbaSsrXT1iKzQ4OyAvLzQ4IGlzIEFTQ0lJIDAKICAg IGYtPShmbG9hdCliOwogICAgaWYgKCFrICYmIDA9PWYpIHsgYnJlYWs7IH0gLy9ub3RoaW5nIGxl ZnQsIHNhdmUgY2hhcnMuCiAgICAvL3dvbid0IHdvcmsgaWYgdGhlcmUgYXJlIGFueSBmbG9hdGlu ZyBwb2ludCBlcnJvcnMuCiAgICB9CiAgc3RyW2ldPSdcMCc7CiAgcmV0dXJuIGk7CiAgfQoKCmlu dCBtYWluKHZvaWQpIHsKZnRvYShidWYsIC00NDQ0LjQ0NCwgLTgsIDMpOwpwdXRzKGJ1Zik7CnJl dHVybiAwOwp9CgoKT24gU2F0LCBNYXIgMTksIDIwMTYgYXQgNDoxMyBQTSwgUnVzc2VsbE1jIDxh cHB0ZWNobnpAZ21haWwuY29tPiB3cm90ZToKCj4gQSBmcmllbmQgaGFzIGFza2VkIGFib3V0IHJv dW5kaW5nIGVycm9ycyBpbiBDIHdoZXJlIGEgbnVtYmVyIHdoaWNoIGhhcyBhbgo+IGV4YWN0IGRl Y2ltYWwgcmVwcmVzZW50YXRpb24gaW4gc2F5IDQgZGVjaW1hbCBkaWdpdHMgYnV0IGlzIHJvdW5k ZWQgYnkKPiBmb3JtYXRpbmcgdG8gcHJvZHVjZSBhbiBleHRyYSAic2lnbmlmaWNhbnQiIGRpZ2l0 LiBTZWUgYmVsb3cuCj4gIEFueSB0aG91Z2h0cyB0aGVyZW9uPwo+Cj4gX19fX19fX18KPgo+IFRo ZXkgc2FpZCB+IDoKPgo+IOKAi1JvdW5kaW5nIGVycm9ycyBpbiBmbG9hdGluZyBwb2ludCBtYXRo IHNlZW0gdG8gY2F1c2UgaXQgdG8gbm90Cj4gJ3VuZGVyc3RhbmQnIHdoZW4gdGhlcmUgYXJlIG5v IG1vcmUgZGlnaXRzIGxlZnQgdG8gcmlnaHQgb2YgZGVjaW1hbCBhbmQgdG8KPiBzb21ldGltZXMg Z2V0IHRoZSBmYXIgcmlnaHQgZGlnaXRzIHdyb25nLiBlLmcuCj4KPiAgICAgZnRvYShidWYsIOKA izPigIsyLjQyLCAtNSwgMyk7Cj4KPiBnaXZlcyAiIDMyLjQxOSLigIsKPgo+IF9fX19fX19fX19f X19fCj4KPiBJIHN1Z2dlc3RlZCB0aGF0IHRoZSBpbmFiaWxpdHkgdG8gYWNjdXJhdGVseSByZXBy ZXNlbnQgdGhlIG9yaWdpbmFsCj4gZGVjaW1hbCBudW1iZXIgaW4gdGhlIGF2YWlsYWJsZSBudW1i ZXIgb2YgYml0cyB1c2VkIGludGVybmFsbHkgbWF5IGNhdXNlCj4gdGhpcwo+Cj4gSWYgc28KPgo+ IC0gd29ya2luZyBpbiAoYWdoKSBCQ0Qgd291bGQgY3VyZSBpdAo+IC0gZXh0cmEgcHJvY2Vzc2lu ZyB0byBlbnN1cmUgdGhlIHJlc3VsdCBpcyAnY29ycmVjdCcgaXMgbm90IGhhcmQgYnV0IGlzCj4g YW5ub3lpbmcuCj4KPiAgICAgICAgICAgICAgICAgICAgICAgUnVzc2VsbAo+Cj4KCgotLSAKSmFt ZXMgTmV3dG9uCk1hc3NNaW5kLm9yZyA8aHR0cDovL3d3dy5tYXNzbWluZC5vcmcvPgoxLTk3MC00 NjItNzc2NAotLSAKaHR0cDovL3d3dy5waWNsaXN0LmNvbS90ZWNocmVmL3BpY2xpc3QgUElDL1NY IEZBUSAmIGxpc3QgYXJjaGl2ZQpWaWV3L2NoYW5nZSB5b3VyIG1lbWJlcnNoaXAgb3B0aW9ucyBh dApodHRwOi8vbWFpbG1hbi5taXQuZWR1L21haWxtYW4vbGlzdGluZm8vcGljbGlzdAo= .