ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2F1dG9jbWQudHh0IGIvcnVudGltZS9kb2MvYXV0b2NtZC50eHQKaW5kZXggZWRkZmVhZC4uMWM3YjczYyAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvYXV0b2NtZC50eHQKKysrIGIvcnVudGltZS9kb2MvYXV0b2NtZC50eHQKQEAgLTEsNCArMSw0IEBACi0qYXV0b2NtZC50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgU2VwIDE3CisqYXV0b2NtZC50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgRGVjIDE2CiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0yMzAsOCArMjMwLDEwIEBACiAJCQkJCQkJKkJ1ZldyaXRlQ21kKgogQnVmV3JpdGVDbWQJCQlCZWZvcmUgd3JpdGluZyB0aGUgd2hvbGUgYnVmZmVyIHRvIGEgZmlsZS4KIAkJCQlTaG91bGQgZG8gdGhlIHdyaXRpbmcgb2YgdGhlIGZpbGUgYW5kIHJlc2V0Ci0JCQkJJ21vZGlmaWVkJyBpZiBzdWNjZXNzZnVsLiAgVGhlIGJ1ZmZlciBjb250ZW50cwotCQkJCXNob3VsZCBub3QgYmUgY2hhbmdlZC4gIHxDbWQtZXZlbnR8CisJCQkJJ21vZGlmaWVkJyBpZiBzdWNjZXNzZnVsLCB1bmxlc3MgJysnIGlzIGluCisJCQkJJ2NwbycgYW5kIHdyaXRpbmcgdG8gYW5vdGhlciBmaWxlIHxjcG8tK3wuCisJCQkJVGhlIGJ1ZmZlciBjb250ZW50cyBzaG91bGQgbm90IGJlIGNoYW5nZWQuCisJCQkJfENtZC1ldmVudHwKIAkJCQkJCQkqRmlsZVdyaXRlUHJlKgogRmlsZVdyaXRlUHJlCQkJQmVmb3JlIHdyaXRpbmcgdG8gYSBmaWxlLCB3aGVuIG5vdCB3cml0aW5nIHRoZQogCQkJCXdob2xlIGJ1ZmZlci4gIFVzZSB0aGUgJ1sgYW5kICddIG1hcmtzIGZvciB0aGUKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2NoYW5nZS50eHQgYi9ydW50aW1lL2RvYy9jaGFuZ2UudHh0CmluZGV4IDVlNDVlYzcuLjA4ZmRjMWQgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL2NoYW5nZS50eHQKKysrIGIvcnVudGltZS9kb2MvY2hhbmdlLnR4dApAQCAtMSw0ICsxLDQgQEAKLSpjaGFuZ2UudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBOb3YgMzAKKypjaGFuZ2UudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBEZWMgMTcKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTM1MSw3ICszNTEsOCBAQAogb2N0YWwgYW5kIGhleGFkZWNpbWFsIG51bWJlcnMgYW5kIGFscGhhYmV0aWMgY2hhcmFjdGVycy4gIFRoaXMgZGVwZW5kcyBvbiB0aGUKICducmZvcm1hdHMnIG9wdGlvbi4KIC0gV2hlbiAnbnJmb3JtYXRzJyBpbmNsdWRlcyAib2N0YWwiLCBWaW0gY29uc2lkZXJzIG51bWJlcnMgc3RhcnRpbmcgd2l0aCBhICcwJwotICB0byBiZSBvY3RhbC4gIE90aGVyIG51bWJlcnMgYXJlIGRlY2ltYWwgYW5kIG1heSBoYXZlIGEgcHJlY2VkaW5nIG1pbnVzIHNpZ24uCisgIHRvIGJlIG9jdGFsLCB1bmxlc3MgdGhlIG51bWJlciBpbmNsdWRlcyBhICc4JyBvciAnOScuICBPdGhlciBudW1iZXJzIGFyZQorICBkZWNpbWFsIGFuZCBtYXkgaGF2ZSBhIHByZWNlZGluZyBtaW51cyBzaWduLgogICBJZiB0aGUgY3Vyc29yIGlzIG9uIGEgbnVtYmVyLCB0aGUgY29tbWFuZHMgYXBwbHkgdG8gdGhhdCBudW1iZXI7IG90aGVyd2lzZQogICBWaW0gdXNlcyB0aGUgbnVtYmVyIHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yLgogLSBXaGVuICducmZvcm1hdHMnIGluY2x1ZGVzICJoZXgiLCBWaW0gYXNzdW1lcyBudW1iZXJzIHN0YXJ0aW5nIHdpdGggJzB4JyBvcgpAQCAtMzY1LDkgKzM2NiwxMyBAQAogRm9yIG51bWJlcnMgd2l0aCBsZWFkaW5nIHplcm9zIChpbmNsdWRpbmcgYWxsIG9jdGFsIGFuZCBoZXhhZGVjaW1hbCBudW1iZXJzKSwKIFZpbSBwcmVzZXJ2ZXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBudW1iZXIgd2hlbiBwb3NzaWJsZS4gIENUUkwtQSBvbgogIjAwNzciIHJlc3VsdHMgaW4gIjAxMDAiLCBDVFJMLVggb24gIjB4MTAwIiByZXN1bHRzIGluICIweDBmZiIuCitUaGVyZSBpcyBvbmUgZXhjZXB0aW9uOiBXaGVuIGEgbnVtYmVyIHRoYXQgc3RhcnRzIHdpdGggYSB6ZXJvIGlzIGZvdW5kIG5vdCB0bworYmUgb2N0YWwgKGl0IGNvbnRhaW5zIGEgJzgnIG9yICc5JyksIGJ1dCAnbnJmb3JtYXRzJyBkb2VzIGluY2x1ZGUgIm9jdGFsIiwKK2xlYWRpbmcgemVyb3MgYXJlIHJlbW92ZWQgdG8gYXZvaWQgdGhhdCB0aGUgcmVzdWx0IG1heSBiZSByZWNvZ25pemVkIGFzIGFuCitvY3RhbCBudW1iZXIuCiAKIE5vdGUgdGhhdCB3aGVuICducmZvcm1hdHMnIGluY2x1ZGVzICJvY3RhbCIsIGRlY2ltYWwgbnVtYmVycyB3aXRoIGxlYWRpbmcKLXplcm9zIGFyZSBpbXBvc3NpYmxlIGJlY2F1c2UgdGhleSBhcmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBvY3RhbCBudW1iZXJzLgoremVyb3MgY2F1c2UgbWlzdGFrZXMsIGJlY2F1c2UgdGhleSBjYW4gYmUgY29uZnVzZWQgd2l0aCBvY3RhbCBudW1iZXJzLgogCiBUaGUgQ1RSTC1BIGNvbW1hbmQgaXMgdmVyeSB1c2VmdWwgaW4gYSBtYWNyby4gIEV4YW1wbGU6IFVzZSB0aGUgZm9sbG93aW5nCiBzdGVwcyB0byBtYWtlIGEgbnVtYmVyZWQgbGlzdC4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2VkaXRpbmcudHh0IGIvcnVudGltZS9kb2MvZWRpdGluZy50eHQKaW5kZXggNDQ2MjUxNS4uNzUzZTJhYyAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvZWRpdGluZy50eHQKKysrIGIvcnVudGltZS9kb2MvZWRpdGluZy50eHQKQEAgLTEsNCArMSw0IEBACi0qZWRpdGluZy50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgT2N0IDEyCisqZWRpdGluZy50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgRGVjIDE2CiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC04LDIxICs4LDIyIEBACiAKIDEuICBJbnRyb2R1Y3Rpb24JCXxlZGl0LWludHJvfAogMi4gIEVkaXRpbmcgYSBmaWxlCQl8ZWRpdC1hLWZpbGV8Ci0zLiAgRGlhbG9ncwkJCXxlZGl0LWRpYWxvZ3N8Ci00LiAgVGhlIGN1cnJlbnQgZGlyZWN0b3J5CXxjdXJyZW50LWRpcmVjdG9yeXwKLTUuICBUaGUgYXJndW1lbnQgbGlzdAkJfGFyZ3VtZW50LWxpc3R8Ci02LiAgV3JpdGluZwkJCXx3cml0aW5nfAotNy4gIFdyaXRpbmcgYW5kIHF1aXR0aW5nCXx3cml0ZS1xdWl0fAorMy4gIFRoZSBhcmd1bWVudCBsaXN0CQl8YXJndW1lbnQtbGlzdHwKKzQuICBXcml0aW5nCQkJfHdyaXRpbmd8Cis1LiAgV3JpdGluZyBhbmQgcXVpdHRpbmcJfHdyaXRlLXF1aXR8Cis2LiAgRGlhbG9ncwkJCXxlZGl0LWRpYWxvZ3N8Cis3LiAgVGhlIGN1cnJlbnQgZGlyZWN0b3J5CXxjdXJyZW50LWRpcmVjdG9yeXwKIDguICBFZGl0aW5nIGJpbmFyeSBmaWxlcwl8ZWRpdC1iaW5hcnl8CiA5LiAgRW5jcnlwdGlvbgkJCXxlbmNyeXB0aW9ufAogMTAuIFRpbWVzdGFtcHMJCQl8dGltZXN0YW1wc3wKKzExLiBGaWxlIFNlYXJjaGluZwkJfGZpbGUtc2VhcmNoaW5nfAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIDEuIEludHJvZHVjdGlvbgkJCQkJCSplZGl0LWludHJvKgogCiBFZGl0aW5nIGEgZmlsZSB3aXRoIFZpbSBtZWFuczoKIAotMS4gcmVhZGluZyB0aGUgZmlsZSBpbnRvIHRoZSBpbnRlcm5hbCBidWZmZXIKKzEuIHJlYWRpbmcgdGhlIGZpbGUgaW50byBhIGJ1ZmZlcgogMi4gY2hhbmdpbmcgdGhlIGJ1ZmZlciB3aXRoIGVkaXRvciBjb21tYW5kcwogMy4gd3JpdGluZyB0aGUgYnVmZmVyIGludG8gYSBmaWxlCiAKQEAgLTMwLDEyICszMSwxMyBAQAogQXMgbG9uZyBhcyB5b3UgZG9uJ3Qgd3JpdGUgdGhlIGJ1ZmZlciwgdGhlIG9yaWdpbmFsIGZpbGUgcmVtYWlucyB1bmNoYW5nZWQuCiBJZiB5b3Ugc3RhcnQgZWRpdGluZyBhIGZpbGUgKHJlYWQgYSBmaWxlIGludG8gdGhlIGJ1ZmZlciksIHRoZSBmaWxlIG5hbWUgaXMKIHJlbWVtYmVyZWQgYXMgdGhlICJjdXJyZW50IGZpbGUgbmFtZSIuICBUaGlzIGlzIGFsc28ga25vd24gYXMgdGhlIG5hbWUgb2YgdGhlCi1jdXJyZW50IGJ1ZmZlci4KK2N1cnJlbnQgYnVmZmVyLiAgSXQgY2FuIGJlIHVzZWQgd2l0aCAiJSIgb24gdGhlIGNvbW1hbmQgbGluZSB8Ol8lfC4KIAogCQkJCQkJCSphbHRlcm5hdGUtZmlsZSoKIElmIHRoZXJlIGFscmVhZHkgd2FzIGEgY3VycmVudCBmaWxlIG5hbWUsIHRoZW4gdGhhdCBvbmUgYmVjb21lcyB0aGUgYWx0ZXJuYXRlCi1maWxlIG5hbWUuICBJdCBjYW4gbGF0ZXIgYmUgdXNlZCB3aXRoICIjIiBvbiB0aGUgY29tbWFuZCBsaW5lIHw6XyN8LiAgSG93ZXZlciwKLXRoZSBhbHRlcm5hdGUgZmlsZSBuYW1lIGlzIG5vdCBjaGFuZ2VkIHdoZW4gfDprZWVwYWx0fCBpcyB1c2VkLgorZmlsZSBuYW1lLiAgSXQgY2FuIGJlIHVzZWQgd2l0aCAiIyIgb24gdGhlIGNvbW1hbmQgbGluZSB8Ol8jfCBhbmQgeW91IGNhbiB1c2UKK3RoZSB8Q1RSTC1efCBjb21tYW5kIHRvIHRvZ2dsZSBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCB0aGUgYWx0ZXJuYXRlIGZpbGUuCitIb3dldmVyLCB0aGUgYWx0ZXJuYXRlIGZpbGUgbmFtZSBpcyBub3QgY2hhbmdlZCB3aGVuIHw6a2VlcGFsdHwgaXMgdXNlZC4KIAogCQkJCQkJCSo6a2VlcGFsdCogKjprZWVwYSoKIDprZWVwYWx0IHtjbWR9CQlFeGVjdXRlIHtjbWR9IHdoaWxlIGtlZXBpbmcgdGhlIGN1cnJlbnQgYWx0ZXJuYXRlIGZpbGUKQEAgLTQzLDEyICs0NSwxMyBAQAogCQkJd2l0aCBhIGZ1bmN0aW9uKSBtYXkgc3RpbGwgc2V0IHRoZSBhbHRlcm5hdGUgZmlsZQogCQkJbmFtZS4gIHtub3QgaW4gVml9CiAKLUFsbCBmaWxlIG5hbWVzIGFyZSByZW1lbWJlcmVkIGluIHRoZSBmaWxlIGxpc3QuICBXaGVuIHlvdSBlbnRlciBhIGZpbGUgbmFtZSwKK0FsbCBmaWxlIG5hbWVzIGFyZSByZW1lbWJlcmVkIGluIHRoZSBidWZmZXIgbGlzdC4gIFdoZW4geW91IGVudGVyIGEgZmlsZSBuYW1lLAogZm9yIGVkaXRpbmcgKGUuZy4sIHdpdGggIjplIGZpbGVuYW1lIikgb3Igd3JpdGluZyAoZS5nLiwgd2l0aCAoOncgZmlsZSBuYW1lIiksCi10aGUgZmlsZSBuYW1lIGlzIGFkZGVkIHRvIHRoZSBsaXN0LiAgWW91IGNhbiB1c2UgdGhpcyBsaXN0IHRvIHJlbWVtYmVyIHdoaWNoCi1maWxlcyB5b3UgZWRpdGVkIGFuZCB0byBxdWlja2x5IHN3aXRjaCBmcm9tIG9uZSBmaWxlIHRvIGFub3RoZXIgd2l0aCB0aGUKLUNUUkwtXiBjb21tYW5kIChlLmcuLCB0byBjb3B5IHRleHQpLiAgRmlyc3QgdHlwZSB0aGUgbnVtYmVyIG9mIHRoZSBmaWxlIGFuZAotdGhlbiBoaXQgQ1RSTC1eLiAge1ZpOiBvbmx5IG9uZSBhbHRlcm5hdGUgZmlsZSBuYW1lfQordGhlIGZpbGUgbmFtZSBpcyBhZGRlZCB0byB0aGUgbGlzdC4gIFlvdSBjYW4gdXNlIHRoZSBidWZmZXIgbGlzdCB0byByZW1lbWJlcgord2hpY2ggZmlsZXMgeW91IGVkaXRlZCBhbmQgdG8gcXVpY2tseSBzd2l0Y2ggZnJvbSBvbmUgZmlsZSB0byBhbm90aGVyIChlLmcuLAordG8gY29weSB0ZXh0KSB3aXRoIHRoZSB8Q1RSTC1efCBjb21tYW5kLiAgRmlyc3QgdHlwZSB0aGUgbnVtYmVyIG9mIHRoZSBmaWxlCithbmQgdGhlbiBoaXQgQ1RSTC1eLiAge1ZpOiBvbmx5IG9uZSBhbHRlcm5hdGUgZmlsZSBuYW1lIGlzIHJlbWVtYmVyZWR9CisKIAogQ1RSTC1HCQlvcgkJCQkqQ1RSTC1HKiAqOmYqICo6ZmkqICo6ZmlsZSoKIDpmW2lsZV0JCQlQcmludHMgdGhlIGN1cnJlbnQgZmlsZSBuYW1lIChhcyB0eXBlZCksIHRoZQpAQCAtMjE1LDExICsyMTgsMTAgQEAKIAkJCXtWaTogbm8gKytvcHR9CiAKIDplW2RpdF0gWysrb3B0XSBbK2NtZF0gI1tjb3VudF0KLQkJCUVkaXQgdGhlIFtjb3VudF10aCBhbHRlcm5hdGUgZmlsZSBuYW1lIChhcyBzaG93biBieQotCQkJOmZpbGVzKS4gIFRoaXMgY29tbWFuZCBkb2VzIHRoZSBzYW1lIGFzCi0JCQlbY291bnRdIENUUkwtXi4gIEJ1dCAiOmUgIyIgZG9lc24ndCB3b3JrIGlmIHRoZQotCQkJYWx0ZXJuYXRlIGJ1ZmZlciBkb2Vzbid0IGhhdmUgYSBmaWxlIG5hbWUsIHdoaWxlCi0JCQlDVFJMLV4gc3RpbGwgd29ya3MgdGhlbi4KKwkJCUVkaXQgdGhlIFtjb3VudF10aCBidWZmZXIgKGFzIHNob3duIGJ5IHw6ZmlsZXN8KS4KKwkJCVRoaXMgY29tbWFuZCBkb2VzIHRoZSBzYW1lIGFzIFtjb3VudF0gQ1RSTC1eLiAgQnV0ICI6ZQorCQkJIyIgZG9lc24ndCB3b3JrIGlmIHRoZSBhbHRlcm5hdGUgYnVmZmVyIGRvZXNuJ3QgaGF2ZSBhCisJCQlmaWxlIG5hbWUsIHdoaWxlIENUUkwtXiBzdGlsbCB3b3JrcyB0aGVuLgogCQkJQWxzbyBzZWUgfCsrb3B0fCBhbmQgfCtjbWR8LgogCQkJe1ZpOiBubyArK29wdH0KIApAQCAtMjY4LDEwICsyNzAsMTAgQEAKIAkJCSdyZWFkb25seScgb3B0aW9uIGZvciB0aGlzIGJ1ZmZlci4gIHtub3QgaW4gVml9CiAKIAkJCQkJCQkqQ1RSTC1eKiAqQ1RSTC02KgotW2NvdW50XUNUUkwtXgkJRWRpdCBbY291bnRddGggYWx0ZXJuYXRlIGZpbGUgKGVxdWl2YWxlbnQgdG8gIjplCi0JCQkjW2NvdW50XSIpLiAgV2l0aG91dCBjb3VudCB0aGlzIGdldHMgeW91IHRvIHRoZQotCQkJcHJldmlvdXNseSBlZGl0ZWQgZmlsZS4gIFRoaXMgaXMgYSBxdWljayB3YXkgdG8gdG9nZ2xlCi0JCQliZXR3ZWVuIHR3byAob3IgbW9yZSkgZmlsZXMuCitDVFJMLV4JCQlFZGl0IHRoZSBhbHRlcm5hdGUgZmlsZSAoZXF1aXZhbGVudCB0byAiOmUgIyIpLgorCQkJTW9zdGx5IHRoZSBhbHRlcm5hdGUgZmlsZSBpcyB0aGUgcHJldmlvdXNseSBlZGl0ZWQKKwkJCWZpbGUuICBUaGlzIGlzIGEgcXVpY2sgd2F5IHRvIHRvZ2dsZSBiZXR3ZWVuIHR3bworCQkJZmlsZXMuCiAJCQlJZiB0aGUgJ2F1dG93cml0ZScgb3IgJ2F1dG93cml0ZWFsbCcgb3B0aW9uIGlzIG9uIGFuZAogCQkJdGhlIGJ1ZmZlciB3YXMgY2hhbmdlZCwgd3JpdGUgaXQuCiAJCQlNb3N0bHkgdGhlIF4gY2hhcmFjdGVyIGlzIHBvc2l0aW9uZWQgb24gdGhlIDYga2V5LApAQCAtMjc5LDYgKzI4MSwxMiBAQAogCQkJQnV0IG9uIHNvbWUgbm9uLVVTIGtleWJvYXJkcyBDVFJMLV4gaXMgcHJvZHVjZWQgaW4KIAkJCWFub3RoZXIgd2F5LgogCit7Y291bnR9Q1RSTC1eCQlFZGl0IFtjb3VudF10aCBmaWxlIGluIHRoZSBidWZmZXIgbGlzdCAoZXF1aXZhbGVudCB0bworCQkJIjplICNbY291bnRdIikuICBUaGlzIGlzIGEgcXVpY2sgd2F5IHRvIHN3aXRjaCBiZXR3ZWVuCisJCQlmaWxlcy4KKwkJCVNlZSB8Q1RSTC1efCBhYm92ZSBmb3IgZnVydGhlciBkZXRhaWxzLgorCQkJe25vdCBpbiBWaX0KKwogW2NvdW50XV1mCQkJCQkJKl1mKiAqW2YqCiBbY291bnRdW2YJCVNhbWUgYXMgImdmIi4gIERlcHJlY2F0ZWQuCiAKQEAgLTMzNSwxMSArMzQzLDEyIEBACiBOb3RlIGZvciBzeXN0ZW1zIG90aGVyIHRoYW4gVW5peCBhbmQgTVMtRE9TOiBXaGVuIHVzaW5nIGEgY29tbWFuZCB0aGF0CiBhY2NlcHRzIGEgc2luZ2xlIGZpbGUgbmFtZSAobGlrZSAiOmVkaXQgZmlsZSIpIHNwYWNlcyBpbiB0aGUgZmlsZSBuYW1lIGFyZQogYWxsb3dlZCwgYnV0IHRyYWlsaW5nIHNwYWNlcyBhcmUgaWdub3JlZC4gIFRoaXMgaXMgdXNlZnVsIG9uIHN5c3RlbXMgdGhhdAotYWxsb3cgZmlsZSBuYW1lcyB3aXRoIGVtYmVkZGVkIHNwYWNlcyAobGlrZSB0aGUgQW1pZ2EpLiAgRXhhbXBsZTogVGhlIGNvbW1hbmQKLSI6ZSAgIExvbmcgRmlsZSBOYW1lICIgd2lsbCBlZGl0IHRoZSBmaWxlICJMb25nIEZpbGUgTmFtZSIuICBXaGVuIHVzaW5nIGEKLWNvbW1hbmQgdGhhdCBhY2NlcHRzIG1vcmUgdGhhbiBvbmUgZmlsZSBuYW1lIChsaWtlICI6bmV4dCBmaWxlMSBmaWxlMiIpCi1lbWJlZGRlZCBzcGFjZXMgbXVzdCBiZSBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2guCithbGxvdyBmaWxlIG5hbWVzIHdpdGggZW1iZWRkZWQgc3BhY2VzIChsaWtlIE1TLVdpbmRvd3MgYW5kIHRoZSBBbWlnYSkuCitFeGFtcGxlOiBUaGUgY29tbWFuZCAiOmUgICBMb25nIEZpbGUgTmFtZSAiIHdpbGwgZWRpdCB0aGUgZmlsZSAiTG9uZyBGaWxlCitOYW1lIi4gIFdoZW4gdXNpbmcgYSBjb21tYW5kIHRoYXQgYWNjZXB0cyBtb3JlIHRoYW4gb25lIGZpbGUgbmFtZSAobGlrZSAiOm5leHQKK2ZpbGUxIGZpbGUyIikgZW1iZWRkZWQgc3BhY2VzIG11c3QgYmUgZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoLgogCisJCQkJCQkJKndpbGRjYXJkKgogV2lsZGNhcmRzIGluIHtmaWxlfSBhcmUgZXhwYW5kZWQuICBXaGljaCB3aWxkY2FyZHMgYXJlIHN1cHBvcnRlZCBkZXBlbmRzIG9uCiB0aGUgc3lzdGVtLiAgVGhlc2UgYXJlIHRoZSBjb21tb24gb25lczoKIAkqCW1hdGNoZXMgYW55dGhpbmcsIGluY2x1ZGluZyBub3RoaW5nCkBAIC0zNTEsNyArMzYwLDggQEAKIGlzIHRvIHVzZSAicGF0aFxbW11hYmNdIi4gIFRoZW4gdGhlIGZpbGUgInBhdGhbYWJjXSIgbGl0ZXJhbGx5LgogCiAJCQkJCSpiYWNrdGljay1leHBhbnNpb24qICpgLWV4cGFuc2lvbioKLU9uIFVuaXggeW91IGNhbiBhbHNvIHVzZSBiYWNrdGlja3MgaW4gdGhlIGZpbGUgbmFtZSwgZm9yIGV4YW1wbGU6ID4KK09uIFVuaXggYW5kIGEgZmV3IG90aGVyIHN5c3RlbXMgeW91IGNhbiBhbHNvIHVzZSBiYWNrdGlja3MgaW4gdGhlIGZpbGUgbmFtZSwKK2ZvciBleGFtcGxlOiA+CiAJOmUgYGZpbmQgLiAtbmFtZSB2ZXJcXCouYyAtcHJpbnRgCiBUaGUgYmFja3NsYXNoZXMgYmVmb3JlIHRoZSBzdGFyIGFyZSByZXF1aXJlZCB0byBwcmV2ZW50ICJ2ZXIqLmMiIHRvIGJlCiBleHBhbmRlZCBieSB0aGUgc2hlbGwgYmVmb3JlIGV4ZWN1dGluZyB0aGUgZmluZCBwcm9ncmFtLgpAQCAtMzYwLDEyICszNzAsMTEgQEAKIGRpcmVjdGx5IGJlZm9yZSB0aGUgZmlyc3Qgb3IganVzdCBhZnRlciB0aGUgbGFzdCBiYWNrdGljay4KIAogCQkJCQkJCSpgPSoKLVlvdSBjYW4gaGF2ZSB0aGUgYmFja3RpY2tzIGV4cGFuZGVkIGFzIGEgVmltIGV4cHJlc3Npb24sIGluc3RlYWQgb2YKLWFuIGV4dGVybmFsIGNvbW1hbmQsIGJ5IHVzaW5nIHRoZSBzeW50YXggYD17ZXhwcn1gIGUuZy46ID4KLQk6bGV0IGZvbz0nYmFyJwotCTplIGA9Zm9vIC4gIi5jIiBgCi1UaGlzIHdpbGwgZWRpdCAiYmFyLmMiLiAgVGhlIGV4cHJlc3Npb24gY2FuIGNvbnRhaW4ganVzdCBhYm91dCBhbnl0aGluZywgdGh1cwotdGhpcyBjYW4gYWxzbyBiZSB1c2VkIHRvIGF2b2lkIHRoZSBzcGVjaWFsIG1lYW5pbmcgb2YgJyInLCAnfCcsICclJyBhbmQgJyMnLgorWW91IGNhbiBoYXZlIHRoZSBiYWNrdGlja3MgZXhwYW5kZWQgYXMgYSBWaW0gZXhwcmVzc2lvbiwgaW5zdGVhZCBvZiBhbgorZXh0ZXJuYWwgY29tbWFuZCwgYnkgdXNpbmcgdGhlIHN5bnRheCBgPXtleHByfWAgZS5nLjogPgorCTplIGA9dGVtcG5hbWUoKWAKK1RoZSBleHByZXNzaW9uIGNhbiBjb250YWluIGp1c3QgYWJvdXQgYW55dGhpbmcsIHRodXMgdGhpcyBjYW4gYWxzbyBiZSB1c2VkIHRvCithdm9pZCB0aGUgc3BlY2lhbCBtZWFuaW5nIG9mICciJywgJ3wnLCAnJScgYW5kICcjJy4KIAogCQkJCQkJCSorK29wdCogKlsrK29wdF0qCiBUaGUgWysrb3B0XSBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBmb3JjZSB0aGUgdmFsdWUgb2YgJ2ZpbGVmb3JtYXQnIG9yCkBAIC00NzAsMjQxICs0NzksMTcgQEAKIHByb3ZpZGVzIHNvbWUgc2VjdXJpdHkgYWdhaW5zdCBvdGhlcnMgcmVhZGluZyB5b3VyIGZpbGVzLiB8ZW5jcnlwdGlvbnwKIAogCi1GaWxlIFNlYXJjaGluZwkJCQkJCSpmaWxlLXNlYXJjaGluZyoKLQote25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3BhdGhfZXh0cmF8IGZlYXR1cmV9Ci0KLVRoZSBmaWxlIHNlYXJjaGluZyBpcyBjdXJyZW50bHkgdXNlZCBmb3IgdGhlICdwYXRoJywgJ2NkcGF0aCcgYW5kICd0YWdzJwotb3B0aW9ucy4gIFRoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VhcmNoaW5nOgotCi0xKSBEb3dud2FyZCBzZWFyY2g6Ci0gICBEb3dud2FyZCBzZWFyY2ggdXNlcyB0aGUgd2lsZGNhcmRzICcqJywgJyoqJyBhbmQgcG9zc2libHkgb3RoZXJzCi0gICBzdXBwb3J0ZWQgYnkgeW91ciBvcGVyYXRpbmcgc3lzdGVtLiAnKicgYW5kICcqKicgYXJlIGhhbmRsZWQgaW5zaWRlIFZpbSwgc28KLSAgIHRoZXkgd29yayBvbiBhbGwgb3BlcmF0aW5nIHN5c3RlbXMuCi0KLSAgIFRoZSB1c2FnZSBvZiAnKicgaXMgcXVpdGUgc2ltcGxlOiBJdCBtYXRjaGVzIDAgb3IgbW9yZSBjaGFyYWN0ZXJzLgotCi0gICAnKionIGlzIG1vcmUgc29waGlzdGljYXRlZDoKLSAgICAgIC0gSXQgT05MWSBtYXRjaGVzIGRpcmVjdG9yaWVzLgotICAgICAgLSBJdCBtYXRjaGVzIHVwIHRvIDMwICBkaXJlY3RvcmllcyBkZWVwLCBzbyB5b3UgY2FuIHVzZSBpdCB0byBzZWFyY2ggYW4KLQllbnRpcmUgZGlyZWN0b3J5IHRyZWUKLSAgICAgIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGxldmVscyBtYXRjaGVkIGNhbiBiZSBnaXZlbiBieSBhcHBlbmRpbmcgYSBudW1iZXIKLQl0byAnKionLgotCVRodXMgJy91c3IvKioyJyBjYW4gbWF0Y2g6ID4KLQkJL3VzcgotCQkvdXNyL2luY2x1ZGUKLQkJL3Vzci9pbmNsdWRlL3N5cwotCQkvdXNyL2luY2x1ZGUvZysrCi0JCS91c3IvbGliCi0JCS91c3IvbGliL1gxMQotCQkuLi4uCi08CUl0IGRvZXMgTk9UIG1hdGNoICcvdXNyL2luY2x1ZGUvZysrL3N0ZCcgYXMgdGhpcyB3b3VsZCBiZSB0aHJlZQotCWxldmVscy4KLQlUaGUgYWxsb3dlZCBudW1iZXIgcmFuZ2UgaXMgMCAoJyoqMCcgaXMgcmVtb3ZlZCkgdG8gMjU1LgotCUlmIHRoZSBnaXZlbiBudW1iZXIgaXMgc21hbGxlciB0aGFuIDAgaXQgZGVmYXVsdHMgdG8gMzAsIGlmIGl0J3MKLQliaWdnZXIgdGhhbiAyNTUgaXQgZGVmYXVsdHMgdG8gMjU1LgotICAgICAgLSAnKionIGNhbiBvbmx5IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgYmUgZm9sbG93ZWQgYnkgYSBwYXRoCi0Jc2VwYXJhdG9yIG9yIGJ5IGEgbnVtYmVyIGFuZCBhIHBhdGggc2VwYXJhdG9yLgotCi0gICBZb3UgY2FuIGNvbWJpbmUgJyonIGFuZCAnKionIGluIGFueSBvcmRlcjogPgotCS91c3IvKiovc3lzLyoKLQkvdXNyLyovc3lzLyoqCi0JL3Vzci8qKjIvc3lzLyoKLQotMikgVXB3YXJkIHNlYXJjaDoKLSAgIEhlcmUgeW91IGNhbiBnaXZlIGEgZGlyZWN0b3J5IGFuZCB0aGVuIHNlYXJjaCB0aGUgZGlyZWN0b3J5IHRyZWUgdXB3YXJkIGZvcgotICAgYSBmaWxlLiBZb3UgY291bGQgZ2l2ZSBzdG9wLWRpcmVjdG9yaWVzIHRvIGxpbWl0IHRoZSB1cHdhcmQgc2VhcmNoLiBUaGUKLSAgIHN0b3AtZGlyZWN0b3JpZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBwYXRoIChmb3IgdGhlICdwYXRoJyBvcHRpb24pIG9yIHRvCi0gICB0aGUgZmlsZW5hbWUgKGZvciB0aGUgJ3RhZ3MnIG9wdGlvbikgd2l0aCBhICc7Jy4gSWYgeW91IHdhbnQgc2V2ZXJhbAotICAgc3RvcC1kaXJlY3RvcmllcyBzZXBhcmF0ZSB0aGVtIHdpdGggJzsnLiBJZiB5b3Ugd2FudCBubyBzdG9wLWRpcmVjdG9yeQotICAgKCJzZWFyY2ggdXB3YXJkIHRpbGwgdGhlIHJvb3QgZGlyZWN0b3J5KSBqdXN0IHVzZSAnOycuID4KLQkvdXNyL2luY2x1ZGUvc3lzOy91c3IKLTwgICB3aWxsIHNlYXJjaCBpbjogPgotCSAgIC91c3IvaW5jbHVkZS9zeXMKLQkgICAvdXNyL2luY2x1ZGUKLQkgICAvdXNyCi08Ci0gICBJZiB5b3UgdXNlIGEgcmVsYXRpdmUgcGF0aCB0aGUgdXB3YXJkIHNlYXJjaCBpcyBzdGFydGVkIGluIFZpbSdzIGN1cnJlbnQKLSAgIGRpcmVjdG9yeSBvciBpbiB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IGZpbGUgKGlmIHRoZSByZWxhdGl2ZSBwYXRoCi0gICBzdGFydHMgd2l0aCAnLi8nIGFuZCAnZCcgaXMgbm90IGluY2x1ZGVkIGluICdjcG9wdGlvbnMnKS4KLQotICAgSWYgVmltJ3MgY3VycmVudCBwYXRoIGlzIC91L3VzZXJfeC93b3JrL3JlbGVhc2UgYW5kIHlvdSBkbyA+Ci0JOnNldCBwYXRoPWluY2x1ZGU7L3UvdXNlcl94Ci08ICBhbmQgdGhlbiBzZWFyY2ggZm9yIGEgZmlsZSB3aXRoIHxnZnwgdGhlIGZpbGUgaXMgc2VhcmNoZWQgaW46ID4KLQkvdS91c2VyX3gvd29yay9yZWxlYXNlL2luY2x1ZGUKLQkvdS91c2VyX3gvd29yay9pbmNsdWRlCi0JL3UvdXNlcl94L2luY2x1ZGUKLQotMykgQ29tYmluZWQgdXAvZG93bndhcmQgc2VhcmNoCi0gICBJZiBWaW0ncyBjdXJyZW50IHBhdGggaXMgL3UvdXNlcl94L3dvcmsvcmVsZWFzZSBhbmQgeW91IGRvID4KLQlzZXQgcGF0aD0qKjsvdS91c2VyX3gKLTwgIGFuZCB0aGVuIHNlYXJjaCBmb3IgYSBmaWxlIHdpdGggfGdmfCB0aGUgZmlsZSBpcyBzZWFyY2hlZCBpbjogPgotCS91L3VzZXJfeC93b3JrL3JlbGVhc2UvKioKLQkvdS91c2VyX3gvd29yay8qKgotCS91L3VzZXJfeC8qKgotPAotICAgQkUgQ0FSRUZVTCEgVGhpcyBtaWdodCBjb25zdW1lIGEgbG90IG9mIHRpbWUsIGFzIHRoZSBzZWFyY2ggb2YKLSAgICcvdS91c2VyX3gvKionIGluY2x1ZGVzICcvdS91c2VyX3gvd29yay8qKicgYW5kCi0gICAnL3UvdXNlcl94L3dvcmsvcmVsZWFzZS8qKicuICBTbyAnL3UvdXNlcl94L3dvcmsvcmVsZWFzZS8qKicgaXMgc2VhcmNoZWQKLSAgIHRocmVlIGFuZCAnL3UvdXNlcl94L3dvcmsvKionIGlzIHNlYXJjaGVkIHR3byB0aW1lcy4KLQotICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUgeW91IG1pZ2h0IHdhbnQgdG8gc2V0IHBhdGggdG86ID4KLQk6c2V0IHBhdGg9KiosL3UvdXNlcl94LyoqCi08ICAgVGhpcyBzZWFyY2hlczogPgotCS91L3VzZXJfeC93b3JrL3JlbGVhc2UvKioKLQkvdS91c2VyX3gvKioKLTwgICBUaGlzIHNlYXJjaGVzIHRoZSBzYW1lIGRpcmVjdG9yaWVzLCBidXQgaW4gYSBkaWZmZXJlbnQgb3JkZXIuCi0KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotMy4gRGlhbG9ncwkJCQkJCSplZGl0LWRpYWxvZ3MqCi0KLQkJCQkJCQkqOmNvbmZpcm0qICo6Y29uZioKLTpjb25mW2lybV0ge2NvbW1hbmR9CUV4ZWN1dGUge2NvbW1hbmR9LCBhbmQgdXNlIGEgZGlhbG9nIHdoZW4gYW4KLQkJCW9wZXJhdGlvbiBoYXMgdG8gYmUgY29uZmlybWVkLiAgQ2FuIGJlIHVzZWQgb24gdGhlCi0JCQkiOnEiLCAiOnFhIiBhbmQgIjp3IiBjb21tYW5kcyAodGhlIGxhdHRlciB0byBvdmVyLXJpZGUKLQkJCWEgcmVhZC1vbmx5IHNldHRpbmcpLgotCi1FeGFtcGxlczogPgotICA6Y29uZmlybSB3IGZvbwotPAlXaWxsIGFzayBmb3IgY29uZmlybWF0aW9uIHdoZW4gImZvbyIgYWxyZWFkeSBleGlzdHMuID4KLSAgOmNvbmZpcm0gcQotPAlXaWxsIGFzayBmb3IgY29uZmlybWF0aW9uIHdoZW4gdGhlcmUgYXJlIGNoYW5nZXMuID4KLSAgOmNvbmZpcm0gcWEKLTwJSWYgYW55IG1vZGlmaWVkLCB1bnNhdmVkIGJ1ZmZlcnMgZXhpc3QsIHlvdSB3aWxsIGJlIHByb21wdGVkIHRvIHNhdmUKLQlvciBhYmFuZG9uIGVhY2ggb25lLiAgVGhlcmUgYXJlIGFsc28gY2hvaWNlcyB0byAic2F2ZSBhbGwiIG9yICJhYmFuZG9uCi0JYWxsIi4KLQotSWYgeW91IHdhbnQgdG8gYWx3YXlzIHVzZSAiOmNvbmZpcm0iLCBzZXQgdGhlICdjb25maXJtJyBvcHRpb24uCi0KLQkJCSo6YnJvd3NlKiAqOmJybyogKkUzMzgqICpFNjE0KiAqRTYxNSogKkU2MTYqICpFNTc4KgotOmJyb1t3c2VdIHtjb21tYW5kfQlPcGVuIGEgZmlsZSBzZWxlY3Rpb24gZGlhbG9nIGZvciBhbiBhcmd1bWVudCB0bwotCQkJe2NvbW1hbmR9LiAgQXQgcHJlc2VudCB0aGlzIHdvcmtzIGZvciB8OmV8LCB8Ond8LAotCQkJfDpyfCwgfDpzYXZlYXN8LCB8OnNwfCwgfDpta2V4cmN8LCB8Om1rdmltcmN8IGFuZAotCQkJfDpta3Nlc3Npb258LgotCQkJe29ubHkgaW4gV2luMzIsIEF0aGVuYSwgTW90aWYsIEdUSyBhbmQgTWFjIEdVSX0KLQkJCVdoZW4gIjpicm93c2UiIGlzIG5vdCBwb3NzaWJsZSB5b3UgZ2V0IGFuIGVycm9yCi0JCQltZXNzYWdlLiAgSWYgdGhlIHwrYnJvd3NlfCBmZWF0dXJlIGlzIG1pc3Npbmcgb3IgdGhlCi0JCQl7Y29tbWFuZH0gZG9lc24ndCBzdXBwb3J0IGJyb3dzaW5nLCB0aGUge2NvbW1hbmR9IGlzCi0JCQlleGVjdXRlZCB3aXRob3V0IGEgZGlhbG9nLgotCQkJIjpicm93c2Ugc2V0IiB3b3JrcyBsaWtlIHw6b3B0aW9uc3wuCi0KLVRoZSBzeW50YXggaXMgYmVzdCBzaG93biB2aWEgc29tZSBleGFtcGxlczogPgotCTpicm93c2UgZSAkdmltL2ZvbwotPAkJT3BlbiB0aGUgYnJvd3NlciBpbiB0aGUgJHZpbS9mb28gZGlyZWN0b3J5LCBhbmQgZWRpdCB0aGUKLQkJZmlsZSBjaG9zZW4uID4KLQk6YnJvd3NlIGUKLTwJCU9wZW4gdGhlIGJyb3dzZXIgaW4gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgd2l0aCAnYnJvd3NlZGlyJywKLQkJYW5kIGVkaXQgdGhlIGZpbGUgY2hvc2VuLiA+Ci0JOmJyb3dzZSB3Ci08CQlPcGVuIHRoZSBicm93c2VyIGluIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgYnVmZmVyLAotCQl3aXRoIHRoZSBjdXJyZW50IGJ1ZmZlciBmaWxlbmFtZSBhcyBkZWZhdWx0LCBhbmQgc2F2ZSB0aGUKLQkJYnVmZmVyIHVuZGVyIHRoZSBmaWxlbmFtZSBjaG9zZW4uID4KLQk6YnJvd3NlIHcgQzovYmFyCi08CQlPcGVuIHRoZSBicm93c2VyIGluIHRoZSBDOi9iYXIgZGlyZWN0b3J5LCB3aXRoIHRoZSBjdXJyZW50Ci0JCWJ1ZmZlciBmaWxlbmFtZSBhcyBkZWZhdWx0LCBhbmQgc2F2ZSB0aGUgYnVmZmVyIHVuZGVyIHRoZQotCQlmaWxlbmFtZSBjaG9zZW4uCi1BbHNvIHNlZSB0aGUgfCdicm93c2VkaXInfCBvcHRpb24uCi1Gb3IgdmVyc2lvbnMgb2YgVmltIHdoZXJlIGJyb3dzaW5nIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkCi11bm1vZGlmaWVkLgotCi0JCQkJCQkJKmJyb3dzZWZpbHRlcioKLUZvciBNUyBXaW5kb3dzLCB5b3UgY2FuIG1vZGlmeSB0aGUgZmlsdGVycyB0aGF0IGFyZSB1c2VkIGluIHRoZSBicm93c2UgZGlhbG9nLgotQnkgc2V0dGluZyB0aGUgZzpicm93c2VmaWx0ZXIgb3IgYjpicm93c2VmaWx0ZXIgdmFyaWFibGVzLCB5b3UgY2FuIGNoYW5nZSB0aGUKLWZpbHRlcnMgZ2xvYmFsbHkgb3IgbG9jYWxseSB0byB0aGUgYnVmZmVyLiAgVGhlIHZhcmlhYmxlIGlzIHNldCB0byBhIHN0cmluZyBpbgotdGhlIGZvcm1hdCAie2ZpbHRlciBsYWJlbH1cdHtwYXR0ZXJufTt7cGF0dGVybn1cbiIgd2hlcmUge2ZpbHRlciBsYWJlbH0gaXMgdGhlCi10ZXh0IHRoYXQgYXBwZWFycyBpbiB0aGUgIkZpbGVzIG9mIFR5cGUiIGNvbWJvQm94LCBhbmQge3BhdHRlcm59IGlzIHRoZQotcGF0dGVybiB3aGljaCBmaWx0ZXJzIHRoZSBmaWxlbmFtZXMuICBTZXZlcmFsIHBhdHRlcm5zIGNhbiBiZSBnaXZlbiwgc2VwYXJhdGVkCi1ieSAnOycuCi0KLUZvciBNb3RpZiB0aGUgc2FtZSBmb3JtYXQgaXMgdXNlZCwgYnV0IG9ubHkgdGhlIHZlcnkgZmlyc3QgcGF0dGVybiBpcyBhY3R1YWxseQotdXNlZCAoTW90aWYgb25seSBvZmZlcnMgb25lIHBhdHRlcm4sIGJ1dCB5b3UgY2FuIGVkaXQgaXQpLgotCi1Gb3IgZXhhbXBsZSwgdG8gaGF2ZSBvbmx5IFZpbSBmaWxlcyBpbiB0aGUgZGlhbG9nLCB5b3UgY291bGQgdXNlIHRoZSBmb2xsb3dpbmcKLWNvbW1hbmQ6ID4KLQotICAgICBsZXQgZzpicm93c2VmaWx0ZXI9IlZpbSBTY3JpcHRzXHQqLnZpbVxuVmltIFN0YXJ0dXAgRmlsZXNcdCp2aW1yY1xuIgotCi1Zb3UgY2FuIG92ZXJyaWRlIHRoZSBmaWx0ZXIgc2V0dGluZyBvbiBhIHBlci1idWZmZXIgYmFzaXMgYnkgc2V0dGluZyB0aGUKLWI6YnJvd3NlZmlsdGVyIHZhcmlhYmxlLiAgWW91IHdvdWxkIG1vc3QgbGlrZWx5IHNldCBiOmJyb3dzZWZpbHRlciBpbiBhCi1maWxldHlwZSBwbHVnaW4sIHNvIHRoYXQgdGhlIGJyb3dzZSBkaWFsb2cgd291bGQgY29udGFpbiBlbnRyaWVzIHJlbGF0ZWQgdG8KLXRoZSB0eXBlIG9mIGZpbGUgeW91IGFyZSBjdXJyZW50bHkgZWRpdGluZy4gIERpc2FkdmFudGFnZTogVGhpcyBtYWtlcyBpdAotZGlmZmljdWx0IHRvIHN0YXJ0IGVkaXRpbmcgYSBmaWxlIG9mIGEgZGlmZmVyZW50IHR5cGUuICBUbyBvdmVyY29tZSB0aGlzLCB5b3UKLW1heSB3YW50IHRvIGFkZCAiQWxsIEZpbGVzXHQqLipcbiIgYXMgdGhlIGZpbmFsIGZpbHRlciwgc28gdGhhdCB0aGUgdXNlciBjYW4KLXN0aWxsIGFjY2VzcyBhbnkgZGVzaXJlZCBmaWxlLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLTQuIFRoZSBjdXJyZW50IGRpcmVjdG9yeQkJCQkqY3VycmVudC1kaXJlY3RvcnkqCi0KLVlvdSBtYXkgdXNlIHRoZSB8OmNkfCBhbmQgfDpsY2R8IGNvbW1hbmRzIHRvIGNoYW5nZSB0byBhbm90aGVyIGRpcmVjdG9yeSwgc28KLXlvdSB3aWxsIG5vdCBoYXZlIHRvIHR5cGUgdGhhdCBkaXJlY3RvcnkgbmFtZSBpbiBmcm9udCBvZiB0aGUgZmlsZSBuYW1lcy4gIEl0Ci1hbHNvIG1ha2VzIGEgZGlmZmVyZW5jZSBmb3IgZXhlY3V0aW5nIGV4dGVybmFsIGNvbW1hbmRzLCBlLmcuICI6IWxzIi4KLQotCQkJCQkJCSo6Y2QqICpFNDcyKgotOmNkCQkJT24gbm9uLVVuaXggc3lzdGVtczogUHJpbnQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5Ci0JCQluYW1lLiAgT24gVW5peCBzeXN0ZW1zOiBDaGFuZ2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5Ci0JCQl0byB0aGUgaG9tZSBkaXJlY3RvcnkuICBVc2UgfDpwd2R8IHRvIHByaW50IHRoZQotCQkJY3VycmVudCBkaXJlY3Rvcnkgb24gYWxsIHN5c3RlbXMuCi0KLTpjZCB7cGF0aH0JCUNoYW5nZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgdG8ge3BhdGh9LgotCQkJSWYge3BhdGh9IGlzIHJlbGF0aXZlLCBpdCBpcyBzZWFyY2hlZCBmb3IgaW4gdGhlCi0JCQlkaXJlY3RvcmllcyBsaXN0ZWQgaW4gfCdjZHBhdGgnfC4KLQkJCURvZXMgbm90IGNoYW5nZSB0aGUgbWVhbmluZyBvZiBhbiBhbHJlYWR5IG9wZW5lZCBmaWxlLAotCQkJYmVjYXVzZSBpdHMgZnVsbCBwYXRoIG5hbWUgaXMgcmVtZW1iZXJlZC4gIEZpbGVzIGZyb20KLQkJCXRoZSB8YXJnbGlzdHwgbWF5IGNoYW5nZSB0aG91Z2ghCi0JCQlPbiBNUy1ET1MgdGhpcyBhbHNvIGNoYW5nZXMgdGhlIGFjdGl2ZSBkcml2ZS4KLQkJCVRvIGNoYW5nZSB0byB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IGZpbGU6ID4KLQkJCQk6Y2QgJTpoCi08Ci0JCQkJCQkJKjpjZC0qICpFMTg2KgotOmNkIC0JCQlDaGFuZ2UgdG8gdGhlIHByZXZpb3VzIGN1cnJlbnQgZGlyZWN0b3J5IChiZWZvcmUgdGhlCi0JCQlwcmV2aW91cyAiOmNkIHtwYXRofSIgY29tbWFuZCkuIHtub3QgaW4gVml9Ci0KLQkJCQkJCQkqOmNoZCogKjpjaGRpcioKLTpjaGRbaXJdIFtwYXRoXQkJU2FtZSBhcyB8OmNkfC4KLQotCQkJCQkJCSo6bGMqICo6bGNkKgotOmxjW2RdIHtwYXRofQkJTGlrZSB8OmNkfCwgYnV0IG9ubHkgc2V0IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlCi0JCQljdXJyZW50IHdpbmRvdy4gIFRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3Igb3RoZXIKLQkJCXdpbmRvd3MgaXMgbm90IGNoYW5nZWQuIHtub3QgaW4gVml9Ci0KLQkJCQkJCQkqOmxjaCogKjpsY2hkaXIqCi06bGNoW2Rpcl0JCVNhbWUgYXMgfDpsY2R8LiB7bm90IGluIFZpfQotCi0JCQkJCQkJKjpwdyogKjpwd2QqICpFMTg3KgotOnB3W2RdCQkJUHJpbnQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG5hbWUuICB7Vmk6IG5vIHB3ZH0KLQkJCUFsc28gc2VlIHxnZXRjd2QoKXwuCi0KLVNvIGxvbmcgYXMgbm8gfDpsY2R8IGNvbW1hbmQgaGFzIGJlZW4gdXNlZCwgYWxsIHdpbmRvd3Mgc2hhcmUgdGhlIHNhbWUgY3VycmVudAotZGlyZWN0b3J5LiAgVXNpbmcgYSBjb21tYW5kIHRvIGp1bXAgdG8gYW5vdGhlciB3aW5kb3cgZG9lc24ndCBjaGFuZ2UgYW55dGhpbmcKLWZvciB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi1XaGVuIGEgfDpsY2R8IGNvbW1hbmQgaGFzIGJlZW4gdXNlZCBmb3IgYSB3aW5kb3csIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5Ci1iZWNvbWVzIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhhdCB3aW5kb3cuICBXaW5kb3dzIHdoZXJlIHRoZSB8OmxjZHwKLWNvbW1hbmQgaGFzIG5vdCBiZWVuIHVzZWQgc3RpY2sgdG8gdGhlIGdsb2JhbCBjdXJyZW50IGRpcmVjdG9yeS4gIFdoZW4ganVtcGluZwotdG8gYW5vdGhlciB3aW5kb3cgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdpbGwgYmVjb21lIHRoZSBsYXN0IHNwZWNpZmllZCBsb2NhbAotY3VycmVudCBkaXJlY3RvcnkuICBJZiBub25lIHdhcyBzcGVjaWZpZWQsIHRoZSBnbG9iYWwgY3VycmVudCBkaXJlY3RvcnkgaXMKLXVzZWQuCi1XaGVuIGEgfDpjZHwgY29tbWFuZCBpcyB1c2VkLCB0aGUgY3VycmVudCB3aW5kb3cgd2lsbCBsb3NlIGhpcyBsb2NhbCBjdXJyZW50Ci1kaXJlY3RvcnkgYW5kIHdpbGwgdXNlIHRoZSBnbG9iYWwgY3VycmVudCBkaXJlY3RvcnkgZnJvbSBub3cgb24uCi0KLUFmdGVyIHVzaW5nIHw6Y2R8IHRoZSBmdWxsIHBhdGggbmFtZSB3aWxsIGJlIHVzZWQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcKLWZpbGVzLiAgT24gc29tZSBuZXR3b3JrZWQgZmlsZSBzeXN0ZW1zIHRoaXMgbWF5IGNhdXNlIHByb2JsZW1zLiAgVGhlIHJlc3VsdCBvZgotdXNpbmcgdGhlIGZ1bGwgcGF0aCBuYW1lIGlzIHRoYXQgdGhlIGZpbGUgbmFtZXMgY3VycmVudGx5IGluIHVzZSB3aWxsIHJlbWFpbgotcmVmZXJyaW5nIHRvIHRoZSBzYW1lIGZpbGUuICBFeGFtcGxlOiBJZiB5b3UgaGF2ZSBhIGZpbGUgYTp0ZXN0IGFuZCBhCi1kaXJlY3RvcnkgYTp2aW0gdGhlIGNvbW1hbmRzICI6ZSB0ZXN0IiAiOmNkIHZpbSIgIjp3IiB3aWxsIG92ZXJ3cml0ZSB0aGUgZmlsZQotYTp0ZXN0IGFuZCBub3Qgd3JpdGUgYTp2aW0vdGVzdC4gIEJ1dCBpZiB5b3UgZG8gIjp3IHRlc3QiIHRoZSBmaWxlIGE6dmltL3Rlc3QKLXdpbGwgYmUgd3JpdHRlbiwgYmVjYXVzZSB5b3UgZ2F2ZSBhIG5ldyBmaWxlIG5hbWUgYW5kIGRpZCBub3QgcmVmZXIgdG8gYQotZmlsZW5hbWUgYmVmb3JlIHRoZSAiOmNkIi4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci01LiBUaGUgYXJndW1lbnQgbGlzdAkJCQkqYXJndW1lbnQtbGlzdCogKmFyZ2xpc3QqCiszLiBUaGUgYXJndW1lbnQgbGlzdAkJCQkqYXJndW1lbnQtbGlzdCogKmFyZ2xpc3QqCiAKIElmIHlvdSBnaXZlIG1vcmUgdGhhbiBvbmUgZmlsZSBuYW1lIHdoZW4gc3RhcnRpbmcgVmltLCB0aGlzIGxpc3QgaXMgcmVtZW1iZXJlZAogYXMgdGhlIGFyZ3VtZW50IGxpc3QuICBZb3UgY2FuIGp1bXAgdG8gZWFjaCBmaWxlIGluIHRoaXMgbGlzdC4KIAogRG8gbm90IGNvbmZ1c2UgdGhpcyB3aXRoIHRoZSBidWZmZXIgbGlzdCwgd2hpY2ggeW91IGNhbiBzZWUgd2l0aCB0aGUKIHw6YnVmZmVyc3wgY29tbWFuZC4gIFRoZSBhcmd1bWVudCBsaXN0IHdhcyBhbHJlYWR5IHByZXNlbnQgaW4gVmksIHRoZSBidWZmZXIKLWxpc3QgaXMgbmV3IGluIFZpbS4gIEEgZmlsZSBuYW1lIGluIHRoZSBhcmd1bWVudCBsaXN0IHdpbGwgYWxzbyBiZSBwcmVzZW50IGluCi10aGUgYnVmZmVyIGxpc3QgKHVubGVzcyBpdCB3YXMgZGVsZXRlZCB3aXRoICI6YmRlbCIpLgorbGlzdCBpcyBuZXcgaW4gVmltLiAgRXZlcnkgZmlsZSBuYW1lIGluIHRoZSBhcmd1bWVudCBsaXN0IHdpbGwgYWxzbyBiZSBwcmVzZW50CitpbiB0aGUgYnVmZmVyIGxpc3QgKHVubGVzcyBpdCB3YXMgZGVsZXRlZCB3aXRoIHw6YmRlbHwgb3IgfDpid2lwZXwpLiAgQnV0IGl0J3MKK2NvbW1vbiB0aGF0IG5hbWVzIGluIHRoZSBidWZmZXIgbGlzdCBhcmUgbm90IGluIHRoZSBhcmd1bWVudCBsaXN0LgogCiBUaGlzIHN1YmplY3QgaXMgaW50cm9kdWNlZCBpbiBzZWN0aW9uIHwwNy4yfCBvZiB0aGUgdXNlciBtYW51YWwuCiAKQEAgLTg5NCwxMSArNjc5LDE3IEBACiBpcyB1c2VkLiAgSWYgdGhlcmUgaXMgbm8gbGFzdCBrbm93biBjdXJzb3IgcG9zaXRpb24gdGhlIGN1cnNvciB3aWxsIGJlIGluIHRoZQogZmlyc3QgbGluZSAodGhlIGxhc3QgbGluZSBpbiBFeCBtb2RlKS4KIAorCQkJCQkJCSp7YXJnbGlzdH0qCiBUaGUgd2lsZGNhcmRzIGluIHRoZSBhcmd1bWVudCBsaXN0IGFyZSBleHBhbmRlZCBhbmQgdGhlIGZpbGUgbmFtZXMgYXJlIHNvcnRlZC4KIFRodXMgeW91IGNhbiB1c2UgdGhlIGNvbW1hbmQgInZpbSAqLmMiIHRvIGVkaXQgYWxsIHRoZSBDIGZpbGVzLiAgRnJvbSB3aXRoaW4KLVZpbSB0aGUgY29tbWFuZCAiOm4gKi5jIiBkb2VzIHRoZSBzYW1lLiAgT24gVW5peCB5b3UgY2FuIGFsc28gdXNlIGJhY2t0aWNrcywKLWZvciBleGFtcGxlOiA+Ci0JOm4gYGZpbmQgLiAtbmFtZSBcXCouYyAtcHJpbnRgCitWaW0gdGhlIGNvbW1hbmQgIjpuICouYyIgZG9lcyB0aGUgc2FtZS4KKworV2hpdGUgc3BhY2UgaXMgdXNlZCB0byBzZXBhcmF0ZSBmaWxlIG5hbWVzLiAgUHV0IGEgYmFja3NsYXNoIGJlZm9yZSBhIHNwYWNlIG9yCitUYWIgdG8gaW5jbHVkZSBpdCBpbiBhIGZpbGUgbmFtZS4gIEUuZy4sIHRvIGVkaXQgdGhlIHNpbmdsZSBmaWxlICJmb28gYmFyIjogPgorCTpuZXh0IGZvb1wgYmFyCisKK09uIFVuaXggYW5kIGEgZmV3IG90aGVyIHN5c3RlbXMgeW91IGNhbiBhbHNvIHVzZSBiYWNrdGlja3MsIGZvciBleGFtcGxlOiA+CisJOm5leHQgYGZpbmQgLiAtbmFtZSBcXCouYyAtcHJpbnRgCiBUaGUgYmFja3NsYXNoZXMgYmVmb3JlIHRoZSBzdGFyIGFyZSByZXF1aXJlZCB0byBwcmV2ZW50ICIqLmMiIHRvIGJlIGV4cGFuZGVkCiBieSB0aGUgc2hlbGwgYmVmb3JlIGV4ZWN1dGluZyB0aGUgZmluZCBwcm9ncmFtLgogCkBAIC05ODgsNyArNzc5LDcgQEAKICJteV9mb28iIGlzbid0IHVzZWQuICAiOnVwZGF0ZSIgd3JpdGVzIHRoZSBmaWxlIG9ubHkgaWYgY2hhbmdlcyB3ZXJlIG1hZGUuCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotNi4gV3JpdGluZwkJCQkJKndyaXRpbmcqICpzYXZlLWZpbGUqCis0LiBXcml0aW5nCQkJCQkqd3JpdGluZyogKnNhdmUtZmlsZSoKIAogTm90ZTogV2hlbiB0aGUgJ3dyaXRlJyBvcHRpb24gaXMgb2ZmLCB5b3UgYXJlIG5vdCBhYmxlIHRvIHdyaXRlIGFueSBmaWxlLgogCkBAIC0xMTczLDcgKzk2NCw3IEBACiBUaGUgbmFtZXMgY2FuIGJlIGluIHVwcGVyLSBvciBsb3dlcmNhc2UuCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotNy4gV3JpdGluZyBhbmQgcXVpdHRpbmcJCQkJCSp3cml0ZS1xdWl0KgorNS4gV3JpdGluZyBhbmQgcXVpdHRpbmcJCQkJCSp3cml0ZS1xdWl0KgogCiAJCQkJCQkJKjpxKiAqOnF1aXQqCiA6cVt1aXRdCQkJUXVpdCB0aGUgY3VycmVudCB3aW5kb3cuICBRdWl0IFZpbSBpZiB0aGlzIGlzIHRoZSBsYXN0CkBAIC0xMjY2LDYgKzEwNTcsMTQ2IEBACiAJCXtub3QgaW4gVml9CiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gRGlhbG9ncwkJCQkJCSplZGl0LWRpYWxvZ3MqCisKKwkJCQkJCQkqOmNvbmZpcm0qICo6Y29uZioKKzpjb25mW2lybV0ge2NvbW1hbmR9CUV4ZWN1dGUge2NvbW1hbmR9LCBhbmQgdXNlIGEgZGlhbG9nIHdoZW4gYW4KKwkJCW9wZXJhdGlvbiBoYXMgdG8gYmUgY29uZmlybWVkLiAgQ2FuIGJlIHVzZWQgb24gdGhlCisJCQkiOnEiLCAiOnFhIiBhbmQgIjp3IiBjb21tYW5kcyAodGhlIGxhdHRlciB0byBvdmVyLXJpZGUKKwkJCWEgcmVhZC1vbmx5IHNldHRpbmcpLgorCitFeGFtcGxlczogPgorICA6Y29uZmlybSB3IGZvbworPAlXaWxsIGFzayBmb3IgY29uZmlybWF0aW9uIHdoZW4gImZvbyIgYWxyZWFkeSBleGlzdHMuID4KKyAgOmNvbmZpcm0gcQorPAlXaWxsIGFzayBmb3IgY29uZmlybWF0aW9uIHdoZW4gdGhlcmUgYXJlIGNoYW5nZXMuID4KKyAgOmNvbmZpcm0gcWEKKzwJSWYgYW55IG1vZGlmaWVkLCB1bnNhdmVkIGJ1ZmZlcnMgZXhpc3QsIHlvdSB3aWxsIGJlIHByb21wdGVkIHRvIHNhdmUKKwlvciBhYmFuZG9uIGVhY2ggb25lLiAgVGhlcmUgYXJlIGFsc28gY2hvaWNlcyB0byAic2F2ZSBhbGwiIG9yICJhYmFuZG9uCisJYWxsIi4KKworSWYgeW91IHdhbnQgdG8gYWx3YXlzIHVzZSAiOmNvbmZpcm0iLCBzZXQgdGhlICdjb25maXJtJyBvcHRpb24uCisKKwkJCSo6YnJvd3NlKiAqOmJybyogKkUzMzgqICpFNjE0KiAqRTYxNSogKkU2MTYqICpFNTc4KgorOmJyb1t3c2VdIHtjb21tYW5kfQlPcGVuIGEgZmlsZSBzZWxlY3Rpb24gZGlhbG9nIGZvciBhbiBhcmd1bWVudCB0bworCQkJe2NvbW1hbmR9LiAgQXQgcHJlc2VudCB0aGlzIHdvcmtzIGZvciB8OmV8LCB8Ond8LAorCQkJfDpyfCwgfDpzYXZlYXN8LCB8OnNwfCwgfDpta2V4cmN8LCB8Om1rdmltcmN8IGFuZAorCQkJfDpta3Nlc3Npb258LgorCQkJe29ubHkgaW4gV2luMzIsIEF0aGVuYSwgTW90aWYsIEdUSyBhbmQgTWFjIEdVSX0KKwkJCVdoZW4gIjpicm93c2UiIGlzIG5vdCBwb3NzaWJsZSB5b3UgZ2V0IGFuIGVycm9yCisJCQltZXNzYWdlLiAgSWYgdGhlIHwrYnJvd3NlfCBmZWF0dXJlIGlzIG1pc3Npbmcgb3IgdGhlCisJCQl7Y29tbWFuZH0gZG9lc24ndCBzdXBwb3J0IGJyb3dzaW5nLCB0aGUge2NvbW1hbmR9IGlzCisJCQlleGVjdXRlZCB3aXRob3V0IGEgZGlhbG9nLgorCQkJIjpicm93c2Ugc2V0IiB3b3JrcyBsaWtlIHw6b3B0aW9uc3wuCisKK1RoZSBzeW50YXggaXMgYmVzdCBzaG93biB2aWEgc29tZSBleGFtcGxlczogPgorCTpicm93c2UgZSAkdmltL2ZvbworPAkJT3BlbiB0aGUgYnJvd3NlciBpbiB0aGUgJHZpbS9mb28gZGlyZWN0b3J5LCBhbmQgZWRpdCB0aGUKKwkJZmlsZSBjaG9zZW4uID4KKwk6YnJvd3NlIGUKKzwJCU9wZW4gdGhlIGJyb3dzZXIgaW4gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgd2l0aCAnYnJvd3NlZGlyJywKKwkJYW5kIGVkaXQgdGhlIGZpbGUgY2hvc2VuLiA+CisJOmJyb3dzZSB3Cis8CQlPcGVuIHRoZSBicm93c2VyIGluIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgYnVmZmVyLAorCQl3aXRoIHRoZSBjdXJyZW50IGJ1ZmZlciBmaWxlbmFtZSBhcyBkZWZhdWx0LCBhbmQgc2F2ZSB0aGUKKwkJYnVmZmVyIHVuZGVyIHRoZSBmaWxlbmFtZSBjaG9zZW4uID4KKwk6YnJvd3NlIHcgQzovYmFyCis8CQlPcGVuIHRoZSBicm93c2VyIGluIHRoZSBDOi9iYXIgZGlyZWN0b3J5LCB3aXRoIHRoZSBjdXJyZW50CisJCWJ1ZmZlciBmaWxlbmFtZSBhcyBkZWZhdWx0LCBhbmQgc2F2ZSB0aGUgYnVmZmVyIHVuZGVyIHRoZQorCQlmaWxlbmFtZSBjaG9zZW4uCitBbHNvIHNlZSB0aGUgfCdicm93c2VkaXInfCBvcHRpb24uCitGb3IgdmVyc2lvbnMgb2YgVmltIHdoZXJlIGJyb3dzaW5nIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkCit1bm1vZGlmaWVkLgorCisJCQkJCQkJKmJyb3dzZWZpbHRlcioKK0ZvciBNUyBXaW5kb3dzLCB5b3UgY2FuIG1vZGlmeSB0aGUgZmlsdGVycyB0aGF0IGFyZSB1c2VkIGluIHRoZSBicm93c2UgZGlhbG9nLgorQnkgc2V0dGluZyB0aGUgZzpicm93c2VmaWx0ZXIgb3IgYjpicm93c2VmaWx0ZXIgdmFyaWFibGVzLCB5b3UgY2FuIGNoYW5nZSB0aGUKK2ZpbHRlcnMgZ2xvYmFsbHkgb3IgbG9jYWxseSB0byB0aGUgYnVmZmVyLiAgVGhlIHZhcmlhYmxlIGlzIHNldCB0byBhIHN0cmluZyBpbgordGhlIGZvcm1hdCAie2ZpbHRlciBsYWJlbH1cdHtwYXR0ZXJufTt7cGF0dGVybn1cbiIgd2hlcmUge2ZpbHRlciBsYWJlbH0gaXMgdGhlCit0ZXh0IHRoYXQgYXBwZWFycyBpbiB0aGUgIkZpbGVzIG9mIFR5cGUiIGNvbWJvQm94LCBhbmQge3BhdHRlcm59IGlzIHRoZQorcGF0dGVybiB3aGljaCBmaWx0ZXJzIHRoZSBmaWxlbmFtZXMuICBTZXZlcmFsIHBhdHRlcm5zIGNhbiBiZSBnaXZlbiwgc2VwYXJhdGVkCitieSAnOycuCisKK0ZvciBNb3RpZiB0aGUgc2FtZSBmb3JtYXQgaXMgdXNlZCwgYnV0IG9ubHkgdGhlIHZlcnkgZmlyc3QgcGF0dGVybiBpcyBhY3R1YWxseQordXNlZCAoTW90aWYgb25seSBvZmZlcnMgb25lIHBhdHRlcm4sIGJ1dCB5b3UgY2FuIGVkaXQgaXQpLgorCitGb3IgZXhhbXBsZSwgdG8gaGF2ZSBvbmx5IFZpbSBmaWxlcyBpbiB0aGUgZGlhbG9nLCB5b3UgY291bGQgdXNlIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQ6ID4KKworICAgICBsZXQgZzpicm93c2VmaWx0ZXI9IlZpbSBTY3JpcHRzXHQqLnZpbVxuVmltIFN0YXJ0dXAgRmlsZXNcdCp2aW1yY1xuIgorCitZb3UgY2FuIG92ZXJyaWRlIHRoZSBmaWx0ZXIgc2V0dGluZyBvbiBhIHBlci1idWZmZXIgYmFzaXMgYnkgc2V0dGluZyB0aGUKK2I6YnJvd3NlZmlsdGVyIHZhcmlhYmxlLiAgWW91IHdvdWxkIG1vc3QgbGlrZWx5IHNldCBiOmJyb3dzZWZpbHRlciBpbiBhCitmaWxldHlwZSBwbHVnaW4sIHNvIHRoYXQgdGhlIGJyb3dzZSBkaWFsb2cgd291bGQgY29udGFpbiBlbnRyaWVzIHJlbGF0ZWQgdG8KK3RoZSB0eXBlIG9mIGZpbGUgeW91IGFyZSBjdXJyZW50bHkgZWRpdGluZy4gIERpc2FkdmFudGFnZTogVGhpcyBtYWtlcyBpdAorZGlmZmljdWx0IHRvIHN0YXJ0IGVkaXRpbmcgYSBmaWxlIG9mIGEgZGlmZmVyZW50IHR5cGUuICBUbyBvdmVyY29tZSB0aGlzLCB5b3UKK21heSB3YW50IHRvIGFkZCAiQWxsIEZpbGVzXHQqLipcbiIgYXMgdGhlIGZpbmFsIGZpbHRlciwgc28gdGhhdCB0aGUgdXNlciBjYW4KK3N0aWxsIGFjY2VzcyBhbnkgZGVzaXJlZCBmaWxlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzcuIFRoZSBjdXJyZW50IGRpcmVjdG9yeQkJCQkqY3VycmVudC1kaXJlY3RvcnkqCisKK1lvdSBtYXkgdXNlIHRoZSB8OmNkfCBhbmQgfDpsY2R8IGNvbW1hbmRzIHRvIGNoYW5nZSB0byBhbm90aGVyIGRpcmVjdG9yeSwgc28KK3lvdSB3aWxsIG5vdCBoYXZlIHRvIHR5cGUgdGhhdCBkaXJlY3RvcnkgbmFtZSBpbiBmcm9udCBvZiB0aGUgZmlsZSBuYW1lcy4gIEl0CithbHNvIG1ha2VzIGEgZGlmZmVyZW5jZSBmb3IgZXhlY3V0aW5nIGV4dGVybmFsIGNvbW1hbmRzLCBlLmcuICI6IWxzIi4KKworCQkJCQkJCSo6Y2QqICpFNDcyKgorOmNkCQkJT24gbm9uLVVuaXggc3lzdGVtczogUHJpbnQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisJCQluYW1lLiAgT24gVW5peCBzeXN0ZW1zOiBDaGFuZ2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisJCQl0byB0aGUgaG9tZSBkaXJlY3RvcnkuICBVc2UgfDpwd2R8IHRvIHByaW50IHRoZQorCQkJY3VycmVudCBkaXJlY3Rvcnkgb24gYWxsIHN5c3RlbXMuCisKKzpjZCB7cGF0aH0JCUNoYW5nZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgdG8ge3BhdGh9LgorCQkJSWYge3BhdGh9IGlzIHJlbGF0aXZlLCBpdCBpcyBzZWFyY2hlZCBmb3IgaW4gdGhlCisJCQlkaXJlY3RvcmllcyBsaXN0ZWQgaW4gfCdjZHBhdGgnfC4KKwkJCURvZXMgbm90IGNoYW5nZSB0aGUgbWVhbmluZyBvZiBhbiBhbHJlYWR5IG9wZW5lZCBmaWxlLAorCQkJYmVjYXVzZSBpdHMgZnVsbCBwYXRoIG5hbWUgaXMgcmVtZW1iZXJlZC4gIEZpbGVzIGZyb20KKwkJCXRoZSB8YXJnbGlzdHwgbWF5IGNoYW5nZSB0aG91Z2ghCisJCQlPbiBNUy1ET1MgdGhpcyBhbHNvIGNoYW5nZXMgdGhlIGFjdGl2ZSBkcml2ZS4KKwkJCVRvIGNoYW5nZSB0byB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IGZpbGU6ID4KKwkJCQk6Y2QgJTpoCis8CisJCQkJCQkJKjpjZC0qICpFMTg2KgorOmNkIC0JCQlDaGFuZ2UgdG8gdGhlIHByZXZpb3VzIGN1cnJlbnQgZGlyZWN0b3J5IChiZWZvcmUgdGhlCisJCQlwcmV2aW91cyAiOmNkIHtwYXRofSIgY29tbWFuZCkuIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOmNoZCogKjpjaGRpcioKKzpjaGRbaXJdIFtwYXRoXQkJU2FtZSBhcyB8OmNkfC4KKworCQkJCQkJCSo6bGMqICo6bGNkKgorOmxjW2RdIHtwYXRofQkJTGlrZSB8OmNkfCwgYnV0IG9ubHkgc2V0IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlCisJCQljdXJyZW50IHdpbmRvdy4gIFRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3Igb3RoZXIKKwkJCXdpbmRvd3MgaXMgbm90IGNoYW5nZWQuIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOmxjaCogKjpsY2hkaXIqCis6bGNoW2Rpcl0JCVNhbWUgYXMgfDpsY2R8LiB7bm90IGluIFZpfQorCisJCQkJCQkJKjpwdyogKjpwd2QqICpFMTg3KgorOnB3W2RdCQkJUHJpbnQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG5hbWUuICB7Vmk6IG5vIHB3ZH0KKwkJCUFsc28gc2VlIHxnZXRjd2QoKXwuCisKK1NvIGxvbmcgYXMgbm8gfDpsY2R8IGNvbW1hbmQgaGFzIGJlZW4gdXNlZCwgYWxsIHdpbmRvd3Mgc2hhcmUgdGhlIHNhbWUgY3VycmVudAorZGlyZWN0b3J5LiAgVXNpbmcgYSBjb21tYW5kIHRvIGp1bXAgdG8gYW5vdGhlciB3aW5kb3cgZG9lc24ndCBjaGFuZ2UgYW55dGhpbmcKK2ZvciB0aGUgY3VycmVudCBkaXJlY3RvcnkuCitXaGVuIGEgfDpsY2R8IGNvbW1hbmQgaGFzIGJlZW4gdXNlZCBmb3IgYSB3aW5kb3csIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5CitiZWNvbWVzIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhhdCB3aW5kb3cuICBXaW5kb3dzIHdoZXJlIHRoZSB8OmxjZHwKK2NvbW1hbmQgaGFzIG5vdCBiZWVuIHVzZWQgc3RpY2sgdG8gdGhlIGdsb2JhbCBjdXJyZW50IGRpcmVjdG9yeS4gIFdoZW4ganVtcGluZwordG8gYW5vdGhlciB3aW5kb3cgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdpbGwgYmVjb21lIHRoZSBsYXN0IHNwZWNpZmllZCBsb2NhbAorY3VycmVudCBkaXJlY3RvcnkuICBJZiBub25lIHdhcyBzcGVjaWZpZWQsIHRoZSBnbG9iYWwgY3VycmVudCBkaXJlY3RvcnkgaXMKK3VzZWQuCitXaGVuIGEgfDpjZHwgY29tbWFuZCBpcyB1c2VkLCB0aGUgY3VycmVudCB3aW5kb3cgd2lsbCBsb3NlIGhpcyBsb2NhbCBjdXJyZW50CitkaXJlY3RvcnkgYW5kIHdpbGwgdXNlIHRoZSBnbG9iYWwgY3VycmVudCBkaXJlY3RvcnkgZnJvbSBub3cgb24uCisKK0FmdGVyIHVzaW5nIHw6Y2R8IHRoZSBmdWxsIHBhdGggbmFtZSB3aWxsIGJlIHVzZWQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcKK2ZpbGVzLiAgT24gc29tZSBuZXR3b3JrZWQgZmlsZSBzeXN0ZW1zIHRoaXMgbWF5IGNhdXNlIHByb2JsZW1zLiAgVGhlIHJlc3VsdCBvZgordXNpbmcgdGhlIGZ1bGwgcGF0aCBuYW1lIGlzIHRoYXQgdGhlIGZpbGUgbmFtZXMgY3VycmVudGx5IGluIHVzZSB3aWxsIHJlbWFpbgorcmVmZXJyaW5nIHRvIHRoZSBzYW1lIGZpbGUuICBFeGFtcGxlOiBJZiB5b3UgaGF2ZSBhIGZpbGUgYTp0ZXN0IGFuZCBhCitkaXJlY3RvcnkgYTp2aW0gdGhlIGNvbW1hbmRzICI6ZSB0ZXN0IiAiOmNkIHZpbSIgIjp3IiB3aWxsIG92ZXJ3cml0ZSB0aGUgZmlsZQorYTp0ZXN0IGFuZCBub3Qgd3JpdGUgYTp2aW0vdGVzdC4gIEJ1dCBpZiB5b3UgZG8gIjp3IHRlc3QiIHRoZSBmaWxlIGE6dmltL3Rlc3QKK3dpbGwgYmUgd3JpdHRlbiwgYmVjYXVzZSB5b3UgZ2F2ZSBhIG5ldyBmaWxlIG5hbWUgYW5kIGRpZCBub3QgcmVmZXIgdG8gYQorZmlsZW5hbWUgYmVmb3JlIHRoZSAiOmNkIi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiA4LiBFZGl0aW5nIGJpbmFyeSBmaWxlcwkJCQkJKmVkaXQtYmluYXJ5KgogCiBBbHRob3VnaCBWaW0gd2FzIG1hZGUgdG8gZWRpdCB0ZXh0IGZpbGVzLCBpdCBpcyBwb3NzaWJsZSB0byBlZGl0IGJpbmFyeQpAQCAtMTQ1NCw1ICsxMzg1LDkxIEBACiBzZXNzaW9uIG9yIHdpdGggYW5vdGhlciBjb21tYW5kIChlLmcuLCBhIGZpbHRlciBjb21tYW5kKS4gIFRoZW4geW91IHdpbGwga25vdwogd2hpY2ggdmVyc2lvbiBvZiB0aGUgZmlsZSB5b3Ugd2FudCB0byBrZWVwLgogCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzExLiBGaWxlIFNlYXJjaGluZwkJCQkJKmZpbGUtc2VhcmNoaW5nKgorCit7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrcGF0aF9leHRyYXwgZmVhdHVyZX0KKworVGhlIGZpbGUgc2VhcmNoaW5nIGlzIGN1cnJlbnRseSB1c2VkIGZvciB0aGUgJ3BhdGgnLCAnY2RwYXRoJyBhbmQgJ3RhZ3MnCitvcHRpb25zLiAgVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCB0eXBlcyBvZiBzZWFyY2hpbmc6CisKKzEpIERvd253YXJkIHNlYXJjaDoKKyAgIERvd253YXJkIHNlYXJjaCB1c2VzIHRoZSB3aWxkY2FyZHMgJyonLCAnKionIGFuZCBwb3NzaWJseSBvdGhlcnMKKyAgIHN1cHBvcnRlZCBieSB5b3VyIG9wZXJhdGluZyBzeXN0ZW0uICcqJyBhbmQgJyoqJyBhcmUgaGFuZGxlZCBpbnNpZGUgVmltLCBzbworICAgdGhleSB3b3JrIG9uIGFsbCBvcGVyYXRpbmcgc3lzdGVtcy4KKworICAgVGhlIHVzYWdlIG9mICcqJyBpcyBxdWl0ZSBzaW1wbGU6IEl0IG1hdGNoZXMgMCBvciBtb3JlIGNoYXJhY3RlcnMuCisKKyAgICcqKicgaXMgbW9yZSBzb3BoaXN0aWNhdGVkOgorICAgICAgLSBJdCBPTkxZIG1hdGNoZXMgZGlyZWN0b3JpZXMuCisgICAgICAtIEl0IG1hdGNoZXMgdXAgdG8gMzAgIGRpcmVjdG9yaWVzIGRlZXAsIHNvIHlvdSBjYW4gdXNlIGl0IHRvIHNlYXJjaCBhbgorCWVudGlyZSBkaXJlY3RvcnkgdHJlZQorICAgICAgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgbGV2ZWxzIG1hdGNoZWQgY2FuIGJlIGdpdmVuIGJ5IGFwcGVuZGluZyBhIG51bWJlcgorCXRvICcqKicuCisJVGh1cyAnL3Vzci8qKjInIGNhbiBtYXRjaDogPgorCQkvdXNyCisJCS91c3IvaW5jbHVkZQorCQkvdXNyL2luY2x1ZGUvc3lzCisJCS91c3IvaW5jbHVkZS9nKysKKwkJL3Vzci9saWIKKwkJL3Vzci9saWIvWDExCisJCS4uLi4KKzwJSXQgZG9lcyBOT1QgbWF0Y2ggJy91c3IvaW5jbHVkZS9nKysvc3RkJyBhcyB0aGlzIHdvdWxkIGJlIHRocmVlCisJbGV2ZWxzLgorCVRoZSBhbGxvd2VkIG51bWJlciByYW5nZSBpcyAwICgnKiowJyBpcyByZW1vdmVkKSB0byAyNTUuCisJSWYgdGhlIGdpdmVuIG51bWJlciBpcyBzbWFsbGVyIHRoYW4gMCBpdCBkZWZhdWx0cyB0byAzMCwgaWYgaXQncworCWJpZ2dlciB0aGFuIDI1NSBpdCBkZWZhdWx0cyB0byAyNTUuCisgICAgICAtICcqKicgY2FuIG9ubHkgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aCBvciBiZSBmb2xsb3dlZCBieSBhIHBhdGgKKwlzZXBhcmF0b3Igb3IgYnkgYSBudW1iZXIgYW5kIGEgcGF0aCBzZXBhcmF0b3IuCisKKyAgIFlvdSBjYW4gY29tYmluZSAnKicgYW5kICcqKicgaW4gYW55IG9yZGVyOiA+CisJL3Vzci8qKi9zeXMvKgorCS91c3IvKi9zeXMvKioKKwkvdXNyLyoqMi9zeXMvKgorCisyKSBVcHdhcmQgc2VhcmNoOgorICAgSGVyZSB5b3UgY2FuIGdpdmUgYSBkaXJlY3RvcnkgYW5kIHRoZW4gc2VhcmNoIHRoZSBkaXJlY3RvcnkgdHJlZSB1cHdhcmQgZm9yCisgICBhIGZpbGUuIFlvdSBjb3VsZCBnaXZlIHN0b3AtZGlyZWN0b3JpZXMgdG8gbGltaXQgdGhlIHVwd2FyZCBzZWFyY2guIFRoZQorICAgc3RvcC1kaXJlY3RvcmllcyBhcmUgYXBwZW5kZWQgdG8gdGhlIHBhdGggKGZvciB0aGUgJ3BhdGgnIG9wdGlvbikgb3IgdG8KKyAgIHRoZSBmaWxlbmFtZSAoZm9yIHRoZSAndGFncycgb3B0aW9uKSB3aXRoIGEgJzsnLiBJZiB5b3Ugd2FudCBzZXZlcmFsCisgICBzdG9wLWRpcmVjdG9yaWVzIHNlcGFyYXRlIHRoZW0gd2l0aCAnOycuIElmIHlvdSB3YW50IG5vIHN0b3AtZGlyZWN0b3J5CisgICAoInNlYXJjaCB1cHdhcmQgdGlsbCB0aGUgcm9vdCBkaXJlY3RvcnkpIGp1c3QgdXNlICc7Jy4gPgorCS91c3IvaW5jbHVkZS9zeXM7L3VzcgorPCAgIHdpbGwgc2VhcmNoIGluOiA+CisJICAgL3Vzci9pbmNsdWRlL3N5cworCSAgIC91c3IvaW5jbHVkZQorCSAgIC91c3IKKzwKKyAgIElmIHlvdSB1c2UgYSByZWxhdGl2ZSBwYXRoIHRoZSB1cHdhcmQgc2VhcmNoIGlzIHN0YXJ0ZWQgaW4gVmltJ3MgY3VycmVudAorICAgZGlyZWN0b3J5IG9yIGluIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgZmlsZSAoaWYgdGhlIHJlbGF0aXZlIHBhdGgKKyAgIHN0YXJ0cyB3aXRoICcuLycgYW5kICdkJyBpcyBub3QgaW5jbHVkZWQgaW4gJ2Nwb3B0aW9ucycpLgorCisgICBJZiBWaW0ncyBjdXJyZW50IHBhdGggaXMgL3UvdXNlcl94L3dvcmsvcmVsZWFzZSBhbmQgeW91IGRvID4KKwk6c2V0IHBhdGg9aW5jbHVkZTsvdS91c2VyX3gKKzwgIGFuZCB0aGVuIHNlYXJjaCBmb3IgYSBmaWxlIHdpdGggfGdmfCB0aGUgZmlsZSBpcyBzZWFyY2hlZCBpbjogPgorCS91L3VzZXJfeC93b3JrL3JlbGVhc2UvaW5jbHVkZQorCS91L3VzZXJfeC93b3JrL2luY2x1ZGUKKwkvdS91c2VyX3gvaW5jbHVkZQorCiszKSBDb21iaW5lZCB1cC9kb3dud2FyZCBzZWFyY2gKKyAgIElmIFZpbSdzIGN1cnJlbnQgcGF0aCBpcyAvdS91c2VyX3gvd29yay9yZWxlYXNlIGFuZCB5b3UgZG8gPgorCXNldCBwYXRoPSoqOy91L3VzZXJfeAorPCAgYW5kIHRoZW4gc2VhcmNoIGZvciBhIGZpbGUgd2l0aCB8Z2Z8IHRoZSBmaWxlIGlzIHNlYXJjaGVkIGluOiA+CisJL3UvdXNlcl94L3dvcmsvcmVsZWFzZS8qKgorCS91L3VzZXJfeC93b3JrLyoqCisJL3UvdXNlcl94LyoqCis8CisgICBCRSBDQVJFRlVMISBUaGlzIG1pZ2h0IGNvbnN1bWUgYSBsb3Qgb2YgdGltZSwgYXMgdGhlIHNlYXJjaCBvZgorICAgJy91L3VzZXJfeC8qKicgaW5jbHVkZXMgJy91L3VzZXJfeC93b3JrLyoqJyBhbmQKKyAgICcvdS91c2VyX3gvd29yay9yZWxlYXNlLyoqJy4gIFNvICcvdS91c2VyX3gvd29yay9yZWxlYXNlLyoqJyBpcyBzZWFyY2hlZAorICAgdGhyZWUgYW5kICcvdS91c2VyX3gvd29yay8qKicgaXMgc2VhcmNoZWQgdHdvIHRpbWVzLgorCisgICBJbiB0aGUgYWJvdmUgZXhhbXBsZSB5b3UgbWlnaHQgd2FudCB0byBzZXQgcGF0aCB0bzogPgorCTpzZXQgcGF0aD0qKiwvdS91c2VyX3gvKioKKzwgICBUaGlzIHNlYXJjaGVzOiA+CisJL3UvdXNlcl94L3dvcmsvcmVsZWFzZS8qKgorCS91L3VzZXJfeC8qKgorPCAgIFRoaXMgc2VhcmNoZXMgdGhlIHNhbWUgZGlyZWN0b3JpZXMsIGJ1dCBpbiBhIGRpZmZlcmVudCBvcmRlci4KKwogCiAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvaW50cm8udHh0IGIvcnVudGltZS9kb2MvaW50cm8udHh0CmluZGV4IDBkMzYyN2MuLmQ5ODRjZTIgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL2ludHJvLnR4dAorKysgYi9ydW50aW1lL2RvYy9pbnRyby50eHQKQEAgLTEsNCArMSw0IEBACi0qaW50cm8udHh0KiAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTm92IDE4CisqaW50cm8udHh0KiAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgRGVjIDE2CiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0yNzgsNyArMjc4LDcgQEAKIAogCiBJbiB0aGlzIGRvY3VtZW50YXRpb24gdGhlcmUgYXJlIHNldmVyYWwgcmVmZXJlbmNlcyB0byBvdGhlciB2ZXJzaW9ucyBvZiBWaToKLQkJCQkJCQkqVmkqCisJCQkJCQkJKlZpKiAqdmkqCiBWaQkidGhlIG9yaWdpbmFsIi4gIFdpdGhvdXQgZnVydGhlciByZW1hcmtzIHRoaXMgaXMgdGhlIHZlcnNpb24KIAlvZiBWaSB0aGF0IGFwcGVhcmVkIGluIFN1biBPUyA0LnguICAiOnZlcnNpb24iIHJldHVybnMKIAkiVmVyc2lvbiAzLjcsIDYvNy84NSIuICBTb21ldGltZXMgb3RoZXIgdmVyc2lvbnMgYXJlIHJlZmVycmVkCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9tYnl0ZS50eHQgYi9ydW50aW1lL2RvYy9tYnl0ZS50eHQKaW5kZXggNDE3MjNkZS4uMWUxM2JjZiAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvbWJ5dGUudHh0CisrKyBiL3J1bnRpbWUvZG9jL21ieXRlLnR4dApAQCAtMSw0ICsxLDQgQEAKLSptYnl0ZS50eHQqICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdWwgMDUKKyptYnl0ZS50eHQqICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBEZWMgMTkKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwJICBieSBCcmFtIE1vb2xlbmFhciBldCBhbC4KQEAgLTMyOCw2ICszMjgsOCBAQAogdSAgIHVjczJiZQlzYW1lIGFzIHVjcy0yIChiaWcgZW5kaWFuKQogdSAgIHVjcy0yYmUJc2FtZSBhcyB1Y3MtMiAoYmlnIGVuZGlhbikKIHUgICB1Y3MtNGJlCXNhbWUgYXMgdWNzLTQgKGJpZyBlbmRpYW4pCisgICAgZGVmYXVsdCAgICAgc3RhbmRzIGZvciB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAnZW5jb2RpbmcnLCBkZXBlbmRzIG9uIHRoZQorICAgIAkJZW52aXJvbm1lbnQKIAogRm9yIHRoZSBVQ1MgY29kZXMgdGhlIGJ5dGUgb3JkZXIgbWF0dGVycy4gIFRoaXMgaXMgdHJpY2t5LCB1c2UgVVRGLTggd2hlbmV2ZXIKIHlvdSBjYW4uICBUaGUgZGVmYXVsdCBpcyB0byB1c2UgYmlnLWVuZGlhbiAobW9zdCBzaWduaWZpY2FudCBieXRlIGNvbWVzCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9vcHRpb25zLnR4dCBiL3J1bnRpbWUvZG9jL29wdGlvbnMudHh0CmluZGV4IGE4ODhkOTIuLjZkNzI2MDQgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL29wdGlvbnMudHh0CisrKyBiL3J1bnRpbWUvZG9jL29wdGlvbnMudHh0CkBAIC0xLDQgKzEsNCBAQAotKm9wdGlvbnMudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBEZWMgMDkKKypvcHRpb25zLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgRGVjIDE5CiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCSAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTE4NDEsNiArMTg0MSwxMCBAQAogCQkJdGhlcmUgaXMgb25lKS4gIFRoaXMgd29ya3MgdmVyeSB3ZWxsIGZvciBDIHByb2dyYW1zLgogCQkJVGhpcyBmbGFnIGlzIGFsc28gdXNlZCBmb3Igb3RoZXIgZmVhdHVyZXMsIHN1Y2ggYXMKIAkJCUMtaW5kZW50aW5nLgorCQkJCQkJCQkqY3BvLSsqCisJCSsJV2hlbiBpbmNsdWRlZCwgYSAiOndyaXRlIGZpbGUiIGNvbW1hbmQgd2lsbCByZXNldCB0aGUKKwkJCSdtb2RpZmllZCcgZmxhZyBvZiB0aGUgYnVmZmVyLCBldmVuIHRob3VnaCB0aGUgYnVmZmVyCisJCQlpdHNlbGYgbWF5IHN0aWxsIGJlIGRpZmZlcmVudCBmcm9tIGl0cyBmaWxlLgogCQkJIAkJCQkJY3BvLXN0YXIqCiAJCSoJVXNlICI6KiIgaW4gdGhlIHNhbWUgd2F5IGFzICI6QCIuICBXaGVuIG5vdCBpbmNsdWRlZCwKIAkJCSI6KiIgaXMgYW4gYWxpYXMgZm9yICI6JzwsJz4iLCBzZWxlY3QgdGhlIFZpc3VhbCBhcmVhLgpAQCAtMjEyNyw3ICsyMTMxLDcgQEAKIAl3aXRoLiAgU2VlIHxlbmNvZGluZy1uYW1lc3wgZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMuCiAKIAlOT1RFOiBDaGFuZ2luZyB0aGlzIG9wdGlvbiB3aWxsIG5vdCBjaGFuZ2UgdGhlIGVuY29kaW5nIG9mIHRoZQotCWV4aXN0aW5nIHRleHQgaW4gVmltLiAgSXQgbWF5IGNhdXNlIG11bHRpLWJ5dGUgdGV4dCB0byBiZWNvbWUgaW52YWxpZC4KKwlleGlzdGluZyB0ZXh0IGluIFZpbS4gIEl0IG1heSBjYXVzZSBub24tQVNDSUkgdGV4dCB0byBiZWNvbWUgaW52YWxpZC4KIAlJdCBzaG91bGQgbm9ybWFsbHkgYmUga2VwdCBhdCBpdHMgZGVmYXVsdCB2YWx1ZSwgb3Igc2V0IHdoZW4gVmltCiAJc3RhcnRzIHVwLiAgU2VlIHxtdWx0aWJ5dGV8LgogCkBAIC0yMzM4LDggKzIzNDIsOSBAQAogCW9sZCBzaG9ydCBuYW1lIHdhcyAnZmUnLCB3aGljaCBpcyBubyBsb25nZXIgdXNlZC4KIAogCQkJCQkqJ2ZpbGVlbmNvZGluZ3MnKiAqJ2ZlbmNzJyoKLSdmaWxlZW5jb2RpbmdzJyAnZmVuY3MnCXN0cmluZyAoZGVmYXVsdDogInVjcy1ib20iLCAidWNzLWJvbSx1dGYtOCxsYXRpbjEiCi0JCQkJICAgIHdoZW4gJ2VuY29kaW5nJyBpcyBzZXQgdG8gYSBVbmljb2RlIHZhbHVlKQorJ2ZpbGVlbmNvZGluZ3MnICdmZW5jcycJc3RyaW5nIChkZWZhdWx0OiAidWNzLWJvbSIsCisJCQkJICAgICJ1Y3MtYm9tLHV0Zi04LGRlZmF1bHQsbGF0aW4xIiB3aGVuCisJCQkJICAgICdlbmNvZGluZycgaXMgc2V0IHRvIGEgVW5pY29kZSB2YWx1ZSkKIAkJCWdsb2JhbAogCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCttdWx0aV9ieXRlfAogCQkJZmVhdHVyZX0KQEAgLTIzNzMsNiArMjM3OCwxMCBAQAogCUFuIGVudHJ5IGZvciBhbiA4LWJpdCBlbmNvZGluZyAoZS5nLiwgImxhdGluMSIpIHNob3VsZCBiZSB0aGUgbGFzdCwKIAliZWNhdXNlIFZpbSBjYW5ub3QgZGV0ZWN0IGFuIGVycm9yLCB0aHVzIHRoZSBlbmNvZGluZyBpcyBhbHdheXMKIAlhY2NlcHRlZC4KKwlUaGUgc3BlY2lhbCB2YWx1ZSAiZGVmYXVsdCIgY2FuIGJlIHVzZWQgZm9yIHRoZSBlbmNvZGluZyBmcm9tIHRoZQorCWVudmlyb25tZW50LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgJ2VuY29kaW5nJy4gIEl0IGlzIHVzZWZ1bAorCXdoZW4gJ2VuY29kaW5nJyBpcyBzZXQgdG8gInV0Zi04IiBhbmQgeW91ciBlbnZpcm9ubWVudCB1c2VzIGEKKwlub24tbGF0aW4xIGVuY29kaW5nLCBzdWNoIGFzIFJ1c3NpYW4uCiAJV1JPTkcgVkFMVUVTOgkJCVdIQVQnUyBXUk9ORzoKIAkJbGF0aW4xLHV0Zi04CQkibGF0aW4xIiB3aWxsIGFsd2F5cyBiZSB1c2VkCiAJCXV0Zi04LHVjcy1ib20sbGF0aW4xCUJPTSB3b24ndCBiZSByZWNvZ25pemVkIGluIGFuIHV0Zi04CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9vc19tYWMudHh0IGIvcnVudGltZS9kb2Mvb3NfbWFjLnR4dAppbmRleCA5MWViNjQxLi4xMGZkMDg1IDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9vc19tYWMudHh0CisrKyBiL3J1bnRpbWUvZG9jL29zX21hYy50eHQKQEAgLTEsNCArMSw0IEBACi0qb3NfbWFjLnR4dCogICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVsIDE5Cisqb3NfbWFjLnR4dCogICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgRGVjIDEzCiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyIGV0IGFsLgpAQCAtNzEsNiArNzEsMTIgQEAKIEE6IFVuZGVyIFdpbmRvdyBTZXR0aW5ncywgRW11bGF0aW9uLCBtYWtlIHN1cmUgdGhhdCAiRXNjYXBlIG5vbi1BU0NJSQogICAgY2hhcmFjdGVycyIgaXMgbm90IGNoZWNrZWQuCiAKK1E6IEhvdyBkbyBJIHN0YXJ0IHRoZSBHVUkgZnJvbSB0aGUgY29tbWFuZCBsaW5lPworQTogQXNzdW1pbmcgdGhhdCBWaW0uYXBwIGlzIGxvY2F0ZWQgaW4gL0FwcGxpY2F0aW9uczoKKwlvcGVuIC9BcHBsaWNhdGlvbnMvVmltLmFwcAorICAgT3I6CisgICAJL0FwcGxpY2F0aW9ucy9WaW0uYXBwL0NvbnRlbnRzL01hY09TL1ZpbSAtZyAge2FyZ3VtZW50c30KKwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiA0LiBNYWMgTGFjawkJCQkJCSptYWMtbGFjayoKIApkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvcGF0dGVybi50eHQgYi9ydW50aW1lL2RvYy9wYXR0ZXJuLnR4dAppbmRleCA5ZjIxNWQ3Li4xNmU4ODkwIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9wYXR0ZXJuLnR4dAorKysgYi9ydW50aW1lL2RvYy9wYXR0ZXJuLnR4dApAQCAtMSw0ICsxLDQgQEAKLSpwYXR0ZXJuLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBTZXAgMDcKKypwYXR0ZXJuLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBEZWMgMTgKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIHNbLW51bV0JW251bV0gY2hhcmFjdGVycyB0byB0aGUgbGVmdCBvZiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoCiAgICAgYlsrbnVtXQlbbnVtXSBpZGVudGljYWwgdG8gc1srbnVtXSBhYm92ZSAobW5lbW9uaWM6IGJlZ2luKQogICAgIGJbLW51bV0JW251bV0gaWRlbnRpY2FsIHRvIHNbLW51bV0gYWJvdmUgKG1uZW1vbmljOiBiZWdpbikKKyAgICA7e3BhdHRlcm59ICBwZXJmb3JtIGFub3RoZXIgc2VhcmNuLCBzZWUgfC8vO3wKIAogSWYgYSAnLScgb3IgJysnIGlzIGdpdmVuIGJ1dCBbbnVtXSBpcyBvbWl0dGVkLCBhIGNvdW50IG9mIG9uZSB3aWxsIGJlIHVzZWQuCiBXaGVuIGluY2x1ZGluZyBhbiBvZmZzZXQgd2l0aCAnZScsIHRoZSBzZWFyY2ggYmVjb21lcyBpbmNsdXNpdmUgKHRoZQpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdGFncyBiL3J1bnRpbWUvZG9jL3RhZ3MKaW5kZXggZWI4NGFmNC4uNjQ3NDlmNSAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvdGFncworKysgYi9ydW50aW1lL2RvYy90YWdzCkBAIC02NTc5LDYgKzY1NzksNyBAQAogdmVyc2lvbjUudHh0CXZlcnNpb241LnR4dAkvKnZlcnNpb241LnR4dCoKIHZlcnNpb242LnR4dAl2ZXJzaW9uNi50eHQJLyp2ZXJzaW9uNi50eHQqCiB2ZXJzaW9uNy50eHQJdmVyc2lvbjcudHh0CS8qdmVyc2lvbjcudHh0KgordmkJaW50cm8udHh0CS8qdmkqCiB2aS1kaWZmZXJlbmNlcwl2aV9kaWZmLnR4dAkvKnZpLWRpZmZlcmVuY2VzKgogdmk6CW9wdGlvbnMudHh0CS8qdmk6KgogdmlfZGlmZi50eHQJdmlfZGlmZi50eHQJLyp2aV9kaWZmLnR4dCoKQEAgLTY2NTUsNiArNjY1Niw3IEBACiB3YXJuaW5nbXNnLXZhcmlhYmxlCWV2YWwudHh0CS8qd2FybmluZ21zZy12YXJpYWJsZSoKIHdoaXRlLXNwYWNlCXBhdHRlcm4udHh0CS8qd2hpdGUtc3BhY2UqCiB3aGl0ZXNwYWNlCXBhdHRlcm4udHh0CS8qd2hpdGVzcGFjZSoKK3dpbGRjYXJkCWVkaXRpbmcudHh0CS8qd2lsZGNhcmQqCiB3aW4xNi0hc3RhcnQJZ3VpX3cxNi50eHQJLyp3aW4xNi0hc3RhcnQqCiB3aW4xNi1jbGlwYm9hcmQJZ3VpX3cxNi50eHQJLyp3aW4xNi1jbGlwYm9hcmQqCiB3aW4xNi1jb2xvcnMJZ3VpX3cxNi50eHQJLyp3aW4xNi1jb2xvcnMqCkBAIC02ODI4LDYgKzY4MzAsNyBAQAogewltb3Rpb24udHh0CS8qeyoKIHtWaXN1YWx9CWludHJvLnR4dAkvKntWaXN1YWx9Kgoge2FkZHJlc3N9CWNtZGxpbmUudHh0CS8qe2FkZHJlc3N9Kgore2FyZ2xpc3R9CWVkaXRpbmcudHh0CS8qe2FyZ2xpc3R9Kgoge2NoYXIxLWNoYXIyfQlpbnRyby50eHQJLyp7Y2hhcjEtY2hhcjJ9Kgoge2V2ZW50fQlhdXRvY21kLnR4dAkvKntldmVudH0qCiB7ZmlsZX0JZWRpdGluZy50eHQJLyp7ZmlsZX0qCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy90b2RvLnR4dCBiL3J1bnRpbWUvZG9jL3RvZG8udHh0CmluZGV4IGNkNDg2ODcuLjg2ZmYxYTQgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3RvZG8udHh0CisrKyBiL3J1bnRpbWUvZG9jL3RvZG8udHh0CkBAIC0xLDQgKzEsNCBAQAotKnRvZG8udHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IERlYyAxMQorKnRvZG8udHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IERlYyAxOQogCiAKIAkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0zMCwyMSArMzAsMTggQEAKIAkJCQkJCQkqa25vd24tYnVncyoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tIEtub3duIGJ1Z3MgYW5kIGN1cnJlbnQgd29yayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0iOmUgPGNmaWxlPiIgZG9lcyBub3QgZXhwYW5kIH4vZmlsZSwgdmVyeSBjb25mdXNpbmcgY29tcGFyZWQgdG8gIjplIH4vZmlsZSIuCitXaW4zMjogQ2Fubm90IGVkaXQgYSBmaWxlIHN0YXJ0aW5nIHdpdGggIyB3aXRoIC0tcmVtb3RlLiAoR2l1c2VwcGUgQmlsb3R0YSwKK09jdCA2IDIwMDQpCiAKLVdoZW4gbm8gdGVybWNhcC90ZXJtbGliIGxpYnJhcnkgaXMgZm91bmQsIGNoZWNrIHRoYXQgY29tcGlsaW5nIFZpbSB3b3JrcyBpbgotY29uZmlndXJlLiAgR2l2ZSBhbiBjbGVhciBlcnJvciBtZXNzYWdlICgiaW5zdGFsbCB0ZXJtY2FwIG9yIG5jdXJzZXMtZGV2Ci1wYWNrYWdlIikgd2hlbiBpdCBkb2Vzbid0LgorQWRkIE1ha2VmaWxlIGNvZGUgdG8gaW5zdGFsbCAqLWl0LjEgbWFudWFsIHBhZ2VzIGluIC4uLi9tYW4vaXQvbWFuMS8qLjEKIAotV2hlbiBkb2luZyAiOncgZmlsZSIgJ21vZGlmaWVkJyBpcyByZXNldCwgYnV0ICJ1IiBzZXRzIGl0LCB3aGlsZSB0aGUgZmlsZSBpcwotYWN0dWFsbHkgdW5jaGFuZ2VkLiAgRG9uJ3QgcmVzZXQgJ21vZGlmaWVkJyB3aGVuICdub2NwJyBpcyBzZXQuCitXaW4zMjogImd2aW0gLVYxMDAiIHNob3VsZCB1c2UgZGlhbG9nIHdpdGggc2Nyb2xsYmFyLiAgVXNpbmcKK2d1aV9tY2hfZGlhbG9nKCkgd291bGQgYmUgZ29vZCwgYnV0IG5lZWQgdG8gbW92ZSBkaXNwbGF5X2Vycm9ycygpIHRvIGFmdGVyCitjcmVhdGluZyB0aGUgd2luZG93LCBzbyB0aGF0IHNfaHduZCBpcyB2YWxpZC4KK0hvdyB0byBhZGQgYSBzY3JvbGxiYXIgdG8gdGhlIGRpYWxvZz8KIAotV2luMzI6ICJndmltIC1WMTAwIiBzaG91bGQgdXNlIGRpYWxvZyB3aXRoIHNjcm9sbGJhci4KLQotVXNpbmcgQ1RSTC1BIG9uICIwOCIgc2hvdWxkIG5vdCB3b3JrIGxpa2Ugb2N0YWwuIChNYXR0aGV3IER1Z2dhbikKLQotQ3Vyc29yIG9uZGVyIGxhYXRzdGUgcmVnZWwgbmEgIjpnL3BhdC9zLy8+IiBjb21tYW5kbyB3YWFyZG9vciByZWdlbHMgbmlldCBtZWVyCi13cmFwcGVuLiAoQWRyaSBWZXJob2VmLCBEZWMgMSkKK1dpbjMyOiB0ZWFyb2ZmIG1lbnUgd2luZG93IHNob3VsZCBoYXZlIGEgc2Nyb2xsYmFyIHdoZW4gaXQncyB0YWxsZXIgdGhhbiB0aGUKK3NjcmVlbi4KIAogSW5jbHVkZWQgTmV0QmVhbnMgcGF0Y2hlcyAoR29yZG9uIFByaWV1ciwgT2N0IDIwKQogICAgIFNlZSB0d28gbWVzc2FnZXMgZm9yIGxpc3Qgb2YgY2hhbmdlZCBmaWxlcy4gIEFkZGl0aW9uYWxseToKQEAgLTU3LDYgKzU0LDggQEAKIEZvciB2ZXJzaW9uIDcuMDoKIAogLSAgIEluY2x1ZGUgbWFueSBQQVRDSEVTOgorICAgIC0JUGF0Y2ggZm9yICdicmVha2luZGVudCcgb3B0aW9uOiByZXBlYXQgaW5kZW50IGZvciB3cmFwcGVkIGxpbmUuIChWYWNsYXYKKwlTbWlsYXVlciwgMjAwNCBTZXAgMTMsIGZpeCBPY3QgMzEpCiAgICAgNyAgIEFkZCAndGFnbGlzdGZpbGVzJyBvcHRpb24sIHNob3cgZmlsZSBuYW1lIGFuZCB0eXBlIHdoZW4gbGlzdGluZyBtYXRjaGluZwogCXRhZ3MgbmFtZSB3aXRoIENUUkwtRCBjb21wbGV0aW9uLiAgUGF0Y2ggZnJvbSBZZWdhcHBhbiBMYWtzaG1hbmFuLgogCTIwMDQgSnVsIDExCkBAIC0xODksMTYgKzE4OCwxOSBAQAogICAgIEFsc28gc2VlIHRoZSAibWluaWdyZXAudmltIiBzY3JpcHQgb24gd3d3LnZpbS5vcmcuCiAKIAotLSAgIEVkaXQgc2FtZSBmaWxlIG9uIFVuaXggYW5kIGZyb20gTVMtV2luZG93czogbm8gd2FybmluZyBmb3Igc3dhcCBmaWxlLgogLSAgIERyb3AgdGhlIGt2aW0gc3VwcG9ydD8gIFRoZXJlIGlzIG5vIG1haW50ZW5hbmNlIGFuZCAieXppcyIgaXMgc3VwcG9zZWQgdG8KICAgICByZXBsYWNlIGl0LgogLSAgIEluIHRoZSBrdmltL0tERSBzb3VyY2UgZmlsZXMgZml4IHRoZSBmb3JtYXR0aW5nLgogLSAgIEtERSB2ZXJzaW9uIGlzIGNhbGxlZCAia3ZpbSIuICBNYWtlIGl0ICJndmltIiwgbGlrZSB0aGUgb3RoZXJzPwogLSAgIEJldHRlciBjb25maWd1cmUgY2hlY2sgZm9yIEtERSBpbmNsdWRlIGZpbGVzIGZyb20gRGFuIFNoYXJwLgogLSAgIEtERSBHVUkgSW5wdXQgbWV0aG9kIHBhdGNoLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKSAodXBkLiBPY3QgMjUgMjAwNCkKKworQWZ0ZXIgaW5jbHVkaW5nIHBhdGNoZXM6CiAtICAgQ2hhbmdlIGdhX3Jvb20gaW50byBnYV9tYXhsZW4sIHNvIHRoYXQgaXQgZG9lc24ndCBuZWVkIHRvIGJlCiAgICAgaW5jcmVtZW50ZWQvZGVjcmVtZW50ZWQgZWFjaCB0aW1lLgotLSAgIEZvciBzdHJpbmcgdmFyaWFibGVzLCB1c2UgbGVuZ3RoIGluc3RlYWQgb2YgTlVMIHRlcm1pbmF0aW9uLgorLSAgIEZvciBzdHJpbmcgdmFyaWFibGVzLCB1c2UgbGVuZ3RoIGluc3RlYWQgb2YgTlVMIHRlcm1pbmF0aW9uPworCSsgY2FuIGluY2x1ZGUgTlVMIGNoYXJhY3RlcnMKKwktIHNldGxpbmUoKSB3aWxsIGhhdmUgcHJvYmxlbXMgd2l0aCBOTCB2cyBOVUwuCiAtICAgbmV3IERBVEEgVFlQRVM6IGxpc3RzLCBkaWN0aW9uYXJpZXMgYW5kIGZ1bmN0aW9uIHJlZmVyZW5jZXMuCiAJQ2hlY2sgb2xkIHBhdGNoIGZyb20gUm9iZXJ0IFdlYmIgZm9yIGFycmF5IHN1cHBvcnQuCiAgICAgQWRkIHR5cGUgY2hlY2tpbmc/ICBTZWUgfi92aW0vaWRlYXMudHh0LgpAQCAtMjU4LDExICsyNjAsNiBAQAogICAgIGJlZm9yZSBzb21lIHRpbWUvZGF0ZSBjYW4gYmUgZmx1c2hlZC4gJ3VuZG9wZXJzaXN0JyBnaXZlcyBtYXhpbXVtIHRpbWUgdG8KICAgICBrZWVwIHVuZG86ICIzaCIsICIxZCIsICIydyIsICIxeSIsIGV0Yy4gIEZvciB0aGUgZmlsZSB1c2UgZG90IGFuZAogICAgIGV4dGVuc2lvbjogIi5maWxlbmFtZS51bn4iIChsaWtlIHN3YXBmaWxlIGJ1dCAidW5+IiBpbnN0ZWFkIG9mICJzd3AiKS4KLTcgICBTV0FQIEZJTEUgQ0hBTkdFOiBXaGVuIGEgZG9zIGZvcm1hdCBmaWxlIHdhcyBlZGl0ZWQgd2l0aCAiOmUgKytmZj11bml4IiwKLSAgICBWaW0gaXMga2lsbGVkIGFuZCB0cnlpbmcgdG8gcmVjb3ZlciB0aGUgZmlsZSwgJ2ZmJyB3aWxsIGJlIGRvcy4gIFNhbWUgZm9yCi0gICAgbm9uLWRlZmF1bHQgZmlsZWVuY29kaW5nLiAgKE1pcm9zbGF3IERvYnJ6YW5za2ktTmV1bWFubiwgSnVsIDE3KQotICAgIFNob3VsZCBzdG9yZSB0aGUgdmFsdWVzIGluIGJsb2NrIDAgb2YgdGhlIHN3YXAgZmlsZSwgYnV0IHRoYXQgaXMgYW4KLSAgICBpbmNvbXBhdGlibGUgY2hhbmdlLgogNyAgIFN1cHBvcnQgV0lORE9XIFRBQlMuICBXb3JrcyBsaWtlIHNldmVyYWwgcGFnZXMsIGVhY2ggd2l0aCB0aGVpciBvd24KICAgICBzcGxpdCB3aW5kb3dzLiAgUGF0Y2ggZm9yIEdUSyAxLjIgcGFzc2VkIG9uIGJ5IENocmlzdGlhbiBNaWNob24sIDIwMDQgSmFuIDYuCiAgICAgQWxzbyBmb3IgdGhlIGNvbnNvbGUhCkBAIC0yODUsNiArMjgyLDEwIEBACiAgICAgLSBtYWtlIGl0IHBvc3NpYmxlIHRvIGhhdmUgJ2RlZmluZUFubm9UeXBlJyBhbHNvIGhhbmRsZSB0ZXJtaW5hbCBjb2xvcnMuCiAgICAgLSBzZW5kICdiYWxsb29uVGV4dCcgZXZlbnRzIGZvciB0aGUgY3Vyc29yIHBvc2l0aW9uICh1c2luZyBDdXJzb3JIb2xkID8pCiAgICAgICBpbiB0ZXJtaW5hbCBtb2RlLgorLSAgIEVDTElQU0UgcGx1Z2luLiAgUHJvYmxlbSBpczogdGhlIGludGVyZmFjZSBpcyB2ZXJ5IGNvbXBsaWNhdGVkLiAgTmVlZCB0bworICAgIGltcGxlbWVudCBwYXJ0IGluIEphdmEgYW5kIHRoZW4gY29ubmVjdCB0byBWaW0uICBTb21lIGhpbnRzIGZyb20gQWxleGFuZHJ1CisgICAgUm9tYW4sIDIwMDQgRGVjIDE1LiAgU2hvdWxkIHRoZW4gYWxzbyB3b3JrIHdpdGggT3JhY2xlIEpkZXZlbG9wZXIsIHNlZSBKU1IKKyAgICAxOTggc3RhbmRhcmQgaHR0cDovL3d3dy5qY3Aub3JnL2VuL2pzci9kZXRhaWw/aWQ9MTk4LgogLSAgIFNUSUNLWSBDVVJTT1I6IEFkZCBhIHdheSBvZiBzY3JvbGxpbmcgdGhhdCBsZWF2ZXMgdGhlIGN1cnNvciB3aGVyZSBpdCBpcy4KICAgICBFc3BlY2lhbGx5IHdoZW4gdXNpbmcgdGhlIHNjcm9sbGJhci4gIFR5cGluZyBhIGN1cnNvci1tb3ZlbWVudCBjb21tYW5kCiAgICAgc2Nyb2xscyBiYWNrIHRvIHdoZXJlIHRoZSBjdXJzb3IgaXMuCkBAIC0zMjQsMjUgKzMyNSw5IEBACiAtICAgIm9uZW1vcmUiIGZsYWcgaW4gJ3ZpcnR1YWxlZGl0JzogbW92ZSBjdXJzb3IgcGFzdCBlbmQgb2YgbGluZS4gIFBhdGNoIGJ5CiAgICAgTWF0dGlhcyBGbG9kaW4gKDIwMDQgSnVsIDMwKQogCi1XaW4zMjogV2hlbiBzZXR0aW5nICdlbmNvZGluZycgaW4gYSBWaW0gc2VydmVyIHRvICJ1dGYtOCIsIGFuZCB1c2luZyAidmltCi0tLXJlbW90ZSBydXNzaWFuIiBpbiBhIGNvbnNvbGUsICJydXNzaWFuIiBzaG91bGQgYmUgY29udmVydGVkIGZyb20gdGhlIGNvbnNvbGUKLWVuY29kaW5nIHRvIHV0Zi04LiAgU2VuZCBhbGwgcmVtb3RlIG1lc3NhZ2VzIGluIHV0Zi04PyAgT25seSBvbiBXaW4zMj8KLQogU3VwcG9ydCAiOnNldCBzeW50YXg9Y3BwLmRveHlnZW4iPyAgU3VnZ2VzdGVkIHBhdGNoIGJ5IE1pY2hhZWwgR2VkZGVzICg5IEF1ZwogMjAwNCkuICBTaG91bGQgYWxzbyB3b3JrIGZvciAnZmlsZXR5cGUnLgogCi1QYXRjaCBmb3IgJ2JyZWFraW5kZW50JyBvcHRpb246IHJlcGVhdCBpbmRlbnQgZm9yIHdyYXBwZWQgbGluZS4gKFZhY2xhdgotU21pbGF1ZXIsIDIwMDQgU2VwIDEzLCBmaXggT2N0IDMxKQotCi0iOmJ1ZmRvIGcvc29tZXRoaW5nL3AiIGhhcyB0aGUgbGFzdCBtYXRjaCBvdmVyd3JpdHRlbiBieSB0aGUgZmlsZSBpbmZvLgotRXhhbXBsZSBieSBDZXNhciBBbmRhbG91IChOb3YgMykuCi0KLVdpbjMyOiBJbiAnZmlsZWVuY29kaW5ncycgYWxsb3cgdXNpbmcgImFjcCIgZm9yIHRoZSBhY3RpdmUgY29kZXBhZ2UuICBVc2VmdWwKLXZhbHVlOiAidWNzLWJvbSx1dGYtOCxhY3AsbGF0aW4xIgotCi1XaW4zMjogQ2Fubm90IGVkaXQgYSBmaWxlIHN0YXJ0aW5nIHdpdGggIyB3aXRoIC0tcmVtb3RlLiAoR2l1c2VwcGUgQmlsb3R0YSwKLU9jdCA2IDIwMDQpCi0KIEZvciBtYW5pcHVsYXRpbmcgYnVmZmVycyB3aXRob3V0IG9wZW5pbmcgYSBuZXcgd2luZG93LCBzdXBwb3J0IFZpcnR1YWwKIHdpbmRvd3MuICBFeGFtcGxlOgogICAgIDp2aXJ0d2luIGxldCBsID0gR2V0QnVmTGluZSg0LCAxMCkKQEAgLTM2MCwxOSArMzQ1LDEzIEBACiBNYXRoaWFzIE1pY2hhZWxpcyAoMjAwNCBTZXAgNikKIEFsc28gcGxhY2UgdmltdHV0b3IuYmF0IGluICV3aW5kaXIlPwogCi1TdXBwb3J0ICI6ZW5ldyBmaWxlbmFtZSIgdG8gZWRpdCBhIG5ldyBidWZmZXIgd2l0aCBhIG5hbWUuICBJdCdzIGxpa2UgImVuZXcgfAotZmlsZSBmaWxlbmFtZSIgYnV0IHdpdGhvdXQgc2V0dGluZyB0aGUgYWx0ZXJuYXRlIGZpbGUgdG8gYSBidWZmZXIgd2l0aG91dCBhCi1uYW1lLiAoQ2hhcmxlcyBDYW1wYmVsbCkKLQogQWRkIGd1aV9tY2hfYnJvd3NlZGlyKCkgZm9yIE1vdGlmLCBLREUgYW5kIE1hYyBPUy9YLgogCi1BZGQgTWFrZWZpbGUgY29kZSB0byBpbnN0YWxsICotaXQuMSBtYW51YWwgcGFnZXMgaW4gLi4uL21hbi9pdC9tYW4xLyouMQotCiBIVE1MIGluZGVudGluZyBjYW4gYmUgc2xvdywgZmluZCBvdXQgd2h5LiAgQW55IHdheSB0byBkbyBzb21lIGtpbmQgb2YKIHByb2ZpbGluZyBmb3IgVmltIHNjcmlwdD8KIAogTWFjOiBwcm9ibGVtIHdpdGggWGNvZGUsIFZpbSBkb2Vzbid0IGNvbnRpbnVlIHVudGlsIHRoZSBuZXh0IGNsaWNrLgotQXBwYXJlbnRseSBoYW5nZXMgaW4gaGFuZGxlX2Ryb3AoKS4gIEEgUG9zdEV2ZW50KCkgYXZvaWRzIGl0LiAoRGEgV29vbiBKdW5nKQorQXBwYXJlbnRseSBoYW5ncyBpbiBoYW5kbGVfZHJvcCgpLiAgQSBQb3N0RXZlbnQoKSBhdm9pZHMgaXQuIChEYSBXb29uIEp1bmcpCiAKIAogVmkgaW5jb21wYXRpYmlsaXR5OgpAQCAtOTQzLDExICs5MjIsNiBAQAogICAgIHN3YXAgZmlsZS4gIFRoZW4gdXNpbmcgIjp3cml0ZSIgKHdpdGhvdXQgbWFraW5nIGFueSBjaGFuZ2VzKSBkb2Vzbid0IGdpdmUKICAgICBhIHdhcm5pbmcgZWl0aGVyLiAgU2hvdWxkIGNoZWNrIGZvciBhbiBleGlzdGluZyBzd2FwIGZpbGUgd2l0aG91dCBjcmVhdGluZwogICAgIG9uZS4KLTcgICBPbiBNUy1ET1Mgb3IgTVMtV2luZG93cywgd2hlbiBlZGl0aW5nIHRoZSBzYW1lIGZpbGUgb3ZlciBhIG5ldHdvcmssIHRoZQotICAgIGRyaXZlIGxldHRlciBpcyBkaWZmZXJlbnQsIHRodXMgYW4gZXhpc3Rpbmcgc3dhcCBmaWxlIGRvZXNuJ3QgZ2VuZXJhdGUgYQotICAgIHdhcm5pbmcuICBVc2Ugc29tZSBmbGFnIHRvIGluZGljYXRlIHRoZSBzd2FwIGZpbGUgaXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Ci0gICAgYXMgdGhlIG9yaWdpbmFsIGZpbGU/ICBDb3VsZCBtYWtlIGIwX2ZuYW1lW10gc3RhcnQgd2l0aCBhIHNwZWNpYWwKLSAgICBjaGFyYWN0ZXIgbGlrZSAiPiIuCiA3ICAgV2hlbiAnc2hvd2JyZWFrJyBpcyBzZXQsIHRoZSBhbW91bnQgb2Ygc3BhY2UgYSBUYWIgb2NjdXBpZXMgY2hhbmdlcy4KICAgICBTaG91bGQgd29yayBsaWtlICdzaG93YnJlYWsnIGlzIGluc2VydGVkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIFRhYnMuCiA3ICAgV2hlbiB0aGVyZSBpcyBhICJoZWxwLnR4dCIgd2luZG93IGluIGEgc2Vzc2lvbiBmaWxlLCByZXN0b3JpbmcgdGhhdApAQCAtOTc3LDEwICs5NTEsNiBAQAogOSAgIGRvc2luc3QuYzogVGhlIERKR1BQIHZlcnNpb24gY2FuJ3QgdW5pbnN0YWxsIHRoZSBVbmluc3RhbGwgcmVnaXN0cnkga2V5IG9uCiAgICAgV2luZG93cyBOVC4gIEhvdyB0byBpbnN0YWxsIGEgLmluZiBmaWxlIG9uIFdpbmRvd3MgTlQgYW5kIGhvdyB0byBkZXRlY3QKICAgICB0aGF0IFdpbmRvd3MgTlQgaXMgYmVpbmcgdXNlZD8KLTggICBXaGVuIG9wZW5pbmcgdGhlIHNhbWUgZmlsZSBvbiBVbml4IGFuZCBvbiBNUy1XaW5kb3dzLCB0aGVyZSBpcyBubwotICAgIEFUVEVOVElPTiBtZXNzYWdlLCBiZWNhdXNlIHRoZSBwYXRoIGluIHRoZSBzd2FwIGZpbGUgaXMgZGlmZmVyZW50LiAgVXNpbmcKLSAgICBhIHJlbGF0aXZlIHBhdGggbmFtZSB3aWxsIGNhdXNlIG5vIEFUVEVOVElPTiBmb3IgVmltIDUuOC4KLSAgICBTb21laG93IGFkZCBhIGZsYWcgdGhhdCB0aGUgc3dhcCBmaWxlIGlzIGluIHRoZSBzYW1lIGRpciBhcyB0aGUgZmlsZT8KIDggICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgImJsb2NrLGluc2VydCIgYW5kIGVuY29kaW5nIGlzICJ1dGYtOCIsIHNlbGVjdGluZyBhCiAgICAgYmxvY2sgb2Ygb25lIGRvdWJsZS13aWRlIGNoYXJhY3RlciwgdGhlbiAiZCIgZGVsZXRlcyBvbmx5IGhhbGYgb2YgaXQuCiA4ICAgV2hlbiAndmlydHVhbGVkaXQnIGlzIHNldCwgc2hvdWxkICJJIiBpbiBibG9ja3dpc2UgdmlzdWFsIG1vZGUgYWxzbyBpbnNlcnQKQEAgLTI2NTgsMTIgKzI2MjgsMTQgQEAKIFNlYXJjaGluZzoKIDggICBBZGQgYSBtZWNoYW5pc20gZm9yIHJlY3Vyc2l2ZW5lc3M6ICJcKChbXigpXSpcQEBbXigpXSopXClcQHIiLiAgXEBAIHN0YW5kcwogICAgIGZvciAiZ28gcmVjdXJzaXZlIGhlcmUiIGFuZCBcQHIgbWFya3MgdGhlIHJlY3Vyc2l2ZSBhdG9tLgotaXRlbSBzdGFjayB0byBhbGxvdyBtYXRjaGluZyAoKS4gIE9uZSBzaWRlIGlzICJwdXNoIFggb24KKzcgICBBZGQgYW4gaXRlbSBzdGFjayB0byBhbGxvdyBtYXRjaGluZyAoKS4gIE9uZSBzaWRlIGlzICJwdXNoIFggb24KICAgICB0aGUgc3RhY2sgaWYgcHJldmlvdXMgYXRvbSBtYXRjaGVkIi4gIE90aGVyIHNpZGUgaXMgIm1hdGNoIHdpdGggdG9wIG9mCiAgICAgc3RhY2ssIHBvcCBpdCB3aGVuIGl0IG1hdGNoZXMiLiAgVXNlICJcQHBYIiBhbmQgIlxAbSI/CiAJRXhhbXBsZTogXCgoXEBwKS5cey19XEBtXCkqCiA3ICAgQWRkIGFuIG9wdGlvbiB0byBhY2NlcHQgYSBtYXRjaCBhdCB0aGUgY3Vyc29yIHBvc2l0aW9uLiAgQWxzbyBmb3IKICAgICBzZWFyY2goKS4gKEJyZXR0KQorNyAgIEFkZCBhIGZsYWcgdG8gIi9wYXQvIiB0byBkaXNjYXJkIGFuIGVycm9yLiAgVXNlZnVsIHRvIGNvbnRpbnVlIGEgbWFwcGluZworICAgIHdoZW4gYSBzZWFyY2ggZmFpbHMuICBDb3VsZCBiZSAiL3BhdC9FIiAoZSBpcyBhbHJlYWR5IHVzZWQgZm9yIGFuIG9mZnNldCkuCiA3ICAgQWRkIHBhdHRlcm4gaXRlbSB0byB1c2UgcHJvcGVydGllcyBvZiBVbmljb2RlIGNoYXJhY3RlcnMuICBJbiBQZXJsIGl0J3MKICAgICAiXHB7TH0iIGZvciBhIGxldHRlci4gIFNlZSBSZWd1bGFyIEV4cHJlc3Npb24gUG9ja2V0IFJlZmVyZW5jZS4KIDggICBXb3VsZCBpdCBiZSBwb3NzaWJsZSB0byBhbGxvdyAiOjIzLDQ1L3BhdC9mbGFncyIgdG8gc2VhcmNoIGZvciAicGF0IiBpbgpAQCAtMjgyOCw5ICsyODAwLDYgQEAKICAgICB0d2ljZSAoZS5nLiB3aGVuIHVzaW5nIHF1aWNrZml4KS4gIEFsc28gdHJ5IHRvIG1ha2UgdGhlIG5hbWUgb2YgdGhlIGJhY2t1cAogICAgIGZpbGUgdGhlIHNhbWUgYXMgdGhlIGFjdHVhbCBmaWxlPwogICAgIFVzZSB0aGUgY29kZSBmb3IgcmVzb2x2ZSgpPwotNyAgIFN0b3JlIHRoZSBvcHRpb25zICdmaWxlZW5jb2RpbmcnLCAnZmlsZWZvcm1hdCcsIGV0Yy4gaW4gdGhlIHN3YXBmaWxlLAotICAgIGJlY2F1c2UgdGhleSBjaGFuZ2Ugd2hhdCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGZpbGUuICBSZXF1aXJlcyBhZGRpbmcKLSAgICBhbm90aGVyIGJsb2NrIHRvIHRoZSBzd2FwZmlsZS4KIDcgICBXaGVuIHVzaW5nIDY0IGJpdCBpbm9kZSBudW1iZXJzLCBhbHNvIHN0b3JlIHRoZSB0b3AgMzIgYml0cy4gIEFkZCBhbm90aGVyCiAgICAgZmllbGQgZm9yIHRoaXMsIHVzaW5nIHBhcnQgb2YgYm9fZm5hbWVbXSwgdG8ga2VlcCBpdCBjb21wYXRpYmxlLgogNyAgIFdoZW4gZWRpdGluZyBhIGZpbGUgb24gcmVtb3ZhYmxlIG1lZGlhLCBzaG91bGQgcHV0IHN3YXAgZmlsZSBzb21ld2hlcmUKQEAgLTMxNTMsOCArMzEyMiw2IEBACiA3ICAgQWRkIE1vZGVNc2dWaXN1YWwsIE1vZGVNc2dJbnNlcnQsIGV0Yy4gc28gdGhhdCBlYWNoIG1vZGUgbWVzc2FnZSBjYW4gYmUKICAgICBoaWdobGlnaHRlZCBkaWZmZXJlbnRseS4KIDggICBBbGxvdyB1c2luZyAiKioiIGFzIGEgd2lsZGNhcmQgaW4gY29tbWFuZHMgbGlrZSAiOm5leHQiIGFuZCAiOmFyZ3MiLgotOCAgIFByb3ZpZGUgYSB3YXkgdG8gYXZvaWQgd2lsZGNhcmQgZXhwYW5zaW9uLiAgVXNlIGRvdWJsZSBxdW90ZXMsIGxpa2UgaW4gdGhlCi0gICAgc2hlbGw/ICA6ZWRpdCAibXlbZmlsZV0udHh0IiAgKGN1cnJlbnRseSB3b3JrcyBpZiB0aGVyZSBpcyBubyAibXlmLnR4dCIpCiA3ICAgQWRkIGEgbWVzc2FnZSBhcmVhIGZvciB0aGUgdXNlci4gIFNldCBzb21lIG9wdGlvbiB0byByZXNlcnZlIHNwYWNlIChhYm92ZQogICAgIHRoZSBjb21tYW5kIGxpbmU/KS4gIFVzZSBhbiAiOmVjaG91c2VyIiBjb21tYW5kIHRvIGRpc3BsYXkgdGhlIG1lc3NhZ2UKICAgICAodHJ1bmNhdGVkIHRvIGZpdCBpbiB0aGUgc3BhY2UpLgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdmVyc2lvbjcudHh0IGIvcnVudGltZS9kb2MvdmVyc2lvbjcudHh0CmluZGV4IDgxNDc1MmIuLmU1NzQ2ZmUgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3ZlcnNpb243LnR4dAorKysgYi9ydW50aW1lL2RvYy92ZXJzaW9uNy50eHQKQEAgLTEsNCArMSw0IEBACi0qdmVyc2lvbjcudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgRGVjIDExCisqdmVyc2lvbjcudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgRGVjIDE5CiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0zNiw2ICszNiwyMCBAQAogCiAiOmhlbHBncmVwIiBub3cgdXNlcyBhIGhlbHAgd2luZG93IHRvIGRpc3BsYXkgYSBtYXRjaC4KIAorSW4gYW4gYXJndW1lbnQgbGlzdCBkb3VibGUgcXVvdGVzIGNvdWxkIGJlIHVzZWQgdG8gaW5jbHVkZSBzcGFjZXMgaW4gYSBmaWxlCituYW1lLiAgVGhpcyBjYXVzZWQgYSBkaWZmZXJlbmNlIGJldHdlZW4gIjplZGl0IiBhbmQgIjpuZXh0IiBmb3IgZXNjYXBpbmcKK2RvdWJsZSBxdW90ZXMgYW5kIGl0IGlzIGluY29tcGF0aWJsZSB3aXRoIHNvbWUgdmVyc2lvbnMgb2YgVmkuCisJQ29tbWFuZAkJCVZpbSA2LngJZmlsZSBuYW1lCVZpbSA3LnggZmlsZSBuYW1lIH4KKwk6ZWRpdCBmb29cIjg4OCAgICAgICAgICAnZm9vIjg4OCcgICAgICAgICAJJ2ZvbyI4ODgnCisJOm5leHQgZm9vXCI4ODggICAgICAgICAgJ2Zvbzg4OCcgICAgICAgICAgCSdmb28iODg4JworCTpuZXh0IGFcImIgY1wiZCAgICAgICAgICdhYiBjZCcgICAgICAgICAgIAknYSJiJyBhbmQgJ2MiZCcKKworQSAiOndyaXRlIGZpbGUiIGNvbW1hbmQgbm8gbG9uZ2VyIHJlc2V0cyB0aGUgJ21vZGlmaWVkJyBmbGFnIG9mIHRoZSBidWZmZXIsCit1bmxlc3MgdGhlICcrJyBmbGFnIGlzIGluICdjcG9wdGlvbnMnIHxjcG8tK3wuICBUaGlzIHdhcyBpbGxvZ2ljYWwsIHNpbmNlIHRoZQorYnVmZmVyIGlzIHN0aWxsIG1vZGlmaWVkIGNvbXBhcmVkIHRvIHRoZSBvcmlnaW5hbCBmaWxlLiAgQW5kIHdoZW4gdW5kb2luZworYWxsIGNoYW5nZXMgdGhlIGZpbGUgd291bGQgYWN0dWFsbHkgYmUgbWFya2VkIG1vZGlmaWVkLiAgSXQgZG9lcyBtZWFuIHRoYXQKKyI6cXVpdCIgZmFpbHMgbm93LgorCiAKIE1pbm9yIGluY29tcGF0aWJpbGl0aWVzOgogCkBAIC02MSw2ICs3NSwxNiBAQAogb24gd2hldGhlciA8RjEwPiBoYXMgYmVlbiBtYXBwZWQgb3Igbm90LiAgVGhpcyBhbGxvd3MgbWFwcGluZyA8RjEwPiB3aXRob3V0CiBjaGFuZ2luZyAnd2luYWx0a2V5cycuCiAKK1doZW4gdXNpbmcgQ1RSTC1BIG9uICIwOCIgaXQgYmVjYW1lICIwMTgiLCB3aGljaCBpcyBpbGxvZ2ljYWwuICBOb3cgaXQgYmVjb21lcworIjkiLiAgVGhlIGxlYWRpbmcgemVybyhzKSBpcyhhcmUpIHJlbW92ZWQgdG8gYXZvaWQgdGhlIG51bWJlciBiZWNvbWluZyBvY3RhbAorYWZ0ZXIgaW5jcmVtZW50aW5nICIwMDkiIHRvICIwMTAiLgorCitXaGVuICdlbmNvZGluZycgaXMgc2V0IHRvIGEgVW5pY29kZSBlbmNvZGluZywgdGhlIHZhbHVlIGZvciAnZmlsZWVuY29kaW5ncycKK25vdyBpbmNsdWRlcyAiZGVmYXVsdCIgYmVmb3JlICJsYXRpbjEiLiAgVGhpcyBtZWFucyB0aGF0IGZvciBmaWxlcyB3aXRoIDgtYml0CitlbmNvZGluZ3MgdGhlIGRlZmF1bHQgaXMgdG8gdXNlIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgYnkgdGhlIGVudmlyb25tZW50LCBpZgorcG9zc2libGUuICBQcmV2aW91c2x5IGxhdGluMSB3b3VsZCBhbHdheXMgYmUgdXNlZCwgd2hpY2ggaXMgd3JvbmcgaW4gYQorbm9uLWxhdGluMSBlbnZpcm9ubWVudCwgc3VjaCBhcyBSdXNzaWFuLgorCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIE5FVyBGRUFUVVJFUwkJCQkJCSpuZXctNyoKIApAQCAtMzAzLDYgKzMyNywxOCBAQAogc2Vjb25kIGxpbmUgb2YgdGhlIGZvbGQuICBIZWxwcyBmb3IgQy1zdHlsZSAvKiAqLyBjb21tZW50cyB3aGVyZSB0aGUgZmlyc3QKIGxpbmUgaXMganVzdCAiLyoiLgogCitXaGVuIGVkaXRpbmcgdGhlIHNhbWUgZmlsZSBmcm9tIHR3byBzeXN0ZW1zIChlLmcuLCBVbml4IGFuZCBNUy1XaW5kb3dzKSB0aGVyZQorbW9zdGx5IHdhcyBubyB3YXJuaW5nIGZvciBhbiBleGlzdGluZyBzd2FwIGZpbGUsIGJlY2F1c2UgdGhlIG5hbWUgb2YgdGhlCitlZGl0ZWQgZmlsZSBkaWZmZXJzIChlLmcuLCB5OlxkaXJcZmlsZSB2cyAvaG9tZS9tZS9kaXIvZmlsZSkuICBBZGRlZCBhIGZsYWcgdG8KK3RoZSBzd2FwIGZpbGUgdG8gaW5kaWNhdGUgaXQgaXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBlZGl0ZWQgZmlsZS4gIFRoZQordXNlZCBwYXRoIHRoZW4gZG9lc24ndCBtYXR0ZXIgYW5kIHRoZSBjaGVjayBmb3IgZWRpdGluZyB0aGUgc2FtZSBmaWxlIGlzIG11Y2gKK21vcmUgcmVsaWFibGUuCisKK0NsaWVudC1zZXJ2ZXIgY29tbXVuaWNhdGlvbiBub3cgc3VwcG9ydHMgJ2VuY29kaW5nJy4gIFdoZW4gc2V0dGluZyAnZW5jb2RpbmcnCitpbiBhIFZpbSBzZXJ2ZXIgdG8gInV0Zi04IiwgYW5kIHVzaW5nICJ2aW0gLS1yZW1vdGUgZm5hbWUiIGluIGEgY29uc29sZSwKKyJmbmFtZSIgaXMgY29udmVydGVkIGZyb20gdGhlIGNvbnNvbGUgZW5jb2RpbmcgdG8gdXRmLTguICBBbHNvIGFsbG93cyBWaW1zCit3aXRoIGRpZmZlcmVudCAnZW5jb2RpbmcnIHNldHRpbmdzIHRvIGV4Y2hhbmdlIG1lc3NhZ2VzLgorCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIENPTVBJTEUgVElNRSBDSEFOR0VTCQkJCQkqY29tcGlsZS1jaGFuZ2VzLTcqCiAKQEAgLTUwNiw0ICs1NDIsMjYgQEAKIGxpbmUgZm9yIHRoZSBjbWRsaW5lLiAoQ2hyaXN0aWFuIFJvYmluc29uKSAgSW52b2tlIGNvbW1hbmRfaGVpZ2h0KCkgYWZ0ZXIgdGhlCiBHVUkgaGFzIHN0YXJ0ZWQgdXAuCiAKK1doZW4gY29tcGxldGluZyBhIGZpbGUgbmFtZSBvbiB0aGUgY29tbWFuZCBsaW5lIGJhY2tzbGFzaGVzIGFyZSByZXF1aXJlZCBmb3IKK3doaXRlIHNwYWNlLiAgV2FzIG9ubHkgZG9uZSBmb3IgYSBzcGFjZSwgbm90IGZvciBhIFRhYi4KKworV2hlbiBjb25maWd1cmUgY291bGQgbm90IGZpbmQgYSB0ZXJtaW5hbCBsaWJyYXJ5LCBjb21waWxpbmcgY29udGludWVkIGZvciBhCitsb25nIHRpbWUgYmVmb3JlIHJlcG9ydGluZyB0aGUgcHJvYmxlbS4gIEFkZGVkIGEgY29uZmlndXJlIGNoZWNrIGZvciB0Z2V0ZW50KCkKK2JlaW5nIGZvdW5kIGluIGEgbGlicmFyeS4KKworV2hlbiB0aGUgY3Vyc29yIGlzIG9uIHRoZSBmaXJzdCBjaGFyIG9mIHRoZSBsYXN0IGxpbmUgYSAiOmcvcGF0L3MvLy8iIGNvbW1hbmQKK21heSBjYXVzZSB0aGUgY3Vyc29yIHRvIGJlIGRpc3BsYXllZCBiZWxvdyB0aGUgdGV4dC4KKworV2luMzI6IEVkaXRpbmcgYSBmaWxlIHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMgZG9lc24ndCB3b3JrIHdoZW4gJ2VuY29kaW5nJworaXMgInV0Zi04Ii4gIHVzZSBfd2Z1bGxwYXRoKCkgaW5zdGVhZCBvZiBfZnVsbHBhdGgoKS4gKFl1LXN1bmcgTW9vbikKKworV2hlbiByZWNvdmVyaW5nIHRoZSAnZmlsZWZvcm1hdCcgYW5kICdmaWxlZW5jb2RpbmcnIHdlcmUgdGFrZW4gZnJvbSB0aGUKK29yaWdpbmFsIGZpbGUgaW5zdGVhZCBvZiBmcm9tIHRoZSBzd2FwZmlsZS4gIFdoZW4gdGhlIGZpbGUgZGlkbid0IGV4aXN0LCB3YXMKK2VtcHR5IG9yIHRoZSBvcHRpb24gd2FzIGNoYW5nZWQgKGUuZy4sIHdpdGggIjplICsrZmVuYz1jcDEyMyBmaWxlIikgaXQgY291bGQKK2JlIHdyb25nLiAgTm93IHN0b3JlICdmaWxlZm9ybWF0JyBhbmQgJ2ZpbGVlbmNvZGluZycgaW4gdGhlIHN3YXBmaWxlIGFuZCB1c2UKK3RoZSB2YWx1ZXMgd2hlbiByZWNvdmVyaW5nLgorCisiOmJ1ZmRvIGcvc29tZXRoaW5nL3AiIG92ZXJ3cml0ZXMgZWFjaCBsYXN0IHByaW50ZWQgdGV4dCBsaW5lIHdpdGggdGhlIGZpbGUKK21lc3NhZ2UgZm9yIHRoZSBuZXh0IGJ1ZmZlci4gIFRlbXBvcmFyaWx5IGNsZWFyICdzaG9ydG1lc3MnIHRvIGF2b2lkIHRoYXQuCisKICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2ZpbGV0eXBlLnZpbSBiL3J1bnRpbWUvZmlsZXR5cGUudmltCmluZGV4IDk0NjUwMjYuLjY2ZTYyMDggMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZmlsZXR5cGUudmltCisrKyBiL3J1bnRpbWUvZmlsZXR5cGUudmltCkBAIC0xLDcgKzEsNyBAQAogIiBWaW0gc3VwcG9ydCBmaWxlIHRvIGRldGVjdCBmaWxlIHR5cGVzCiAiCiAiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+Ci0iIExhc3QgQ2hhbmdlOgkyMDA0IE5vdiAxOAorIiBMYXN0IENoYW5nZToJMjAwNCBEZWMgMTcKIAogIiBMaXN0ZW4gdmVyeSBjYXJlZnVsbHksIEkgd2lsbCBzYXkgdGhpcyBvbmx5IG9uY2UKIGlmIGV4aXN0cygiZGlkX2xvYWRfZmlsZXR5cGVzIikKQEAgLTg5Myw2ICs4OTMsOSBAQAogIiBOYXR1cmFsCiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5OU1tBQ0dMTU5QU10JCXNldGYgbmF0dXJhbAogCisiIE5ldHJjCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLm5ldHJjCQkJc2V0ZiBuZXRyYworCiAiIE5vdmVsbCBuZXR3YXJlIGJhdGNoIGZpbGVzCiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5uY2YJCQlzZXRmIG5jZgogCkBAIC0xNDg2LDYgKzE0ODksOSBAQAogIiBTdGFuZGFyZCBNTAogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc21sCQkJc2V0ZiBzbWwKIAorIiBTdWRvZXJzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9zdWRvZXJzLHN1ZG9lcnMudG1wCXNldGYgc3Vkb2VycworCiAiIFRhZHMgKG9yIE5yb2ZmKQogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudAogCVwgaWYgITxTSUQ+RlRucm9mZigpIHwgc2V0ZiB0YWRzIHwgZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vbWFrZS52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL21ha2UudmltCmluZGV4IGM3Mzk3ZGEuLmE5NDdiZTEgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZnRwbHVnaW4vbWFrZS52aW0KKysrIGIvcnVudGltZS9mdHBsdWdpbi9tYWtlLnZpbQpAQCAtMSw3ICsxLDcgQEAKICIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCiAiIExhbmd1YWdlOglNYWtlCiAiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+Ci0iIExhc3QgQ2hhbmdlOgkyMDAzIE1heSAwNAorIiBMYXN0IENoYW5nZToJMjAwNCBEZWMgMTcKIAogIiBPbmx5IGRvIHRoaXMgd2hlbiBub3QgZG9uZSB5ZXQgZm9yIHRoaXMgYnVmZmVyCiBpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikKQEAgLTIzLDMgKzIzLDYgQEAKIAogIiBTZXQgJ2NvbW1lbnRzdHJpbmcnIHRvIHB1dCB0aGUgbWFya2VyIGFmdGVyIGEgIy4KIHNldGxvY2FsIGNvbW1lbnRzdHJpbmc9I1wgJXMKKworIiBJbmNsdWRpbmcgZmlsZXMuCitsZXQgJmw6aW5jbHVkZSA9ICdeXHMqaW5jbHVkZScKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbWFrZW1lbnUudmltIGIvcnVudGltZS9tYWtlbWVudS52aW0KaW5kZXggYzk4OTAwNy4uZjg2NjU5NCAxMDA2NDQKLS0tIGEvcnVudGltZS9tYWtlbWVudS52aW0KKysrIGIvcnVudGltZS9tYWtlbWVudS52aW0KQEAgLTEsNiArMSw2IEBACiAiIFNjcmlwdCB0byBkZWZpbmUgdGhlIHN5bnRheCBtZW51IGluIHN5bm1lbnUudmltCiAiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+Ci0iIExhc3QgQ2hhbmdlOgkyMDA0IE5vdiAyMAorIiBMYXN0IENoYW5nZToJMjAwNCBEZWMgMTcKIAogIiBUaGlzIGlzIHVzZWQgYnkgIm1ha2UgbWVudSIgaW4gdGhlIHNyYyBkaXJlY3RvcnkuCiBlZGl0IDxzZmlsZT46cDpoL3N5bm1lbnUudmltCkBAIC00MDcsNiArNDA3LDcgQEAKIFN5bk1lbnUgU2gtUy5TdG9yZWRcIFByb2NlZHVyZXM6c3RwCiBTeW5NZW51IFNoLVMuU3RyYWNlOnN0cmFjZQogU3luTWVudSBTaC1TLlN1YnZlcnNpb25cIGNvbW1pdDpzdm4KK1N5bk1lbnUgU2gtUy5TdWRvZXJzOnN1ZG9lcnMKIAogU3luTWVudSBUVVYuVEFEUzp0YWRzCiBTeW5NZW51IFRVVi5UYWdzOnRhZ3MKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4LzJodG1sLnZpbSBiL3J1bnRpbWUvc3ludGF4LzJodG1sLnZpbQppbmRleCAwMDgyMjE0Li4yYTdhMmIxIDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC8yaHRtbC52aW0KKysrIGIvcnVudGltZS9zeW50YXgvMmh0bWwudmltCkBAIC0xLDYgKzEsNiBAQAogIiBWaW0gc3ludGF4IHN1cHBvcnQgZmlsZQogIiBNYWludGFpbmVyOiBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgotIiBMYXN0IENoYW5nZTogMjAwNCBPY3QgMTUKKyIgTGFzdCBDaGFuZ2U6IDIwMDQgRGVjIDE0CiAiCSAgICAgICAobW9kaWZpZWQgYnkgRGF2aWQgTmVcdntjfWFzIChZZXRpKSA8eWV0aUBwaHlzaWNzLm11bmkuY3o+KQogIgkgICAgICAgKFhIVE1MIHN1cHBvcnQgYnkgUGFuYWdpb3RpcyBJc3NhcmlzIDx0YWtpc0BsdW11bWJhLmx1Yy5hYy5iZT4pCiAKQEAgLTIxMSw3ICsyMTEsMTEgQEAKIHNldCBtYWdpYwogCiBpZiBleGlzdHMoInVzZV94aHRtbCIpCi0gIGV4ZSAibm9ybWFsISBhPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cblxlIgorICBpZiBzOmh0bWxfZW5jb2RpbmcgIT0gIiIKKyAgICBleGUgIm5vcm1hbCEgIGE8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCIiIC4gczpodG1sX2VuY29kaW5nIC4gIlwiPz5cblxlIgorICBlbHNlCisgICAgZXhlICJub3JtYWwhIGE8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuXGUiCisgIGVuZGlmCiAgIGxldCBzOnRhZ19jbG9zZSA9ICcvPicKIGVsc2UKICAgbGV0IHM6dGFnX2Nsb3NlID0gJz4nCkBAIC0yMzAsOCArMjM0LDggQEAKIAogIiBIVE1MIGhlYWRlciwgd2l0aCB0aGUgdGl0bGUgYW5kIGdlbmVyYXRvciA7LSkuIExlZnQgZnJlZSBzcGFjZSBmb3IgdGhlIENTUywKICIgdG8gYmUgZmlsbGVkIGF0IHRoZSBlbmQuCi1leGUgIm5vcm1hbCEgYTxodG1sPlxuPGhlYWQ+XG48dGl0bGU+XGUiCi1leGUgIm5vcm1hbCEgYSIgLiBleHBhbmQoIiU6cDp+IikgLiAiPC90aXRsZT5cblxlIgorZXhlICJub3JtYWwhIGE8aHRtbD5cblxlIgorZXhlICJub3JtYWwhIGE8aGVhZD5cbjx0aXRsZT4iIC4gZXhwYW5kKCIlOnA6fiIpIC4gIjwvdGl0bGU+XG5cZSIKIGV4ZSAibm9ybWFsISBhPG1ldGEgbmFtZT1cIkdlbmVyYXRvclwiIGNvbnRlbnQ9XCJWaW0vIiAuIHY6dmVyc2lvbi8xMDAgLiAiLiIgLiB2OnZlcnNpb24gJTEwMCAuICciJyAuIHM6dGFnX2Nsb3NlIC4gIlxuXGUiCiBpZiBzOmh0bWxfZW5jb2RpbmcgIT0gIiIKICAgZXhlICJub3JtYWwhIGE8bWV0YSBodHRwLWVxdWl2PVwiY29udGVudC10eXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD0iIC4gczpodG1sX2VuY29kaW5nIC4gJyInIC4gczp0YWdfY2xvc2UgLiAiXG5cZSIKQEAgLTQ3NywxMSArNDgxLDE5IEBACiBlbmR3aGlsZQogCiAiIEFkZCBoeXBlcmxpbmtzCi0lcytcKGh0dHA6Ly9cU1x7LX1cKVwoXChbLiw7On1dXD1cKFxzXHwkXClcKVx8W1xcIic8Pl1cfCZndDtcfCZsdDtcfCZxdW90O1wpKzxBIEhSRUY9IlwxIj5cMTwvQT5cMitnZQorJXMrXChodHRwc1w9Oi8vXFNcey19XClcKFwoWy4sOzp9XVw9XChcc1x8JFwpXClcfFtcXCInPD5dXHwmZ3Q7XHwmbHQ7XHwmcXVvdDtcKSs8YSBocmVmPSJcMSI+XDE8L2E+XDIrZ2UKIAogIiBUaGUgRFRECiBpZiBleGlzdHMoImh0bWxfdXNlX2NzcyIpCi0gIGV4ZSAibm9ybWFsISBnZzBpPCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTlwiIFwiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZFwiPlxuXGUiCisgIGlmIGV4aXN0cygidXNlX3hodG1sIikKKyAgICBleGUgIm5vcm1hbCEgZ2ckYVxuPCFET0NUWVBFIGh0bWwgUFVCTElDIFwiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU5cIiBcImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGRcIj5cZSIKKyAgZWxzZQorICAgIGV4ZSAibm9ybWFsISBnZzBpPCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTlwiIFwiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZFwiPlxuXGUiCisgIGVuZGlmCitlbmRpZgorCitpZiBleGlzdHMoInVzZV94aHRtbCIpIAorICBleGUgIm5vcm1hbCEgZ2cvPGh0bWwvZVxuYSB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIlxlIgogZW5kaWYKIAogIiBDbGVhbnVwCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9pc3MudmltIGIvcnVudGltZS9zeW50YXgvaXNzLnZpbQppbmRleCBmOTRjN2NkLi4yNmQ5MTUwIDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC9pc3MudmltCisrKyBiL3J1bnRpbWUvc3ludGF4L2lzcy52aW0KQEAgLTIsNyArMiwxMiBAQAogIiBMYW5ndWFnZTogICAgICAgICAgICAgSW5ubyBTZXR1cCBGaWxlIChpc3MgZmlsZSkgYW5kIE15IElubm9TZXR1cCBleHRlbnNpb24KICIgTWFpbnRhaW5lcjogICAgICAgICAgIEphc29uIE1pbGxzIChqbWlsbHNAY3MubXVuLmNhKQogIiBQcmV2aW91cyBNYWludGFpbmVyOiAgRG9taW5pcXVlIFN06XBoYW4gKGRvbWluaXF1ZUBtZ2dlbi5jb20pCi0iIExhc3QgQ2hhbmdlOiAgICAgICAgICAyMDA0IEp1bCAxMworIiBMYXN0IENoYW5nZTogICAgICAgICAgMjAwNCBEZWMgMTQKKyIKKyIgVG9kbzoKKyIgIC0gVGhlIHBhcmFtdGVyIFN0cmluZzogaXMgbWF0Y2hlZCBhcyBmbGFnIHN0cmluZyAoYmVjYXVzZSBvZiBjYXNlIGlnbm9yZSkuCisiICAtIFBhc2NhbCBzY3JpcHRpbmcgc3ludGF4IGlzIG5vdCByZWNvZ25pemVkLgorIiAgLSBFbWJlZGRlZCBkb3VibGUgcXVvdGVzIGNvbmZ1c2Ugc3RyaW5nIG1hdGNoZXMuIGUuZy4gImFzZmQiImFzZmEiCiAKICIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCiAiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCkBAIC0xOSwzNiArMjQsMzcgQEAKIHN5biByZWdpb24gaXNzUHJlUHJvYyBzdGFydD0iXlxzKiMiIGVuZD0iJCIKIAogIiBTZWN0aW9uCi1zeW4gcmVnaW9uIGlzc0hlYWRlciAgICAgICAgICAgIHN0YXJ0PSJcWyIgZW5kPSJcXSIKK3N5biByZWdpb24gaXNzU2VjdGlvbglzdGFydD0iXFsiIGVuZD0iXF0iCiAKICIgTGFiZWwgaW4gdGhlIFtTZXR1cF0gU2VjdGlvbgotc3luIG1hdGNoICBpc3NMYWJlbCAgICAgICAgICAgICAiXltePV1cKz0iCitzeW4gbWF0Y2ggIGlzc0RpcmVjdGl2ZQkiXltePV1cKz0iCiAKICIgVVJMCi1zeW4gbWF0Y2ggIGlzc1VSTCAgICAgICAiaHR0cFtzXVw9OlwvXC8uKiQiCitzeW4gbWF0Y2ggIGlzc1VSTAkiaHR0cFtzXVw9OlwvXC8uKiQiCiAKLSIgc3luIG1hdGNoICBpc3NOYW1lICAgICJbXjogXVwrOiIKLXN5biBtYXRjaCAgaXNzTmFtZSAgICAgICJOYW1lOiIKLXN5biBtYXRjaCAgaXNzTmFtZSAgICAgICJNaW5WZXJzaW9uOlx8T25seUJlbG93VmVyc2lvbjpcfExhbmd1YWdlczoiCi1zeW4gbWF0Y2ggIGlzc05hbWUgICAgICAiU291cmNlOlx8RGVzdERpcjpcfERlc3ROYW1lOlx8Q29weU1vZGU6Igotc3luIG1hdGNoICBpc3NOYW1lICAgICAgIkF0dHJpYnM6XHxQZXJtaXNzaW9uczpcfEZvbnRJbnN0YWxsOlx8RmxhZ3M6Igotc3luIG1hdGNoICBpc3NOYW1lICAgICAgIkZpbGVOYW1lOlx8UGFyYW1ldGVyczpcfFdvcmtpbmdEaXI6XHxIb3RLZXk6XHxDb21tZW50OiIKLXN5biBtYXRjaCAgaXNzTmFtZSAgICAgICJJY29uRmlsZW5hbWU6XHxJY29uSW5kZXg6Igotc3luIG1hdGNoICBpc3NOYW1lICAgICAgIlNlY3Rpb246XHxLZXk6XHxTdHJpbmc6Igotc3luIG1hdGNoICBpc3NOYW1lICAgICAgIlJvb3Q6XHxTdWJLZXk6XHxWYWx1ZVR5cGU6XHxWYWx1ZU5hbWU6XHxWYWx1ZURhdGE6Igotc3luIG1hdGNoICBpc3NOYW1lICAgICAgIlJ1bk9uY2VJZDoiCi1zeW4gbWF0Y2ggIGlzc05hbWUgICAgICAiVHlwZToiCi1zeW4gbWF0Y2ggIGlzc05hbWUgICAgICAiQ29tcG9uZW50czpcfERlc2NyaXB0aW9uOlx8R3JvdXBEZXNjcmlwdGlvbjpcfFR5cGVzOlx8RXh0cmFEaXNrU3BhY2VSZXF1aXJlZDoiCi1zeW4gbWF0Y2ggIGlzc05hbWUgICAgICAiU3RhdHVzTXNnOlx8UnVuT25jZUlkOlx8VGFza3M6Igotc3luIG1hdGNoICBpc3NOYW1lICAgICAgIk1lc3NhZ2VzRmlsZTpcfExpY2Vuc2VGaWxlOlx8SW5mb0JlZm9yZUZpbGU6XHxJbmZvQWZ0ZXJGaWxlOiIKKyIgUGFyYW1ldGVycyB1c2VkIGZvciBhbnkgc2VjdGlvbi4KKyIgc3luIG1hdGNoICBpc3NQYXJhbSJbXjogXVwrOiIKK3N5biBtYXRjaCAgaXNzUGFyYW0JIk5hbWU6Igorc3luIG1hdGNoICBpc3NQYXJhbQkiTWluVmVyc2lvbjpcfE9ubHlCZWxvd1ZlcnNpb246XHxMYW5ndWFnZXM6Igorc3luIG1hdGNoICBpc3NQYXJhbQkiU291cmNlOlx8RGVzdERpcjpcfERlc3ROYW1lOlx8Q29weU1vZGU6Igorc3luIG1hdGNoICBpc3NQYXJhbQkiQXR0cmliczpcfFBlcm1pc3Npb25zOlx8Rm9udEluc3RhbGw6XHxGbGFnczoiCitzeW4gbWF0Y2ggIGlzc1BhcmFtCSJGaWxlTmFtZTpcfFBhcmFtZXRlcnM6XHxXb3JraW5nRGlyOlx8SG90S2V5Olx8Q29tbWVudDoiCitzeW4gbWF0Y2ggIGlzc1BhcmFtCSJJY29uRmlsZW5hbWU6XHxJY29uSW5kZXg6Igorc3luIG1hdGNoICBpc3NQYXJhbQkiU2VjdGlvbjpcfEtleTpcfFN0cmluZzoiCitzeW4gbWF0Y2ggIGlzc1BhcmFtCSJSb290Olx8U3ViS2V5Olx8VmFsdWVUeXBlOlx8VmFsdWVOYW1lOlx8VmFsdWVEYXRhOiIKK3N5biBtYXRjaCAgaXNzUGFyYW0JIlJ1bk9uY2VJZDoiCitzeW4gbWF0Y2ggIGlzc1BhcmFtCSJUeXBlOlx8RXhjbHVkZXM6Igorc3luIG1hdGNoICBpc3NQYXJhbQkiQ29tcG9uZW50czpcfERlc2NyaXB0aW9uOlx8R3JvdXBEZXNjcmlwdGlvbjpcfFR5cGVzOlx8RXh0cmFEaXNrU3BhY2VSZXF1aXJlZDoiCitzeW4gbWF0Y2ggIGlzc1BhcmFtCSJTdGF0dXNNc2c6XHxSdW5PbmNlSWQ6XHxUYXNrczoiCitzeW4gbWF0Y2ggIGlzc1BhcmFtCSJNZXNzYWdlc0ZpbGU6XHxMaWNlbnNlRmlsZTpcfEluZm9CZWZvcmVGaWxlOlx8SW5mb0FmdGVyRmlsZToiCiAKLXN5biBtYXRjaCAgaXNzQ29tbWVudCAgICJeOy4qJCIKK3N5biBtYXRjaCAgaXNzQ29tbWVudAkiXlxzKjsuKiQiCiAKICIgZm9sZGVyIGNvbnN0YW50Ci1zeW4gbWF0Y2ggIGlzc0ZvbGRlciAgICAie1tee10qfSIKK3N5biBtYXRjaCAgaXNzRm9sZGVyCSJ7W157XSp9IgogCiAiIHN0cmluZwotc3luIHJlZ2lvbiBpc3NTdHJpbmcgICAgc3RhcnQ9KyIrICBlbmQ9KyIrIGNvbnRhaW5zPWlzc0ZvbGRlcgorc3luIHJlZ2lvbiBpc3NTdHJpbmcJc3RhcnQ9KyIrIGVuZD0rIisgY29udGFpbnM9aXNzRm9sZGVyCiAKICIgW0RpcnNdCiBzeW4ga2V5d29yZCBpc3NEaXJzRmxhZ3MgZGVsZXRlYWZ0ZXJpbnN0YWxsIHVuaW5zYWx3YXlzdW5pbnN0YWxsIHVuaW5zbmV2ZXJ1bmluc3RhbGwKQEAgLTYzLDYgKzY5LDggQEAKIHN5biBrZXl3b3JkIGlzc0ZpbGVzRmxhZ3MgcHJvbXB0aWZvbGRlciByZWN1cnNlc3ViZGlycyByZWdzZXJ2ZXIgcmVndHlwZWxpYiByZXN0YXJ0cmVwbGFjZQogc3luIGtleXdvcmQgaXNzRmlsZXNGbGFncyBzaGFyZWRmaWxlIHNraXBpZnNvdXJjZWRvZXNudGV4aXN0IHNvcnRmaWxlc2J5ZXh0ZW5zaW9uIHRvdWNoIAogc3luIGtleXdvcmQgaXNzRmlsZXNGbGFncyB1bmluc3JlbW92ZXJlYWRvbmx5IHVuaW5zcmVzdGFydGRlbGV0ZSB1bmluc25ldmVydW5pbnN0YWxsCitzeW4ga2V5d29yZCBpc3NGaWxlc0ZsYWdzIHJlcGxhY2VzYW1ldmVyc2lvbiBub2NvbXByZXNzaW9uIG5vZW5jcnlwdGlvbiBub3JlZ2Vycm9yCisKIAogIiBbSWNvbnNdCiBzeW4ga2V5d29yZCBpc3NJY29uc0ZsYWdzIGNsb3Nlb25leGl0IGNyZWF0ZW9ubHlpZmZpbGVleGlzdHMgZG9udGNsb3Nlb25leGl0IApAQCAtMTA4LDMwICsxMTYsMzAgQEAKICAgZW5kaWYKIAogICAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgotICAgSGlMaW5rIGlzc0hlYWRlciAgICAgU3BlY2lhbAotICAgSGlMaW5rIGlzc0NvbW1lbnQgICAgQ29tbWVudAotICAgSGlMaW5rIGlzc0xhYmVsICAgICAgVHlwZQotICAgSGlMaW5rIGlzc05hbWUgICAgICAgVHlwZQotICAgSGlMaW5rIGlzc0ZvbGRlciAgICAgU3BlY2lhbAotICAgSGlMaW5rIGlzc1N0cmluZyAgICAgU3RyaW5nCi0gICBIaUxpbmsgaXNzVmFsdWUgICAgICBTdHJpbmcKLSAgIEhpTGluayBpc3NVUkwgICAgICAgIEluY2x1ZGUKLSAgIEhpTGluayBpc3NQcmVQcm9jICAgIFByZVByb2MgCisgICBIaUxpbmsgaXNzU2VjdGlvbglTcGVjaWFsCisgICBIaUxpbmsgaXNzQ29tbWVudAlDb21tZW50CisgICBIaUxpbmsgaXNzRGlyZWN0aXZlCVR5cGUKKyAgIEhpTGluayBpc3NQYXJhbQlUeXBlCisgICBIaUxpbmsgaXNzRm9sZGVyCVNwZWNpYWwKKyAgIEhpTGluayBpc3NTdHJpbmcJU3RyaW5nCisgICBIaUxpbmsgaXNzVVJMCUluY2x1ZGUKKyAgIEhpTGluayBpc3NQcmVQcm9jCVByZVByb2MgCiAKLSAgIEhpTGluayBpc3NEaXJzRmxhZ3MgICAgICAgICAgS2V5d29yZAotICAgSGlMaW5rIGlzc0ZpbGVzQ29weU1vZGUgICAgICBLZXl3b3JkCi0gICBIaUxpbmsgaXNzRmlsZXNBdHRyaWJzICAgICAgIEtleXdvcmQKLSAgIEhpTGluayBpc3NGaWxlc0ZsYWdzICAgICAgICAgS2V5d29yZAotICAgSGlMaW5rIGlzc0ljb25zRmxhZ3MgICAgICAgICBLZXl3b3JkCi0gICBIaUxpbmsgaXNzSU5JRmxhZ3MgICAgICAgICAgIEtleXdvcmQKLSAgIEhpTGluayBpc3NSZWdSb290S2V5ICAgICAgICAgS2V5d29yZAotICAgSGlMaW5rIGlzc1JlZ1ZhbHVlVHlwZSAgICAgICBLZXl3b3JkCi0gICBIaUxpbmsgaXNzUmVnRmxhZ3MgICAgICAgICAgIEtleXdvcmQKLSAgIEhpTGluayBpc3NSdW5GbGFncyAgICAgICAgICAgS2V5d29yZAotICAgSGlMaW5rIGlzc1R5cGVzRmxhZ3MgICAgICAgICBLZXl3b3JkCi0gICBIaUxpbmsgaXNzQ29tcG9uZW50c0ZsYWdzICAgIEtleXdvcmQKLSAgIEhpTGluayBpc3NJbnN0YWxsRGVsZXRlVHlwZSAgS2V5d29yZAotICAgSGlMaW5rIGlzc1Rhc2tzRmxhZ3MgICAgICAgICBLZXl3b3JkCisgICBIaUxpbmsgaXNzRGlyc0ZsYWdzCQlLZXl3b3JkCisgICBIaUxpbmsgaXNzRmlsZXNDb3B5TW9kZQlLZXl3b3JkCisgICBIaUxpbmsgaXNzRmlsZXNBdHRyaWJzCUtleXdvcmQKKyAgIEhpTGluayBpc3NGaWxlc1Blcm1pc3Npb25zCUtleXdvcmQKKyAgIEhpTGluayBpc3NGaWxlc0ZsYWdzCQlLZXl3b3JkCisgICBIaUxpbmsgaXNzSWNvbnNGbGFncwkJS2V5d29yZAorICAgSGlMaW5rIGlzc0lOSUZsYWdzCQlLZXl3b3JkCisgICBIaUxpbmsgaXNzUmVnUm9vdEtleQkJS2V5d29yZAorICAgSGlMaW5rIGlzc1JlZ1ZhbHVlVHlwZQlLZXl3b3JkCisgICBIaUxpbmsgaXNzUmVnRmxhZ3MJCUtleXdvcmQKKyAgIEhpTGluayBpc3NSdW5GbGFncwkJS2V5d29yZAorICAgSGlMaW5rIGlzc1R5cGVzRmxhZ3MJCUtleXdvcmQKKyAgIEhpTGluayBpc3NDb21wb25lbnRzRmxhZ3MJS2V5d29yZAorICAgSGlMaW5rIGlzc0luc3RhbGxEZWxldGVUeXBlCUtleXdvcmQKKyAgIEhpTGluayBpc3NUYXNrc0ZsYWdzCQlLZXl3b3JkCiAKICAgZGVsY29tbWFuZCBIaUxpbmsKIGVuZGlmCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9uZXRyYy52aW0gYi9ydW50aW1lL3N5bnRheC9uZXRyYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5NDBlYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L25ldHJjLnZpbQpAQCAtMCwwICsxLDU1IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy8KKyIgTGF0ZXN0IFJldmlzaW9uOiAgMjAwNC0xMi0xNgorIiBhcmNoLXRhZzoJICAgIDRmNmVjYjM3LWQxMGMtNGVjYS1hZGQwLTc3OTkxNTU5NDE0YQorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBLZXl3b3Jkcworc3luIGtleXdvcmQgbmV0cmNLZXl3b3JkICAgICAgbWFjaGluZSBwYXNzd29yZCBuZXh0Z3JvdXA9bmV0cmNOYW1lIHNraXB3aGl0ZSBza2lwbmwKK3N5biBrZXl3b3JkIG5ldHJjS2V5d29yZCAgICAgIGxvZ2luIG5leHRncm91cD1uZXRyY05hbWUsbmV0cmNTcGVjaWFsIHNraXB3aGl0ZSBza2lwbmwKK3N5biBrZXl3b3JkIG5ldHJjS2V5d29yZCAgICAgIGRlZmF1bHQKK3N5biBrZXl3b3JkIG5ldHJjS2V5d29yZCAgICAgIG1hY2RlZiBuZXh0Z3JvdXA9bmV0cmNJbml0LG5ldHJjTWFjcm9OYW1lIHNraXB3aGl0ZSBza2lwbmwKK3N5biByZWdpb24gIG5ldHJjTWFjcm8JICAgICAgY29udGFpbmVkIHN0YXJ0PScuJyBlbmQ9J14kJworCisiIE5hbWVzCitzeW4gbWF0Y2ggICBuZXRyY05hbWUJICAgICAgY29udGFpbmVkIGRpc3BsYXkgJ1xTXCsnCitzeW4gbWF0Y2ggICBuZXRyY05hbWUJICAgICAgY29udGFpbmVkIGRpc3BsYXkgJyJbXlxcIl0qXChcXC5bXlxcIl0qXCkqJworc3luIG1hdGNoICAgbmV0cmNNYWNyb05hbWUgICAgY29udGFpbmVkIGRpc3BsYXkgJ1xTXCsnIG5leHRncm91cD1uZXRyY01hY3JvIHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIG5ldHJjTWFjcm9OYW1lICAgIGNvbnRhaW5lZCBkaXNwbGF5ICciW15cXCJdKlwoXFwuW15cXCJdKlwpKicgbmV4dGdyb3VwPW5ldHJjTWFjcm8gc2tpcHdoaXRlIHNraXBubAorCisiIFNwZWNpYWwKK3N5biBrZXl3b3JkIG5ldHJjU3BlY2lhbCAgICAgIGNvbnRhaW5lZCBhbm9ueW1vdXMKK3N5biBtYXRjaCAgIG5ldHJjSW5pdAkgICAgICBjb250YWluZWQgJ1w8aW5pdCQnIG5leHRncm91cD1uZXRyY01hY3JvIHNraXB3aGl0ZSBza2lwbmwKKworc3luIHN5bmMgZnJvbXN0YXJ0CisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX25ldHJjX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX25ldHJjX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIG5ldHJjS2V5d29yZAlLZXl3b3JkCisgIEhpTGluayBuZXRyY01hY3JvCVByZVByb2MKKyAgSGlMaW5rIG5ldHJjTmFtZQlTdHJpbmcKKyAgSGlMaW5rIG5ldHJjTWFjcm9OYW1lCVN0cmluZworICBIaUxpbmsgbmV0cmNTcGVjaWFsCVNwZWNpYWwKKyAgSGlMaW5rIG5ldHJjSW5pdAlTcGVjaWFsCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm5ldHJjIgorCisiIHZpbTogc2V0IHN0cz0yIHN3PTI6CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zdWRvZXJzLnZpbSBiL3J1bnRpbWUvc3ludGF4L3N1ZG9lcnMudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYTc4OTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9zdWRvZXJzLnZpbQpAQCAtMCwwICsxLDI5MCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CSAgICBzdWRvZXJzKDUpIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisiIE1haW50YWluZXI6CSAgICBOaWtvbGFpIFdlaWJ1bGwgPHNvdXJjZUBwY3Bwb3BwZXIub3JnPgorIiBVUkw6CQkgICAgaHR0cDovL3d3dy5wY3Bwb3BwZXIub3JnLworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTEyLTE3CisiIGFyY2gtdGFnOgkgICAgMDJmYzNiYzgtNDMwOC00NjZmLWI4M2UtNzE4YTc0ODdiMTk4CisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFRPRE86IGluc3RlYWQgb2YgJ3NraXBubCcsIHdlIHdvdWxkIGxpa2UgdG8gbWF0Y2ggYSBzcGVjaWZpYyBncm91cCB0aGF0IHdvdWxkCisiIG1hdGNoIFxcJCBhbmQgdGhlbiBjb250aW51ZSB3aXRoIHRoZSBuZXh0Z3JvdXAsIGFjdHVhbGx5LCB0aGUgc2tpcG5sIGRvZXNuJ3QKKyIgd29yay4uLgorIiBUT0RPOiB0cmVhdCAnQUxMJyBsaWtlIGEgc3BlY2lhbCAoeWF5LCBhIGJ1bmRsZSBvZiBuZXcgcnVsZXMhISEpCisKKyIgVXNlciBTcGVjcworc3luIG1hdGNoICAgc3Vkb2Vyc1VzZXJTcGVjICdeJyBuZXh0Z3JvdXA9QHN1ZG9lcnNVc2VySW5TcGVjIHNraXB3aGl0ZQorCitzeW4gbWF0Y2ggICBzdWRvZXJzU3BlY0VxdWFscwkgICAgICBjb250YWluZWQgJz0nIG5leHRncm91cD1Ac3Vkb2Vyc0NtbmRTcGVjTGlzdCBza2lwd2hpdGUKKworc3luIGNsdXN0ZXIgc3Vkb2Vyc0NtbmRTcGVjTGlzdAkgICAgICBjb250YWlucz1zdWRvZXJzVXNlclJ1bmFzQmVnaW4sc3Vkb2Vyc1BBU1NXRCxAc3Vkb2Vyc0NtbmRJblNwZWMKKworIiBUb2RvCitzeW4ga2V5d29yZCBzdWRvZXJzVG9kbwkJICAgICAgY29udGFpbmVkIFRPRE8gRklYTUUgWFhYIE5PVEUKKworIiBDb21tZW50cworc3luIHJlZ2lvbiAgc3Vkb2Vyc0NvbW1lbnQJICAgICAgbWF0Y2hncm91cD1zdWRvZXJzQ29tbWVudCBzdGFydD0nIycgZW5kPSckJyBjb250YWlucz1zdWRvZXJzVG9kbworCisiIEFsaWFzZXMKK3N5biBrZXl3b3JkIHN1ZG9lcnNBbGlhcwkgICAgICBVc2VyX0FsaWFzIFJ1bmFzX0FsaWFzIG5leHRncm91cD1zdWRvZXJzVXNlckFsaWFzIHNraXB3aGl0ZSBza2lwbmwKK3N5biBrZXl3b3JkIHN1ZG9lcnNBbGlhcwkgICAgICBIb3N0X0FsaWFzIG5leHRncm91cD1zdWRvZXJzSG9zdEFsaWFzIHNraXB3aGl0ZSBza2lwbmwKK3N5biBrZXl3b3JkIHN1ZG9lcnNBbGlhcwkgICAgICBDbW5kX0FsaWFzIG5leHRncm91cD1zdWRvZXJzQ21uZEFsaWFzIHNraXB3aGl0ZSBza2lwbmwKKworIiBOYW1lcworc3luIG1hdGNoICAgc3Vkb2Vyc1VzZXJBbGlhcwkgICAgICBjb250YWluZWQgJ1w8XHVbQS1aMC05X10qXD4nICBuZXh0Z3JvdXA9c3Vkb2Vyc1VzZXJBbGlhc0VxdWFscyAgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc1VzZXJOYW1lSW5MaXN0ICAgICBjb250YWluZWQgJ1w8XGxcK1w+JwkgICAgbmV4dGdyb3VwPUBzdWRvZXJzVXNlckxpc3QJICAgICAgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc1VJREluTGlzdAkgICAgICBjb250YWluZWQgJyNcZFwrXD4nCSAgICBuZXh0Z3JvdXA9QHN1ZG9lcnNVc2VyTGlzdAkgICAgICBza2lwd2hpdGUgc2tpcG5sCitzeW4gbWF0Y2ggICBzdWRvZXJzR3JvdXBJbkxpc3QJICAgICAgY29udGFpbmVkICclXGxcK1w+JwkgICAgbmV4dGdyb3VwPUBzdWRvZXJzVXNlckxpc3QJICAgICAgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc1VzZXJOZXRncm91cEluTGlzdCBjb250YWluZWQgJytcbFwrXD4nCSAgICBuZXh0Z3JvdXA9QHN1ZG9lcnNVc2VyTGlzdAkgICAgICBza2lwd2hpdGUgc2tpcG5sCitzeW4gbWF0Y2ggICBzdWRvZXJzVXNlckFsaWFzSW5MaXN0ICAgIGNvbnRhaW5lZCAnXDxcdVtBLVowLTlfXSpcPicgIG5leHRncm91cD1Ac3Vkb2Vyc1VzZXJMaXN0CSAgICAgIHNraXB3aGl0ZSBza2lwbmwKKworc3luIG1hdGNoICAgc3Vkb2Vyc1VzZXJOYW1lCSAgICAgIGNvbnRhaW5lZCAnXDxcbFwrXD4nCSAgICBuZXh0Z3JvdXA9QHN1ZG9lcnNQYXJhbWV0ZXIJICAgICAgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc1VJRAkJICAgICAgY29udGFpbmVkICcjXGRcK1w+JwkgICAgbmV4dGdyb3VwPUBzdWRvZXJzUGFyYW1ldGVyCSAgICAgIHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIHN1ZG9lcnNHcm91cAkgICAgICBjb250YWluZWQgJyVcbFwrXD4nCSAgICBuZXh0Z3JvdXA9QHN1ZG9lcnNQYXJhbWV0ZXIJICAgICAgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc1VzZXJOZXRncm91cAkgICAgICBjb250YWluZWQgJytcbFwrXD4nCSAgICBuZXh0Z3JvdXA9QHN1ZG9lcnNQYXJhbWV0ZXIJICAgICAgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc1VzZXJBbGlhc1JlZgkgICAgICBjb250YWluZWQgJ1w8XHVbQS1aMC05X10qXD4nICBuZXh0Z3JvdXA9QHN1ZG9lcnNQYXJhbWV0ZXIJICAgICAgc2tpcHdoaXRlIHNraXBubAorCitzeW4gbWF0Y2ggICBzdWRvZXJzVXNlck5hbWVJblNwZWMgICAgIGNvbnRhaW5lZCAnXDxcbFwrXD4nCSAgICBuZXh0Z3JvdXA9QHN1ZG9lcnNVc2VyU3BlYwkgICAgICBza2lwd2hpdGUgc2tpcG5sCitzeW4gbWF0Y2ggICBzdWRvZXJzVUlESW5TcGVjCSAgICAgIGNvbnRhaW5lZCAnI1xkXCtcPicJICAgIG5leHRncm91cD1Ac3Vkb2Vyc1VzZXJTcGVjCSAgICAgIHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIHN1ZG9lcnNHcm91cEluU3BlYwkgICAgICBjb250YWluZWQgJyVcbFwrXD4nCSAgICBuZXh0Z3JvdXA9QHN1ZG9lcnNVc2VyU3BlYwkgICAgICBza2lwd2hpdGUgc2tpcG5sCitzeW4gbWF0Y2ggICBzdWRvZXJzVXNlck5ldGdyb3VwSW5TcGVjIGNvbnRhaW5lZCAnK1xsXCtcPicJICAgIG5leHRncm91cD1Ac3Vkb2Vyc1VzZXJTcGVjCSAgICAgIHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIHN1ZG9lcnNVc2VyQWxpYXNJblNwZWMgICAgY29udGFpbmVkICdcPFx1W0EtWjAtOV9dKlw+JyAgbmV4dGdyb3VwPUBzdWRvZXJzVXNlclNwZWMJICAgICAgc2tpcHdoaXRlIHNraXBubAorCitzeW4gbWF0Y2ggICBzdWRvZXJzVXNlck5hbWVJblJ1bmFzICAgIGNvbnRhaW5lZCAnXDxcbFwrXD4nCSAgICBuZXh0Z3JvdXA9QHN1ZG9lcnNVc2VyUnVuYXMJICAgICAgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc1VJREluUnVuYXMJICAgICAgY29udGFpbmVkICcjXGRcK1w+JwkgICAgbmV4dGdyb3VwPUBzdWRvZXJzVXNlclJ1bmFzCSAgICAgIHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIHN1ZG9lcnNHcm91cEluUnVuYXMJICAgICAgY29udGFpbmVkICclXGxcK1w+JwkgICAgbmV4dGdyb3VwPUBzdWRvZXJzVXNlclJ1bmFzCSAgICAgIHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIHN1ZG9lcnNVc2VyTmV0Z3JvdXBJblJ1bmFzIGNvbnRhaW5lZCAnK1xsXCtcPicJICAgIG5leHRncm91cD1Ac3Vkb2Vyc1VzZXJSdW5hcwkgICAgICBza2lwd2hpdGUgc2tpcG5sCitzeW4gbWF0Y2ggICBzdWRvZXJzVXNlckFsaWFzSW5SdW5hcyAgIGNvbnRhaW5lZCAnXDxcdVtBLVowLTlfXSpcPicgIG5leHRncm91cD1Ac3Vkb2Vyc1VzZXJSdW5hcwkgICAgICBza2lwd2hpdGUgc2tpcG5sCisKK3N5biBtYXRjaCAgIHN1ZG9lcnNIb3N0QWxpYXMJICAgICAgY29udGFpbmVkICdcPFx1W0EtWjAtOV9dKlw+JyAgbmV4dGdyb3VwPXN1ZG9lcnNIb3N0QWxpYXNFcXVhbHMgIHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIHN1ZG9lcnNIb3N0TmFtZUluTGlzdCAgICAgY29udGFpbmVkICdcPFxsXCtcPicJICAgIG5leHRncm91cD1Ac3Vkb2Vyc0hvc3RMaXN0CSAgICAgIHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIHN1ZG9lcnNJUEFkZHJJbkxpc3QJICAgICAgY29udGFpbmVkICdcJShcZFx7MSwzfVwuXClcezN9XGRcezEsM30nIG5leHRncm91cD1Ac3Vkb2Vyc0hvc3RMaXN0IHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIHN1ZG9lcnNOZXR3b3JrSW5MaXN0ICAgICAgY29udGFpbmVkICdcJShcZFx7MSwzfVwuXClcezN9XGRcezEsM31cJSgvXCUoXCUoXGRcezEsM31cLlwpXHszfVxkXHsxLDN9XHxcZFwrXClcKVw9JyBuZXh0Z3JvdXA9QHN1ZG9lcnNIb3N0TGlzdCBza2lwd2hpdGUgc2tpcG5sCitzeW4gbWF0Y2ggICBzdWRvZXJzSG9zdE5ldGdyb3VwSW5MaXN0IGNvbnRhaW5lZCAnK1xsXCtcPicJICAgIG5leHRncm91cD1Ac3Vkb2Vyc0hvc3RMaXN0CSAgICAgIHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIHN1ZG9lcnNIb3N0QWxpYXNJbkxpc3QgICAgY29udGFpbmVkICdcPFx1W0EtWjAtOV9dKlw+JyAgbmV4dGdyb3VwPUBzdWRvZXJzSG9zdExpc3QJICAgICAgc2tpcHdoaXRlIHNraXBubAorCitzeW4gbWF0Y2ggICBzdWRvZXJzSG9zdE5hbWUJICAgICAgY29udGFpbmVkICdcPFxsXCtcPicJICAgIG5leHRncm91cD1Ac3Vkb2Vyc1BhcmFtZXRlcgkgICAgICBza2lwd2hpdGUgc2tpcG5sCitzeW4gbWF0Y2ggICBzdWRvZXJzSVBBZGRyCSAgICAgIGNvbnRhaW5lZCAnXCUoXGRcezEsM31cLlwpXHszfVxkXHsxLDN9JyBuZXh0Z3JvdXA9QHN1ZG9lcnNQYXJhbWV0ZXIgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc05ldHdvcmsJICAgICAgY29udGFpbmVkICdcJShcZFx7MSwzfVwuXClcezN9XGRcezEsM31cJSgvXCUoXCUoXGRcezEsM31cLlwpXHszfVxkXHsxLDN9XHxcZFwrXClcKVw9JyBuZXh0Z3JvdXA9QHN1ZG9lcnNQYXJhbWV0ZXIgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc0hvc3ROZXRncm91cAkgICAgICBjb250YWluZWQgJytcbFwrXD4nCSAgICBuZXh0Z3JvdXA9QHN1ZG9lcnNQYXJhbWV0ZXIJICAgICAgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc0hvc3RBbGlhc1JlZgkgICAgICBjb250YWluZWQgJ1w8XHVbQS1aMC05X10qXD4nICBuZXh0Z3JvdXA9QHN1ZG9lcnNQYXJhbWV0ZXIJICAgICAgc2tpcHdoaXRlIHNraXBubAorCitzeW4gbWF0Y2ggICBzdWRvZXJzSG9zdE5hbWVJblNwZWMgICAgIGNvbnRhaW5lZCAnXDxcbFwrXD4nCSAgICBuZXh0Z3JvdXA9QHN1ZG9lcnNIb3N0U3BlYwkgICAgICBza2lwd2hpdGUgc2tpcG5sCitzeW4gbWF0Y2ggICBzdWRvZXJzSVBBZGRySW5TcGVjCSAgICAgIGNvbnRhaW5lZCAnXCUoXGRcezEsM31cLlwpXHszfVxkXHsxLDN9JyBuZXh0Z3JvdXA9QHN1ZG9lcnNIb3N0U3BlYyBza2lwd2hpdGUgc2tpcG5sCitzeW4gbWF0Y2ggICBzdWRvZXJzTmV0d29ya0luU3BlYyAgICAgIGNvbnRhaW5lZCAnXCUoXGRcezEsM31cLlwpXHszfVxkXHsxLDN9XCUoL1wlKFwlKFxkXHsxLDN9XC5cKVx7M31cZFx7MSwzfVx8XGRcK1wpXClcPScgbmV4dGdyb3VwPUBzdWRvZXJzSG9zdFNwZWMgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc0hvc3ROZXRncm91cEluU3BlYyBjb250YWluZWQgJytcbFwrXD4nCSAgICBuZXh0Z3JvdXA9QHN1ZG9lcnNIb3N0U3BlYwkgICAgICBza2lwd2hpdGUgc2tpcG5sCitzeW4gbWF0Y2ggICBzdWRvZXJzSG9zdEFsaWFzSW5TcGVjICAgIGNvbnRhaW5lZCAnXDxcdVtBLVowLTlfXSpcPicgIG5leHRncm91cD1Ac3Vkb2Vyc0hvc3RTcGVjCSAgICAgIHNraXB3aGl0ZSBza2lwbmwKKworc3luIG1hdGNoICAgc3Vkb2Vyc0NtbmRBbGlhcwkgICAgICBjb250YWluZWQgJ1w8XHVbQS1aMC05X10qXD4nICBuZXh0Z3JvdXA9c3Vkb2Vyc0NtbmRBbGlhc0VxdWFscyAgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc0NtbmROYW1lSW5MaXN0ICAgICBjb250YWluZWQgJ1teWzpzcGFjZTpdLDo9XFxdXCtcJShcXFtbOnNwYWNlOl0sOj1cXF1bXls6c3BhY2U6XSw6PVxcXSpcKSonIG5leHRncm91cD1Ac3Vkb2Vyc0NtbmRMaXN0LHN1ZG9lcnNDb21tYW5kRW1wdHksc3Vkb2Vyc0NvbW1hbmRBcmdzIHNraXB3aGl0ZQorc3luIG1hdGNoICAgc3Vkb2Vyc0NtbmRBbGlhc0luTGlzdCAgICBjb250YWluZWQgJ1w8XHVbQS1aMC05X10qXD4nICBuZXh0Z3JvdXA9QHN1ZG9lcnNDbW5kTGlzdAkgICAgICBza2lwd2hpdGUgc2tpcG5sCisKK3N5biBtYXRjaCAgIHN1ZG9lcnNDbW5kTmFtZUluU3BlYyAgICAgY29udGFpbmVkICdbXls6c3BhY2U6XSw6PVxcXVwrXCUoXFxbWzpzcGFjZTpdLDo9XFxdW15bOnNwYWNlOl0sOj1cXF0qXCkqJyBuZXh0Z3JvdXA9QHN1ZG9lcnNDbW5kU3BlYyxzdWRvZXJzQ29tbWFuZEVtcHR5SW5TcGVjLHN1ZG9lcnNDb21tYW5kQXJnc0luU3BlYyBza2lwd2hpdGUKK3N5biBtYXRjaCAgIHN1ZG9lcnNDbW5kQWxpYXNJblNwZWMgICAgY29udGFpbmVkICdcPFx1W0EtWjAtOV9dKlw+JyAgbmV4dGdyb3VwPUBzdWRvZXJzQ21uZFNwZWMJICAgICAgc2tpcHdoaXRlIHNraXBubAorCisiIERlbGltaXRlcnMKK3N5biBtYXRjaCAgIHN1ZG9lcnNVc2VyQWxpYXNFcXVhbHMgIGNvbnRhaW5lZCAnPScgbmV4dGdyb3VwPUBzdWRvZXJzVXNlckluTGlzdAlza2lwd2hpdGUgc2tpcG5sCitzeW4gbWF0Y2ggICBzdWRvZXJzVXNlckxpc3RDb21tYSAgICBjb250YWluZWQgJywnIG5leHRncm91cD1Ac3Vkb2Vyc1VzZXJJbkxpc3QJc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc1VzZXJMaXN0Q29sb24gICAgY29udGFpbmVkICc6JyBuZXh0Z3JvdXA9c3Vkb2Vyc1VzZXJBbGlhcwlza2lwd2hpdGUgc2tpcG5sCitzeW4gY2x1c3RlciBzdWRvZXJzVXNlckxpc3QJICAgIGNvbnRhaW5zPXN1ZG9lcnNVc2VyTGlzdENvbW1hLHN1ZG9lcnNVc2VyTGlzdENvbG9uCisKK3N5biBtYXRjaCAgIHN1ZG9lcnNVc2VyU3BlY0NvbW1hICAgIGNvbnRhaW5lZCAnLCcgbmV4dGdyb3VwPUBzdWRvZXJzVXNlckluU3BlYwlza2lwd2hpdGUgc2tpcG5sCitzeW4gY2x1c3RlciBzdWRvZXJzVXNlclNwZWMJICAgIGNvbnRhaW5zPXN1ZG9lcnNVc2VyU3BlY0NvbW1hLEBzdWRvZXJzSG9zdEluU3BlYworCitzeW4gbWF0Y2ggICBzdWRvZXJzVXNlclJ1bmFzQmVnaW4gICBjb250YWluZWQgJygnIG5leHRncm91cD1Ac3Vkb2Vyc1VzZXJJblJ1bmFzIHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIHN1ZG9lcnNVc2VyUnVuYXNDb21tYSAgIGNvbnRhaW5lZCAnLCcgbmV4dGdyb3VwPUBzdWRvZXJzVXNlckluUnVuYXMJc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc1VzZXJSdW5hc0VuZAkgICAgY29udGFpbmVkICcpJyBuZXh0Z3JvdXA9c3Vkb2Vyc1BBU1NXRCxAc3Vkb2Vyc0NtbmRJblNwZWMgc2tpcHdoaXRlIHNraXBubAorc3luIGNsdXN0ZXIgc3Vkb2Vyc1VzZXJSdW5hcwkgICAgY29udGFpbnM9c3Vkb2Vyc1VzZXJSdW5hc0NvbW1hLEBzdWRvZXJzVXNlckluUnVuYXMsc3Vkb2Vyc1VzZXJSdW5hc0VuZAorCisKK3N5biBtYXRjaCAgIHN1ZG9lcnNIb3N0QWxpYXNFcXVhbHMgIGNvbnRhaW5lZCAnPScgbmV4dGdyb3VwPUBzdWRvZXJzSG9zdEluTGlzdAlza2lwd2hpdGUgc2tpcG5sCitzeW4gbWF0Y2ggICBzdWRvZXJzSG9zdExpc3RDb21tYSAgICBjb250YWluZWQgJywnIG5leHRncm91cD1Ac3Vkb2Vyc0hvc3RJbkxpc3QJc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc0hvc3RMaXN0Q29sb24gICAgY29udGFpbmVkICc6JyBuZXh0Z3JvdXA9c3Vkb2Vyc0hvc3RBbGlhcwlza2lwd2hpdGUgc2tpcG5sCitzeW4gY2x1c3RlciBzdWRvZXJzSG9zdExpc3QJICAgIGNvbnRhaW5zPXN1ZG9lcnNIb3N0TGlzdENvbW1hLHN1ZG9lcnNIb3N0TGlzdENvbG9uCisKK3N5biBtYXRjaCAgIHN1ZG9lcnNIb3N0U3BlY0NvbW1hICAgIGNvbnRhaW5lZCAnLCcgbmV4dGdyb3VwPUBzdWRvZXJzSG9zdEluU3BlYwlza2lwd2hpdGUgc2tpcG5sCitzeW4gY2x1c3RlciBzdWRvZXJzSG9zdFNwZWMJICAgIGNvbnRhaW5zPXN1ZG9lcnNIb3N0U3BlY0NvbW1hLHN1ZG9lcnNTcGVjRXF1YWxzCisKKworc3luIG1hdGNoICAgc3Vkb2Vyc0NtbmRBbGlhc0VxdWFscyAgY29udGFpbmVkICc9JyBuZXh0Z3JvdXA9QHN1ZG9lcnNDbW5kSW5MaXN0CXNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIHN1ZG9lcnNDbW5kTGlzdENvbW1hICAgIGNvbnRhaW5lZCAnLCcgbmV4dGdyb3VwPUBzdWRvZXJzQ21uZEluTGlzdAlza2lwd2hpdGUgc2tpcG5sCitzeW4gbWF0Y2ggICBzdWRvZXJzQ21uZExpc3RDb2xvbiAgICBjb250YWluZWQgJzonIG5leHRncm91cD1zdWRvZXJzQ21uZEFsaWFzCXNraXB3aGl0ZSBza2lwbmwKK3N5biBjbHVzdGVyIHN1ZG9lcnNDbW5kTGlzdAkgICAgY29udGFpbnM9c3Vkb2Vyc0NtbmRMaXN0Q29tbWEsc3Vkb2Vyc0NtbmRMaXN0Q29sb24KKworc3luIG1hdGNoICAgc3Vkb2Vyc0NtbmRTcGVjQ29tbWEgICAgY29udGFpbmVkICcsJyBuZXh0Z3JvdXA9QHN1ZG9lcnNDbW5kU3BlY0xpc3Qgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc0NtbmRTcGVjQ29sb24gICAgY29udGFpbmVkICc6JyBuZXh0Z3JvdXA9QHN1ZG9lcnNVc2VySW5TcGVjCXNraXB3aGl0ZSBza2lwbmwKK3N5biBjbHVzdGVyIHN1ZG9lcnNDbW5kU3BlYwkgICAgY29udGFpbnM9c3Vkb2Vyc0NtbmRTcGVjQ29tbWEsc3Vkb2Vyc0NtbmRTcGVjQ29sb24KKworIiBMaXN0cworc3luIGNsdXN0ZXIgc3Vkb2Vyc1VzZXJJbkxpc3QJICAgIGNvbnRhaW5zPXN1ZG9lcnNVc2VyTmVnYXRpb25Jbkxpc3Qsc3Vkb2Vyc1VzZXJOYW1lSW5MaXN0LHN1ZG9lcnNVSURJbkxpc3Qsc3Vkb2Vyc0dyb3VwSW5MaXN0LHN1ZG9lcnNVc2VyTmV0Z3JvdXBJbkxpc3Qsc3Vkb2Vyc1VzZXJBbGlhc0luTGlzdAorc3luIGNsdXN0ZXIgc3Vkb2Vyc0hvc3RJbkxpc3QJICAgIGNvbnRhaW5zPXN1ZG9lcnNIb3N0TmVnYXRpb25Jbkxpc3Qsc3Vkb2Vyc0hvc3ROYW1lSW5MaXN0LHN1ZG9lcnNJUEFkZHJJbkxpc3Qsc3Vkb2Vyc05ldHdvcmtJbkxpc3Qsc3Vkb2Vyc0hvc3ROZXRncm91cEluTGlzdCxzdWRvZXJzSG9zdEFsaWFzSW5MaXN0CitzeW4gY2x1c3RlciBzdWRvZXJzQ21uZEluTGlzdAkgICAgY29udGFpbnM9c3Vkb2Vyc0NtbmROZWdhdGlvbkluTGlzdCxzdWRvZXJzQ21uZE5hbWVJbkxpc3Qsc3Vkb2Vyc0NtbmRBbGlhc0luTGlzdAorCitzeW4gY2x1c3RlciBzdWRvZXJzVXNlcgkJICAgIGNvbnRhaW5zPXN1ZG9lcnNVc2VyTmVnYXRpb24sc3Vkb2Vyc1VzZXJOYW1lLHN1ZG9lcnNVSUQsc3Vkb2Vyc0dyb3VwLHN1ZG9lcnNVc2VyTmV0Z3JvdXAsc3Vkb2Vyc1VzZXJBbGlhc1JlZgorc3luIGNsdXN0ZXIgc3Vkb2Vyc0hvc3QJCSAgICBjb250YWlucz1zdWRvZXJzSG9zdE5lZ2F0aW9uLHN1ZG9lcnNIb3N0TmFtZSxzdWRvZXJzSVBBZGRyLHN1ZG9lcnNOZXR3b3JrLHN1ZG9lcnNIb3N0TmV0Z3JvdXAsc3Vkb2Vyc0hvc3RBbGlhc1JlZgorCitzeW4gY2x1c3RlciBzdWRvZXJzVXNlckluU3BlYwkgICAgY29udGFpbnM9c3Vkb2Vyc1VzZXJOZWdhdGlvbkluU3BlYyxzdWRvZXJzVXNlck5hbWVJblNwZWMsc3Vkb2Vyc1VJREluU3BlYyxzdWRvZXJzR3JvdXBJblNwZWMsc3Vkb2Vyc1VzZXJOZXRncm91cEluU3BlYyxzdWRvZXJzVXNlckFsaWFzSW5TcGVjCitzeW4gY2x1c3RlciBzdWRvZXJzSG9zdEluU3BlYwkgICAgY29udGFpbnM9c3Vkb2Vyc0hvc3ROZWdhdGlvbkluU3BlYyxzdWRvZXJzSG9zdE5hbWVJblNwZWMsc3Vkb2Vyc0lQQWRkckluU3BlYyxzdWRvZXJzTmV0d29ya0luU3BlYyxzdWRvZXJzSG9zdE5ldGdyb3VwSW5TcGVjLHN1ZG9lcnNIb3N0QWxpYXNJblNwZWMKK3N5biBjbHVzdGVyIHN1ZG9lcnNVc2VySW5SdW5hcwkgICAgY29udGFpbnM9c3Vkb2Vyc1VzZXJOZWdhdGlvbkluUnVuYXMsc3Vkb2Vyc1VzZXJOYW1lSW5SdW5hcyxzdWRvZXJzVUlESW5SdW5hcyxzdWRvZXJzR3JvdXBJblJ1bmFzLHN1ZG9lcnNVc2VyTmV0Z3JvdXBJblJ1bmFzLHN1ZG9lcnNVc2VyQWxpYXNJblJ1bmFzCitzeW4gY2x1c3RlciBzdWRvZXJzQ21uZEluU3BlYwkgICAgY29udGFpbnM9c3Vkb2Vyc0NtbmROZWdhdGlvbkluU3BlYyxzdWRvZXJzQ21uZE5hbWVJblNwZWMsc3Vkb2Vyc0NtbmRBbGlhc0luU3BlYworCisiIE9wZXJhdG9ycworc3luIG1hdGNoICAgc3Vkb2Vyc1VzZXJOZWdhdGlvbkluTGlzdCBjb250YWluZWQgJyFcKycgbmV4dGdyb3VwPUBzdWRvZXJzVXNlckluTGlzdCAgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc0hvc3ROZWdhdGlvbkluTGlzdCBjb250YWluZWQgJyFcKycgbmV4dGdyb3VwPUBzdWRvZXJzSG9zdEluTGlzdCAgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc0NtbmROZWdhdGlvbkluTGlzdCBjb250YWluZWQgJyFcKycgbmV4dGdyb3VwPUBzdWRvZXJzQ21uZEluTGlzdCAgc2tpcHdoaXRlIHNraXBubAorCitzeW4gbWF0Y2ggICBzdWRvZXJzVXNlck5lZ2F0aW9uCSAgICAgIGNvbnRhaW5lZCAnIVwrJyBuZXh0Z3JvdXA9QHN1ZG9lcnNVc2VyCSAgICBza2lwd2hpdGUgc2tpcG5sCitzeW4gbWF0Y2ggICBzdWRvZXJzSG9zdE5lZ2F0aW9uCSAgICAgIGNvbnRhaW5lZCAnIVwrJyBuZXh0Z3JvdXA9QHN1ZG9lcnNIb3N0CSAgICBza2lwd2hpdGUgc2tpcG5sCisKK3N5biBtYXRjaCAgIHN1ZG9lcnNVc2VyTmVnYXRpb25JblNwZWMgY29udGFpbmVkICchXCsnIG5leHRncm91cD1Ac3Vkb2Vyc1VzZXJJblNwZWMgIHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIHN1ZG9lcnNIb3N0TmVnYXRpb25JblNwZWMgY29udGFpbmVkICchXCsnIG5leHRncm91cD1Ac3Vkb2Vyc0hvc3RJblNwZWMgIHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIHN1ZG9lcnNVc2VyTmVnYXRpb25JblJ1bmFzIGNvbnRhaW5lZCAnIVwrJyBuZXh0Z3JvdXA9QHN1ZG9lcnNVc2VySW5SdW5hcyBza2lwd2hpdGUgc2tpcG5sCitzeW4gbWF0Y2ggICBzdWRvZXJzQ21uZE5lZ2F0aW9uSW5TcGVjIGNvbnRhaW5lZCAnIVwrJyBuZXh0Z3JvdXA9QHN1ZG9lcnNDbW5kSW5TcGVjICBza2lwd2hpdGUgc2tpcG5sCisKKyIgQXJndW1lbnRzCitzeW4gbWF0Y2ggICBzdWRvZXJzQ29tbWFuZEFyZ3MJICAgIGNvbnRhaW5lZCAnW15bOnNwYWNlOl0sOj1cXF1cK1wlKFxcW1s6c3BhY2U6XSw6PVxcXVteWzpzcGFjZTpdLDo9XFxdKlwpKicgbmV4dGdyb3VwPXN1ZG9lcnNDb21tYW5kQXJncyxAc3Vkb2Vyc0NtbmRMaXN0IHNraXB3aGl0ZQorc3luIG1hdGNoICAgc3Vkb2Vyc0NvbW1hbmRFbXB0eQkgICAgY29udGFpbmVkICciIicgbmV4dGdyb3VwPUBzdWRvZXJzQ21uZExpc3Qgc2tpcHdoaXRlIHNraXBubAorCitzeW4gbWF0Y2ggICBzdWRvZXJzQ29tbWFuZEFyZ3NJblNwZWMgY29udGFpbmVkICdbXls6c3BhY2U6XSw6PVxcXVwrXCUoXFxbWzpzcGFjZTpdLDo9XFxdW15bOnNwYWNlOl0sOj1cXF0qXCkqJyBuZXh0Z3JvdXA9c3Vkb2Vyc0NvbW1hbmRBcmdzSW5TcGVjLEBzdWRvZXJzQ21uZFNwZWMgc2tpcHdoaXRlCitzeW4gbWF0Y2ggICBzdWRvZXJzQ29tbWFuZEVtcHR5SW5TcGVjIGNvbnRhaW5lZCAnIiInIG5leHRncm91cD1Ac3Vkb2Vyc0NtbmRTcGVjIHNraXB3aGl0ZSBza2lwbmwKKworIiBEZWZhdWx0IEVudHJpZXMKK3N5biBrZXl3b3JkIHN1ZG9lcnNEZWZhdWx0RW50cnkJRGVmYXVsdHMgbmV4dGdyb3VwPXN1ZG9lcnNEZWZhdWx0VHlwZUF0LHN1ZG9lcnNEZWZhdWx0VHlwZUNvbG9uLHN1ZG9lcnNEZWZhdWx0VHlwZUdyZWF0ZXJUaGFuLEBzdWRvZXJzUGFyYW1ldGVyIHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIHN1ZG9lcnNEZWZhdWx0VHlwZUF0CSAgY29udGFpbmVkICdAJyBuZXh0Z3JvdXA9QHN1ZG9lcnNIb3N0IHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIHN1ZG9lcnNEZWZhdWx0VHlwZUNvbG9uCSAgY29udGFpbmVkICc6JyBuZXh0Z3JvdXA9QHN1ZG9lcnNVc2VyIHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgIHN1ZG9lcnNEZWZhdWx0VHlwZUdyZWF0ZXJUaGFuIGNvbnRhaW5lZCAnPicgbmV4dGdyb3VwPUBzdWRvZXJzVXNlciBza2lwd2hpdGUgc2tpcG5sCisKKyIgVE9ETzogY291bGQgYWxzbyBkZWFsIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIGhlcmUKK3N5biBrZXl3b3JkIHN1ZG9lcnNCb29sZWFuUGFyYW1ldGVyIGNvbnRhaW5lZCBsb25nX29wdF9wcm9tcHQgaWdub3JlX2RvdCBtYWlsX2Fsd2F5cyBtYWlsX2JhZHBhc3MgbWFpbF9ub191c2VyIG1haWxfbm9fcGVybXMgdHR5X3RpY2tldHMgbGVjdHVyZSBhdXRoZW50aWNhdGUgcm9vdF9zdWRvIGxvZ19ob3N0IGxvZ195ZWFyIHNoZWxsX25vYXJncyBzZXRfaG9tZSBhbHdheXNfc2V0X2hvbWUgcGF0aF9pbmZvIHByZXNlcnZlX2dyb3VwcyBmcWRuIGluc3VsdHMgcmVxdWlyZXR0eSBlbnZfZWRpdG9yIHJvb3RwdyBydW5hc3B3IHRhcmdldHB3IHNldF9sb2duYW1lIHN0YXlfc2V0dWlkIGVudl9yZXNldCB1c2VfbG9naW5jbGFzcyBuZXh0Z3JvdXA9c3Vkb2Vyc1BhcmFtZXRlckxpc3RDb21tYSBza2lwd2hpdGUgc2tpcG5sCitzeW4ga2V5d29yZCBzdWRvZXJzSW50ZWdlclBhcmFtZXRlciBjb250YWluZWQgcGFzc3dkX3RyaWVzIGxvZ2xpbmVsZW4gdGltZXN0YW1wX3RpbWVvdXQgcGFzc3dkX3RpbWVvdXQgdW1hc2sgbmV4dGdyb3VwPXN1ZG9lcnNJbnRlZ2VyUGFyYW1ldGVyRXF1YWxzIHNraXB3aGl0ZSBza2lwbmwKK3N5biBrZXl3b3JkIHN1ZG9lcnNTdHJpbmdQYXJhbWV0ZXIgIGNvbnRhaW5lZCBtYWlsc3ViIGJhZHBhc3NfbWVzc2FnZSB0aW1lc3RhbXBkaXIgdGltZXN0YW1wb3duZXIgcGFzc3Byb21wdCBydW5hc19kZWZhdWx0IHN5c2xvZ19nb29kcHJpIHN5c2xvZ19iYWRwcmkgZWRpdG9yIGxvZ2ZpbGUgc3lzbG9nIG1haWxlcnBhdGggbWFpbGVyZmxhZ3MgbWFpbHRvIGV4ZW1wdF9ncm91cCB2ZXJpZnlwdyBsaXN0cHcgbmV4dGdyb3VwPXN1ZG9lcnNTdHJpbmdQYXJhbWV0ZXJFcXVhbHMgc2tpcHdoaXRlIHNraXBubAorc3luIGtleXdvcmQgc3Vkb2Vyc0xpc3RQYXJhbWV0ZXIgICAgY29udGFpbmVkIGVudl9jaGVjayBlbnZfZGVsZXRlIGVudl9rZWVwIG5leHRncm91cD1zdWRvZXJzTGlzdFBhcmFtZXRlckVxdWFscyBza2lwd2hpdGUgc2tpcG5sCisKK3N5biBtYXRjaCAgIHN1ZG9lcnNQYXJhbWV0ZXJMaXN0Q29tbWEgY29udGFpbmVkICcsJyBuZXh0Z3JvdXA9QHN1ZG9lcnNQYXJhbWV0ZXIgc2tpcHdoaXRlIHNraXBubAorCitzeW4gY2x1c3RlciBzdWRvZXJzUGFyYW1ldGVyCSAgICBjb250YWlucz1zdWRvZXJzQm9vbGVhblBhcmFtZXRlcixzdWRvZXJzSW50ZWdlclBhcmFtZXRlckVxdWFscyxzdWRvZXJzU3RyaW5nUGFyYW1ldGVyLHN1ZG9lcnNMaXN0UGFyYW1ldGVyCisKK3N5biBtYXRjaCAgIHN1ZG9lcnNJbnRlZ2VyUGFyYW1ldGVyRXF1YWxzIGNvbnRhaW5lZCAnWystXVw9PScgbmV4dGdyb3VwPXN1ZG9lcnNJbnRlZ2VyVmFsdWUgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc1N0cmluZ1BhcmFtZXRlckVxdWFscyAgY29udGFpbmVkICdbKy1dXD09JyBuZXh0Z3JvdXA9c3Vkb2Vyc1N0cmluZ1ZhbHVlICBza2lwd2hpdGUgc2tpcG5sCitzeW4gbWF0Y2ggICBzdWRvZXJzTGlzdFBhcmFtZXRlckVxdWFscwkgIGNvbnRhaW5lZCAnWystXVw9PScgbmV4dGdyb3VwPXN1ZG9lcnNMaXN0VmFsdWUgICAgc2tpcHdoaXRlIHNraXBubAorCitzeW4gbWF0Y2ggICBzdWRvZXJzSW50ZWdlclZhbHVlCWNvbnRhaW5lZCAnXGRcKycgbmV4dGdyb3VwPXN1ZG9lcnNQYXJhbWV0ZXJMaXN0Q29tbWEgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc1N0cmluZ1ZhbHVlCWNvbnRhaW5lZCAnW15bOnNwYWNlOl0sOj1cXF0qXCUoXFxbWzpzcGFjZTpdLDo9XFxdW15bOnNwYWNlOl0sOj1cXF0qXCkqJyBuZXh0Z3JvdXA9c3Vkb2Vyc1BhcmFtZXRlckxpc3RDb21tYSBza2lwd2hpdGUgc2tpcG5sCitzeW4gcmVnaW9uICBzdWRvZXJzU3RyaW5nVmFsdWUJY29udGFpbmVkIHN0YXJ0PSsiKyBza2lwPStcXCIrIGVuZD0rIisgbmV4dGdyb3VwPXN1ZG9lcnNQYXJhbWV0ZXJMaXN0Q29tbWEgc2tpcHdoaXRlIHNraXBubAorc3luIG1hdGNoICAgc3Vkb2Vyc0xpc3RWYWx1ZQljb250YWluZWQgJ1teWzpzcGFjZTpdLDo9XFxdKlwlKFxcW1s6c3BhY2U6XSw6PVxcXVteWzpzcGFjZTpdLDo9XFxdKlwpKicgbmV4dGdyb3VwPXN1ZG9lcnNQYXJhbWV0ZXJMaXN0Q29tbWEgc2tpcHdoaXRlIHNraXBubAorc3luIHJlZ2lvbiAgc3Vkb2Vyc0xpc3RWYWx1ZQljb250YWluZWQgc3RhcnQ9KyIrIHNraXA9K1xcIisgZW5kPSsiKyBuZXh0Z3JvdXA9c3Vkb2Vyc1BhcmFtZXRlckxpc3RDb21tYSBza2lwd2hpdGUgc2tpcG5sCisKKyIgU3BlY2lhbCBmb3Igc3BlY3MKK3N5biBtYXRjaCAgIHN1ZG9lcnNQQVNTV0QJICAgICAgY29udGFpbmVkICdcJShOT1wpXD1QQVNTV0Q6JyBuZXh0Z3JvdXA9QHN1ZG9lcnNDbW5kSW5TcGVjIHNraXB3aGl0ZQorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zdWRvZXJzX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3N1ZG9lcnNfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgc3Vkb2Vyc1NwZWNFcXVhbHMJCU9wZXJhdG9yCisgIEhpTGluayBzdWRvZXJzVG9kbwkJCVRvZG8KKyAgSGlMaW5rIHN1ZG9lcnNDb21tZW50CQkJQ29tbWVudAorICBIaUxpbmsgc3Vkb2Vyc0FsaWFzCQkJS2V5d29yZAorICBIaUxpbmsgc3Vkb2Vyc1VzZXJBbGlhcwkJSWRlbnRpZmllcgorICBIaUxpbmsgc3Vkb2Vyc1VzZXJOYW1lSW5MaXN0CQlTdHJpbmcKKyAgSGlMaW5rIHN1ZG9lcnNVSURJbkxpc3QJCU51bWJlcgorICBIaUxpbmsgc3Vkb2Vyc0dyb3VwSW5MaXN0ICAgICAgICAgICAgIFByZVByb2MKKyAgSGlMaW5rIHN1ZG9lcnNVc2VyTmV0Z3JvdXBJbkxpc3QgICAgICBQcmVQcm9jCisgIEhpTGluayBzdWRvZXJzVXNlckFsaWFzSW5MaXN0ICAgICAgICAgUHJlUHJvYworICBIaUxpbmsgc3Vkb2Vyc1VzZXJOYW1lCQlTdHJpbmcKKyAgSGlMaW5rIHN1ZG9lcnNVSUQJCQlOdW1iZXIKKyAgSGlMaW5rIHN1ZG9lcnNHcm91cAkJCVByZVByb2MKKyAgSGlMaW5rIHN1ZG9lcnNVc2VyTmV0Z3JvdXAJCVByZVByb2MKKyAgSGlMaW5rIHN1ZG9lcnNVc2VyQWxpYXNSZWYgICAgICAgICAgICBQcmVQcm9jCisgIEhpTGluayBzdWRvZXJzVXNlck5hbWVJblNwZWMJCVN0cmluZworICBIaUxpbmsgc3Vkb2Vyc1VJREluU3BlYwkJTnVtYmVyCisgIEhpTGluayBzdWRvZXJzR3JvdXBJblNwZWMJCVByZVByb2MKKyAgSGlMaW5rIHN1ZG9lcnNVc2VyTmV0Z3JvdXBJblNwZWMJUHJlUHJvYworICBIaUxpbmsgc3Vkb2Vyc1VzZXJBbGlhc0luU3BlYwkJUHJlUHJvYworICBIaUxpbmsgc3Vkb2Vyc1VzZXJOYW1lSW5SdW5hcwkJU3RyaW5nCisgIEhpTGluayBzdWRvZXJzVUlESW5SdW5hcwkJTnVtYmVyCisgIEhpTGluayBzdWRvZXJzR3JvdXBJblJ1bmFzCQlQcmVQcm9jCisgIEhpTGluayBzdWRvZXJzVXNlck5ldGdyb3VwSW5SdW5hcwlQcmVQcm9jCisgIEhpTGluayBzdWRvZXJzVXNlckFsaWFzSW5SdW5hcwlQcmVQcm9jCisgIEhpTGluayBzdWRvZXJzSG9zdEFsaWFzICAgICAgICAgICAgICAgSWRlbnRpZmllcgorICBIaUxpbmsgc3Vkb2Vyc0hvc3ROYW1lSW5MaXN0ICAgICAgICAgIFN0cmluZworICBIaUxpbmsgc3Vkb2Vyc0lQQWRkckluTGlzdCAgICAgICAgICAgIE51bWJlcgorICBIaUxpbmsgc3Vkb2Vyc05ldHdvcmtJbkxpc3QgICAgICAgICAgIE51bWJlcgorICBIaUxpbmsgc3Vkb2Vyc0hvc3ROZXRncm91cEluTGlzdCAgICAgIFByZVByb2MKKyAgSGlMaW5rIHN1ZG9lcnNIb3N0QWxpYXNJbkxpc3QgICAgICAgICBQcmVQcm9jCisgIEhpTGluayBzdWRvZXJzSG9zdE5hbWUJCVN0cmluZworICBIaUxpbmsgc3Vkb2Vyc0lQQWRkcgkJCU51bWJlcgorICBIaUxpbmsgc3Vkb2Vyc05ldHdvcmsJCQlOdW1iZXIKKyAgSGlMaW5rIHN1ZG9lcnNIb3N0TmV0Z3JvdXAJCVByZVByb2MKKyAgSGlMaW5rIHN1ZG9lcnNIb3N0QWxpYXNSZWYgICAgICAgICAgICBQcmVQcm9jCisgIEhpTGluayBzdWRvZXJzSG9zdE5hbWVJblNwZWMgICAgICAgICAgU3RyaW5nCisgIEhpTGluayBzdWRvZXJzSVBBZGRySW5TcGVjICAgICAgICAgICAgTnVtYmVyCisgIEhpTGluayBzdWRvZXJzTmV0d29ya0luU3BlYyAgICAgICAgICAgTnVtYmVyCisgIEhpTGluayBzdWRvZXJzSG9zdE5ldGdyb3VwSW5TcGVjICAgICAgUHJlUHJvYworICBIaUxpbmsgc3Vkb2Vyc0hvc3RBbGlhc0luU3BlYyAgICAgICAgIFByZVByb2MKKyAgSGlMaW5rIHN1ZG9lcnNDbW5kQWxpYXMJCUlkZW50aWZpZXIKKyAgSGlMaW5rIHN1ZG9lcnNDbW5kTmFtZUluTGlzdAkJU3RyaW5nCisgIEhpTGluayBzdWRvZXJzQ21uZEFsaWFzSW5MaXN0ICAgICAgICAgUHJlUHJvYworICBIaUxpbmsgc3Vkb2Vyc0NtbmROYW1lSW5TcGVjCQlTdHJpbmcKKyAgSGlMaW5rIHN1ZG9lcnNDbW5kQWxpYXNJblNwZWMgICAgICAgICBQcmVQcm9jCisgIEhpTGluayBzdWRvZXJzVXNlckFsaWFzRXF1YWxzCQlPcGVyYXRvcgorICBIaUxpbmsgc3Vkb2Vyc1VzZXJMaXN0Q29tbWEgICAgICAgICAgIERlbGltaXRlcgorICBIaUxpbmsgc3Vkb2Vyc1VzZXJMaXN0Q29sb24gICAgICAgICAgIERlbGltaXRlcgorICBIaUxpbmsgc3Vkb2Vyc1VzZXJTcGVjQ29tbWEgICAgICAgICAgIERlbGltaXRlcgorICBIaUxpbmsgc3Vkb2Vyc1VzZXJSdW5hc0JlZ2luCQlEZWxpbWl0ZXIKKyAgSGlMaW5rIHN1ZG9lcnNVc2VyUnVuYXNDb21tYQkJRGVsaW1pdGVyCisgIEhpTGluayBzdWRvZXJzVXNlclJ1bmFzRW5kCQlEZWxpbWl0ZXIKKyAgSGlMaW5rIHN1ZG9lcnNIb3N0QWxpYXNFcXVhbHMgICAgICAgICBPcGVyYXRvcgorICBIaUxpbmsgc3Vkb2Vyc0hvc3RMaXN0Q29tbWEgICAgICAgICAgIERlbGltaXRlcgorICBIaUxpbmsgc3Vkb2Vyc0hvc3RMaXN0Q29sb24gICAgICAgICAgIERlbGltaXRlcgorICBIaUxpbmsgc3Vkb2Vyc0hvc3RTcGVjQ29tbWEgICAgICAgICAgIERlbGltaXRlcgorICBIaUxpbmsgc3Vkb2Vyc0NtbmRBbGlhc0VxdWFscyAgICAgICAgIE9wZXJhdG9yCisgIEhpTGluayBzdWRvZXJzQ21uZExpc3RDb21tYSAgICAgICAgICAgRGVsaW1pdGVyCisgIEhpTGluayBzdWRvZXJzQ21uZExpc3RDb2xvbiAgICAgICAgICAgRGVsaW1pdGVyCisgIEhpTGluayBzdWRvZXJzQ21uZFNwZWNDb21tYSAgICAgICAgICAgRGVsaW1pdGVyCisgIEhpTGluayBzdWRvZXJzQ21uZFNwZWNDb2xvbiAgICAgICAgICAgRGVsaW1pdGVyCisgIEhpTGluayBzdWRvZXJzVXNlck5lZ2F0aW9uSW5MaXN0ICAgICAgT3BlcmF0b3IKKyAgSGlMaW5rIHN1ZG9lcnNIb3N0TmVnYXRpb25Jbkxpc3QgICAgICBPcGVyYXRvcgorICBIaUxpbmsgc3Vkb2Vyc0NtbmROZWdhdGlvbkluTGlzdCAgICAgIE9wZXJhdG9yCisgIEhpTGluayBzdWRvZXJzVXNlck5lZ2F0aW9uCQlPcGVyYXRvcgorICBIaUxpbmsgc3Vkb2Vyc0hvc3ROZWdhdGlvbgkJT3BlcmF0b3IKKyAgSGlMaW5rIHN1ZG9lcnNVc2VyTmVnYXRpb25JblNwZWMJT3BlcmF0b3IKKyAgSGlMaW5rIHN1ZG9lcnNIb3N0TmVnYXRpb25JblNwZWMJT3BlcmF0b3IKKyAgSGlMaW5rIHN1ZG9lcnNVc2VyTmVnYXRpb25JblJ1bmFzCU9wZXJhdG9yCisgIEhpTGluayBzdWRvZXJzQ21uZE5lZ2F0aW9uSW5TcGVjCU9wZXJhdG9yCisgIEhpTGluayBzdWRvZXJzQ29tbWFuZEFyZ3MJCVN0cmluZworICBIaUxpbmsgc3Vkb2Vyc0NvbW1hbmRFbXB0eQkJU3BlY2lhbAorICBIaUxpbmsgc3Vkb2Vyc0RlZmF1bHRFbnRyeQkJS2V5d29yZAorICBIaUxpbmsgc3Vkb2Vyc0RlZmF1bHRUeXBlQXQJCVNwZWNpYWwKKyAgSGlMaW5rIHN1ZG9lcnNEZWZhdWx0VHlwZUNvbG9uCVNwZWNpYWwKKyAgSGlMaW5rIHN1ZG9lcnNEZWZhdWx0VHlwZUdyZWF0ZXJUaGFuCVNwZWNpYWwKKyAgSGlMaW5rIHN1ZG9lcnNCb29sZWFuUGFyYW1ldGVyICAgICAgICBJZGVudGlmaWVyCisgIEhpTGluayBzdWRvZXJzSW50ZWdlclBhcmFtZXRlciAgICAgICAgSWRlbnRpZmllcgorICBIaUxpbmsgc3Vkb2Vyc1N0cmluZ1BhcmFtZXRlciAgICAgICAgIElkZW50aWZpZXIKKyAgSGlMaW5rIHN1ZG9lcnNMaXN0UGFyYW1ldGVyICAgICAgICAgICBJZGVudGlmaWVyCisgIEhpTGluayBzdWRvZXJzUGFyYW1ldGVyTGlzdENvbW1hICAgICAgRGVsaW1pdGVyCisgIEhpTGluayBzdWRvZXJzSW50ZWdlclBhcmFtZXRlckVxdWFscyAgT3BlcmF0b3IKKyAgSGlMaW5rIHN1ZG9lcnNTdHJpbmdQYXJhbWV0ZXJFcXVhbHMgICBPcGVyYXRvcgorICBIaUxpbmsgc3Vkb2Vyc0xpc3RQYXJhbWV0ZXJFcXVhbHMgICAgIE9wZXJhdG9yCisgIEhpTGluayBzdWRvZXJzSW50ZWdlclZhbHVlICAgICAgICAgICAgTnVtYmVyCisgIEhpTGluayBzdWRvZXJzU3RyaW5nVmFsdWUgICAgICAgICAgICAgU3RyaW5nCisgIEhpTGluayBzdWRvZXJzTGlzdFZhbHVlICAgICAgICAgICAgICAgU3RyaW5nCisgIEhpTGluayBzdWRvZXJzUEFTU1dECQkJU3BlY2lhbAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJzdWRvZXJzIgorCisiIHZpbTogc2V0IHN0cz0yIHN3PTI6CmRpZmYgLS1naXQgYS9zcmMvSU5TVEFMTHBjLnR4dCBiL3NyYy9JTlNUQUxMcGMudHh0CmluZGV4IDFlN2QzMjkuLjA1MTQ2MzkgMTAwNjQ0Ci0tLSBhL3NyYy9JTlNUQUxMcGMudHh0CisrKyBiL3NyYy9JTlNUQUxMcGMudHh0CkBAIC0yOSw3ICsyOSw3IEBACiByZW4gTWFrZV9iYzMubWFrIE1ha2VmaWxlOyBtYWtlICAgICAgMTYgYml0LCBCb3JsYW5kIEMrKyBhbmQgVHVyYm8gQysrCiByZW4gTWFrZV90Y2MubWFrIE1ha2VmaWxlOyBtYWtlCSAgICAgMTYgYml0LCBUdXJibyBDCiBtYWtlIC1mIE1ha2VfZGpnLm1hawkJICAgICAzMiBiaXQsIERKR1BQIDIuMAotbWFrZSAtZiBNYWtlX2JjNS5tYWsJCSAgICAgMzIgYml0LCBCb3JsYW5kIEMrKyA1LjAgKGVkaXQgaXQgdG8KK21ha2UgLWYgTWFrZV9iYzUubWFrCQkgICAgIDMyIGJpdCwgQm9ybGFuZCBDKysgNS54IChlZGl0IGl0IHRvCiAJCQkJCSAgICAgZGVmaW5lIERPUykKIAogV2FybmluZzogQmUgc3VyZSB0byB1c2UgdGhlIHJpZ2h0IG1ha2UuZXhlLiAgTWljcm9zb2Z0IEMgbWFrZSBkb2Vzbid0IHdvcms7CkBAIC01OCw5ICs1OCwxMSBAQAogTWFrZV9iYzUubWFrIGlzIGZvciB0aG9zZSB0aGF0IGhhdmUgQm9ybGFuZCBDKysgNS4wIG9yIGxhdGVyLiAgQXQgdGhlIHRvcCBvZgogdGhlIGZpbGUsIHRoZXJlIGFyZSBzb21lIHZhcmlhYmxlcyB5b3UgY2FuIGNoYW5nZSB0byBtYWtlIGVpdGhlciBhIDMyLWJpdAogV2luZG93cyBleGUgKEdVSSBvciBjb25zb2xlIG1vZGUpLCBvciBhIDE2LWJpdCBNUy1ET1MgdmVyc2lvbi4KK05PVEU6IG11bHRpLWJ5dGUgc3VwcG9ydCBpcyBicm9rZW4gaW4gdGhlIEJvcmxhbmQgbGlicmFyaWVzLCBub3QgZXZlcnl0aGluZword2lsbCB3b3JrIHByb3Blcmx5ISAgRXNwLiBoYW5kbGluZyBtdWx0aS1ieXRlIGZpbGUgbmFtZXMuCiAKLUlmIHlvdSBnZXQgYWxsIGtpbmRzIG9mIHN0cmFuZ2UgZXJyb3IgbWVzc2FnZXMgd2hlbiBjb21waWxpbmcsIHRyeSBhZGRpbmcgPENSPgotY2hhcmFjdGVycyBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZS4KK0lmIHlvdSBnZXQgYWxsIGtpbmRzIG9mIHN0cmFuZ2UgZXJyb3IgbWVzc2FnZXMgd2hlbiBjb21waWxpbmcsIHRyeSBhZGRpbmcKK2NoYW5naW5nIHRoZSBmaWxlIGZvcm1hdCBmcm9tICJ1bml4IiB0byAiZG9zIi4KIAogCiAyLiBXaW4zMiAoV2luZG93cyBOVCBhbmQgV2luZG93cyA5NSkKZGlmZiAtLWdpdCBhL3NyYy9NYWtlX2JjNS5tYWsgYi9zcmMvTWFrZV9iYzUubWFrCmluZGV4IDI3MTgyMGQuLjc1YjBmMWQgMTAwNjQ0Ci0tLSBhL3NyYy9NYWtlX2JjNS5tYWsKKysrIGIvc3JjL01ha2VfYmM1Lm1hawpAQCAtNTMsNiArNTMsOSBAQAogIwkJb2YgUnVieSB3aWxsIGNhdXNlIGEgY29tcGlsZSBlcnJvciBvbiB0aGVzZSBzeXN0ZW1zLgogIyAgIERZTkFNSUNfUlVCWSBubyBvciB5ZXM6IHVzZSB5ZXMgdG8gbG9hZCB0aGUgUnVieSBETEwgZHluYW1pY2FsbHkgKG5vKQogIyBNQllURQkJbm8gb3IgeWVzOiBzZXQgdG8geWVzIGZvciBtdWx0aS1ieXRlIHN1cHBvcnQgKHllcykKKyMgICAgICAgICAgICAgICBOT1RFOiBtdWx0aS1ieXRlIHN1cHBvcnQgaXMgYnJva2VuIGluIHRoZSBCb3JsYW5kIGxpYnJhcmllcywKKyMgICAgICAgICAgICAgICBub3QgZXZlcnl0aGluZyB3aWxsIHdvcmsgcHJvcGVybHkhICBFc3AuIGhhbmRsaW5nIG11bHRpLWJ5dGUKKyMgICAgICAgICAgICAgICBmaWxlIG5hbWVzLgogIyBJTUUJCW5vIG9yIHllczogc2V0IHRvIHllcyBmb3IgbXVsdGktYnl0ZSBJTUUgc3VwcG9ydCAoeWVzKQogIyAgIERZTkFNSUNfSU1FIG5vIG9yIHllczogc2V0IHRvIHllcyB0byBsb2FkIGltbTMyLmRsbCBkeW5hbWljYWxseSAoeWVzKQogIyBHRVRURVhUCW5vIG9yIHllczogc2V0IHRvIHllcyBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydCAoeWVzKQpkaWZmIC0tZ2l0IGEvc3JjL01ha2VfY3lnLm1hayBiL3NyYy9NYWtlX2N5Zy5tYWsKaW5kZXggYjg2OTIzMC4uZjJlNGM1YSAxMDA2NDQKLS0tIGEvc3JjL01ha2VfY3lnLm1haworKysgYi9zcmMvTWFrZV9jeWcubWFrCkBAIC0xLDYgKzEsNiBAQAogIwogIyBNYWtlZmlsZSBmb3IgVklNIG9uIFdpbjMyLCB1c2luZyBDeWdudXMgZ2NjCi0jIExhc3QgdXBkYXRlZCBieSBEYW4gU2hhcnAuICBMYXN0IENoYW5nZTogMjAwNCBKdWwgMDEKKyMgTGFzdCB1cGRhdGVkIGJ5IERhbiBTaGFycC4gIExhc3QgQ2hhbmdlOiAyMDA0IERlYyAxNwogIwogIyBUaGlzIGNvbXBpbGVzIFZpbSBhcyBhIFdpbmRvd3MgYXBwbGljYXRpb24uICBJZiB5b3Ugd2FudCBWaW0gdG8gcnVuIGFzIGEKICMgQ3lnd2luIGFwcGxpY2F0aW9uIHVzZSB0aGUgTWFrZWZpbGUgKGp1c3QgbGlrZSBvbiBVbml4KS4KQEAgLTI1LDcgKzI1LDcgQEAKICMgICBEWU5BTUlDX0lNRSBubyBvciB5ZXM6IHNldCB0byB5ZXMgdG8gbG9hZCBpbW0zMi5kbGwgZHluYW1pY2FsbHkgKHllcykKICMgT0xFCQlubyBvciB5ZXM6IHNldCB0byB5ZXMgdG8gbWFrZSBPTEUgZ3ZpbSAobm8pCiAjIERFQlVHCQlubyBvciB5ZXM6IHNldCB0byB5ZXMgaWYgeW91IHdpc2ggYSBERUJVR2dpbmcgYnVpbGQgKG5vKQotIyBDUFVOUgkJaTM4NiB0aHJvdWdoIHBlbnRpdW00OiBzZWxlY3QgLW1jcHUgYXJndW1lbnQgdG8gY29tcGlsZSB3aXRoIChpMzg2KQorIyBDUFVOUgkJTm8gbG9uZ2VyIHN1cHBvcnRlZCwgdXNlIEFSQ0guCiAjIEFSQ0gJCWkzODYgdGhyb3VnaCBwZW50aXVtNDogc2VsZWN0IC1tYXJjaCBhcmd1bWVudCB0byBjb21waWxlIHdpdGggKGkzODYpCiAjIFVTRURMTAlubyBvciB5ZXM6IHNldCB0byB5ZXMgdG8gdXNlIHRoZSBSdW50aW1lIGxpYnJhcnkgRExMIChubykKICMJCUZvciBVU0VETEw9eWVzIHRoZSBjeWd3aW4xLmRsbCBpcyByZXF1aXJlZCB0byBydW4gVmltLgpAQCAtNjcsMTIgKzY3LDYgQEAKIEFSQ0ggPSBpMzg2CiBlbmRpZgogCi1pZm5kZWYgQ1BVTlIKLSMgU2V0dGluZyAtbWFyY2ggaW1wbGljaXRseSBzZXRzIC1tY3B1IHRvIHRoZSBzYW1lIHZhbHVlLAotIyBzbyByZWZsZWN0IHRoYXQgaW4gdGhlIGRlZmF1bHRzIGhlcmUuCi1DUFVOUiA9ICQoQVJDSCkKLWVuZGlmCi0KIGlmbmRlZiBXSU5WRVIKIFdJTlZFUiA9IDB4MDQwMAogZW5kaWYKQEAgLTk2LDcgKzkwLDcgQEAKIAogREVGSU5FUyA9IC1EV0lOMzIgLURIQVZFX1BBVEhERUYgLURGRUFUXyQoRkVBVFVSRVMpIFwKIAkgIC1EV0lOVkVSPSQoV0lOVkVSKSAtRF9XSU4zMl9XSU5OVD0kKFdJTlZFUikKLUlOQ0xVREVTID0gLW1jcHU9JChDUFVOUikgLW1hcmNoPSQoQVJDSCkgLUlwcm90bworSU5DTFVERVMgPSAtbWFyY2g9JChBUkNIKSAtSXByb3RvCiAKICM+Pj4+PiBuYW1lIG9mIHRoZSBjb21waWxlciBhbmQgbGlua2VyLCBuYW1lIG9mIGxpYiBkaXJlY3RvcnkKIENDID0gZ2NjCkBAIC0yNjAsNyArMjU0LDcgQEAKIE9QVEZMQUcgPSAtT3MKIGVsc2UKIGlmZXEgKCQoT1BUSU1JWkUpLCBNQVhTUEVFRCkKLU9QVEZMQUcgPSAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZyZWctc3RydWN0LXJldHVybiAtbWFsaWduLWRvdWJsZQorT1BURkxBRyA9IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnJlZy1zdHJ1Y3QtcmV0dXJuCiBlbHNlCiBPUFRGTEFHID0gLU8yCiBlbmRpZgpAQCAtNDI4LDcgKzQyMiw3IEBACiAJJChDQykgJChDRkxBR1MpIC1vIHVuaW5zdGFsLmV4ZSB1bmluc3RhbC5jICQoTElCUykKIAogJChPVVRESVIpOgotCW1rZGlyICQoT1VURElSKQorCW1rZGlyIC1wICQoT1VURElSKQogCiB0YWdzOgogCWNvbW1hbmQgL2MgY3RhZ3MgKi5jICQoSU5DTCkKZGlmZiAtLWdpdCBhL3NyYy9NYWtlX21pbmcubWFrIGIvc3JjL01ha2VfbWluZy5tYWsKaW5kZXggMmM4NzU1Yy4uNDA3NGE4OCAxMDA2NDQKLS0tIGEvc3JjL01ha2VfbWluZy5tYWsKKysrIGIvc3JjL01ha2VfbWluZy5tYWsKQEAgLTMxLDkgKzMxLDcgQEAKICMgRkVBVFVSRVM9W1RJTlkgfCBTTUFMTCAgfCBOT1JNQUwgfCBCSUcgfCBIVUdFXQogIyBzZXQgdG8gVElOWSB0byBtYWtlIG1pbmltYWwgdmVyc2lvbiAoZmV3IGZlYXR1cmVzKQogRkVBVFVSRVM9QklHCi0jIHNldCB0byBvbmUgb2YgaTM4NiwgaTQ4NiwgaTU4NiwgaTY4NiBhcyB0aGUgKnRhcmdldCogcHJvY2Vzc29yCi1DUFVOUj1pNjg2Ci0jIHNldCB0byBzYW1lIGNob2ljZXMgYXMgJ0NQVU5SJywgYnV0IHdpbGwgcHJldmVudCBydW5uaW5nIG9uICdsb3dlcicgY3B1czoKKyMgc2V0IHRvIG9uZSBvZiBpMzg2LCBpNDg2LCBpNTg2LCBpNjg2IGFzIHRoZSBtaW5pbXVtIHRhcmdldCBwcm9jZXNzb3IKIEFSQ0g9aTM4NgogIyBzZXQgdG8geWVzIHRvIGNyb3NzLWNvbXBpbGUgZnJvbSB1bml4OyBubz1uYXRpdmUgV2luZG93cwogQ1JPU1M9bm8KQEAgLTI0Miw3ICsyNDAsNyBAQAogIz4+Pj4+IGVuZCBvZiBjaG9pY2VzCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotQ0ZMQUdTID0gLUlwcm90byAkKERFRklORVMpIC1waXBlIC13IC1tYXJjaD0kKEFSQ0gpIC1tY3B1PSQoQ1BVTlIpIC1XYWxsCitDRkxBR1MgPSAtSXByb3RvICQoREVGSU5FUykgLXBpcGUgLXcgLW1hcmNoPSQoQVJDSCkgLVdhbGwKIAogaWZkZWYgR0VUVEVYVAogREVGSU5FUyArPS1ESEFWRV9HRVRURVhUIC1ESEFWRV9MT0NBTEVfSApAQCAtMzM0LDcgKzMzMiw3IEBACiBlbHNlCiBpZmVxICgkKE9QVElNSVpFKSwgTUFYU1BFRUQpCiBDRkxBR1MgKz0gLU8zCi1DRkxBR1MgKz0gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZyZWctc3RydWN0LXJldHVybiAtbWFsaWduLWRvdWJsZQorQ0ZMQUdTICs9IC1mb21pdC1mcmFtZS1wb2ludGVyIC1mcmVnLXN0cnVjdC1yZXR1cm4KIGVsc2UgICMgU1BFRUQKIENGTEFHUyArPSAtTzIKIGVuZGlmCkBAIC01NDksNyArNTQ3LDcgQEAKIAkkKFdJTkRSRVMpICQoT1VURElSKS92aW1yZXMucmVzICQoT1VURElSKS92aW1yYy5vCiAKICQoT1VURElSKToKLQlta2RpciAkKE9VVERJUikKKwlta2RpciAtcCAkKE9VVERJUikKIAogJChPVVRESVIpL2V4X2RvY21kLm86CWV4X2RvY21kLmMgJChJTkNMKSBleF9jbWRzLmgKIAkkKENDKSAtYyAkKENGTEFHUykgZXhfZG9jbWQuYyAtbyAkKE9VVERJUikvZXhfZG9jbWQubwpkaWZmIC0tZ2l0IGEvc3JjL01ha2VfbXZjLm1hayBiL3NyYy9NYWtlX212Yy5tYWsKaW5kZXggNjNhOTlmMi4uOTBkZDg4OCAxMDA2NDQKLS0tIGEvc3JjL01ha2VfbXZjLm1haworKysgYi9zcmMvTWFrZV9tdmMubWFrCkBAIC02MzcsNyArNjM3LDcgQEAKICQoVklNKS5leGU6ICQoVklNKQogCiAkKE9VVERJUik6Ci0JaWYgbm90IGV4aXN0ICQoT1VURElSKS9udWwgICAgbWtkaXIgJChPVVRESVIpCisJaWYgbm90IGV4aXN0ICQoT1VURElSKS9udWwgIG1rZGlyICQoT1VURElSKQogCiBpbnN0YWxsLmV4ZTogZG9zaW5zdC5jCiAJJChDQykgL25vbG9nbyAtRE5ERUJVRyAtRFdJTjMyIGRvc2luc3QuYyBrZXJuZWwzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIGFkdmFwaTMyLmxpYiB1dWlkLmxpYgpkaWZmIC0tZ2l0IGEvc3JjL01ha2Vfdm1zLm1tcyBiL3NyYy9NYWtlX3Ztcy5tbXMKaW5kZXggZjFjZTkzYS4uNTM3OTM1MyAxMDA2NDQKLS0tIGEvc3JjL01ha2Vfdm1zLm1tcworKysgYi9zcmMvTWFrZV92bXMubW1zCkBAIC0yLDkgKzIsOSBAQAogIyBNYWtlZmlsZSBmb3IgVmltIG9uIE9wZW5WTVMKICMKICMgTWFpbnRhaW5lcjogICBab2x0YW4gQXJwYWRmZnkgPGFycGFkZmZ5QHBvbGFyaG9tZS5jb20+Ci0jIExhc3QgY2hhbmdlOiAgMjAwNCBNYXkgMDQKKyMgTGFzdCBjaGFuZ2U6ICAyMDA0IERlYyAxNgogIwotIyBUaGlzIGhhcyBzY3JpcHQgYmVlbiB0ZXN0ZWQgb24gVk1TIDYuMiB0byA3LjMgb24gREVDIEFscGhhIGFuZCBWQVgKKyMgVGhpcyBoYXMgc2NyaXB0IGJlZW4gdGVzdGVkIG9uIFZNUyA2LjIgdG8gNy4zIG9uIERFQyBBbHBoYSwgVkFYIGFuZCBJQTY0CiAjIHdpdGggTU1TIGFuZCBNTUsKICMKICMgVGhlIGZvbGxvd2luZyBjb3VsZCBiZSBidWlsdDoKQEAgLTQ1NCw0ICs0NTQsMjgyIEBACiAJLUAgIQogLkVORElGCiAKLQorYnVmZmVyLm9iaiA6IGJ1ZmZlci5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggXAorIGd1aS5oIGd1aV9iZXZhbC5oIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBcCisgZ2xvYmFscy5oIGZhcnNpLmggYXJhYmljLmggdmVyc2lvbi5oCitjaGFyc2V0Lm9iaiA6IGNoYXJzZXQuYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIFwKKyBndWkuaCBndWlfYmV2YWwuaCBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggXAorIGdsb2JhbHMuaCBmYXJzaS5oIGFyYWJpYy5oCitkaWZmLm9iaiA6IGRpZmYuYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCAgIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggZ3VpLmggZ3VpX2JldmFsLmggXAorIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBnbG9iYWxzLmggZmFyc2kuaCBcCisgYXJhYmljLmgKK2RpZ3JhcGgub2JqIDogZGlncmFwaC5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggXAorIGd1aS5oIGd1aV9iZXZhbC5oIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBcCisgZ2xvYmFscy5oIGZhcnNpLmggYXJhYmljLmgKK2VkaXQub2JqIDogZWRpdC5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oICAgXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBndWkuaCBndWlfYmV2YWwuaCBcCisgWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIGdsb2JhbHMuaCBmYXJzaS5oIFwKKyBhcmFiaWMuaAorZXZhbC5vYmogOiBldmFsLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggICBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIGd1aS5oIGd1aV9iZXZhbC5oIFwKKyBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggZ2xvYmFscy5oIGZhcnNpLmggXAorIGFyYWJpYy5oIHZlcnNpb24uaAorZXhfY21kcy5vYmogOiBleF9jbWRzLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBcCisgZ3VpLmggZ3VpX2JldmFsLmggWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIFwKKyBnbG9iYWxzLmggZmFyc2kuaCBhcmFiaWMuaCB2ZXJzaW9uLmgKK2V4X2NtZHMyLm9iaiA6IGV4X2NtZHMyLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBcCisgZ3VpLmggZ3VpX2JldmFsLmggWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIFwKKyBnbG9iYWxzLmggZmFyc2kuaCBhcmFiaWMuaCB2ZXJzaW9uLmgKK2V4X2RvY21kLm9iaiA6IGV4X2RvY21kLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBcCisgZ3VpLmggZ3VpX2JldmFsLmggWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIFwKKyBnbG9iYWxzLmggZmFyc2kuaCBhcmFiaWMuaAorZXhfZXZhbC5vYmogOiBleF9ldmFsLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBcCisgZ3VpLmggZ3VpX2JldmFsLmggWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIFwKKyBnbG9iYWxzLmggZmFyc2kuaCBhcmFiaWMuaAorZXhfZ2V0bG4ub2JqIDogZXhfZ2V0bG4uYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIFwKKyBndWkuaCBndWlfYmV2YWwuaCBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggXAorIGdsb2JhbHMuaCBmYXJzaS5oIGFyYWJpYy5oCitmaWxlaW8ub2JqIDogZmlsZWlvLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBcCisgZ3VpLmggZ3VpX2JldmFsLmggWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIFwKKyBnbG9iYWxzLmggZmFyc2kuaCBhcmFiaWMuaAorZm9sZC5vYmogOiBmb2xkLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggICBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIGd1aS5oIGd1aV9iZXZhbC5oIFwKKyBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggZ2xvYmFscy5oIGZhcnNpLmggXAorIGFyYWJpYy5oCitnZXRjaGFyLm9iaiA6IGdldGNoYXIuYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIFwKKyBndWkuaCBndWlfYmV2YWwuaCBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggXAorIGdsb2JhbHMuaCBmYXJzaS5oIGFyYWJpYy5oCitpZl9jc2NvcGUub2JqIDogaWZfY3Njb3BlLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBcCisgZ3VpLmggZ3VpX2JldmFsLmggWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIFwKKyBnbG9iYWxzLmggZmFyc2kuaCBhcmFiaWMuaCBpZl9jc2NvcGUuaAoraWZfeGNtZHNydi5vYmogOiBpZl94Y21kc3J2LmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBcCisgZ3VpLmggZ3VpX2JldmFsLmggWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIFwKKyBnbG9iYWxzLmggZmFyc2kuaCBhcmFiaWMuaCB2ZXJzaW9uLmgKK21haW4ub2JqIDogbWFpbi5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oICAgXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBndWkuaCBndWlfYmV2YWwuaCBcCisgWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIGdsb2JhbHMuaCBmYXJzaS5oIFwKKyBhcmFiaWMuaCBmYXJzaS5jIGFyYWJpYy5jCittYXJrLm9iaiA6IG1hcmsuYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCAgIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggZ3VpLmggZ3VpX2JldmFsLmggXAorIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBnbG9iYWxzLmggZmFyc2kuaCBcCisgYXJhYmljLmgKK21lbWZpbGUub2JqIDogbWVtZmlsZS5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggXAorIGd1aS5oIGd1aV9iZXZhbC5oIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBcCisgZ2xvYmFscy5oIGZhcnNpLmggYXJhYmljLmgKK21lbWxpbmUub2JqIDogbWVtbGluZS5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggXAorIGd1aS5oIGd1aV9iZXZhbC5oIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBcCisgZ2xvYmFscy5oIGZhcnNpLmggYXJhYmljLmgKK21lbnUub2JqIDogbWVudS5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oICAgXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBndWkuaCBndWlfYmV2YWwuaCBcCisgWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIGdsb2JhbHMuaCBmYXJzaS5oIFwKKyBhcmFiaWMuaAorbWVzc2FnZS5vYmogOiBtZXNzYWdlLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBcCisgZ3VpLmggZ3VpX2JldmFsLmggWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIFwKKyBnbG9iYWxzLmggZmFyc2kuaCBhcmFiaWMuaAorbWlzYzEub2JqIDogbWlzYzEuYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCAgIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggZ3VpLmggZ3VpX2JldmFsLmggXAorIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBnbG9iYWxzLmggZmFyc2kuaCBcCisgYXJhYmljLmggdmVyc2lvbi5oCittaXNjMi5vYmogOiBtaXNjMi5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oICAgXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBndWkuaCBndWlfYmV2YWwuaCBcCisgWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIGdsb2JhbHMuaCBmYXJzaS5oIFwKKyBhcmFiaWMuaAorbW92ZS5vYmogOiBtb3ZlLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggICBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIGd1aS5oIGd1aV9iZXZhbC5oIFwKKyBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggZ2xvYmFscy5oIGZhcnNpLmggXAorIGFyYWJpYy5oCittYnl0ZS5vYmogOiBtYnl0ZS5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oICAgXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBndWkuaCBndWlfYmV2YWwuaCBcCisgWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIGdsb2JhbHMuaCBmYXJzaS5oIFwKKyBhcmFiaWMuaAorbm9ybWFsLm9iaiA6IG5vcm1hbC5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggXAorIGd1aS5oIGd1aV9iZXZhbC5oIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBcCisgZ2xvYmFscy5oIGZhcnNpLmggYXJhYmljLmgKK29wcy5vYmogOiBvcHMuYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCAgIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggZ3VpLmggZ3VpX2JldmFsLmggXAorIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBnbG9iYWxzLmggZmFyc2kuaCBcCisgYXJhYmljLmgKK29wdGlvbi5vYmogOiBvcHRpb24uYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIFwKKyBndWkuaCBndWlfYmV2YWwuaCBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggXAorIGdsb2JhbHMuaCBmYXJzaS5oIGFyYWJpYy5oCitvc191bml4Lm9iaiA6IG9zX3VuaXguYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIFwKKyBndWkuaCBndWlfYmV2YWwuaCBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggXAorIGdsb2JhbHMuaCBmYXJzaS5oIGFyYWJpYy5oIG9zX3VuaXh4LmgKK29zX3Ztcy5vYmogOiBvc192bXMuYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIFwKKyBndWkuaCBndWlfYmV2YWwuaCBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggXAorIGdsb2JhbHMuaCBmYXJzaS5oIGFyYWJpYy5oIG9zX3VuaXh4LmgKK3BhdGhkZWYub2JqIDogcGF0aGRlZi5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggXAorIGd1aS5oIGd1aV9iZXZhbC5oIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBcCisgZ2xvYmFscy5oIGZhcnNpLmggYXJhYmljLmgKK3F1aWNrZml4Lm9iaiA6IHF1aWNrZml4LmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBcCisgZ3VpLmggZ3VpX2JldmFsLmggWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIFwKKyBnbG9iYWxzLmggZmFyc2kuaCBhcmFiaWMuaAorcmVnZXhwLm9iaiA6IHJlZ2V4cC5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggXAorIGd1aS5oIGd1aV9iZXZhbC5oIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBcCisgZ2xvYmFscy5oIGZhcnNpLmggYXJhYmljLmgKK3NjcmVlbi5vYmogOiBzY3JlZW4uYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIFwKKyBndWkuaCBndWlfYmV2YWwuaCBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggXAorIGdsb2JhbHMuaCBmYXJzaS5oIGFyYWJpYy5oCitzZWFyY2gub2JqIDogc2VhcmNoLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBcCisgZ3VpLmggZ3VpX2JldmFsLmggWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIFwKKyBnbG9iYWxzLmggZmFyc2kuaCBhcmFiaWMuaAorc3ludGF4Lm9iaiA6IHN5bnRheC5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggXAorIGd1aS5oIGd1aV9iZXZhbC5oIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBcCisgZ2xvYmFscy5oIGZhcnNpLmggYXJhYmljLmgKK3RhZy5vYmogOiB0YWcuYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCAgIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggZ3VpLmggZ3VpX2JldmFsLmggXAorIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBnbG9iYWxzLmggZmFyc2kuaCBcCisgYXJhYmljLmgKK3Rlcm0ub2JqIDogdGVybS5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oICAgXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBndWkuaCBndWlfYmV2YWwuaCBcCisgWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIGdsb2JhbHMuaCBmYXJzaS5oIFwKKyBhcmFiaWMuaAordGVybWxpYi5vYmogOiB0ZXJtbGliLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggICBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIGd1aS5oIGd1aV9iZXZhbC5oIFwKKyBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggZ2xvYmFscy5oIGZhcnNpLmggXAorIGFyYWJpYy5oCit1aS5vYmogOiB1aS5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oICAgXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBndWkuaCBndWlfYmV2YWwuaCBcCisgWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIGdsb2JhbHMuaCBmYXJzaS5oIFwKKyBhcmFiaWMuaAordW5kby5vYmogOiB1bmRvLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggICBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIGd1aS5oIGd1aV9iZXZhbC5oIFwKKyBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggZ2xvYmFscy5oIGZhcnNpLmggXAorIGFyYWJpYy5oCit2ZXJzaW9uLm9iaiA6IHZlcnNpb24uYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIFwKKyBndWkuaCBndWlfYmV2YWwuaCBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggXAorIGdsb2JhbHMuaCBmYXJzaS5oIGFyYWJpYy5oIHZlcnNpb24uaAord2luZG93Lm9iaiA6IHdpbmRvdy5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggXAorIGd1aS5oIGd1aV9iZXZhbC5oIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBcCisgZ2xvYmFscy5oIGZhcnNpLmggYXJhYmljLmgKK2d1aS5vYmogOiBndWkuYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCAgIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggZ3VpLmggZ3VpX2JldmFsLmggXAorIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBnbG9iYWxzLmggZmFyc2kuaCBcCisgYXJhYmljLmgKK2d1aV9ndGsub2JqIDogZ3VpX2d0ay5jIGd1aV9ndGtfZi5oIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggXAorIG9zX3VuaXguaCAgIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCBcCisgcmVnZXhwLmggZ3VpLmggZ3VpX2JldmFsLmggWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBcCisgcHJvdG8uaCBnbG9iYWxzLmggZmFyc2kuaCBhcmFiaWMuaCBbLS5waXhtYXBzXXN0b2NrX2ljb25zLmgKK2d1aV9ndGtfZi5vYmogOiBndWlfZ3RrX2YuYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIFwKKyBndWkuaCBndWlfYmV2YWwuaCBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggXAorIGdsb2JhbHMuaCBmYXJzaS5oIGFyYWJpYy5oIGd1aV9ndGtfZi5oCitndWlfbW90aWYub2JqIDogZ3VpX21vdGlmLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBcCisgZ3VpLmggZ3VpX2JldmFsLmggWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIFwKKyBnbG9iYWxzLmggZmFyc2kuaCBhcmFiaWMuaCBbLS5waXhtYXBzXWFsZXJ0LnhwbSBbLS5waXhtYXBzXWVycm9yLnhwbSBcCisgWy0ucGl4bWFwc11nZW5lcmljLnhwbSBbLS5waXhtYXBzXWluZm8ueHBtIFstLnBpeG1hcHNdcXVlc3QueHBtCitndWlfYXRoZW5hLm9iaiA6IGd1aV9hdGhlbmEuYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIFwKKyBndWkuaCBndWlfYmV2YWwuaCBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggXAorIGdsb2JhbHMuaCBmYXJzaS5oIGFyYWJpYy5oIGd1aV9hdF9zYi5oCitndWlfZ3RrX3gxMS5vYmogOiBndWlfZ3RrX3gxMS5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggXAorIGd1aS5oIGd1aV9iZXZhbC5oIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBcCisgZ2xvYmFscy5oIGZhcnNpLmggYXJhYmljLmggZ3VpX2d0a19mLmggWy0ucnVudGltZV12aW0zMngzMi54cG0gXAorIFstLnJ1bnRpbWVddmltMTZ4MTYueHBtIFstLnJ1bnRpbWVddmltNDh4NDgueHBtCitndWlfeDExLm9iaiA6IGd1aV94MTEuYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIFwKKyBndWkuaCBndWlfYmV2YWwuaCBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggXAorIGdsb2JhbHMuaCBmYXJzaS5oIGFyYWJpYy5oIFstLnJ1bnRpbWVddmltMzJ4MzIueHBtIFwKKyBbLS5ydW50aW1lXXZpbTE2eDE2LnhwbSBbLS5ydW50aW1lXXZpbTQ4eDQ4LnhwbSBbLS5waXhtYXBzXXRiX25ldy54cG0gXAorIFstLnBpeG1hcHNddGJfb3Blbi54cG0gWy0ucGl4bWFwc110Yl9jbG9zZS54cG0gWy0ucGl4bWFwc110Yl9zYXZlLnhwbSBcCisgWy0ucGl4bWFwc110Yl9wcmludC54cG0gWy0ucGl4bWFwc110Yl9jdXQueHBtIFstLnBpeG1hcHNddGJfY29weS54cG0gXAorIFstLnBpeG1hcHNddGJfcGFzdGUueHBtIFstLnBpeG1hcHNddGJfZmluZC54cG0gXAorIFstLnBpeG1hcHNddGJfZmluZF9uZXh0LnhwbSBbLS5waXhtYXBzXXRiX2ZpbmRfcHJldi54cG0gXAorIFstLnBpeG1hcHNddGJfZmluZF9oZWxwLnhwbSBbLS5waXhtYXBzXXRiX2V4aXQueHBtIFwKKyBbLS5waXhtYXBzXXRiX3VuZG8ueHBtIFstLnBpeG1hcHNddGJfcmVkby54cG0gWy0ucGl4bWFwc110Yl9oZWxwLnhwbSBcCisgWy0ucGl4bWFwc110Yl9tYWNyby54cG0gWy0ucGl4bWFwc110Yl9tYWtlLnhwbSBcCisgWy0ucGl4bWFwc110Yl9zYXZlX2FsbC54cG0gWy0ucGl4bWFwc110Yl9qdW1wLnhwbSBcCisgWy0ucGl4bWFwc110Yl9jdGFncy54cG0gWy0ucGl4bWFwc110Yl9sb2FkX3Nlc3Npb24ueHBtIFwKKyBbLS5waXhtYXBzXXRiX3NhdmVfc2Vzc2lvbi54cG0gWy0ucGl4bWFwc110Yl9uZXdfc2Vzc2lvbi54cG0gXAorIFstLnBpeG1hcHNddGJfYmxhbmsueHBtIFstLnBpeG1hcHNddGJfbWF4aW1pemUueHBtIFwKKyBbLS5waXhtYXBzXXRiX3NwbGl0LnhwbSBbLS5waXhtYXBzXXRiX21pbmltaXplLnhwbSBcCisgWy0ucGl4bWFwc110Yl9zaGVsbC54cG0gWy0ucGl4bWFwc110Yl9yZXBsYWNlLnhwbSBcCisgWy0ucGl4bWFwc110Yl92c3BsaXQueHBtIFstLnBpeG1hcHNddGJfbWF4d2lkdGgueHBtIFwKKyBbLS5waXhtYXBzXXRiX21pbndpZHRoLnhwbQorZ3VpX2F0X3NiLm9iaiA6IGd1aV9hdF9zYi5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggXAorIGd1aS5oIGd1aV9iZXZhbC5oIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBcCisgZ2xvYmFscy5oIGZhcnNpLmggYXJhYmljLmggZ3VpX2F0X3NiLmgKK2d1aV9hdF9mcy5vYmogOiBndWlfYXRfZnMuYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIFwKKyBndWkuaCBndWlfYmV2YWwuaCBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggXAorIGdsb2JhbHMuaCBmYXJzaS5oIGFyYWJpYy5oIGd1aV9hdF9zYi5oCitwdHkub2JqIDogcHR5LmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggICBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIGd1aS5oIGd1aV9iZXZhbC5oIFwKKyBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggZ2xvYmFscy5oIGZhcnNpLmggXAorIGFyYWJpYy5oCitoYW5ndWxpbi5vYmogOiBoYW5ndWxpbi5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggXAorIGd1aS5oIGd1aV9iZXZhbC5oIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBcCisgZ2xvYmFscy5oIGZhcnNpLmggYXJhYmljLmgKK2lmX3Blcmwub2JqIDogWy5hdXRvXWlmX3BlcmwuYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIFwKKyBndWkuaCBndWlfYmV2YWwuaCBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggXAorIGdsb2JhbHMuaCBmYXJzaS5oIGFyYWJpYy5oCitpZl9wZXJsc2Zpby5vYmogOiBpZl9wZXJsc2Zpby5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggXAorIGd1aS5oIGd1aV9iZXZhbC5oIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBcCisgZ2xvYmFscy5oIGZhcnNpLmggYXJhYmljLmgKK2lmX3B5dGhvbi5vYmogOiBpZl9weXRob24uYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIFwKKyBndWkuaCBndWlfYmV2YWwuaCBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggXAorIGdsb2JhbHMuaCBmYXJzaS5oIGFyYWJpYy5oCitpZl90Y2wub2JqIDogaWZfdGNsLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBcCisgZ3VpLmggZ3VpX2JldmFsLmggWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIFwKKyBnbG9iYWxzLmggZmFyc2kuaCBhcmFiaWMuaAoraWZfcnVieS5vYmogOiBpZl9ydWJ5LmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBcCisgZ3VpLmggZ3VpX2JldmFsLmggWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIFwKKyBnbG9iYWxzLmggZmFyc2kuaCBhcmFiaWMuaCB2ZXJzaW9uLmgKK2lmX3NuaWZmLm9iaiA6IGlmX3NuaWZmLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBcCisgZ3VpLmggZ3VpX2JldmFsLmggWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIFwKKyBnbG9iYWxzLmggZmFyc2kuaCBhcmFiaWMuaCBvc191bml4eC5oCitndWlfYmV2YWwub2JqIDogZ3VpX2JldmFsLmMgdmltLmggWy5hdXRvXWNvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggXAorIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBcCisgZ3VpLmggZ3VpX2JldmFsLmggWy5wcm90b11ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIFwKKyBnbG9iYWxzLmggZmFyc2kuaCBhcmFiaWMuaAord29ya3Nob3Aub2JqIDogd29ya3Nob3AuYyBbLmF1dG9dY29uZmlnLmggaW50ZWdyYXRpb24uaCB2aW0uaCBmZWF0dXJlLmggXAorIG9zX3VuaXguaCBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggXAorIHJlZ2V4cC5oIGd1aS5oIGd1aV9iZXZhbC5oIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggXAorIHByb3RvLmggZ2xvYmFscy5oIGZhcnNpLmggYXJhYmljLmggdmVyc2lvbi5oIHdvcmtzaG9wLmgKK3dzZGVidWcub2JqIDogd3NkZWJ1Zy5jCitpbnRlZ3JhdGlvbi5vYmogOiBpbnRlZ3JhdGlvbi5jIHZpbS5oIFsuYXV0b11jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oIFwKKyBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggXAorIGd1aS5oIGd1aV9iZXZhbC5oIFsucHJvdG9dZ3VpX2JldmFsLnBybyBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBcCisgZ2xvYmFscy5oIGZhcnNpLmggYXJhYmljLmggaW50ZWdyYXRpb24uaAorbmV0YmVhbnMub2JqIDogbmV0YmVhbnMuYyB2aW0uaCBbLmF1dG9dY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCBcCisgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIFwKKyBndWkuaCBndWlfYmV2YWwuaCBbLnByb3RvXWd1aV9iZXZhbC5wcm8gb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggXAorIGdsb2JhbHMuaCBmYXJzaS5oIGFyYWJpYy5oIHZlcnNpb24uaApkaWZmIC0tZ2l0IGEvc3JjL2F1dG8vY29uZmlndXJlIGIvc3JjL2F1dG8vY29uZmlndXJlCmluZGV4IGUzMGMyZGQuLmRkYWIwNDEgMTAwNzU1Ci0tLSBhL3NyYy9hdXRvL2NvbmZpZ3VyZQorKysgYi9zcmMvYXV0by9jb25maWd1cmUKQEAgLTY5MzIsMTUgKzY5MzIsMzYgQEAKIGlmIHRlc3QgLW4gIiR3aXRoX3RsaWIiOyB0aGVuCiAgIGVjaG8gIiRhY190IiIkd2l0aF90bGliIiAxPiY2CiAgIExJQlM9IiRMSUJTIC1sJHdpdGhfdGxpYiIKKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGxpbmtpbmcgd2l0aCAkd2l0aF90bGliIGxpYnJhcnkiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjY5Mzc6IGNoZWNraW5nIGZvciBsaW5raW5nIHdpdGggJHdpdGhfdGxpYiBsaWJyYXJ5IiA+JjUKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjkzOSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Njk0NjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIk9LIiAxPiY2CiBlbHNlCi0gIGVjaG8gIiRhY190IiJhdXRvbWF0aWMgdGVybWluYWwgbGlicmFyeSBzZWxlY3Rpb24iIDE+JjYKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBGQUlMRUQiIDE+JjI7IGV4aXQgMTsgfQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorICAgIG9saWJzPSIkTElCUyIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiImVtcHR5OiBhdXRvbWF0aWMgdGVybWluYWwgbGlicmFyeSBzZWxlY3Rpb24iIDE+JjYKICAgICAgICAgICAgIGNhc2UgImB1bmFtZSAtcyAyPi9kZXYvbnVsbGAiIGluCiAJT1NGMSkJdGxpYnM9Im5jdXJzZXMgY3Vyc2VzIHRlcm1saWIgdGVybWNhcCI7OwogCSopCXRsaWJzPSJuY3Vyc2VzIHRlcm1saWIgdGVybWNhcCBjdXJzZXMiOzsKICAgZXNhYwogICBmb3IgbGlibmFtZSBpbiAkdGxpYnM7IGRvCiAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHRnZXRlbnQgaW4gLWwke2xpYm5hbWV9IiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo2OTQ0OiBjaGVja2luZyBmb3IgdGdldGVudCBpbiAtbCR7bGlibmFtZX0iID4mNQorZWNobyAiY29uZmlndXJlOjY5NjU6IGNoZWNraW5nIGZvciB0Z2V0ZW50IGluIC1sJHtsaWJuYW1lfSIgPiY1CiBhY19saWJfdmFyPWBlY2hvICR7bGlibmFtZX0nXyd0Z2V0ZW50IHwgc2VkICd5JS4vKy0lX19wXyUnYAogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CkBAIC02OTQ4LDcgKzY5NjksNyBAQAogICBhY19zYXZlX0xJQlM9IiRMSUJTIgogTElCUz0iLWwke2xpYm5hbWV9ICAkTElCUyIKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDY5NTIgImNvbmZpZ3VyZSIKKyNsaW5lIDY5NzMgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KIC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKQEAgLTY5NTksNyArNjk4MCw3IEBACiB0Z2V0ZW50KCkKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2OTYzOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Njk4NDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKIGVsc2UKQEAgLTY5OTEsNyArNzAxMiw3IEBACiAgIHJlcz0iRkFJTCIKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgNjk5NSAiY29uZmlndXJlIgorI2xpbmUgNzAxNiAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKICNpZmRlZiBIQVZFX1RFUk1DQVBfSApAQCAtNjk5OSw3ICs3MDIwLDcgQEAKICNlbmRpZgogbWFpbigpIHtjaGFyICpzOyBzPShjaGFyICopdGdvdG8oIiVwMSVkIiwgMCwgMSk7IGV4aXQoMCk7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MDAzOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjcwMjQ6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKIHRoZW4KICAgcmVzPSJPSyIKIGVsc2UKQEAgLTcwMTgsMTUgKzcwMzksNDMgQEAKICAgICAgIExJQlM9IiRvbGlicyIKICAgICBmaQogICBkb25lCisgIGlmIHRlc3QgIngkb2xpYnMiID0gIngkTElCUyI7IHRoZW4KKyAgICBlY2hvICIkYWNfdCIibm8gdGVybWluYWwgbGlicmFyeSBmb3VuZCIgMT4mNgorICBmaQogZmkKLWlmIHRlc3QgIngkb2xpYnMiICE9ICJ4JExJQlMiOyB0aGVuCi0gIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgd2UgdGFsayB0ZXJtaW5mbyIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6NzAyNTogY2hlY2tpbmcgd2hldGhlciB3ZSB0YWxrIHRlcm1pbmZvIiA+JjUKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKworaWYgdGVzdCAieCRvbGlicyIgPSAieCRMSUJTIjsgdGhlbgorICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgdGdldGVudCgpIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3MDUwOiBjaGVja2luZyBmb3IgdGdldGVudCgpIiA+JjUKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzA1MiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworY2hhciBzWzEwMDAwXTsgaW50IHJlcyA9IHRnZXRlbnQocywgInRoaXN0ZXJtaW5hbGRvZXNub3RleGlzdCIpOworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjcwNTk6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBOT1QgRk9VTkQhCisgICAgICBZb3UgbmVlZCB0byBpbnN0YWxsIGEgdGVybWluYWwgbGlicmFyeTsgZm9yIGV4YW1wbGUgbmN1cnNlcy4KKyAgICAgIE9yIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgd2l0aCAtLXdpdGgtdGxpYi4iIDE+JjI7IGV4aXQgMTsgfQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB3ZSB0YWxrIHRlcm1pbmZvIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3MDc0OiBjaGVja2luZyB3aGV0aGVyIHdlIHRhbGsgdGVybWluZm8iID4mNQoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBmYWlsZWQgdG8gY29tcGlsZSB0ZXN0IHByb2dyYW0uIiAxPiYyOyBleGl0IDE7IH0KIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgNzAzMCAiY29uZmlndXJlIgorI2xpbmUgNzA3OSAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKICNpZmRlZiBIQVZFX1RFUk1DQVBfSApAQCAtNzAzNSw3ICs3MDg0LDcgQEAKIG1haW4oKQoge2NoYXIgKnM7IHM9KGNoYXIgKil0Z290bygiJXAxJWQiLCAwLCAxKTsgZXhpdCghc3RyY21wKHM9PTAgPyAiIiA6IHMsICIxIikpOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzAzOTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MDg4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCiB0aGVuCiAgIGVjaG8gIiRhY190IiJubyAtLSB3ZSBhcmUgaW4gdGVybWNhcCBsYW5kIiAxPiY2CiBlbHNlCkBAIC03MDUwLDE4ICs3MDk5LDE1IEBACiBybSAtZnIgY29uZnRlc3QqCiBmaQogCi1lbHNlCi0gIGVjaG8gIiRhY190IiJub25lIGZvdW5kIiAxPiY2Ci1maQogCiBpZiB0ZXN0ICJ4JG9saWJzIiAhPSAieCRMSUJTIjsgdGhlbgogICBlY2hvICRhY19uICJjaGVja2luZyB3aGF0IHRnZXRlbnQoKSByZXR1cm5zIGZvciBhbiB1bmtub3duIHRlcm1pbmFsIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo3MDYwOiBjaGVja2luZyB3aGF0IHRnZXRlbnQoKSByZXR1cm5zIGZvciBhbiB1bmtub3duIHRlcm1pbmFsIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo3MTA2OiBjaGVja2luZyB3aGF0IHRnZXRlbnQoKSByZXR1cm5zIGZvciBhbiB1bmtub3duIHRlcm1pbmFsIiA+JjUKICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBmYWlsZWQgdG8gY29tcGlsZSB0ZXN0IHByb2dyYW0uIiAxPiYyOyBleGl0IDE7IH0KIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgNzA2NSAiY29uZmlndXJlIgorI2xpbmUgNzExMSAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKICNpZmRlZiBIQVZFX1RFUk1DQVBfSApAQCAtNzA3MCw3ICs3MTE2LDcgQEAKIG1haW4oKQoge2NoYXIgc1sxMDAwMF07IGludCByZXMgPSB0Z2V0ZW50KHMsICJ0aGlzdGVybWluYWxkb2Vzbm90ZXhpc3QiKTsgZXhpdChyZXMgIT0gMCk7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MDc0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjcxMjA6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKIHRoZW4KICAgZWNobyAiJGFjX3QiInplcm8iIDE+JjY7IGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgogI2RlZmluZSBUR0VURU5UX1pFUk9fRVJSIDAKQEAgLTcwODgsOSArNzEzNCw5IEBACiBmaQogCiBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRlcm1jYXAuaCBjb250YWlucyBvc3BlZWQiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjcwOTI6IGNoZWNraW5nIHdoZXRoZXIgdGVybWNhcC5oIGNvbnRhaW5zIG9zcGVlZCIgPiY1CitlY2hvICJjb25maWd1cmU6NzEzODogY2hlY2tpbmcgd2hldGhlciB0ZXJtY2FwLmggY29udGFpbnMgb3NwZWVkIiA+JjUKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDcwOTQgImNvbmZpZ3VyZSIKKyNsaW5lIDcxNDAgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiAjaWZkZWYgSEFWRV9URVJNQ0FQX0gKQEAgLTcxMDEsNyArNzE0Nyw3IEBACiBvc3BlZWQgPSAyMDAwMAogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjcxMDU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MTUxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OyBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKICNkZWZpbmUgSEFWRV9PU1BFRUQgMQpAQCAtNzExMyw5ICs3MTU5LDkgQEAKICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBlY2hvICIkYWNfdCIibm8iIDE+JjYKIAllY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIG9zcGVlZCBjYW4gYmUgZXh0ZXJuIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo3MTE3OiBjaGVja2luZyB3aGV0aGVyIG9zcGVlZCBjYW4gYmUgZXh0ZXJuIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo3MTYzOiBjaGVja2luZyB3aGV0aGVyIG9zcGVlZCBjYW4gYmUgZXh0ZXJuIiA+JjUKIAljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA3MTE5ICJjb25maWd1cmUiCisjbGluZSA3MTY1ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2lmZGVmIEhBVkVfVEVSTUNBUF9ICkBAIC03MTI3LDcgKzcxNzMsNyBAQAogb3NwZWVkID0gMjAwMDAKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MTMxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzE3NzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCiAjZGVmaW5lIE9TUEVFRF9FWFRFUk4gMQpAQCAtNzE0NSw5ICs3MTkxLDkgQEAKIHJtIC1mIGNvbmZ0ZXN0KgogCiBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRlcm1jYXAuaCBjb250YWlucyBVUCwgQkMgYW5kIFBDIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo3MTQ5OiBjaGVja2luZyB3aGV0aGVyIHRlcm1jYXAuaCBjb250YWlucyBVUCwgQkMgYW5kIFBDIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo3MTk1OiBjaGVja2luZyB3aGV0aGVyIHRlcm1jYXAuaCBjb250YWlucyBVUCwgQkMgYW5kIFBDIiA+JjUKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDcxNTEgImNvbmZpZ3VyZSIKKyNsaW5lIDcxOTcgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiAjaWZkZWYgSEFWRV9URVJNQ0FQX0gKQEAgLTcxNTgsNyArNzIwNCw3IEBACiBpZiAoVVAgPT0gMCAmJiBCQyA9PSAwKSBQQyA9IDEKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MTYyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzIwODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCiAjZGVmaW5lIEhBVkVfVVBfQkNfUEMgMQpAQCAtNzE3MCw5ICs3MjE2LDkgQEAKICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBlY2hvICIkYWNfdCIibm8iIDE+JjYKIAllY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIFVQLCBCQyBhbmQgUEMgY2FuIGJlIGV4dGVybiIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6NzE3NDogY2hlY2tpbmcgd2hldGhlciBVUCwgQkMgYW5kIFBDIGNhbiBiZSBleHRlcm4iID4mNQorZWNobyAiY29uZmlndXJlOjcyMjA6IGNoZWNraW5nIHdoZXRoZXIgVVAsIEJDIGFuZCBQQyBjYW4gYmUgZXh0ZXJuIiA+JjUKIAljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA3MTc2ICJjb25maWd1cmUiCisjbGluZSA3MjIyICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2lmZGVmIEhBVkVfVEVSTUNBUF9ICkBAIC03MTg0LDcgKzcyMzAsNyBAQAogaWYgKFVQID09IDAgJiYgQkMgPT0gMCkgUEMgPSAxCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzE4ODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjcyMzQ6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjY7IGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgogI2RlZmluZSBVUF9CQ19QQ19FWFRFUk4gMQpAQCAtNzIwMiw5ICs3MjQ4LDkgQEAKIHJtIC1mIGNvbmZ0ZXN0KgogCiBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRwdXRzKCkgdXNlcyBvdXRmdW50eXBlIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo3MjA2OiBjaGVja2luZyB3aGV0aGVyIHRwdXRzKCkgdXNlcyBvdXRmdW50eXBlIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo3MjUyOiBjaGVja2luZyB3aGV0aGVyIHRwdXRzKCkgdXNlcyBvdXRmdW50eXBlIiA+JjUKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDcyMDggImNvbmZpZ3VyZSIKKyNsaW5lIDcyNTQgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiAjaWZkZWYgSEFWRV9URVJNQ0FQX0gKQEAgLTcyMTUsNyArNzI2MSw3IEBACiBleHRlcm4gaW50IHh4KCk7IHRwdXRzKCJ0ZXN0IiwgMSwgKG91dGZ1bnR5cGUpeHgpCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzIxOTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MjY1OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCiAjZGVmaW5lIEhBVkVfT1VURlVOVFlQRSAxCkBAIC03MjMwLDkgKzcyNzYsOSBAQAogcm0gLWYgY29uZnRlc3QqCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgc3lzL3NlbGVjdC5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo3MjM0OiBjaGVja2luZyB3aGV0aGVyIHN5cy9zZWxlY3QuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZCIgPiY1CitlY2hvICJjb25maWd1cmU6NzI4MDogY2hlY2tpbmcgd2hldGhlciBzeXMvc2VsZWN0LmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQiID4mNQogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgNzIzNiAiY29uZmlndXJlIgorI2xpbmUgNzI4MiAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTcyNDIsNyArNzI4OCw3IEBACiAKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MjQ2OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjcyOTI6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CiAJCQljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKQEAgLTcyNTksNyArNzMwNSw3IEBACiAKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIC9kZXYvcHRjIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo3MjYzOiBjaGVja2luZyBmb3IgL2Rldi9wdGMiID4mNQorZWNobyAiY29uZmlndXJlOjczMDk6IGNoZWNraW5nIGZvciAvZGV2L3B0YyIgPiY1CiBpZiB0ZXN0IC1yIC9kZXYvcHRjOyB0aGVuCiAgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgogI2RlZmluZSBIQVZFX0RFVl9QVEMgMQpAQCAtNzI3MSwxNyArNzMxNywxNyBAQAogZmkKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIFNWUjQgcHR5cyIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6NzI3NTogY2hlY2tpbmcgZm9yIFNWUjQgcHR5cyIgPiY1CitlY2hvICJjb25maWd1cmU6NzMyMTogY2hlY2tpbmcgZm9yIFNWUjQgcHR5cyIgPiY1CiBpZiB0ZXN0IC1jIC9kZXYvcHRteCA7IHRoZW4KICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgNzI3OCAiY29uZmlndXJlIgorI2xpbmUgNzMyNCAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIGludCBtYWluKCkgewogcHRzbmFtZSgwKTtncmFudHB0KDApO3VubG9ja3B0KDApOwogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjcyODU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MzMxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OyBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKICNkZWZpbmUgSEFWRV9TVlI0X1BUWVMgMQpAQCAtNzI5OSwxNCArNzM0NSwxNCBAQAogZmkKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHB0eXJhbmdlcyIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6NzMwMzogY2hlY2tpbmcgZm9yIHB0eXJhbmdlcyIgPiY1CitlY2hvICJjb25maWd1cmU6NzM0OTogY2hlY2tpbmcgZm9yIHB0eXJhbmdlcyIgPiY1CiBpZiB0ZXN0IC1kIC9kZXYvcHR5bSA7IHRoZW4KICAgcGRpcj0nL2Rldi9wdHltJwogZWxzZQogICBwZGlyPScvZGV2JwogZmkKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDczMTAgImNvbmZpZ3VyZSIKKyNsaW5lIDczNTYgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2lmZGVmIE1fVU5JWAogICAgeWVzOwpAQCAtNzM0MCwxMyArNzM4NiwxMyBAQAogZmkKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZGVmYXVsdCB0dHkgcGVybWlzc2lvbnMvZ3JvdXAiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjczNDQ6IGNoZWNraW5nIGRlZmF1bHQgdHR5IHBlcm1pc3Npb25zL2dyb3VwIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo3MzkwOiBjaGVja2luZyBkZWZhdWx0IHR0eSBwZXJtaXNzaW9ucy9ncm91cCIgPiY1CiBybSAtZiBjb25mdGVzdF9ncnAKIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCiAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogZmFpbGVkIHRvIGNvbXBpbGUgdGVzdCBwcm9ncmFtIiAxPiYyOyBleGl0IDE7IH0KIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgNzM1MCAiY29uZmlndXJlIgorI2xpbmUgNzM5NiAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTczNzgsNyArNzQyNCw3IEBACiB9CiAKIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MzgyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc0Mjg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKIHRoZW4KICAgCiAgICAgaWYgdGVzdCAtZiBjb25mdGVzdF9ncnA7IHRoZW4KQEAgLTc0MDksMTIgKzc0NTUsMTIgQEAKIAogCiBlY2hvICRhY19uICJjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjc0MTM6IGNoZWNraW5nIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyIgPiY1CitlY2hvICJjb25maWd1cmU6NzQ1OTogY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX3NpZ25hbCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDc0MTggImNvbmZpZ3VyZSIKKyNsaW5lIDc0NjQgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgpAQCAtNzQzMSw3ICs3NDc3LDcgQEAKIGludCBpOwogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc0MzU6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzQ4MTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGFjX2N2X3R5cGVfc2lnbmFsPXZvaWQKIGVsc2UKQEAgLTc0NjMsOSArNzUwOSw5IEBACiBmaQogCiBlY2hvICRhY19uICJjaGVja2luZyBmb3Igc3RydWN0IHNpZ2NvbnRleHQiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjc0Njc6IGNoZWNraW5nIGZvciBzdHJ1Y3Qgc2lnY29udGV4dCIgPiY1CitlY2hvICJjb25maWd1cmU6NzUxMzogY2hlY2tpbmcgZm9yIHN0cnVjdCBzaWdjb250ZXh0IiA+JjUKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDc0NjkgImNvbmZpZ3VyZSIKKyNsaW5lIDc1MTUgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiAjaW5jbHVkZSA8c2lnbmFsLmg+CkBAIC03NDc5LDcgKzc1MjUsNyBAQAogCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzQ4MzogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3NTI5OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZWNobyAiJGFjX3QiInllcyIgMT4mNgogCQljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKQEAgLTc0OTUsMTIgKzc1NDEsMTIgQEAKIHJtIC1mIGNvbmZ0ZXN0KgogCiBlY2hvICRhY19uICJjaGVja2luZyBnZXRjd2QgaW1wbGVtZW50YXRpb24iIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjc0OTk6IGNoZWNraW5nIGdldGN3ZCBpbXBsZW1lbnRhdGlvbiIgPiY1CitlY2hvICJjb25maWd1cmU6NzU0NTogY2hlY2tpbmcgZ2V0Y3dkIGltcGxlbWVudGF0aW9uIiA+JjUKIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCiAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogZmFpbGVkIHRvIGNvbXBpbGUgdGVzdCBwcm9ncmFtIiAxPiYyOyBleGl0IDE7IH0KIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgNzUwNCAiY29uZmlndXJlIgorI2xpbmUgNzU1MCAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIGNoYXIgKmRhZ2dlcltdID0geyAiSUZTPXB3ZCIsIDAgfTsKQEAgLTc1MTIsNyArNzU1OCw3IEBACiAgIHJldHVybiBnZXRjd2QoYnVmZmVyLCA1MDApID8gMCA6IDE7CiB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzUxNjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3NTYyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCiB0aGVuCiAgIGVjaG8gIiRhY190IiJpdCBpcyB1c2FibGUiIDE+JjYKIGVsc2UKQEAgLTc1MzcsMTIgKzc1ODMsMTIgQEAKIAlzdHJuaWNtcCBzdHJwYnJrIHN0cnRvbCB0Z2V0ZW50IHRvd2xvd2VyIHRvd3VwcGVyIHVzbGVlcCB1dGltZSB1dGltZXMKIGRvCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX2Z1bmMiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjc1NDE6IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitlY2hvICJjb25maWd1cmU6NzU4NzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9mdW5jXyRhY19mdW5jJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgNzU0NiAiY29uZmlndXJlIgorI2xpbmUgNzU5MiAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCiAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYygpOyBiZWxvdy4gICovCkBAIC03NTY1LDcgKzc2MTEsNyBAQAogCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzU2OTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc2MTU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGV2YWwgImFjX2N2X2Z1bmNfJGFjX2Z1bmM9eWVzIgogZWxzZQpAQCAtNzU5MSw5ICs3NjM3LDkgQEAKIAogCiBlY2hvICRhY19uICJjaGVja2luZyBmb3Igc3RfYmxrc2l6ZSIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6NzU5NTogY2hlY2tpbmcgZm9yIHN0X2Jsa3NpemUiID4mNQorZWNobyAiY29uZmlndXJlOjc2NDE6IGNoZWNraW5nIGZvciBzdF9ibGtzaXplIiA+JjUKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDc1OTcgImNvbmZpZ3VyZSIKKyNsaW5lIDc2NDMgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CkBAIC03NjA1LDcgKzc2NTEsNyBAQAogCW4gPSAoaW50KXN0LnN0X2Jsa3NpemU7CiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzYwOTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3NjU1OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCiAjZGVmaW5lIEhBVkVfU1RfQkxLU0laRSAxCkBAIC03NjIwLDE4ICs3NjY2LDE4IEBACiBybSAtZiBjb25mdGVzdCoKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciBzdGF0KCkgaWdub3JlcyBhIHRyYWlsaW5nIHNsYXNoIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo3NjI0OiBjaGVja2luZyB3aGV0aGVyIHN0YXQoKSBpZ25vcmVzIGEgdHJhaWxpbmcgc2xhc2giID4mNQorZWNobyAiY29uZmlndXJlOjc2NzA6IGNoZWNraW5nIHdoZXRoZXIgc3RhdCgpIGlnbm9yZXMgYSB0cmFpbGluZyBzbGFzaCIgPiY1CiBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgogICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGZhaWxlZCB0byBjb21waWxlIHRlc3QgcHJvZ3JhbSIgMT4mMjsgZXhpdCAxOyB9CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDc2MjkgImNvbmZpZ3VyZSIKKyNsaW5lIDc2NzUgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiBtYWluKCkge3N0cnVjdCBzdGF0IHN0OyAgZXhpdChzdGF0KCJjb25maWd1cmUvIiwgJnN0KSAhPSAwKTsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc2MzU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzY4MTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAogdGhlbgogICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OyBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKICNkZWZpbmUgU1RBVF9JR05PUkVTX1NMQVNIIDEKQEAgLTc2NDgsMTEgKzc2OTQsMTEgQEAKIAogCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgaWNvbnZfb3BlbigpIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo3NjUyOiBjaGVja2luZyBmb3IgaWNvbnZfb3BlbigpIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo3Njk4OiBjaGVja2luZyBmb3IgaWNvbnZfb3BlbigpIiA+JjUKIHNhdmVfTElCUz0iJExJQlMiCiBMSUJTPSIkTElCUyAtbGljb252IgogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgNzY1NiAiY29uZmlndXJlIgorI2xpbmUgNzcwMiAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKICNpZmRlZiBIQVZFX0lDT05WX0gKQEAgLTc2NjMsNyArNzcwOSw3IEBACiBpY29udl9vcGVuKCJmciIsICJ0byIpOwogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc2Njc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3NzEzOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBlY2hvICIkYWNfdCIieWVzOyB3aXRoIC1saWNvbnYiIDE+JjY7IGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgogI2RlZmluZSBIQVZFX0lDT05WIDEKQEAgLTc2NzUsNyArNzcyMSw3IEBACiAgIHJtIC1yZiBjb25mdGVzdCoKICAgTElCUz0iJHNhdmVfTElCUyIKICAgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA3Njc5ICJjb25maWd1cmUiCisjbGluZSA3NzI1ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2lmZGVmIEhBVkVfSUNPTlZfSApAQCAtNzY4Niw3ICs3NzMyLDcgQEAKIGljb252X29wZW4oImZyIiwgInRvIik7CiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzY5MDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc3MzY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjY7IGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgogI2RlZmluZSBIQVZFX0lDT05WIDEKQEAgLTc3MDQsOSArNzc1MCw5IEBACiAKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvKENPREVTRVQpIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo3NzA4OiBjaGVja2luZyBmb3IgbmxfbGFuZ2luZm8oQ09ERVNFVCkiID4mNQorZWNobyAiY29uZmlndXJlOjc3NTQ6IGNoZWNraW5nIGZvciBubF9sYW5naW5mbyhDT0RFU0VUKSIgPiY1CiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA3NzEwICJjb25maWd1cmUiCisjbGluZSA3NzU2ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2lmZGVmIEhBVkVfTEFOR0lORk9fSApAQCAtNzcxNyw3ICs3NzYzLDcgQEAKIGNoYXIgKmNzID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7CiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzcyMTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc3Njc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjY7IGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgogI2RlZmluZSBIQVZFX05MX0xBTkdJTkZPX0NPREVTRVQgMQpAQCAtNzczMiw3ICs3Nzc4LDcgQEAKIHJtIC1mIGNvbmZ0ZXN0KgogCiBlY2hvICRhY19uICJjaGVja2luZyAtLWRpc2FibGUtYWNsIGFyZ3VtZW50IiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo3NzM2OiBjaGVja2luZyAtLWRpc2FibGUtYWNsIGFyZ3VtZW50IiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo3NzgyOiBjaGVja2luZyAtLWRpc2FibGUtYWNsIGFyZ3VtZW50IiA+JjUKICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hY2wgb3IgLS1kaXNhYmxlLWFjbCB3YXMgZ2l2ZW4uCiBpZiB0ZXN0ICIke2VuYWJsZV9hY2wrc2V0fSIgPSBzZXQ7IHRoZW4KICAgZW5hYmxldmFsPSIkZW5hYmxlX2FjbCIKQEAgLTc3NDQsNyArNzc5MCw3IEBACiBpZiB0ZXN0ICIkZW5hYmxlX2FjbCIgPSAieWVzIjsgdGhlbgogZWNobyAiJGFjX3QiIm5vIiAxPiY2CiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgYWNsX2dldF9maWxlIGluIC1scG9zaXgxZSIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6Nzc0ODogY2hlY2tpbmcgZm9yIGFjbF9nZXRfZmlsZSBpbiAtbHBvc2l4MWUiID4mNQorZWNobyAiY29uZmlndXJlOjc3OTQ6IGNoZWNraW5nIGZvciBhY2xfZ2V0X2ZpbGUgaW4gLWxwb3NpeDFlIiA+JjUKIGFjX2xpYl92YXI9YGVjaG8gcG9zaXgxZSdfJ2FjbF9nZXRfZmlsZSB8IHNlZCAneSUuLystJV9fcF8lJ2AKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgpAQCAtNzc1Miw3ICs3Nzk4LDcgQEAKICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKIExJQlM9Ii1scG9zaXgxZSAgJExJQlMiCiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA3NzU2ICJjb25maWd1cmUiCisjbGluZSA3ODAyICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCiAvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCkBAIC03NzYzLDcgKzc4MDksNyBAQAogYWNsX2dldF9maWxlKCkKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3NzY3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzgxMzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKIGVsc2UKQEAgLTc3ODIsNyArNzgyOCw3IEBACiBlbHNlCiAgIGVjaG8gIiRhY190IiJubyIgMT4mNgogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGFjbF9nZXRfZmlsZSBpbiAtbGFjbCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6Nzc4NjogY2hlY2tpbmcgZm9yIGFjbF9nZXRfZmlsZSBpbiAtbGFjbCIgPiY1CitlY2hvICJjb25maWd1cmU6NzgzMjogY2hlY2tpbmcgZm9yIGFjbF9nZXRfZmlsZSBpbiAtbGFjbCIgPiY1CiBhY19saWJfdmFyPWBlY2hvIGFjbCdfJ2FjbF9nZXRfZmlsZSB8IHNlZCAneSUuLystJV9fcF8lJ2AKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgpAQCAtNzc5MCw3ICs3ODM2LDcgQEAKICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKIExJQlM9Ii1sYWNsICAkTElCUyIKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDc3OTQgImNvbmZpZ3VyZSIKKyNsaW5lIDc4NDAgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KIC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKQEAgLTc4MDEsNyArNzg0Nyw3IEBACiBhY2xfZ2V0X2ZpbGUoKQogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc4MDU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3ODUxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgogZWxzZQpAQCAtNzgxOCw3ICs3ODY0LDcgQEAKICAgZWNobyAiJGFjX3QiInllcyIgMT4mNgogICBMSUJTPSIkTElCUyAtbGFjbCIKIAkJICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgZmdldHhhdHRyIGluIC1sYXR0ciIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6NzgyMjogY2hlY2tpbmcgZm9yIGZnZXR4YXR0ciBpbiAtbGF0dHIiID4mNQorZWNobyAiY29uZmlndXJlOjc4Njg6IGNoZWNraW5nIGZvciBmZ2V0eGF0dHIgaW4gLWxhdHRyIiA+JjUKIGFjX2xpYl92YXI9YGVjaG8gYXR0cidfJ2ZnZXR4YXR0ciB8IHNlZCAneSUuLystJV9fcF8lJ2AKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgpAQCAtNzgyNiw3ICs3ODcyLDcgQEAKICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKIExJQlM9Ii1sYXR0ciAgJExJQlMiCiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA3ODMwICJjb25maWd1cmUiCisjbGluZSA3ODc2ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCiAvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCkBAIC03ODM3LDcgKzc4ODMsNyBAQAogZmdldHhhdHRyKCkKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3ODQxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Nzg4NzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKIGVsc2UKQEAgLTc4NjUsOSArNzkxMSw5IEBACiAKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIFBPU0lYIEFDTCBzdXBwb3J0IiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo3ODY5OiBjaGVja2luZyBmb3IgUE9TSVggQUNMIHN1cHBvcnQiID4mNQorZWNobyAiY29uZmlndXJlOjc5MTU6IGNoZWNraW5nIGZvciBQT1NJWCBBQ0wgc3VwcG9ydCIgPiY1CiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA3ODcxICJjb25maWd1cmUiCisjbGluZSA3OTE3ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtNzg4MSw3ICs3OTI3LDcgQEAKIAlhY2xfZnJlZShhY2wpOwogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc4ODU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3OTMxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OyBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKICNkZWZpbmUgSEFWRV9QT1NJWF9BQ0wgMQpAQCAtNzg5Niw5ICs3OTQyLDkgQEAKIHJtIC1mIGNvbmZ0ZXN0KgogCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgU29sYXJpcyBBQ0wgc3VwcG9ydCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6NzkwMDogY2hlY2tpbmcgZm9yIFNvbGFyaXMgQUNMIHN1cHBvcnQiID4mNQorZWNobyAiY29uZmlndXJlOjc5NDY6IGNoZWNraW5nIGZvciBTb2xhcmlzIEFDTCBzdXBwb3J0IiA+JjUKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDc5MDIgImNvbmZpZ3VyZSIKKyNsaW5lIDc5NDggImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiAjaWZkZWYgSEFWRV9TWVNfQUNMX0gKQEAgLTc5MDksNyArNzk1NSw3IEBACiAJCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzkxMzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc5NTk6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjY7IGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgogI2RlZmluZSBIQVZFX1NPTEFSSVNfQUNMIDEKQEAgLTc5MjQsOSArNzk3MCw5IEBACiBybSAtZiBjb25mdGVzdCoKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIEFJWCBBQ0wgc3VwcG9ydCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6NzkyODogY2hlY2tpbmcgZm9yIEFJWCBBQ0wgc3VwcG9ydCIgPiY1CitlY2hvICJjb25maWd1cmU6Nzk3NDogY2hlY2tpbmcgZm9yIEFJWCBBQ0wgc3VwcG9ydCIgPiY1CiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA3OTMwICJjb25maWd1cmUiCisjbGluZSA3OTc2ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2lmZGVmIEhBVkVfU1lTX0FDTF9ICkBAIC03OTQ4LDcgKzc5OTQsNyBAQAogCQogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc5NTI6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3OTk4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OyBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKICNkZWZpbmUgSEFWRV9BSVhfQUNMIDEKQEAgLTc5NjYsNyArODAxMiw3IEBACiBmaQogCiBlY2hvICRhY19uICJjaGVja2luZyAtLWRpc2FibGUtZ3BtIGFyZ3VtZW50IiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo3OTcwOiBjaGVja2luZyAtLWRpc2FibGUtZ3BtIGFyZ3VtZW50IiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo4MDE2OiBjaGVja2luZyAtLWRpc2FibGUtZ3BtIGFyZ3VtZW50IiA+JjUKICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ncG0gb3IgLS1kaXNhYmxlLWdwbSB3YXMgZ2l2ZW4uCiBpZiB0ZXN0ICIke2VuYWJsZV9ncG0rc2V0fSIgPSBzZXQ7IHRoZW4KICAgZW5hYmxldmFsPSIkZW5hYmxlX2dwbSIKQEAgLTc5NzksMTMgKzgwMjUsMTMgQEAKIGlmIHRlc3QgIiRlbmFibGVfZ3BtIiA9ICJ5ZXMiOyB0aGVuCiAgIGVjaG8gIiRhY190IiJubyIgMT4mNgogICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBncG0iIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjc5ODM6IGNoZWNraW5nIGZvciBncG0iID4mNQorZWNobyAiY29uZmlndXJlOjgwMjk6IGNoZWNraW5nIGZvciBncG0iID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J3ZpX2N2X2hhdmVfZ3BtJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgb2xpYnM9IiRMSUJTIiA7IExJQlM9Ii1sZ3BtIgogCWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDc5ODkgImNvbmZpZ3VyZSIKKyNsaW5lIDgwMzUgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPGdwbS5oPgogCSAgICAjaW5jbHVkZSA8bGludXgva2V5Ym9hcmQuaD4KQEAgLTc5OTMsNyArODAzOSw3IEBACiBHcG1fR2V0TGliVmVyc2lvbihOVUxMKTsKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3OTk3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODA0MzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgCSAgICAJICAgIHZpX2N2X2hhdmVfZ3BtPXllcwogZWxzZQpAQCAtODAyMCwxMiArODA2NiwxMiBAQAogZmkKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHZzbnByaW50ZigpIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo4MDI0OiBjaGVja2luZyBmb3IgdnNucHJpbnRmKCkiID4mNQorZWNobyAiY29uZmlndXJlOjgwNzA6IGNoZWNraW5nIGZvciB2c25wcmludGYoKSIgPiY1CiBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgogICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGZhaWxlZCB0byBjb21waWxlIHRlc3QgcHJvZ3JhbSIgMT4mMjsgZXhpdCAxOyB9CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDgwMjkgImNvbmZpZ3VyZSIKKyNsaW5lIDgwNzUgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTgwNDYsNyArODA5Miw3IEBACiAJfQogCSAgICAKIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4MDUwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjgwOTY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKIHRoZW4KICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCiAjZGVmaW5lIEhBVkVfVlNOUFJJTlRGIDEKQEAgLTgwNjQsMTYgKzgxMTAsMTYgQEAKIAogCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgcmVuYW1lIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo4MDY4OiBjaGVja2luZyBmb3IgcmVuYW1lIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo4MTE0OiBjaGVja2luZyBmb3IgcmVuYW1lIiA+JjUKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDgwNzAgImNvbmZpZ3VyZSIKKyNsaW5lIDgxMTYgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiBpbnQgbWFpbigpIHsKIHJlbmFtZSgidGhpcyIsICJ0aGF0IikKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4MDc3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODEyMzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCiAjZGVmaW5lIEhBVkVfUkVOQU1FIDEKQEAgLTgwODgsOSArODEzNCw5IEBACiBybSAtZiBjb25mdGVzdCoKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHN5c2N0bCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6ODA5MjogY2hlY2tpbmcgZm9yIHN5c2N0bCIgPiY1CitlY2hvICJjb25maWd1cmU6ODEzODogY2hlY2tpbmcgZm9yIHN5c2N0bCIgPiY1CiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA4MDk0ICJjb25maWd1cmUiCisjbGluZSA4MTQwICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CkBAIC04MTA1LDcgKzgxNTEsNyBAQAogCQogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjgxMDk6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODE1NTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjY7IGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgogI2RlZmluZSBIQVZFX1NZU0NUTCAxCkBAIC04MTIwLDkgKzgxNjYsOSBAQAogcm0gLWYgY29uZnRlc3QqCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBzeXNpbmZvIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo4MTI0OiBjaGVja2luZyBmb3Igc3lzaW5mbyIgPiY1CitlY2hvICJjb25maWd1cmU6ODE3MDogY2hlY2tpbmcgZm9yIHN5c2luZm8iID4mNQogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgODEyNiAiY29uZmlndXJlIgorI2xpbmUgODE3MiAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N5c2luZm8uaD4KQEAgLTgxMzUsNyArODE4MSw3IEBACiAJCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODEzOTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4MTg1OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCiAjZGVmaW5lIEhBVkVfU1lTSU5GTyAxCkBAIC04MTUwLDkgKzgxOTYsOSBAQAogcm0gLWYgY29uZnRlc3QqCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBzeXNjb25mIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo4MTU0OiBjaGVja2luZyBmb3Igc3lzY29uZiIgPiY1CitlY2hvICJjb25maWd1cmU6ODIwMDogY2hlY2tpbmcgZm9yIHN5c2NvbmYiID4mNQogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgODE1NiAiY29uZmlndXJlIgorI2xpbmUgODIwMiAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiBpbnQgbWFpbigpIHsKQEAgLTgxNjEsNyArODIwNyw3IEBACiAJCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODE2NTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4MjExOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCiAjZGVmaW5lIEhBVkVfU1lTQ09ORiAxCkBAIC04MTc3LDcgKzgyMjMsNyBAQAogCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIHNpemUgb2YgaW50IiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo4MTgxOiBjaGVja2luZyBzaXplIG9mIGludCIgPiY1CitlY2hvICJjb25maWd1cmU6ODIyNzogY2hlY2tpbmcgc2l6ZSBvZiBpbnQiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3NpemVvZl9pbnQnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQpAQCAtODE4NSw3ICs4MjMxLDcgQEAKICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBmYWlsZWQgdG8gY29tcGlsZSB0ZXN0IHByb2dyYW0iIDE+JjI7IGV4aXQgMTsgfQogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA4MTg5ICJjb25maWd1cmUiCisjbGluZSA4MjM1ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogCQltYWluKCkKQEAgLTgxOTYsNyArODI0Miw3IEBACiAJCSAgZXhpdCgwKTsKIAkJfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjgyMDA6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODI0NjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAogdGhlbgogICBhY19jdl9zaXplb2ZfaW50PWBjYXQgY29uZnRlc3R2YWxgCiBlbHNlCkBAIC04MjE3LDcgKzgyNjMsNyBAQAogCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgbWVtbW92ZS9iY29weS9tZW1jcHkgaGFuZGxlIG92ZXJsYXBzIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo4MjIxOiBjaGVja2luZyB3aGV0aGVyIG1lbW1vdmUvYmNvcHkvbWVtY3B5IGhhbmRsZSBvdmVybGFwcyIgPiY1CitlY2hvICJjb25maWd1cmU6ODI2NzogY2hlY2tpbmcgd2hldGhlciBtZW1tb3ZlL2Jjb3B5L21lbWNweSBoYW5kbGUgb3ZlcmxhcHMiID4mNQogYmNvcHlfdGVzdF9wcm9nPScKIG1haW4oKSB7CiAgIGNoYXIgYnVmWzEwXTsKQEAgLTgyMzcsMTEgKzgyODMsMTEgQEAKICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBmYWlsZWQgdG8gY29tcGlsZSB0ZXN0IHByb2dyYW0iIDE+JjI7IGV4aXQgMTsgfQogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA4MjQxICJjb25maWd1cmUiCisjbGluZSA4Mjg3ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNkZWZpbmUgbWNoX21lbW1vdmUocyxkLGwpIG1lbW1vdmUoZCxzLGwpICRiY29weV90ZXN0X3Byb2cKIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4MjQ1OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjgyOTE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKIHRoZW4KICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCiAjZGVmaW5lIFVTRU1FTU1PVkUgMQpAQCAtODI1NSwxMSArODMwMSwxMSBAQAogICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGZhaWxlZCB0byBjb21waWxlIHRlc3QgcHJvZ3JhbSIgMT4mMjsgZXhpdCAxOyB9CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDgyNTkgImNvbmZpZ3VyZSIKKyNsaW5lIDgzMDUgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2RlZmluZSBtY2hfbWVtbW92ZShzLGQsbCkgYmNvcHkoZCxzLGwpICRiY29weV90ZXN0X3Byb2cKIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4MjYzOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjgzMDk6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKIHRoZW4KICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCiAjZGVmaW5lIFVTRUJDT1BZIDEKQEAgLTgyNzMsMTEgKzgzMTksMTEgQEAKICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBmYWlsZWQgdG8gY29tcGlsZSB0ZXN0IHByb2dyYW0iIDE+JjI7IGV4aXQgMTsgfQogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA4Mjc3ICJjb25maWd1cmUiCisjbGluZSA4MzIzICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNkZWZpbmUgbWNoX21lbW1vdmUocyxkLGwpIG1lbWNweShkLHMsbCkgJGJjb3B5X3Rlc3RfcHJvZwogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjgyODE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODMyNzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAogdGhlbgogICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKICNkZWZpbmUgVVNFTUVNQ1BZIDEKQEAgLTgzMDksMTkgKzgzNTUsMTkgQEAKICAgICBDRkxBR1M9IiRDRkxBR1MgLUkkeF9pbmNsdWRlcyIKICAgICBMREZMQUdTPSIkWF9MSUJTICRMREZMQUdTIC1sWDExIgogICAgIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgWF9MT0NBTEUgbmVlZGVkIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo4MzEzOiBjaGVja2luZyB3aGV0aGVyIFhfTE9DQUxFIG5lZWRlZCIgPiY1CitlY2hvICJjb25maWd1cmU6ODM1OTogY2hlY2tpbmcgd2hldGhlciBYX0xPQ0FMRSBuZWVkZWQiID4mNQogICAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDgzMTUgImNvbmZpZ3VyZSIKKyNsaW5lIDgzNjEgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPFgxMS9YbG9jYWxlLmg+CiBpbnQgbWFpbigpIHsKIAogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjgzMjI6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODM2ODogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDgzMjUgImNvbmZpZ3VyZSIKKyNsaW5lIDgzNzEgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KIC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKQEAgLTgzMzIsNyArODM3OCw3IEBACiBfWHNldGxvY2FsZSgpCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODMzNjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjgzODI6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKIAkJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCkBAIC04MzU5LDcgKzg0MDUsNyBAQAogZmkKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIF94cGc0X3NldHJ1bmVsb2NhbGUgaW4gLWx4cGc0IiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo4MzYzOiBjaGVja2luZyBmb3IgX3hwZzRfc2V0cnVuZWxvY2FsZSBpbiAtbHhwZzQiID4mNQorZWNobyAiY29uZmlndXJlOjg0MDk6IGNoZWNraW5nIGZvciBfeHBnNF9zZXRydW5lbG9jYWxlIGluIC1seHBnNCIgPiY1CiBhY19saWJfdmFyPWBlY2hvIHhwZzQnXydfeHBnNF9zZXRydW5lbG9jYWxlIHwgc2VkICd5JS4vKy0lX19wXyUnYAogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CkBAIC04MzY3LDcgKzg0MTMsNyBAQAogICBhY19zYXZlX0xJQlM9IiRMSUJTIgogTElCUz0iLWx4cGc0ICAkTElCUyIKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDgzNzEgImNvbmZpZ3VyZSIKKyNsaW5lIDg0MTcgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KIC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKQEAgLTgzNzgsNyArODQyNCw3IEBACiBfeHBnNF9zZXRydW5lbG9jYWxlKCkKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4MzgyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODQyODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKIGVsc2UKQEAgLTg0MDAsNyArODQ0Niw3IEBACiAKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgaG93IHRvIGNyZWF0ZSB0YWdzIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo4NDA0OiBjaGVja2luZyBob3cgdG8gY3JlYXRlIHRhZ3MiID4mNQorZWNobyAiY29uZmlndXJlOjg0NTA6IGNoZWNraW5nIGhvdyB0byBjcmVhdGUgdGFncyIgPiY1CiB0ZXN0IC1mIHRhZ3MgJiYgbXYgdGFncyB0YWdzLnNhdmUKIGlmIChldmFsIGN0YWdzIC0tdmVyc2lvbiAvZGV2L251bGwgfCBncmVwIEV4dWJlcmFudCkgPCAvZGV2L251bGwgMT4mNSAyPiYxOyB0aGVuCiAgIFRBR1BSRz0iY3RhZ3MiCkBAIC04NDE3LDcgKzg0NjMsNyBAQAogZWNobyAiJGFjX3QiIiRUQUdQUkciIDE+JjYgCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIGhvdyB0byBydW4gbWFuIHdpdGggYSBzZWN0aW9uIG5yIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo4NDIxOiBjaGVja2luZyBob3cgdG8gcnVuIG1hbiB3aXRoIGEgc2VjdGlvbiBuciIgPiY1CitlY2hvICJjb25maWd1cmU6ODQ2NzogY2hlY2tpbmcgaG93IHRvIHJ1biBtYW4gd2l0aCBhIHNlY3Rpb24gbnIiID4mNQogTUFOREVGPSJtYW4iCiAoZXZhbCBtYW4gLXMgMiByZWFkKSA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiY1ICYmIE1BTkRFRj0ibWFuIC1zIgogZWNobyAiJGFjX3QiIiRNQU5ERUYiIDE+JjYKQEAgLTg0MjksNyArODQ3NSw3IEBACiBmaQogCiBlY2hvICRhY19uICJjaGVja2luZyAtLWRpc2FibGUtbmxzIGFyZ3VtZW50IiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo4NDMzOiBjaGVja2luZyAtLWRpc2FibGUtbmxzIGFyZ3VtZW50IiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo4NDc5OiBjaGVja2luZyAtLWRpc2FibGUtbmxzIGFyZ3VtZW50IiA+JjUKICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ubHMgb3IgLS1kaXNhYmxlLW5scyB3YXMgZ2l2ZW4uCiBpZiB0ZXN0ICIke2VuYWJsZV9ubHMrc2V0fSIgPSBzZXQ7IHRoZW4KICAgZW5hYmxldmFsPSIkZW5hYmxlX25scyIKQEAgLTg0NDQsNyArODQ5MCw3IEBACiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBtc2dmbXQ7IGFjX3dvcmQ9JDIKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6ODQ0ODogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo4NDk0OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfTVNHRk1UJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKQEAgLTg0NzEsMTkgKzg1MTcsMTkgQEAKIGZpCiAKICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIE5MUyIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6ODQ3NTogY2hlY2tpbmcgZm9yIE5MUyIgPiY1CitlY2hvICJjb25maWd1cmU6ODUyMTogY2hlY2tpbmcgZm9yIE5MUyIgPiY1CiAgIGlmIHRlc3QgLWYgcG8vTWFrZWZpbGU7IHRoZW4KICAgICBoYXZlX2dldHRleHQ9Im5vIgogICAgIGlmIHRlc3QgLW4gIiRNU0dGTVQiOyB0aGVuCiAgICAgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA4NDgwICJjb25maWd1cmUiCisjbGluZSA4NTI2ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxsaWJpbnRsLmg+CiBpbnQgbWFpbigpIHsKIGdldHRleHQoIlRlc3QiKTsKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4NDg3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODUzMzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZWNobyAiJGFjX3QiImdldHRleHQoKSB3b3JrcyIgMT4mNjsgaGF2ZV9nZXR0ZXh0PSJ5ZXMiCiBlbHNlCkBAIC04NDkzLDE0ICs4NTM5LDE0IEBACiAgIG9saWJzPSRMSUJTCiAJICBMSUJTPSIkTElCUyAtbGludGwiCiAJICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA4NDk3ICJjb25maWd1cmUiCisjbGluZSA4NTQzICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxsaWJpbnRsLmg+CiBpbnQgbWFpbigpIHsKIGdldHRleHQoIlRlc3QiKTsKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4NTA0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODU1MDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZWNobyAiJGFjX3QiImdldHRleHQoKSB3b3JrcyB3aXRoIC1saW50bCIgMT4mNjsgaGF2ZV9nZXR0ZXh0PSJ5ZXMiCiBlbHNlCkBAIC04NTI2LDEyICs4NTcyLDEyIEBACiAgICAgICAgICAgICBmb3IgYWNfZnVuYyBpbiBiaW5kX3RleHRkb21haW5fY29kZXNldAogZG8KIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfZnVuYyIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6ODUzMDogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo4NTc2OiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfJGFjX2Z1bmMnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA4NTM1ICJjb25maWd1cmUiCisjbGluZSA4NTgxICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jKCk7IGJlbG93LiAgKi8KQEAgLTg1NTQsNyArODYwMCw3IEBACiAKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4NTU4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODYwNDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZXZhbCAiYWNfY3ZfZnVuY18kYWNfZnVuYz15ZXMiCiBlbHNlCkBAIC04NTc5LDkgKzg2MjUsOSBAQAogZG9uZQogCiAgICAgICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgX25sX21zZ19jYXRfY250ciIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6ODU4MzogY2hlY2tpbmcgZm9yIF9ubF9tc2dfY2F0X2NudHIiID4mNQorZWNobyAiY29uZmlndXJlOjg2Mjk6IGNoZWNraW5nIGZvciBfbmxfbXNnX2NhdF9jbnRyIiA+JjUKICAgICAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDg1ODUgImNvbmZpZ3VyZSIKKyNsaW5lIDg2MzEgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPGxpYmludGwuaD4KIAkJZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOwpAQCAtODU4OSw3ICs4NjM1LDcgQEAKICsrX25sX21zZ19jYXRfY250cjsKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4NTkzOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODYzOTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCiAjZGVmaW5lIEhBVkVfTkxfTVNHX0NBVF9DTlRSIDEKQEAgLTg2MTIsMTcgKzg2NTgsMTcgQEAKIAogYWNfc2FmZT1gZWNobyAiZGxmY24uaCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgZGxmY24uaCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6ODYxNjogY2hlY2tpbmcgZm9yIGRsZmNuLmgiID4mNQorZWNobyAiY29uZmlndXJlOjg2NjI6IGNoZWNraW5nIGZvciBkbGZjbi5oIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfJGFjX3NhZmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA4NjIxICJjb25maWd1cmUiCisjbGluZSA4NjY3ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxkbGZjbi5oPgogRU9GCiBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoteyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4NjI2OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4NjcyOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQogYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAogaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgpAQCAtODY0MywxNyArODY4OSwxNyBAQAogICBlY2hvICIkYWNfdCIibm8iIDE+JjYKIGFjX3NhZmU9YGVjaG8gImRsLmgiIHwgc2VkICd5JS4vKy0lX19wXyUnYAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGRsLmgiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjg2NDc6IGNoZWNraW5nIGZvciBkbC5oIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo4NjkzOiBjaGVja2luZyBmb3IgZGwuaCIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyXyRhY19zYWZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgODY1MiAiY29uZmlndXJlIgorI2xpbmUgODY5OCAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8ZGwuaD4KIEVPRgogYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKLXsgKGV2YWwgZWNobyBjb25maWd1cmU6ODY1NzogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK3sgKGV2YWwgZWNobyBjb25maWd1cmU6ODcwMzogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KIGFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKIGlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKQEAgLTg2ODIsOSArODcyOCw5IEBACiBFT0YKIAogICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgZGxvcGVuKCkiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjg2ODY6IGNoZWNraW5nIGZvciBkbG9wZW4oKSIgPiY1CitlY2hvICJjb25maWd1cmU6ODczMjogY2hlY2tpbmcgZm9yIGRsb3BlbigpIiA+JjUKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgODY4OCAiY29uZmlndXJlIgorI2xpbmUgODczNCAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIGludCBtYWluKCkgewpAQCAtODY5NCw3ICs4NzQwLDcgQEAKICAgICAgIAogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjg2OTg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4NzQ0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OwogCSAgICAgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgpAQCAtODcwNywxMSArODc1MywxMSBAQAogICBybSAtcmYgY29uZnRlc3QqCiAgIGVjaG8gIiRhY190IiJubyIgMT4mNjsKIAkgICAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgZGxvcGVuKCkgaW4gLWxkbCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6ODcxMTogY2hlY2tpbmcgZm9yIGRsb3BlbigpIGluIC1sZGwiID4mNQorZWNobyAiY29uZmlndXJlOjg3NTc6IGNoZWNraW5nIGZvciBkbG9wZW4oKSBpbiAtbGRsIiA+JjUKIAkgICAgICBvbGlicz0kTElCUwogCSAgICAgIExJQlM9IiRMSUJTIC1sZGwiCiAJICAgICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgODcxNSAiY29uZmlndXJlIgorI2xpbmUgODc2MSAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIGludCBtYWluKCkgewpAQCAtODcyMSw3ICs4NzY3LDcgQEAKIAkJIAogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjg3MjU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4NzcxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OwogCQkJICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKQEAgLTg3MzksOSArODc4NSw5IEBACiBmaQogcm0gLWYgY29uZnRlc3QqCiAgICAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgZGxzeW0oKSIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6ODc0MzogY2hlY2tpbmcgZm9yIGRsc3ltKCkiID4mNQorZWNobyAiY29uZmlndXJlOjg3ODk6IGNoZWNraW5nIGZvciBkbHN5bSgpIiA+JjUKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgODc0NSAiY29uZmlndXJlIgorI2xpbmUgODc5MSAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIGludCBtYWluKCkgewpAQCAtODc1MSw3ICs4Nzk3LDcgQEAKICAgICAgIAogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjg3NTU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4ODAxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OwogCSAgICAgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgpAQCAtODc2NCwxMSArODgxMCwxMSBAQAogICBybSAtcmYgY29uZnRlc3QqCiAgIGVjaG8gIiRhY190IiJubyIgMT4mNjsKIAkgICAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgZGxzeW0oKSBpbiAtbGRsIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo4NzY4OiBjaGVja2luZyBmb3IgZGxzeW0oKSBpbiAtbGRsIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo4ODE0OiBjaGVja2luZyBmb3IgZGxzeW0oKSBpbiAtbGRsIiA+JjUKIAkgICAgICBvbGlicz0kTElCUwogCSAgICAgIExJQlM9IiRMSUJTIC1sZGwiCiAJICAgICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgODc3MiAiY29uZmlndXJlIgorI2xpbmUgODgxOCAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIGludCBtYWluKCkgewpAQCAtODc3OCw3ICs4ODI0LDcgQEAKIAkJIAogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjg3ODI6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4ODI4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OwogCQkJICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKQEAgLTg4MDEsOSArODg0Nyw5IEBACiBFT0YKIAogICBlY2hvICRhY19uICJjaGVja2luZyBmb3Igc2hsX2xvYWQoKSIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6ODgwNTogY2hlY2tpbmcgZm9yIHNobF9sb2FkKCkiID4mNQorZWNobyAiY29uZmlndXJlOjg4NTE6IGNoZWNraW5nIGZvciBzaGxfbG9hZCgpIiA+JjUKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgODgwNyAiY29uZmlndXJlIgorI2xpbmUgODg1MyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIGludCBtYWluKCkgewpAQCAtODgxMyw3ICs4ODU5LDcgQEAKICAgICAgCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODgxNzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjg4NjM6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjY7CiAJICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKQEAgLTg4MjYsMTEgKzg4NzIsMTEgQEAKICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBlY2hvICIkYWNfdCIibm8iIDE+JjY7CiAJICBlY2hvICRhY19uICJjaGVja2luZyBmb3Igc2hsX2xvYWQoKSBpbiAtbGRsZCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6ODgzMDogY2hlY2tpbmcgZm9yIHNobF9sb2FkKCkgaW4gLWxkbGQiID4mNQorZWNobyAiY29uZmlndXJlOjg4NzY6IGNoZWNraW5nIGZvciBzaGxfbG9hZCgpIGluIC1sZGxkIiA+JjUKIAkgIG9saWJzPSRMSUJTCiAJICBMSUJTPSIkTElCUyAtbGRsZCIKIAkgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDg4MzQgImNvbmZpZ3VyZSIKKyNsaW5lIDg4ODAgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiBpbnQgbWFpbigpIHsKQEAgLTg4NDAsNyArODg4Niw3IEBACiAJICAgICAKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4ODQ0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODg5MDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsKIAkJICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKQEAgLTg4NjIsMTcgKzg5MDgsMTcgQEAKIGRvCiBhY19zYWZlPWBlY2hvICIkYWNfaGRyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfaGRyIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo4ODY2OiBjaGVja2luZyBmb3IgJGFjX2hkciIgPiY1CitlY2hvICJjb25maWd1cmU6ODkxMjogY2hlY2tpbmcgZm9yICRhY19oZHIiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDg4NzEgImNvbmZpZ3VyZSIKKyNsaW5lIDg5MTcgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPCRhY19oZHI+CiBFT0YKIGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCi17IChldmFsIGVjaG8gY29uZmlndXJlOjg4NzY6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9Cit7IChldmFsIGVjaG8gY29uZmlndXJlOjg5MjI6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CiBhY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCiBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCkBAIC04OTA5LDcgKzg5NTUsNyBAQAogaWYgdGVzdCAieCRNQUNPU1giID0gInh5ZXMiICYmIHRlc3QgIngkQ0FSQk9OIiA9ICJ4eWVzIiBcCiAJJiYgdGVzdCAieCRHVUlUWVBFIiAhPSAieENBUkJPTkdVSSI7IHRoZW4KICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBuZWVkIC1mcmFtZXdvcmsgQ2FyYm9uIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo4OTEzOiBjaGVja2luZyB3aGV0aGVyIHdlIG5lZWQgLWZyYW1ld29yayBDYXJib24iID4mNQorZWNobyAiY29uZmlndXJlOjg5NTk6IGNoZWNraW5nIHdoZXRoZXIgd2UgbmVlZCAtZnJhbWV3b3JrIENhcmJvbiIgPiY1CiAgICAgaWYgdGVzdCAieCRlbmFibGVfbXVsdGlieXRlIiA9ICJ4eWVzIiB8fCB0ZXN0ICJ4JGZlYXR1cmVzIiA9PSAieGJpZyIgXAogCXx8IHRlc3QgIngkZmVhdHVyZXMiID0gInhodWdlIjsgdGhlbgogICAgIExJQlM9IiRMSUJTIC1mcmFtZXdvcmsgQ2FyYm9uIgpkaWZmIC0tZ2l0IGEvc3JjL2J1ZmZlci5jIGIvc3JjL2J1ZmZlci5jCmluZGV4IGYwMmMwMGQuLjE5ZGNiNTkgMTAwNjQ0Ci0tLSBhL3NyYy9idWZmZXIuYworKysgYi9zcmMvYnVmZmVyLmMKQEAgLTI5NzYsMjIgKzI5NzYsMTMgQEAKIAkJICAgIG9mZiArPSAyOwogI2VuZGlmCiAJCS8qIHJlbW92ZSB0aGUgZmlsZSBuYW1lICovCi0JCXAgPSBnZXR0YWlsKGJ1ZiArIG9mZik7CisJCXAgPSBnZXR0YWlsX3NlcChidWYgKyBvZmYpOwogCQlpZiAocCA9PSBidWYgKyBvZmYpCi0JCXsKIAkJICAgIC8qIG11c3QgYmUgYSBoZWxwIGJ1ZmZlciAqLwogCQkgICAgU1RSQ1BZKGJ1ZiArIG9mZiwgXygiaGVscCIpKTsKLQkJfQogCQllbHNlCi0JCXsKLQkJICAgIHdoaWxlIChwID4gYnVmICsgb2ZmICsgMSAmJiB2aW1faXNwYXRoc2VwKHBbLTFdKSkKLQkJCS0tcDsKLSNpZmRlZiBWTVMKLQkJICAgIC8qIHBhdGggc2VwYXJhdG9yIGlzIHBhcnQgb2YgdGhlIHBhdGggKi8KLQkJICAgICsrcDsKLSNlbmRpZgogCQkgICAgKnAgPSBOVUw7Ci0JCX0KKwogCQkvKiB0cmFuc2xhdGUgdW5wcmludGFibGUgY2hhcnMgKi8KIAkJcCA9IHRyYW5zc3RyKGJ1ZiArIG9mZik7CiAJCVNUUk5DUFkoYnVmICsgb2ZmLCBwLCBJT1NJWkUgLSBvZmYpOwpkaWZmIC0tZ2l0IGEvc3JjL2NoYXJzZXQuYyBiL3NyYy9jaGFyc2V0LmMKaW5kZXggMDkwMGQ4MC4uMzM2ZWVjNiAxMDA2NDQKLS0tIGEvc3JjL2NoYXJzZXQuYworKysgYi9zcmMvY2hhcnNldC5jCkBAIC04MTksMTIgKzgxOSw3IEBACiAgICAgZm9yIChzID0gcDsgKnMgIT0gTlVMICYmIChsZW4gPT0gTUFYQ09MIHx8IHMgPCBwICsgbGVuKTsgKQogICAgIHsKIAljb2wgKz0gd2luX2xicl9jaGFydGFic2l6ZSh3cCwgcywgY29sLCBOVUxMKTsKLSNpZmRlZiBGRUFUX01CWVRFCi0JaWYgKGhhc19tYnl0ZSkKLQkgICAgcyArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHMpOwotCWVsc2UKLSNlbmRpZgotCSAgICArK3M7CisJbWJfcHRyX2FkdihzKTsKICAgICB9CiAgICAgcmV0dXJuIChpbnQpY29sOwogfQpAQCAtOTY3LDEyICs5NjIsNyBAQAogICAgIGludAkJcmV0dmFsOwogCiAgICAgcmV0dmFsID0gbGJyX2NoYXJ0YWJzaXplKCpzLCBjb2wpOwotI2lmZGVmIEZFQVRfTUJZVEUKLSAgICBpZiAoaGFzX21ieXRlKQotCSpzICs9ICgqbWJfcHRyMmxlbl9jaGVjaykoKnMpOwotICAgIGVsc2UKLSNlbmRpZgotCSsrKnM7CisgICAgbWJfcHRyX2Fkdigqcyk7CiAgICAgcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTA1NCwxMiArMTA0NCw3IEBACiAJZm9yICg7OykKIAl7CiAJICAgIHBzID0gczsKLSMgaWZkZWYgRkVBVF9NQllURQotCSAgICBpZiAoaGFzX21ieXRlKQotCQlzICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocyk7Ci0JICAgIGVsc2UKLSMgZW5kaWYKLQkJKytzOworCSAgICBtYl9wdHJfYWR2KHMpOwogCSAgICBjID0gKnM7CiAJICAgIGlmICghKGMgIT0gTlVMCiAJCSAgICAmJiAodmltX2lzYnJlYWsoYykKQEAgLTEyNjMsMTIgKzEyNDgsNyBAQAogCQlicmVhazsKIAogCSAgICB2Y29sICs9IGluY3I7Ci0jaWZkZWYgRkVBVF9NQllURQotCSAgICBpZiAoaGFzX21ieXRlKQotCQlwdHIgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwdHIpOwotCSAgICBlbHNlCi0jZW5kaWYKLQkJKytwdHI7CisJICAgIG1iX3B0cl9hZHYocHRyKTsKIAl9CiAgICAgfQogICAgIGVsc2UKQEAgLTEyODksMTIgKzEyNjksNyBAQAogCQlicmVhazsKIAogCSAgICB2Y29sICs9IGluY3I7Ci0jaWZkZWYgRkVBVF9NQllURQotCSAgICBpZiAoaGFzX21ieXRlKQotCQlwdHIgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwdHIpOwotCSAgICBlbHNlCi0jZW5kaWYKLQkJKytwdHI7CisJICAgIG1iX3B0cl9hZHYocHRyKTsKIAl9CiAgICAgfQogICAgIGlmIChzdGFydCAhPSBOVUxMKQpAQCAtMTU3MSw2ICsxNTQ2LDcgQEAKICAgICBpbnQJCSAgICBoZXggPSAwOwkJLyogZGVmYXVsdCBpcyBkZWNpbWFsICovCiAgICAgaW50CQkgICAgbmVnYXRpdmUgPSBGQUxTRTsKICAgICB1bnNpZ25lZCBsb25nICAgdW4gPSAwOworICAgIGludAkJICAgIG47CiAKICAgICBpZiAocHRyWzBdID09ICctJykKICAgICB7CkBAIC0xNTc4LDE3ICsxNTU0LDI5IEBACiAJKytwdHI7CiAgICAgfQogCi0gICAgaWYgKHB0clswXSA9PSAnMCcpCQkJLyogY291bGQgYmUgaGV4IG9yIG9jdGFsICovCisgICAgLyogUmVjb2duaXplIGhleCBhbmQgb2N0YWwuICovCisgICAgaWYgKHB0clswXSA9PSAnMCcgJiYgcHRyWzFdICE9ICc4JyAmJiBwdHJbMV0gIT0gJzknKQogICAgIHsKIAloZXggPSBwdHJbMV07CiAJaWYgKGRvaGV4ICYmIChoZXggPT0gJ1gnIHx8IGhleCA9PSAneCcpICYmIHZpbV9pc3hkaWdpdChwdHJbMl0pKQogCSAgICBwdHIgKz0gMjsJCQkvKiBoZXhhZGVjaW1hbCAqLwogCWVsc2UKIAl7Ci0JICAgIGlmIChkb29jdCAmJiBWSU1fSVNESUdJVChoZXgpKQotCQloZXggPSAnMCc7CQkvKiBvY3RhbCAqLwotCSAgICBlbHNlCi0JCWhleCA9IDA7CQkvKiAwIGJ5IGl0c2VsZiBpcyBkZWNpbWFsICovCisJICAgIGhleCA9IDA7CQkJLyogZGVmYXVsdCBpcyBkZWNpbWFsICovCisJICAgIGlmIChkb29jdCkKKwkgICAgeworCQkvKiBEb24ndCBpbnRlcnByZXQgIjAiLCAiMDgiIG9yICIwMTI5IiBhcyBvY3RhbC4gKi8KKwkJZm9yIChuID0gMTsgVklNX0lTRElHSVQocHRyW25dKTsgKytuKQorCQl7CisJCSAgICBpZiAocHRyW25dID4gJzcnKQorCQkgICAgeworCQkJaGV4ID0gMDsJLyogY2FuJ3QgYmUgb2N0YWwgKi8KKwkJCWJyZWFrOworCQkgICAgfQorCQkgICAgaWYgKHB0cltuXSA+ICcwJykKKwkJCWhleCA9ICcwJzsJLyogYXNzdW1lIG9jdGFsICovCisJCX0KKwkgICAgfQogCX0KICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9jb25maWd1cmUuaW4gYi9zcmMvY29uZmlndXJlLmluCmluZGV4IDA3MGM0MWIuLmYyZmRjZDEgMTAwNjQ0Ci0tLSBhL3NyYy9jb25maWd1cmUuaW4KKysrIGIvc3JjL2NvbmZpZ3VyZS5pbgpAQCAtMjM1Niw4ICsyMzU2LDEyIEBACiBpZiB0ZXN0IC1uICIkd2l0aF90bGliIjsgdGhlbgogICBBQ19NU0dfUkVTVUxUKCR3aXRoX3RsaWIpCiAgIExJQlM9IiRMSUJTIC1sJHdpdGhfdGxpYiIKKyAgQUNfTVNHX0NIRUNLSU5HKGZvciBsaW5raW5nIHdpdGggJHdpdGhfdGxpYiBsaWJyYXJ5KQorICBBQ19UUllfTElOSyhbXSwgW10sIEFDX01TR19SRVNVTFQoT0spLCBBQ19NU0dfRVJST1IoRkFJTEVEKSkKKyAgZG5sIE5lZWQgdG8gY2hlY2sgZm9yIHRnZXRlbnQoKSBiZWxvdy4KKyAgb2xpYnM9IiRMSUJTIgogZWxzZQotICBBQ19NU0dfUkVTVUxUKFthdXRvbWF0aWMgdGVybWluYWwgbGlicmFyeSBzZWxlY3Rpb25dKQorICBBQ19NU0dfUkVTVUxUKFtlbXB0eTogYXV0b21hdGljIHRlcm1pbmFsIGxpYnJhcnkgc2VsZWN0aW9uXSkKICAgZG5sICBPbiBIUC1VWCAxMC4xMCB0ZXJtY2FwIG9yIHRlcm1saWIgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZgogICBkbmwgIGN1cnNlcywgYmVjYXVzZSBjdXJzZXMgaXMgbXVjaCBzbG93ZXIuCiAgIGRubCAgTmV3ZXIgdmVyc2lvbnMgb2YgbmN1cnNlcyBhcmUgcHJlZmVycmVkIG92ZXIgYW55dGhpbmcuCkBAIC0yMzg2LDEwICsyMzkwLDIzIEBACiAgICAgICBMSUJTPSIkb2xpYnMiCiAgICAgZmkKICAgZG9uZQorICBpZiB0ZXN0ICJ4JG9saWJzIiA9ICJ4JExJQlMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChubyB0ZXJtaW5hbCBsaWJyYXJ5IGZvdW5kKQorICBmaQogZmkKLWlmIHRlc3QgIngkb2xpYnMiICE9ICJ4JExJQlMiOyB0aGVuCi0gIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIHdlIHRhbGsgdGVybWluZm8pCi0gIEFDX1RSWV9SVU4oWworCitpZiB0ZXN0ICJ4JG9saWJzIiA9ICJ4JExJQlMiOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbZm9yIHRnZXRlbnQoKV0pCisgIEFDX1RSWV9MSU5LKFtdLCAKKyAgICAgIFtjaGFyIHNbMTAwMDBdOyBpbnQgcmVzID0gdGdldGVudChzLCAidGhpc3Rlcm1pbmFsZG9lc25vdGV4aXN0Iik7XSwKKwlBQ19NU0dfUkVTVUxUKHllcyksCisJQUNfTVNHX0VSUk9SKFtOT1QgRk9VTkQhCisgICAgICBZb3UgbmVlZCB0byBpbnN0YWxsIGEgdGVybWluYWwgbGlicmFyeTsgZm9yIGV4YW1wbGUgbmN1cnNlcy4KKyAgICAgIE9yIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgd2l0aCAtLXdpdGgtdGxpYi5dKSkKK2ZpCisKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIHdlIHRhbGsgdGVybWluZm8pCitBQ19UUllfUlVOKFsKICNpZmRlZiBIQVZFX1RFUk1DQVBfSAogIyBpbmNsdWRlIDx0ZXJtY2FwLmg+CiAjZW5kaWYKQEAgLTIzOTgsOSArMjQxNSw2IEBACiAJICBBQ19NU0dfUkVTVUxUKFtubyAtLSB3ZSBhcmUgaW4gdGVybWNhcCBsYW5kXSksCiAJICBBQ19NU0dfUkVTVUxUKFt5ZXMgLS0gdGVybWluZm8gc3Bva2VuIGhlcmVdKTsgQUNfREVGSU5FKFRFUk1JTkZPKSwKIAkgIEFDX01TR19FUlJPUihmYWlsZWQgdG8gY29tcGlsZSB0ZXN0IHByb2dyYW0uKSkKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChub25lIGZvdW5kKQotZmkKIAogaWYgdGVzdCAieCRvbGlicyIgIT0gIngkTElCUyI7IHRoZW4KICAgQUNfTVNHX0NIRUNLSU5HKHdoYXQgdGdldGVudCgpIHJldHVybnMgZm9yIGFuIHVua25vd24gdGVybWluYWwpCmRpZmYgLS1naXQgYS9zcmMvZXZhbC5jIGIvc3JjL2V2YWwuYwppbmRleCBiNWI0Yjc5Li5lMDZmZDE2IDEwMDY0NAotLS0gYS9zcmMvZXZhbC5jCisrKyBiL3NyYy9ldmFsLmMKQEAgLTI1NzEsNyArMjU3MSw3IEBACiAgICAgLyoKICAgICAgKiBGaW5kIHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc2tpcHBpbmcgYmFja3NsYXNoZWQgY2hhcmFjdGVycy4KICAgICAgKi8KLSAgICBmb3IgKHAgPSAqYXJnICsgMTsgKnAgJiYgKnAgIT0gJyInOyArK3ApCisgICAgZm9yIChwID0gKmFyZyArIDE7ICpwICYmICpwICE9ICciJzsgbWJfcHRyX2FkdihwKSkKICAgICB7CiAJaWYgKCpwID09ICdcXCcgJiYgcFsxXSAhPSBOVUwpCiAJewpAQCAtMjU4MSwxMCArMjU4MSw2IEBACiAJICAgIGlmICgqcCA9PSAnPCcpCiAJCWV4dHJhICs9IDI7CiAJfQotI2lmZGVmIEZFQVRfTUJZVEUKLQlpZiAoaGFzX21ieXRlKQotCSAgICBwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkgLSAxOwotI2VuZGlmCiAgICAgfQogCiAgICAgaWYgKCpwICE9ICciJykKQEAgLTQ3MzYsNiArNDczMiw3IEBACiAvKgogICogImdldGZvbnRuYW1lKCkiIGZ1bmN0aW9uCiAgKi8KKy8qQVJHU1VTRUQqLwogICAgIHN0YXRpYyB2b2lkCiBmX2dldGZvbnRuYW1lKGFyZ3ZhcnMsIHJldHZhcikKICAgICBWQVIJCWFyZ3ZhcnM7CkBAIC02NDM3LDcgKzY0MzQsNyBAQAogCSAgICBpc19yZWxhdGl2ZV90b19jdXJyZW50ID0gVFJVRTsKIAogCWxlbiA9IFNUUkxFTihwKTsKLQlpZiAobGVuID4gMCAmJiB2aW1faXNwYXRoc2VwKHBbbGVuLTFdKSkKKwlpZiAobGVuID4gMCAmJiBhZnRlcl9wYXRoc2VwKHAsIHAgKyBsZW4pKQogCSAgICBoYXNfdHJhaWxpbmdfcGF0aHNlcCA9IFRSVUU7CiAKIAlxID0gZ2V0bmV4dGNvbXAocCk7CkBAIC02NTc5LDEwICs2NTc2LDggQEAKIAlpZiAoIWhhc190cmFpbGluZ19wYXRoc2VwKQogCXsKIAkgICAgcSA9IHAgKyBTVFJMRU4ocCk7Ci0JICAgIHdoaWxlICgocSA+IHAgKyAyIHx8IChxID09IHAgKyAyICYmICF2aW1faXNwYXRoc2VwKCpwKSkpCi0JCSAgICYmIHZpbV9pc3BhdGhzZXAocVstMV0pKQotCQktLXE7Ci0JICAgICpxID0gTlVMOworCSAgICBpZiAoYWZ0ZXJfcGF0aHNlcChwLCBxKSkKKwkJKmdldHRhaWxfc2VwKHApID0gTlVMOwogCX0KIAogCXJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gcDsKQEAgLTEwODU0LDcgKzEwODQ5LDcgQEAKICAgICBwbGVuID0gbGVuMjsKIAogICAgIGwgPSAwOwotICAgIGlmICh2aW1faXNwYXRoc2VwKCpzKSkKKyAgICBpZiAoYWZ0ZXJfcGF0aHNlcChwYnVmMiwgcyArIDEpKQogICAgIHsKIAktLXM7CiAJKytzbGVuOwpAQCAtMTA4NjQsNyArMTA4NTksNyBAQAogICAgIGRvCiAgICAgewogCS8qIEdvIGJhY2sgb25lIHBhdGgtc2VwZXJhdG9yICovCi0Jd2hpbGUgKHMgPiBwYnVmMiAmJiAhdmltX2lzcGF0aHNlcCgqcykpCisJd2hpbGUgKHMgPiBwYnVmMiAmJiAhYWZ0ZXJfcGF0aHNlcChwYnVmMiwgcyArIDEpKQogCXsKIAkgICAgLS1zOwogCSAgICArK3NsZW47CkBAIC0xMDkzNiw3ICsxMDkzMSw3IEBACiAgICAgICogb2YgdGhlIHBhdGggdG8gcmV0dXJuLgogICAgICAqLwogICAgIHNlcGNvdW50ID0gMDsKLSAgICBmb3IgKHAgPSAqZm5hbWVwICsgKmZuYW1lbGVuIC0gMTsgcCA+PSAqZm5hbWVwOyAtLXApCisgICAgZm9yIChwID0gKmZuYW1lcDsgcCA8ICpmbmFtZXAgKyAqZm5hbWVsZW47IG1iX3B0cl9hZHYocCkpCiAJaWYgKHZpbV9pc3BhdGhzZXAoKnApKQogCSAgICArK3NlcGNvdW50OwogCkBAIC0xMDk2NSw2ICsxMDk2MCwxMSBAQAogCiAgICAgLyogQ291bnQgdGhlIHBhdGhzIGJhY2t3YXJkIHRvIGZpbmQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGVzaXJlZCBzdHJpbmcuICovCiAgICAgZm9yIChwID0gdGZuYW1lICsgbGVuIC0gMTsgcCA+PSB0Zm5hbWU7IC0tcCkKKyAgICB7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJICAgIHAgLT0gbWJfaGVhZF9vZmYodGZuYW1lLCBwKTsKKyNlbmRpZgogCWlmICh2aW1faXNwYXRoc2VwKCpwKSkKIAl7CiAJICAgIGlmIChzZXBjb3VudCA9PSAwIHx8IChoYXNUaWxkZSAmJiBzZXBjb3VudCA9PSAxKSkKQEAgLTEwOTcyLDYgKzEwOTcyLDcgQEAKIAkgICAgZWxzZQogCQlzZXBjb3VudCAtLTsKIAl9CisgICAgfQogICAgIGlmIChoYXNUaWxkZSkKICAgICB7CiAJLS1wOwpAQCAtMTEwNDcsNyArMTEwNDgsNyBAQAogCX0KIAogCS8qIFdoZW4gIi8uIiBvciAiLy4uIiBpcyB1c2VkOiBmb3JjZSBleHBhbnNpb24gdG8gZ2V0IHJpZCBvZiBpdC4gKi8KLQlmb3IgKHAgPSAqZm5hbWVwOyAqcCAhPSBOVUw7ICsrcCkKKwlmb3IgKHAgPSAqZm5hbWVwOyAqcCAhPSBOVUw7IG1iX3B0cl9hZHYocCkpCiAJewogCSAgICBpZiAodmltX2lzcGF0aHNlcCgqcCkKIAkJICAgICYmIHBbMV0gPT0gJy4nCkBAIC0xMTE1NSwxNSArMTExNTYsMTUgQEAKIAl2YWxpZCB8PSBWQUxJRF9IRUFEOwogCSp1c2VkbGVuICs9IDI7CiAJcyA9IGdldF9wYXN0X2hlYWQoKmZuYW1lcCk7Ci0Jd2hpbGUgKHRhaWwgPiBzICYmIHZpbV9pc3BhdGhzZXAodGFpbFstMV0pKQorCXdoaWxlICh0YWlsID4gcyAmJiBhZnRlcl9wYXRoc2VwKHMsIHRhaWwpKQogCSAgICAtLXRhaWw7CiAJKmZuYW1lbGVuID0gKGludCkodGFpbCAtICpmbmFtZXApOwogI2lmZGVmIFZNUwogCWlmICgqZm5hbWVsZW4gPiAwKQogCSAgICAqZm5hbWVsZW4gKz0gMTsgLyogdGhlIHBhdGggc2VwYXJhdG9yIGlzIHBhcnQgb2YgdGhlIHBhdGggKi8KICNlbmRpZgotCXdoaWxlICh0YWlsID4gcyAmJiAhdmltX2lzcGF0aHNlcCh0YWlsWy0xXSkpCi0JICAgIC0tdGFpbDsKKwl3aGlsZSAodGFpbCA+IHMgJiYgIWFmdGVyX3BhdGhzZXAocywgdGFpbCkpCisJICAgIG1iX3B0cl9iYWNrKCpmbmFtZXAsIHRhaWwpOwogICAgIH0KIAogICAgIC8qICI6OCIgLSBzaG9ydG5hbWUgICovCmRpZmYgLS1naXQgYS9zcmMvZXhfY21kcy5jIGIvc3JjL2V4X2NtZHMuYwppbmRleCA3ZWQ0OGI5Li5jNzhjNjQzIDEwMDY0NAotLS0gYS9zcmMvZXhfY21kcy5jCisrKyBiL3NyYy9leF9jbWRzLmMKQEAgLTM1OTksMTIgKzM1OTksNyBAQAogCSAgICB9CiAJICAgIGlmIChjbWRbMF0gPT0gJ1xcJyAmJiBjbWRbMV0gIT0gMCkJLyogc2tpcCBlc2NhcGVkIGNoYXJhY3RlcnMgKi8KIAkJKytjbWQ7Ci0jaWZkZWYgRkVBVF9NQllURQotCSAgICBpZiAoaGFzX21ieXRlKQotCQljbWQgKz0gKCptYl9wdHIybGVuX2NoZWNrKShjbWQpOwotCSAgICBlbHNlCi0jZW5kaWYKLQkJKytjbWQ7CisJICAgIG1iX3B0cl9hZHYoY21kKTsKIAl9CiAKIAlpZiAoIWVhcC0+c2tpcCkKQEAgLTQ0OTgsNiArNDQ5MywxMCBAQAogICAgIGVsc2UKIAljaGVja19jdXJzb3IoKTsJLyogY3Vyc29yIG1heSBiZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgbGluZSAqLwogCisgICAgLyogdGhlIGN1cnNvciBtYXkgbm90IGhhdmUgbW92ZWQgaW4gdGhlIHRleHQgYnV0IGEgY2hhbmdlIGluIGEgcHJldmlvdXMKKyAgICAgKiBsaW5lIG1heSBtb3ZlIGl0IG9uIHRoZSBzY3JlZW4gKi8KKyAgICBjaGFuZ2VkX2xpbmVfYWJ2X2N1cnMoKTsKKwogICAgIC8qIElmIGl0IGxvb2tzIGxpa2Ugbm8gbWVzc2FnZSB3YXMgd3JpdHRlbiwgYWxsb3cgb3ZlcndyaXRpbmcgdGhlCiAgICAgICogY29tbWFuZCB3aXRoIHRoZSByZXBvcnQgZm9yIG51bWJlciBvZiBjaGFuZ2VzLiAqLwogICAgIGlmIChtc2dfY29sID09IDAgJiYgbXNnX3Njcm9sbGVkID09IDApCmRpZmYgLS1naXQgYS9zcmMvZXhfY21kczIuYyBiL3NyYy9leF9jbWRzMi5jCmluZGV4IGI5OTE5YjYuLjZjOTE5ZmYgMTAwNjQ0Ci0tLSBhL3NyYy9leF9jbWRzMi5jCisrKyBiL3NyYy9leF9jbWRzMi5jCkBAIC0xMDE0LDI4ICsxMDE0LDM0IEBACiAgKiBDb2RlIHRvIGhhbmRsZSB0aGUgYXJndW1lbnQgbGlzdC4KICAqLwogCitzdGF0aWMgY2hhcl91CSpkb19vbmVfYXJnIF9fQVJHUygoY2hhcl91ICpzdHIpKTsKK3N0YXRpYyBpbnQJZG9fYXJnbGlzdCBfX0FSR1MoKGNoYXJfdSAqc3RyLCBpbnQgd2hhdCwgaW50IGFmdGVyKSk7CitzdGF0aWMgdm9pZAlhbGlzdF9jaGVja19hcmdfaWR4IF9fQVJHUygodm9pZCkpOworc3RhdGljIGludAllZGl0aW5nX2FyZ19pZHggX19BUkdTKCh3aW5fVCAqd2luKSk7CisjaWZkZWYgRkVBVF9MSVNUQ01EUworc3RhdGljIGludAlhbGlzdF9hZGRfbGlzdCBfX0FSR1MoKGludCBjb3VudCwgY2hhcl91ICoqZmlsZXMsIGludCBhZnRlcikpOworI2VuZGlmCisjZGVmaW5lIEFMX1NFVAkxCisjZGVmaW5lIEFMX0FERAkyCisjZGVmaW5lIEFMX0RFTAkzCisKIC8qCi0gKiBJc29sYXRlIG9uZSBhcmd1bWVudCwgdGFraW5nIHF1b3RlcyBhbmQgYmFja3RpY2tzLgotICogQ2hhbmdlcyB0aGUgYXJndW1lbnQgaW4tcGxhY2UsIHB1dHMgYSBOVUwgYWZ0ZXIgaXQuCi0gKiBRdW90ZXMgYXJlIHJlbW92ZWQsIGJhY2t0aWNrcyByZW1haW4uCisgKiBJc29sYXRlIG9uZSBhcmd1bWVudCwgdGFraW5nIGJhY2t0aWNrcy4KKyAqIENoYW5nZXMgdGhlIGFyZ3VtZW50IGluLXBsYWNlLCBwdXRzIGEgTlVMIGFmdGVyIGl0LiAgQmFja3RpY2tzIHJlbWFpbi4KICAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGFyZ3VtZW50LgogICovCi0gICAgY2hhcl91ICoKKyAgICBzdGF0aWMgY2hhcl91ICoKIGRvX29uZV9hcmcoc3RyKQogICAgIGNoYXJfdSAqc3RyOwogewogICAgIGNoYXJfdQkqcDsKLSAgICBpbnQJCWlucXVvdGU7CiAgICAgaW50CQlpbmJhY2t0aWNrOwogCi0gICAgaW5xdW90ZSA9IEZBTFNFOwogICAgIGluYmFja3RpY2sgPSBGQUxTRTsKICAgICBmb3IgKHAgPSBzdHI7ICpzdHI7ICsrc3RyKQogICAgIHsKLQkvKgotCSAqIGZvciBNU0RPUyBldC5hbC4gYSBiYWNrc2xhc2ggaXMgcGFydCBvZiBhIGZpbGUgbmFtZS4KLQkgKiBPbmx5IHNraXAgIiwgc3BhY2UgYW5kIHRhYi4KLQkgKi8KKwkvKiBXaGVuIHRoZSBiYWNrc2xhc2ggaXMgdXNlZCBmb3IgZXNjYXBpbmcgdGhlIHNwZWNpYWwgbWVhbmluZyBvZiBhCisJICogY2hhcmFjdGVyIHdlIG5lZWQgdG8ga2VlcCBpdCB1bnRpbCB3aWxkY2FyZCBleHBhbnNpb24uICovCiAJaWYgKHJlbV9iYWNrc2xhc2goc3RyKSkKIAl7CiAJICAgICpwKysgPSAqc3RyKys7CkBAIC0xMDQzLDE1ICsxMDQ5LDEyIEBACiAJfQogCWVsc2UKIAl7Ci0JICAgIC8qIEFuIGl0ZW0gZW5kcyBhdCBhIHNwYWNlIG5vdCBpbiBxdW90ZXMgb3IgYmFja3RpY2tzICovCi0JICAgIGlmICghaW5xdW90ZSAmJiAhaW5iYWNrdGljayAmJiB2aW1faXNzcGFjZSgqc3RyKSkKKwkgICAgLyogQW4gaXRlbSBlbmRzIGF0IGEgc3BhY2Ugbm90IGluIGJhY2t0aWNrcyAqLworCSAgICBpZiAoIWluYmFja3RpY2sgJiYgdmltX2lzc3BhY2UoKnN0cikpCiAJCWJyZWFrOwotCSAgICBpZiAoIWlucXVvdGUgJiYgKnN0ciA9PSAnYCcpCisJICAgIGlmICgqc3RyID09ICdgJykKIAkJaW5iYWNrdGljayBePSBUUlVFOwotCSAgICBpZiAoIWluYmFja3RpY2sgJiYgKnN0ciA9PSAnIicpCi0JCWlucXVvdGUgXj0gVFJVRTsKLQkgICAgZWxzZQotCQkqcCsrID0gKnN0cjsKKwkgICAgKnArKyA9ICpzdHI7CiAJfQogICAgIH0KICAgICBzdHIgPSBza2lwd2hpdGUoc3RyKTsKQEAgLTEwNjAsMTYgKzEwNjMsNiBAQAogICAgIHJldHVybiBzdHI7CiB9CiAKLXN0YXRpYyBpbnQgZG9fYXJnbGlzdCBfX0FSR1MoKGNoYXJfdSAqc3RyLCBpbnQgd2hhdCwgaW50IGFmdGVyKSk7Ci1zdGF0aWMgdm9pZCBhbGlzdF9jaGVja19hcmdfaWR4IF9fQVJHUygodm9pZCkpOwotc3RhdGljIGludCBlZGl0aW5nX2FyZ19pZHggX19BUkdTKCh3aW5fVCAqd2luKSk7Ci0jaWZkZWYgRkVBVF9MSVNUQ01EUwotc3RhdGljIGludCBhbGlzdF9hZGRfbGlzdCBfX0FSR1MoKGludCBjb3VudCwgY2hhcl91ICoqZmlsZXMsIGludCBhZnRlcikpOwotI2VuZGlmCi0jZGVmaW5lIEFMX1NFVAkxCi0jZGVmaW5lIEFMX0FERAkyCi0jZGVmaW5lIEFMX0RFTAkzCi0KICNpZiBkZWZpbmVkKEZFQVRfR1VJKSB8fCBkZWZpbmVkKEZFQVRfQ0xJRU5UU0VSVkVSKSB8fCBkZWZpbmVkKFBST1RPKQogLyoKICAqIFJlZGVmaW5lIHRoZSBhcmd1bWVudCBsaXN0LgpAQCAtMTYxOSw2ICsxNjEyLDcgQEAKICAgICBjaGFyX3UJKnNhdmVfZWkgPSBOVUxMOwogICAgIGNoYXJfdQkqbmV3X2VpOwogI2VuZGlmCisgICAgY2hhcl91CSpwX3NobV9zYXZlOwogCiAjaWZuZGVmIEZFQVRfV0lORE9XUwogICAgIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfd2luZG8pCkBAIC0xNjc0LDcgKzE2NjgsMTUgQEAKIAkJLyogRG9uJ3QgY2FsbCBkb19hcmdmaWxlKCkgd2hlbiBhbHJlYWR5IHRoZXJlLCBpdCB3aWxsIHRyeQogCQkgKiByZWxvYWRpbmcgdGhlIGZpbGUuICovCiAJCWlmIChjdXJ3aW4tPndfYXJnX2lkeCAhPSBpIHx8ICFlZGl0aW5nX2FyZ19pZHgoY3Vyd2luKSkKKwkJeworCQkgICAgLyogQ2xlYXIgJ3NobScgdG8gYXZvaWQgdGhhdCB0aGUgZmlsZSBtZXNzYWdlIG92ZXJ3cml0ZXMKKwkJICAgICAqIGFueSBvdXRwdXQgZnJvbSB0aGUgY29tbWFuZC4gKi8KKwkJICAgIHBfc2htX3NhdmUgPSB2aW1fc3Ryc2F2ZShwX3NobSk7CisJCSAgICBzZXRfb3B0aW9uX3ZhbHVlKChjaGFyX3UgKikic2htIiwgMEwsIChjaGFyX3UgKikiIiwgMCk7CiAJCSAgICBkb19hcmdmaWxlKGVhcCwgaSk7CisJCSAgICBzZXRfb3B0aW9uX3ZhbHVlKChjaGFyX3UgKikic2htIiwgMEwsIHBfc2htX3NhdmUsIDApOworCQkgICAgdmltX2ZyZWUocF9zaG1fc2F2ZSk7CisJCX0KIAkJaWYgKGN1cndpbi0+d19hcmdfaWR4ICE9IGkpCiAJCSAgICBicmVhazsKIAkJKytpOwpAQCAtMTcxNyw3ICsxNzE5LDE1IEBACiAJCQlicmVhazsKIAkJaWYgKGJ1ZiA9PSBOVUxMKQogCQkgICAgYnJlYWs7CisKKwkJLyogR28gdG8gdGhlIG5leHQgYnVmZmVyLiAgQ2xlYXIgJ3NobScgdG8gYXZvaWQgdGhhdCB0aGUgZmlsZQorCQkgKiBtZXNzYWdlIG92ZXJ3cml0ZXMgYW55IG91dHB1dCBmcm9tIHRoZSBjb21tYW5kLiAqLworCQlwX3NobV9zYXZlID0gdmltX3N0cnNhdmUocF9zaG0pOworCQlzZXRfb3B0aW9uX3ZhbHVlKChjaGFyX3UgKikic2htIiwgMEwsIChjaGFyX3UgKikiIiwgMCk7CiAJCWdvdG9fYnVmZmVyKGVhcCwgRE9CVUZfRklSU1QsIEZPUldBUkQsIG5leHRfZm51bSk7CisJCXNldF9vcHRpb25fdmFsdWUoKGNoYXJfdSAqKSJzaG0iLCAwTCwgcF9zaG1fc2F2ZSwgMCk7CisJCXZpbV9mcmVlKHBfc2htX3NhdmUpOworCiAJCS8qIElmIGF1dG9jb21tYW5kcyB0b29rIHVzIGVsc2V3aGVyZSwgcXVpdCBoZXJlICovCiAJCWlmIChjdXJidWYtPmJfZm51bSAhPSBuZXh0X2ZudW0pCiAJCSAgICBicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9leF9kb2NtZC5jIGIvc3JjL2V4X2RvY21kLmMKaW5kZXggMzEyNmM2YS4uYTY2OGM5OSAxMDA2NDQKLS0tIGEvc3JjL2V4X2RvY21kLmMKKysrIGIvc3JjL2V4X2RvY21kLmMKQEAgLTMxNDUsMTIgKzMxNDUsNyBAQAogCQkgICAgcmV0dXJuIE5VTEw7ICAgIC8qIEl0J3MgYSBjb21tZW50ICovCiAJCX0KIAkgICAgfQotI2lmZGVmIEZFQVRfTUJZVEUKLQkgICAgaWYgKGhhc19tYnl0ZSkKLQkJcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApOwotCSAgICBlbHNlCi0jZW5kaWYKLQkJKytwOworCSAgICBtYl9wdHJfYWR2KHApOwogCX0KICAgICB9CiAKQEAgLTMyMDMsMTIgKzMxOTgsNyBAQAogCQl9CiAJCWluX3F1b3RlID0gIWluX3F1b3RlOwogCSAgICB9Ci0jaWZkZWYgRkVBVF9NQllURQotCSAgICBpZiAoaGFzX21ieXRlKQotCQlwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCk7Ci0JICAgIGVsc2UKLSNlbmRpZgotCQkrK3A7CisJICAgIG1iX3B0cl9hZHYocCk7CiAJfQogCiAJLyoKQEAgLTQzMTIsMTIgKzQzMDIsNyBAQAogCSAgICBlbHNlCiAJCSsrcDsKIAl9Ci0jaWZkZWYgRkVBVF9NQllURQotCWlmIChoYXNfbWJ5dGUpCi0JICAgIHAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKTsKLQllbHNlCi0jZW5kaWYKLQkgICAgKytwOworCW1iX3B0cl9hZHYocCk7CiAgICAgfQogICAgIHJldHVybiBwOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2V4X2dldGxuLmMgYi9zcmMvZXhfZ2V0bG4uYwppbmRleCA1Yzc2ODZhLi44YzE1MzAyIDEwMDY0NAotLS0gYS9zcmMvZXhfZ2V0bG4uYworKysgYi9zcmMvZXhfZ2V0bG4uYwpAQCAtNDk0LDYgKzQ5NCwxMCBAQAogCQlpID0gKGludCkoeHBjLnhwX3BhdHRlcm4gLSBjY2xpbmUuY21kYnVmZik7CiAJCXdoaWxlICgtLWogPiBpKQogCQl7CisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgaWYgKGhhc19tYnl0ZSkKKwkJCWogLT0gKCptYl9oZWFkX29mZikoY2NsaW5lLmNtZGJ1ZmYsIGNjbGluZS5jbWRidWZmICsgaik7CisjZW5kaWYKIAkJICAgIGlmICh2aW1faXNwYXRoc2VwKGNjbGluZS5jbWRidWZmW2pdKSkKIAkJICAgIHsKIAkJCWZvdW5kID0gVFJVRTsKQEAgLTM0OTAsMTIgKzM0OTQsNyBAQAogCSAgICB0ID0gcDsKIAkgICAgaGFkX3NlcCA9IEZBTFNFOwogCX0KLSNpZmRlZiBGRUFUX01CWVRFCi0JaWYgKGhhc19tYnl0ZSkKLQkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApOwotCWVsc2UKLSNlbmRpZgotCSAgICArK3A7CisJbWJfcHRyX2FkdihwKTsKICAgICB9CiAgICAgcmV0dXJuIHQ7CiB9CkBAIC00MTczLDcgKzQxNzIsNyBAQAogCSAgICBicmVhazsKIAlpZiAoZSAtIDQgPiBzICYmIFNUUk5JQ01QKGUgLSA0LCAiLnZpbSIsIDQpID09IDApCiAJewotCSAgICBmb3IgKHMgPSBlIC0gNDsgcyA+IGFsbDsgLS1zKQorCSAgICBmb3IgKHMgPSBlIC0gNDsgcyA+IGFsbDsgbWJfcHRyX2JhY2soYWxsLCBzKSkKIAkJaWYgKCpzID09ICdcbicgfHwgdmltX2lzcGF0aHNlcCgqcykpCiAJCSAgICBicmVhazsKIAkgICAgKytzOwpkaWZmIC0tZ2l0IGEvc3JjL2ZpbGVpby5jIGIvc3JjL2ZpbGVpby5jCmluZGV4IGMzN2M5NmEuLmQzMzcxOGQgMTAwNjQ0Ci0tLSBhL3NyYy9maWxlaW8uYworKysgYi9zcmMvZmlsZWlvLmMKQEAgLTM3MCwxMyArMzcwLDggQEAKICAgICAgKi8KICAgICBpZiAoZm5hbWUgIT0gTlVMTCAmJiAqZm5hbWUgIT0gTlVMKQogICAgIHsKLQlwID0gZm5hbWUgKyBTVFJMRU4oZm5hbWUpIC0gMTsKLQlpZiAoKHZpbV9pc3BhdGhzZXAoKnApCi0jaWZkZWYgRkVBVF9NQllURQotCQkgICAgLyogRG8gbm90IHVzZSBhIG11bHRpLWJ5dGUgY2hhciBhcyBwYXRoIHNlcGFyYXRvci4gKi8KLQkJICAgICYmICghaGFzX21ieXRlIHx8ICgqbWJfaGVhZF9vZmYpKGZuYW1lLCBwKSA9PSAwKQotI2VuZGlmCi0JICAgICkgfHwgU1RSTEVOKGZuYW1lKSA+PSBNQVhQQVRITCkKKwlwID0gZm5hbWUgKyBTVFJMRU4oZm5hbWUpOworCWlmIChhZnRlcl9wYXRoc2VwKGZuYW1lLCBwKSB8fCBTVFJMRU4oZm5hbWUpID49IE1BWFBBVEhMKQogCXsKIAkgICAgZmlsZW1lc3MoY3VyYnVmLCBmbmFtZSwgKGNoYXJfdSAqKV8oIklsbGVnYWwgZmlsZSBuYW1lIiksIDApOwogCSAgICBtc2dfZW5kKCk7CkBAIC0yODAxLDcgKzI3OTYsOCBAQAogCQkgICAgbWxfdGltZXN0YW1wKGJ1Zik7CiAJCSAgICBidWYtPmJfZmxhZ3MgJj0gfkJGX1dSSVRFX01BU0s7CiAJCX0KLQkJaWYgKHJlc2V0X2NoYW5nZWQgJiYgYnVmLT5iX2NoYW5nZWQpCisJCWlmIChyZXNldF9jaGFuZ2VkICYmIGJ1Zi0+Yl9jaGFuZ2VkCisJCQkmJiAob3ZlcndyaXRpbmcgfHwgdmltX3N0cmNocihwX2NwbywgQ1BPX1BMVVMpICE9IE5VTEwpKQogCQkgICAgLyogQnVmZmVyIHN0aWxsIGNoYW5nZWQsIHRoZSBhdXRvY29tbWFuZHMgZGlkbid0IHdvcmsKIAkJICAgICAqIHByb3Blcmx5LiAqLwogCQkgICAgcmV0dXJuIEZBSUw7CkBAIC0zNTI2LDcgKzM1MjIsNyBAQAogICAgICAqIHRoZSBvcmlnaW5hbCBmaWxlLgogICAgICAqIERvbid0IGRvIHRoaXMgaWYgdGhlcmUgaXMgYSBiYWNrdXAgZmlsZSBhbmQgd2UgYXJlIGV4aXRpbmcuCiAgICAgICovCi0gICAgaWYgKHJlc2V0X2NoYW5nZWQgJiYgIW5ld2ZpbGUgJiYgIW90aGVyZmlsZShmZm5hbWUpCisgICAgaWYgKHJlc2V0X2NoYW5nZWQgJiYgIW5ld2ZpbGUgJiYgb3ZlcndyaXRpbmcKIAkJCQkJICAgICAgJiYgIShleGl0aW5nICYmIGJhY2t1cCAhPSBOVUxMKSkKICAgICB7CiAJbWxfcHJlc2VydmUoYnVmLCBGQUxTRSk7CkBAIC00MTkyLDExICs0MTg4LDE0IEBACiAJa2VlcF9tc2dfYXR0ciA9IDA7CiAgICAgfQogCisgICAgLyogV2hlbiB3cml0dGVuIGV2ZXJ5dGhpbmcgY29ycmVjdGx5OiByZXNldCAnbW9kaWZpZWQnLiAgVW5sZXNzIG5vdAorICAgICAqIHdyaXRpbmcgdG8gdGhlIG9yaWdpbmFsIGZpbGUgYW5kICcrJyBpcyBub3QgaW4gJ2Nwb3B0aW9ucycuICovCiAgICAgaWYgKHJlc2V0X2NoYW5nZWQgJiYgd2hvbGUKICNpZmRlZiBGRUFUX01CWVRFCiAJICAgICYmICF3cml0ZV9pbmZvLmJ3X2NvbnZfZXJyb3IKICNlbmRpZgotCSAgICApCQkvKiB3aGVuIHdyaXR0ZW4gZXZlcnl0aGluZyBjb3JyZWN0bHkgKi8KKwkgICAgJiYgKG92ZXJ3cml0aW5nIHx8IHZpbV9zdHJjaHIocF9jcG8sIENQT19QTFVTKSAhPSBOVUxMKQorCSAgICApCiAgICAgewogCXVuY2hhbmdlZChidWYsIFRSVUUpOwogCXVfdW5jaGFuZ2VkKGJ1Zik7CkBAIC01MzgzLDcgKzUzODIsNyBAQAogCSAgICB2aW1fZnJlZShyZXR2YWwpOwogCSAgICByZXR1cm4gTlVMTDsKIAl9Ci0JaWYgKCF2aW1faXNwYXRoc2VwKHJldHZhbFtmbmFtZWxlbiAtIDFdKSkKKwlpZiAoIWFmdGVyX3BhdGhzZXAocmV0dmFsLCByZXR2YWwgKyBmbmFtZWxlbikpCiAJewogCSAgICByZXR2YWxbZm5hbWVsZW4rK10gPSBQQVRIU0VQOwogCSAgICByZXR2YWxbZm5hbWVsZW5dID0gTlVMOwpAQCAtNTQxMCw3ICs1NDA5LDcgQEAKICAgICAgKiBUaGVuIHRydW5jYXRlIHdoYXQgaXMgYWZ0ZXIgdGhlICcvJywgJ1wnIG9yICc6JyB0byA4IGNoYXJhY3RlcnMgZm9yCiAgICAgICogTVNET1MgYW5kIDI2IGNoYXJhY3RlcnMgZm9yIEFNSUdBLCBhIGxvdCBtb3JlIGZvciBVTklYLgogICAgICAqLwotICAgIGZvciAocHRyID0gcmV0dmFsICsgZm5hbWVsZW47IHB0ciA+PSByZXR2YWw7IHB0ci0tKQorICAgIGZvciAocHRyID0gcmV0dmFsICsgZm5hbWVsZW47IHB0ciA+PSByZXR2YWw7IG1iX3B0cl9iYWNrKHJldHZhbCwgcHRyKSkKICAgICB7CiAjaWZuZGVmIFJJU0NPUwogCWlmICgqZXh0ID09ICcuJwpkaWZmIC0tZ2l0IGEvc3JjL2ZvbGQuYyBiL3NyYy9mb2xkLmMKaW5kZXggYmIyNjhmYi4uYjFjNzAzMSAxMDA2NDQKLS0tIGEvc3JjL2ZvbGQuYworKysgYi9zcmMvZm9sZC5jCkBAIC0yMDcwLDEyICsyMDcwLDcgQEAKIAl9CiAJZWxzZQogCXsKLSNpZmRlZiBGRUFUX01CWVRFCi0JICAgIGlmIChoYXNfbWJ5dGUpCi0JCXMgKz0gKCptYl9wdHIybGVuX2NoZWNrKShzKTsKLQkgICAgZWxzZQotI2VuZGlmCi0JCSsrczsKKwkgICAgbWJfcHRyX2FkdihzKTsKIAl9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvc3JjL2dldGNoYXIuYyBiL3NyYy9nZXRjaGFyLmMKaW5kZXggZGQ1MmFjNC4uODMyOGUxOSAxMDA2NDQKLS0tIGEvc3JjL2dldGNoYXIuYworKysgYi9zcmMvZ2V0Y2hhci5jCkBAIC0xNTE0LDcgKzE1MTQsNyBAQAogCQljb250aW51ZTsKIAkgICAgfQogI2VuZGlmCi0jaWZkZWYgSEFWRV9HVEsyCisjaWYgZGVmaW5lZChIQVZFX0dUSzIpICYmIGRlZmluZWQoRkVBVF9NRU5VKQogCSAgICAvKiBHVEs6IDxGMTA+IG5vcm1hbGx5IHNlbGVjdHMgdGhlIG1lbnUsIGJ1dCBpdCdzIHBhc3NlZCB1bnRpbAogCSAgICAgKiBoZXJlIHRvIGFsbG93IG1hcHBpbmcgaXQuICBJbnRlcmNlcHQgYW5kIGludm9rZSB0aGUgR1RLCiAJICAgICAqIGJlaGF2aW9yIGlmIGl0J3Mgbm90IG1hcHBlZC4gKi8KZGlmZiAtLWdpdCBhL3NyYy9ndWkuYyBiL3NyYy9ndWkuYwppbmRleCA4NzAxZDA4Li4zMmFlM2JmIDEwMDY0NAotLS0gYS9zcmMvZ3VpLmMKKysrIGIvc3JjL2d1aS5jCkBAIC0zODUyLDEyICszODUyLDcgQEAKIAlmb3IgKDs7KQogCXsKIAkgICAgdyA9IGNoYXJ0YWJzaXplKHAsIGNvbCk7Ci0jaWZkZWYgRkVBVF9NQllURQotCSAgICBpZiAoaGFzX21ieXRlKQotCQlwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCk7Ci0JICAgIGVsc2UKLSNlbmRpZgotCQkrK3A7CisJICAgIG1iX3B0cl9hZHYocCk7CiAJICAgIGlmICgqcCA9PSBOVUwpCQkvKiBkb24ndCBjb3VudCB0aGUgbGFzdCBjaGFyYWN0ZXIgKi8KIAkJYnJlYWs7CiAJICAgIGNvbCArPSB3OwpkaWZmIC0tZ2l0IGEvc3JjL2d1aV9ndGsuYyBiL3NyYy9ndWlfZ3RrLmMKaW5kZXggZjQyODdlYy4uZTViNDI1OSAxMDA2NDQKLS0tIGEvc3JjL2d1aV9ndGsuYworKysgYi9zcmMvZ3VpX2d0ay5jCkBAIC0yMDE0LDcgKzIwMTQsNyBAQAogICAgIGlmIChhcnJheSAhPSBOVUxMKQogICAgIHsKIAlhcnJheVtjb3VudCsrXSA9IChjaGFyICopYnV0dG9uX3N0cmluZzsKLQlmb3IgKHAgPSBidXR0b25fc3RyaW5nOyAqcCAhPSBOVUw7ICsrcCkKKwlmb3IgKHAgPSBidXR0b25fc3RyaW5nOyAqcCAhPSBOVUw7IG1iX3B0cl9hZHYocCkpCiAJewogCSAgICBpZiAoKnAgPT0gRExHX0JVVFRPTl9TRVApCiAJICAgIHsKQEAgLTIwMjMsMTAgKzIwMjMsNiBAQAogCSAgICB9CiAJICAgIGVsc2UgaWYgKCpwID09IERMR19IT1RLRVlfQ0hBUikKIAkJKnAgPSAnXyc7Ci0jaWZkZWYgRkVBVF9NQllURQotCSAgICBlbHNlIGlmIChoYXNfbWJ5dGUpCi0JCXAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKSAtIDE7Ci0jZW5kaWYKIAl9CiAJYXJyYXlbY291bnRdID0gTlVMTDsgLyogY3VycmVudGx5IG5vdCByZWxpZWQgdXBvbiwgYnV0IGRvZXNuJ3QgaHVydCAqLwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9ndWlfZ3RrX3gxMS5jIGIvc3JjL2d1aV9ndGtfeDExLmMKaW5kZXggMzRiYmVkNS4uZmZkNzAyYyAxMDA2NDQKLS0tIGEvc3JjL2d1aV9ndGtfeDExLmMKKysrIGIvc3JjL2d1aV9ndGtfeDExLmMKQEAgLTQ3OTIsNiArNDc5Miw3IEBACiAgICAgcmV0dXJuIGZvbnQ7CiB9CiAKKyNpZiBkZWZpbmVkKEZFQVRfRVZBTCkgfHwgZGVmaW5lZChQUk9UTykKIC8qCiAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgZm9udCAiZm9udCIgaW4gYWxsb2NhdGVkIG1lbW9yeS4KICAqLwpAQCAtNDc5OSw3ICs0ODAwLDcgQEAKICAgICBjaGFyX3UgKgogZ3VpX21jaF9nZXRfZm9udG5hbWUoR3VpRm9udCBmb250LCBjaGFyX3UgKm5hbWUpCiB7Ci0jaWZkZWYgSEFWRV9HVEsyCisjIGlmZGVmIEhBVkVfR1RLMgogICAgIGlmIChmb250ICE9IE5PRk9OVCkKICAgICB7CiAJY2hhcgkqbmFtZSA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fdG9fc3RyaW5nKGZvbnQpOwpAQCAtNDgxMiwxMyArNDgxMywxNCBAQAogCSAgICByZXR1cm4gczsKIAl9CiAgICAgfQotI2Vsc2UKKyMgZWxzZQogICAgIC8qIERvbid0IGtub3cgaG93IHRvIGdldCB0aGUgbmFtZSwgcmV0dXJuIHdoYXQgd2UgZ290LiAqLwogICAgIGlmIChuYW1lICE9IE5VTEwpCiAJcmV0dXJuIHZpbV9zdHJzYXZlKG5hbWUpOwotI2VuZGlmCisjIGVuZGlmCiAgICAgcmV0dXJuIE5VTEw7CiB9CisjZW5kaWYKIAogI2lmICFkZWZpbmVkKEhBVkVfR1RLMikgfHwgZGVmaW5lZChQUk9UTykKIC8qCmRpZmYgLS1naXQgYS9zcmMvZ3VpX2tkZS5jYyBiL3NyYy9ndWlfa2RlLmNjCmluZGV4IDQ5OWRiNzcuLjFhYzhkYjkgMTAwNjQ0Ci0tLSBhL3NyYy9ndWlfa2RlLmNjCisrKyBiL3NyYy9ndWlfa2RlLmNjCkBAIC00MCw4ICs0MCw4IEBACiAjdW5kZWYgbXB1dHMKIAogI2lmIDEKLSNkZWZpbmUgZGJmKCBmb3JtYXQsIGFyZ3MuLi4gKSB7IHByaW50ZiggIiVzIiAiIDogIiBmb3JtYXQgIlxuIiAsIF9fRlVOQ1RJT05fXyAsICMjIGFyZ3MgKTsgZmZsdXNoKHN0ZG91dCk7IH0KLSNkZWZpbmUgZGIoKSAgICAgICB7IHByaW50ZiggIiVzXG4iLCBfX0ZVTkNUSU9OX18gKTtmZmx1c2goc3Rkb3V0KTsgfQorI2RlZmluZSBkYmYoZm9ybWF0LCBhcmdzLi4uKSB7IHByaW50ZigiJXMiICIgOiAiIGZvcm1hdCAiXG4iICwgX19GVU5DVElPTl9fICwgIyMgYXJncyApOyBmZmx1c2goc3Rkb3V0KTsgfQorI2RlZmluZSBkYigpICAgICAgIHsgcHJpbnRmKCIlc1xuIiwgX19GVU5DVElPTl9fICk7ZmZsdXNoKHN0ZG91dCk7IH0KICNlbHNlCiAjZGVmaW5lIGRiZihmb3JtYXQsIGFyZ3MuLi4gKQogI2RlZmluZSBkYigpCkBAIC0xNjUsMTYzICsxNjUsMTg0IEBACiAvKgogICogY3JlYXRlcyBhIGJsYW5rIHBpeG1hcCB1c2luZyB0Yl9ibGFuawogICovCi0JUVBpeG1hcAorICAgIFFQaXhtYXAKIHBpeG1hcF9jcmVhdGVfZnJvbV94cG0oY2hhciAqKnhwbSkvL3t7ewogewotCXJldHVybihRUGl4bWFwKChjb25zdCBjaGFyICoqKXhwbSkpOworICAgIHJldHVybiAoUVBpeG1hcCgoY29uc3QgY2hhciAqKil4cG0pKTsKIH0vL319fQogCiAvKgogICogY3JlYXRlcyBhIHBpeG1hcCBieSB1c2luZyBhIGJ1aWx0LWluIG51bWJlcgogICovCi0JUVBpeG1hcAorICAgIFFQaXhtYXAKIHBpeG1hcF9jcmVhdGVfYnlfbnVtKGludCBwaXhtYXBfbnVtKS8ve3t7CiB7CiAjaWZkZWYgRkVBVF9LREVUT09MQkFSCi0JaWYgKHBpeG1hcF9udW0gPj0gMCAmJiAodW5zaWduZWQpcGl4bWFwX251bSA8IChzaXplb2Yoa2RlaWNvbnMpCi0JCQkJLyBzaXplb2Yoa2RlaWNvbnNbMF0pKSAtIDEpIHsKKyAgICBpZiAocGl4bWFwX251bSA+PSAwICYmICh1bnNpZ25lZClwaXhtYXBfbnVtIDwgKHNpemVvZihrZGVpY29ucykKKwkJCQkJCSAgIC8gc2l6ZW9mKGtkZWljb25zWzBdKSkgLSAxKQorICAgIHsKIAotCQlLSWNvbkxvYWRlciAqaWwgPSBrYXBwLT5pY29uTG9hZGVyKCk7IC8vbmV3IEtJY29uTG9hZGVyKCk7Ci0JCVFTdHJpbmcgaWNvbjsKLQkJaWNvbj1RU3RyaW5nKGtkZWljb25zW3BpeG1hcF9udW1dKTsKLQkJcmV0dXJuIGlsLT5sb2FkSWNvbihpY29uLEtJY29uOjpNYWluVG9vbGJhcik7Ci0JfQotCXJldHVybiBRUGl4bWFwKCk7CisJS0ljb25Mb2FkZXIgKmlsID0ga2FwcC0+aWNvbkxvYWRlcigpOyAvL25ldyBLSWNvbkxvYWRlcigpOworCVFTdHJpbmcgaWNvbjsKKwlpY29uID0gUVN0cmluZyhrZGVpY29uc1twaXhtYXBfbnVtXSk7CisJcmV0dXJuIGlsLT5sb2FkSWNvbihpY29uLCBLSWNvbjo6TWFpblRvb2xiYXIpOworICAgIH0KKyAgICByZXR1cm4gUVBpeG1hcCgpOwogI2Vsc2UKLQlpZiAocGl4bWFwX251bSA+PSAwICYmICh1bnNpZ25lZClwaXhtYXBfbnVtIDwgKHNpemVvZihidWlsdF9pbl9waXhtYXBzKQotCQkJCS8gc2l6ZW9mKGJ1aWx0X2luX3BpeG1hcHNbMF0pKSAtIDEpCi0JCXJldHVybiBwaXhtYXBfY3JlYXRlX2Zyb21feHBtKGJ1aWx0X2luX3BpeG1hcHNbcGl4bWFwX251bV0pOwotCWVsc2UgcmV0dXJuIFFQaXhtYXAoKTsKKyAgICBpZiAocGl4bWFwX251bSA+PSAwICYmICh1bnNpZ25lZClwaXhtYXBfbnVtIDwgKHNpemVvZihidWlsdF9pbl9waXhtYXBzKQorCQkJCQkgICAvIHNpemVvZihidWlsdF9pbl9waXhtYXBzWzBdKSkgLSAxKQorCXJldHVybiBwaXhtYXBfY3JlYXRlX2Zyb21feHBtKGJ1aWx0X2luX3BpeG1hcHNbcGl4bWFwX251bV0pOworICAgIGVsc2UKKwlyZXR1cm4gUVBpeG1hcCgpOwogI2VuZGlmCiB9Ly99fX0KIAogLyoKICAqIENyZWF0ZXMgYSBwaXhtYXAgYnkgdXNpbmcgdGhlIHBpeG1hcCAibmFtZSIgZm91bmQgaW4gJ3J1bnRpbWVwYXRoJy9iaXRtYXBzLwogICovCi0JUVBpeG1hcAorICAgIFFQaXhtYXAKIHBpeG1hcF9jcmVhdGVfYnlfZGlyKGNoYXJfdSAqbmFtZSkvL3t7ewogewotCWNoYXJfdSBmdWxsX3BhdGhuYW1lW01BWFBBVEhMICsgMV07CisgICAgY2hhcl91IGZ1bGxfcGF0aG5hbWVbTUFYUEFUSEwgKyAxXTsKIAotCWlmIChndWlfZmluZF9iaXRtYXAobmFtZSwgZnVsbF9wYXRobmFtZSwgInhwbSIpID09IE9LKSB7Ci0JCXJldHVybiBRUGl4bWFwKChjb25zdCBjaGFyICopZnVsbF9wYXRobmFtZSk7Ci0JfQotCWVsc2UgcmV0dXJuIFFQaXhtYXAoKTsKKyAgICBpZiAoZ3VpX2ZpbmRfYml0bWFwKG5hbWUsIGZ1bGxfcGF0aG5hbWUsICJ4cG0iKSA9PSBPSykKKyAgICB7CisJcmV0dXJuIFFQaXhtYXAoKGNvbnN0IGNoYXIgKilmdWxsX3BhdGhuYW1lKTsKKyAgICB9CisgICAgZWxzZQorCXJldHVybiBRUGl4bWFwKCk7CiB9Ly99fX0KIAogCi0JUVBpeG1hcAorICAgIFFQaXhtYXAKIHBpeG1hcF9jcmVhdGVfZnJvbV9maWxlKGNoYXJfdSAqZmlsZSkKIHsKLQlyZXR1cm4gUVBpeG1hcCgoY29uc3QgY2hhciopZmlsZSk7CisgICAgcmV0dXJuIFFQaXhtYXAoKGNvbnN0IGNoYXIgKilmaWxlKTsKIH0KICNlbmRpZgogCi0Jdm9pZAorICAgIHZvaWQKIGd1aV9tY2hfYWRkX21lbnUodmltbWVudV9UICogbWVudSwgaW50IGlkeCkvL3t7ewogewogI2lmZGVmIEZFQVRfTUVOVQotCVFQb3B1cE1lbnUgKm1lOwotCXZpbW1lbnVfVCAqcGFyZW50ID0gbWVudS0+cGFyZW50OworICAgIFFQb3B1cE1lbnUgKm1lOworICAgIHZpbW1lbnVfVCAqcGFyZW50ID0gbWVudS0+cGFyZW50OwogCi0JaWYgKG1lbnVfaXNfcG9wdXAobWVudS0+bmFtZSkpIHsKLQkJbWVudS0+d2lkZ2V0ID0gbmV3IFFQb3B1cE1lbnUodm13ICwgKGNvbnN0IGNoYXIgKikgbWVudS0+bmFtZSk7Ci0JCVFPYmplY3Q6OmNvbm5lY3QoIG1lbnUtPndpZGdldCwgU0lHTkFMKGFjdGl2YXRlZChpbnQpKSwgdm13LCBTTE9UKG1lbnVfYWN0aXZhdGVkKGludCkpICk7Ci0JCXJldHVybjsKLQl9CisgICAgaWYgKG1lbnVfaXNfcG9wdXAobWVudS0+bmFtZSkpCisgICAgeworCW1lbnUtPndpZGdldCA9IG5ldyBRUG9wdXBNZW51KHZtdyAsIChjb25zdCBjaGFyICopbWVudS0+bmFtZSk7CisJUU9iamVjdDo6Y29ubmVjdChtZW51LT53aWRnZXQsIFNJR05BTChhY3RpdmF0ZWQoaW50KSksIHZtdywKKwkJCQkJCSAgIFNMT1QobWVudV9hY3RpdmF0ZWQoaW50KSkpOworCXJldHVybjsKKyAgICB9CiAKLQlpZiAoIW1lbnVfaXNfbWVudWJhcihtZW51LT5uYW1lKSkKLQkJcmV0dXJuOworICAgIGlmICghbWVudV9pc19tZW51YmFyKG1lbnUtPm5hbWUpKQorCXJldHVybjsKIAotCWlmIChwYXJlbnQpIHsKLQkJaWR4Kys7IC8vIGZvciB0ZWFyb2ZmcyB0byBiZSBmaXJzdCBpbiBtZW51cwotCQltZSA9IG5ldyBRUG9wdXBNZW51KHBhcmVudC0+d2lkZ2V0LCAoY29uc3QgY2hhciAqKSBtZW51LT5uYW1lKTsKLQkJcGFyZW50LT53aWRnZXQtPmluc2VydEl0ZW0oIFFTdHJpbmcoKGNvbnN0IGNoYXIgKiltZW51LT5uYW1lKSwgbWUsIChpbnQpbWUsIGlkeCk7Ci0JfSBlbHNlIHsKLQkJbWUgPSBuZXcgUVBvcHVwTWVudSh2bXctPm1lbnVCYXIoKSAsIChjb25zdCBjaGFyICopIG1lbnUtPm5hbWUpOwotCQl2bXctPm1lbnVCYXIoKS0+aW5zZXJ0SXRlbSggUVN0cmluZygoY29uc3QgY2hhciAqKW1lbnUtPm5hbWUpLCBtZSAsIChpbnQpIG1lLCBpZHgpOwotCX0KKyAgICBpZiAocGFyZW50KQorICAgIHsKKwlpZHgrKzsgLy8gZm9yIHRlYXJvZmZzIHRvIGJlIGZpcnN0IGluIG1lbnVzCisJbWUgPSBuZXcgUVBvcHVwTWVudShwYXJlbnQtPndpZGdldCwgKGNvbnN0IGNoYXIgKiltZW51LT5uYW1lKTsKKwlwYXJlbnQtPndpZGdldC0+aW5zZXJ0SXRlbShRU3RyaW5nKChjb25zdCBjaGFyICopbWVudS0+bmFtZSksIG1lLAorCQkJCQkJCQkoaW50KW1lLCBpZHgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCW1lID0gbmV3IFFQb3B1cE1lbnUodm13LT5tZW51QmFyKCkgLCAoY29uc3QgY2hhciAqKW1lbnUtPm5hbWUpOworCXZtdy0+bWVudUJhcigpLT5pbnNlcnRJdGVtKFFTdHJpbmcoKGNvbnN0IGNoYXIgKiltZW51LT5uYW1lKSwgbWUsCisJCQkJCQkJCShpbnQpbWUsIGlkeCk7CisgICAgfQogCi0JbWUtPnNldENhcHRpb24oKGNvbnN0IGNoYXIqKSggbWVudS0+ZG5hbWUgICkpOwotCWlmICh2bXctPmhhdmVfdGVhcm9mZikgbWUtPmluc2VydFRlYXJPZmZIYW5kbGUoMCwwKTsKLQlRT2JqZWN0Ojpjb25uZWN0KCBtZSwgU0lHTkFMKGFjdGl2YXRlZChpbnQpKSwgdm13LCBTTE9UKG1lbnVfYWN0aXZhdGVkKGludCkpICk7Ci0JbWVudS0+d2lkZ2V0ID0gbWU7CisgICAgbWUtPnNldENhcHRpb24oKGNvbnN0IGNoYXIgKikobWVudS0+ZG5hbWUpKTsKKyAgICBpZiAodm13LT5oYXZlX3RlYXJvZmYpCisJbWUtPmluc2VydFRlYXJPZmZIYW5kbGUoMCwgMCk7CisgICAgUU9iamVjdDo6Y29ubmVjdChtZSwgU0lHTkFMKGFjdGl2YXRlZChpbnQpKSwgdm13LAorCQkJCQkJICAgU0xPVChtZW51X2FjdGl2YXRlZChpbnQpKSk7CisgICAgbWVudS0+d2lkZ2V0ID0gbWU7CiAjZW5kaWYKIH0vL319fQogCiAKLQl2b2lkCisgICAgdm9pZAogZ3VpX21jaF9hZGRfbWVudV9pdGVtKHZpbW1lbnVfVCAqIG1lbnUsIGludCBpZHgpLy97e3sKIHsKICNpZmRlZiBGRUFUX01FTlUKLQl2aW1tZW51X1QgKnBhcmVudCA9IG1lbnUtPnBhcmVudDsKKyAgICB2aW1tZW51X1QgKnBhcmVudCA9IG1lbnUtPnBhcmVudDsKICNpZmRlZiBGRUFUX1RPT0xCQVIKLQlpZiAobWVudV9pc190b29sYmFyKHBhcmVudC0+bmFtZSkpIHsKLQkJUVBpeG1hcCBwaXg7Ci0JCWlmICggbWVudV9pc19zZXBhcmF0b3IobWVudS0+bmFtZSkgKQotCQl7Ci0JCQl2bXctPnRvb2xCYXIoKS0+aW5zZXJ0U2VwYXJhdG9yKCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKG1lbnUtPmljb25maWxlICE9IE5VTEwpIHsKLQkJCXBpeCA9IHBpeG1hcF9jcmVhdGVfZnJvbV9maWxlKG1lbnUtPmljb25maWxlKTsKLQkJfQotCQlpZiAoIW1lbnUtPmljb25fYnVpbHRpbikgewotCQkJcGl4ID0gcGl4bWFwX2NyZWF0ZV9ieV9kaXIobWVudS0+bmFtZSk7Ci0JCX0KLQkJaWYgKHBpeC5pc051bGwoKSAmJiBtZW51LT5pY29uaWR4ID49IDApIHsKLQkJCXBpeCA9IHBpeG1hcF9jcmVhdGVfYnlfbnVtKG1lbnUtPmljb25pZHgpOwotCQl9Ci0jaWZuZGVmIEZFQVRfS0RFVE9PTEJBUgotCQlpZiAocGl4LmlzTnVsbCgpKSB7Ci0JCQlwaXggPSBwaXhtYXBfY3JlYXRlX2Zyb21feHBtKHRiX2JsYW5rX3hwbSk7Ci0JCX0KLSNlbmRpZgotCQlpZiAocGl4LmlzTnVsbCgpKSByZXR1cm47IC8vIGZhaWxlZAotCQl2bXctPnRvb2xCYXIoKS0+aW5zZXJ0QnV0dG9uICgKLQkJCQlwaXgsCi0JCQkJKGludCkgbWVudSAsIC8vIGlkCi0JCQkJdHJ1ZSwKLQkJCQkoY2hhciAqKSAobWVudS0+c3RyaW5nc1tNRU5VX0lOREVYX1RJUF0pICwgLy8gdG9vbHRpcCBvciB0ZXh0Ci0JCQkJaWR4Ci0JCQkJKTsKLQkJbWVudS0+cGFyZW50PXBhcmVudDsKLQkJcmV0dXJuOworICAgIGlmIChtZW51X2lzX3Rvb2xiYXIocGFyZW50LT5uYW1lKSkKKyAgICB7CisJUVBpeG1hcCBwaXg7CisKKwlpZiAobWVudV9pc19zZXBhcmF0b3IobWVudS0+bmFtZSkpCisJeworCSAgICB2bXctPnRvb2xCYXIoKS0+aW5zZXJ0U2VwYXJhdG9yKCk7CisJICAgIHJldHVybjsKIAl9CisJaWYgKG1lbnUtPmljb25maWxlICE9IE5VTEwpCisJeworCSAgICBwaXggPSBwaXhtYXBfY3JlYXRlX2Zyb21fZmlsZShtZW51LT5pY29uZmlsZSk7CisJfQorCWlmICghbWVudS0+aWNvbl9idWlsdGluKQorCXsKKwkgICAgcGl4ID0gcGl4bWFwX2NyZWF0ZV9ieV9kaXIobWVudS0+bmFtZSk7CisJfQorCWlmIChwaXguaXNOdWxsKCkgJiYgbWVudS0+aWNvbmlkeCA+PSAwKQorCXsKKwkgICAgcGl4ID0gcGl4bWFwX2NyZWF0ZV9ieV9udW0obWVudS0+aWNvbmlkeCk7CisJfQorI2lmbmRlZiBGRUFUX0tERVRPT0xCQVIKKwlpZiAocGl4LmlzTnVsbCgpKQorCXsKKwkgICAgcGl4ID0gcGl4bWFwX2NyZWF0ZV9mcm9tX3hwbSh0Yl9ibGFua194cG0pOworCX0KKyNlbmRpZgorCWlmIChwaXguaXNOdWxsKCkpCisJICAgIHJldHVybjsgLy8gZmFpbGVkCisJdm13LT50b29sQmFyKCktPmluc2VydEJ1dHRvbigKKwkJcGl4LAorCQkoaW50KW1lbnUsIC8vIGlkCisJCXRydWUsCisJCShjaGFyICopKG1lbnUtPnN0cmluZ3NbTUVOVV9JTkRFWF9USVBdKSwgLy8gdG9vbHRpcCBvciB0ZXh0CisJCWlkeCk7CisJbWVudS0+cGFyZW50PXBhcmVudDsKKwlyZXR1cm47CisgICAgfQogI2VuZGlmIC8vIEZFQVRfVE9PTEJBUgogCi0JaWR4Kys7Ci0JaWYgKCBtZW51X2lzX3NlcGFyYXRvcihtZW51LT5uYW1lKSApIHsKLQkJcGFyZW50LT53aWRnZXQtPmluc2VydFNlcGFyYXRvcigpOwotCQlyZXR1cm47Ci0JfQotCXBhcmVudC0+d2lkZ2V0LT5pbnNlcnRJdGVtKFFTdHJpbmcoKGNvbnN0IGNoYXIgKiltZW51LT5uYW1lKSwgKGludCltZW51LCBpZHggKTsKKyAgICBpZHgrKzsKKyAgICBpZiAobWVudV9pc19zZXBhcmF0b3IobWVudS0+bmFtZSkpCisgICAgeworCXBhcmVudC0+d2lkZ2V0LT5pbnNlcnRTZXBhcmF0b3IoKTsKKwlyZXR1cm47CisgICAgfQorICAgIHBhcmVudC0+d2lkZ2V0LT5pbnNlcnRJdGVtKFFTdHJpbmcoKGNvbnN0IGNoYXIgKiltZW51LT5uYW1lKSwgKGludCltZW51LCBpZHgpOwogI2VuZGlmCiB9Ly99fX0KIAogCi0Jdm9pZAorICAgIHZvaWQKIGd1aV9tY2hfc2V0X3RleHRfYXJlYV9wb3MoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpLy97e3sKIHsKLQlpbnQgWCA9IDA7Ci0JaW50IFkgPSAwOwotCWlmICh2bXctPm1lbnVCYXIoKS0+aXNWaXNpYmxlKCkgJiYgdm13LT5tZW51QmFyKCktPmlzRW5hYmxlZCgpCi0jaWYgUVRfVkVSU0lPTj49MzAwCi0JCSAgICAgICAJJiYgIXZtdy0+bWVudUJhcigpLT5pc1RvcExldmVsTWVudSgpCi0jZW5kaWYKLQkJCSkKLQkJWSArPSB2bXctPm1lbnVCYXIoKS0+aGVpZ2h0KCk7Ci0jaWZkZWYgRkVBVF9UT09MQkFSCi0JaWYgKHZtdy0+dG9vbEJhcigpLT5pc1Zpc2libGUoKSAmJiB2bXctPnRvb2xCYXIoKS0+aXNFbmFibGVkKCkgJiYKLQkJCXZtdy0+dG9vbEJhcigpLT5iYXJQb3MoKT09S1Rvb2xCYXI6OlRvcCkKLQkJWSArPSB2bXctPnRvb2xCYXIoKS0+aGVpZ2h0KCk7CisgICAgaW50IFggPSAwOworICAgIGludCBZID0gMDsKIAotCWlmICh2bXctPnRvb2xCYXIoKS0+aXNWaXNpYmxlKCkgJiYgdm13LT50b29sQmFyKCktPmlzRW5hYmxlZCgpICYmCi0JCQl2bXctPnRvb2xCYXIoKS0+YmFyUG9zKCk9PUtUb29sQmFyOjpMZWZ0KQotCQlYICs9IHZtdy0+dG9vbEJhcigpLT53aWR0aCgpOworICAgIGlmICh2bXctPm1lbnVCYXIoKS0+aXNWaXNpYmxlKCkgJiYgdm13LT5tZW51QmFyKCktPmlzRW5hYmxlZCgpCisjaWYgUVRfVkVSU0lPTj49MzAwCisJICAgICYmICF2bXctPm1lbnVCYXIoKS0+aXNUb3BMZXZlbE1lbnUoKQorI2VuZGlmCisgICAgICAgKQorCVkgKz0gdm13LT5tZW51QmFyKCktPmhlaWdodCgpOworI2lmZGVmIEZFQVRfVE9PTEJBUgorICAgIGlmICh2bXctPnRvb2xCYXIoKS0+aXNWaXNpYmxlKCkgJiYgdm13LT50b29sQmFyKCktPmlzRW5hYmxlZCgpCisJCQkJICAgJiYgdm13LT50b29sQmFyKCktPmJhclBvcygpPT1LVG9vbEJhcjo6VG9wKQorCVkgKz0gdm13LT50b29sQmFyKCktPmhlaWdodCgpOworCisgICAgaWYgKHZtdy0+dG9vbEJhcigpLT5pc1Zpc2libGUoKSAmJiB2bXctPnRvb2xCYXIoKS0+aXNFbmFibGVkKCkKKwkJCQkgICYmIHZtdy0+dG9vbEJhcigpLT5iYXJQb3MoKT09S1Rvb2xCYXI6OkxlZnQpCisJWCArPSB2bXctPnRvb2xCYXIoKS0+d2lkdGgoKTsKICNlbmRpZiAvLyBGRUFUX1RPT0xCQVIKIAotCWd1aS53LT5zZXRHZW9tZXRyeSh4K1gseStZLHcsaCk7CisgICAgZ3VpLnctPnNldEdlb21ldHJ5KHggKyBYLCB5ICsgWSwgdywgaCk7CiB9Ly99fX0KIAogCkBAIC0zMjksMjQgKzM1MCwyOSBAQAogLyoKICAqIEVuYWJsZSBvciBkaXNhYmxlIG1uZW1vbmljcyBmb3IgdGhlIHRvcGxldmVsIG1lbnVzLgogICovCi0Jdm9pZAorICAgIHZvaWQKIGd1aV9ndGtfc2V0X21uZW1vbmljcyhpbnQgZW5hYmxlKS8ve3t7IC8vIFRPIEJFIFJFTU9WRUQKIHsKIH0vL319fQogCi0Jdm9pZAorICAgIHZvaWQKIHRvZ2dsZV90ZWFyb2Zmcyh2aW1tZW51X1QgKm1lbnUsIGludCBlbmFibGUpLy97e3sKIHsKLQl3aGlsZSAobWVudSAhPSBOVUxMKSB7Ci0JCWlmICghbWVudV9pc19wb3B1cChtZW51LT5uYW1lKSkgewotCQkJaWYgKG1lbnUtPndpZGdldCAhPSAwKSB7Ci0JCQkJaWYgKGVuYWJsZSkgbWVudS0+d2lkZ2V0LT5pbnNlcnRUZWFyT2ZmSGFuZGxlKDAsMCk7Ci0JCQkJZWxzZSBtZW51LT53aWRnZXQtPnJlbW92ZUl0ZW0oMCk7Ci0JCQl9Ci0JCQl0b2dnbGVfdGVhcm9mZnMobWVudS0+Y2hpbGRyZW4sIGVuYWJsZSk7Ci0JCX0KLQkJbWVudSA9IG1lbnUtPm5leHQ7CisgICAgd2hpbGUgKG1lbnUgIT0gTlVMTCkKKyAgICB7CisJaWYgKCFtZW51X2lzX3BvcHVwKG1lbnUtPm5hbWUpKQorCXsKKwkgICAgaWYgKG1lbnUtPndpZGdldCAhPSAwKQorCSAgICB7CisJCWlmIChlbmFibGUpCisJCSAgICBtZW51LT53aWRnZXQtPmluc2VydFRlYXJPZmZIYW5kbGUoMCwwKTsKKwkJZWxzZQorCQkgICAgbWVudS0+d2lkZ2V0LT5yZW1vdmVJdGVtKDApOworCSAgICB9CisJICAgIHRvZ2dsZV90ZWFyb2ZmcyhtZW51LT5jaGlsZHJlbiwgZW5hYmxlKTsKIAl9CisJbWVudSA9IG1lbnUtPm5leHQ7CisgICAgfQogfS8vfX19CiAKIAl2b2lkCkBAIC0zNjIsMjAgKzM4OCwyMSBAQAogLyoKICAqIERlc3Ryb3kgdGhlIG1hY2hpbmUgc3BlY2lmaWMgbWVudSB3aWRnZXQuCiAgKi8KLQl2b2lkCisgICAgdm9pZAogZ3VpX21jaF9kZXN0cm95X21lbnUodmltbWVudV9UICogbWVudSkvL3t7ewogewogI2lmZGVmIEZFQVRfVE9PTEJBUgotCWlmIChtZW51LT5wYXJlbnQgJiYgbWVudV9pc190b29sYmFyKG1lbnUtPnBhcmVudC0+bmFtZSkpIHsKLQkJdm13LT50b29sQmFyKCktPnJlbW92ZUl0ZW0oIChpbnQpIG1lbnUgKTsKLQkJcmV0dXJuOwotCX0KKyAgICBpZiAobWVudS0+cGFyZW50ICYmIG1lbnVfaXNfdG9vbGJhcihtZW51LT5wYXJlbnQtPm5hbWUpKQorICAgIHsKKwl2bXctPnRvb2xCYXIoKS0+cmVtb3ZlSXRlbSgoaW50KW1lbnUpOworCXJldHVybjsKKyAgICB9CiAjZW5kaWYKLQlpZiAobWVudS0+cGFyZW50KQotCQltZW51LT5wYXJlbnQtPndpZGdldC0+cmVtb3ZlSXRlbSgoaW50KW1lbnUpOwotCWlmIChtZW51LT53aWRnZXQpCi0JCWRlbGV0ZSBtZW51LT53aWRnZXQ7Ci0JbWVudS0+d2lkZ2V0ID0gMDsKKyAgICBpZiAobWVudS0+cGFyZW50KQorCW1lbnUtPnBhcmVudC0+d2lkZ2V0LT5yZW1vdmVJdGVtKChpbnQpbWVudSk7CisgICAgaWYgKG1lbnUtPndpZGdldCkKKwlkZWxldGUgbWVudS0+d2lkZ2V0OworICAgIG1lbnUtPndpZGdldCA9IDA7CiB9Ly99fX0KICNlbmRpZiAvKiBGRUFUX01FTlUgKi8KIApAQCAtMzg0LDY4ICs0MTEsNzggQEAKICAqIFNjcm9sbGJhciBzdHVmZi4KICAqLwogCi0Jdm9pZAotZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3RodW1iKHNjcm9sbGJhcl9UICogc2IsIGxvbmcgdmFsLCBsb25nIHNpemUsIGxvbmcgbWF4KS8ve3t7CisgICAgdm9pZAorZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3RodW1iKHNjcm9sbGJhcl9UICpzYiwgbG9uZyB2YWwsIGxvbmcgc2l6ZSwgbG9uZyBtYXgpLy97e3sKIHsKLQlpZiAoIXNiLT53KSByZXR1cm47CisgICAgaWYgKCFzYi0+dykKKwlyZXR1cm47CiAKLQlzYi0+dy0+c2V0UmFuZ2UoMCwgbWF4KzEtc2l6ZSk7Ci0Jc2ItPnctPnNldFZhbHVlKHZhbCk7CisgICAgc2ItPnctPnNldFJhbmdlKDAsIG1heCArIDEgLSBzaXplKTsKKyAgICBzYi0+dy0+c2V0VmFsdWUodmFsKTsKIAotCXNiLT53LT5zZXRMaW5lU3RlcCgxKTsKLQlzYi0+dy0+c2V0UGFnZVN0ZXAoc2l6ZSk7CisgICAgc2ItPnctPnNldExpbmVTdGVwKDEpOworICAgIHNiLT53LT5zZXRQYWdlU3RlcChzaXplKTsKIH0vL319fQogCi0Jdm9pZAotZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3BvcyhzY3JvbGxiYXJfVCAqIHNiLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkvL3t7eworICAgIHZvaWQKK2d1aV9tY2hfc2V0X3Njcm9sbGJhcl9wb3Moc2Nyb2xsYmFyX1QgKnNiLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkvL3t7ewogewotCWlmICghc2ItPncpIHJldHVybjsKLQkvL3dlIGFkZCB0aGUgbWVudWJhciBhbmQgdG9vbGJhciBoZWlnaHQvd2lkdGgKLQlpbnQgWCA9IDA7Ci0JaW50IFkgPSAwOworICAgIGlmICghc2ItPncpCisJcmV0dXJuOworICAgIC8vd2UgYWRkIHRoZSBtZW51YmFyIGFuZCB0b29sYmFyIGhlaWdodC93aWR0aAorICAgIGludCBYID0gMDsKKyAgICBpbnQgWSA9IDA7CiAKLQlpZiAodm13LT5tZW51QmFyKCktPmlzVmlzaWJsZSgpICYmIHZtdy0+bWVudUJhcigpLT5pc0VuYWJsZWQoKQorICAgIGlmICh2bXctPm1lbnVCYXIoKS0+aXNWaXNpYmxlKCkgJiYgdm13LT5tZW51QmFyKCktPmlzRW5hYmxlZCgpCiAjaWYgUVRfVkVSU0lPTj49MzAwCi0JCSAgICAgICAJJiYgIXZtdy0+bWVudUJhcigpLT5pc1RvcExldmVsTWVudSgpCisJCQkJCSAgJiYgIXZtdy0+bWVudUJhcigpLT5pc1RvcExldmVsTWVudSgpCiAjZW5kaWYKLQkJCSkKLQkJWSArPSB2bXctPm1lbnVCYXIoKS0+aGVpZ2h0KCk7CisgICAgICAgKQorCVkgKz0gdm13LT5tZW51QmFyKCktPmhlaWdodCgpOwogI2lmZGVmIEZFQVRfVE9PTEJBUgotCWlmICh2bXctPnRvb2xCYXIoKS0+aXNWaXNpYmxlKCkgJiYgdm13LT50b29sQmFyKCktPmlzRW5hYmxlZCgpICYmCi0JCQl2bXctPnRvb2xCYXIoKS0+YmFyUG9zKCk9PUtUb29sQmFyOjpUb3ApCi0JCVkgKz0gdm13LT50b29sQmFyKCktPmhlaWdodCgpOworICAgIGlmICh2bXctPnRvb2xCYXIoKS0+aXNWaXNpYmxlKCkgJiYgdm13LT50b29sQmFyKCktPmlzRW5hYmxlZCgpCisJCQkJICAgJiYgdm13LT50b29sQmFyKCktPmJhclBvcygpPT1LVG9vbEJhcjo6VG9wKQorCVkgKz0gdm13LT50b29sQmFyKCktPmhlaWdodCgpOwogCi0JaWYgKHZtdy0+dG9vbEJhcigpLT5pc1Zpc2libGUoKSAmJiB2bXctPnRvb2xCYXIoKS0+aXNFbmFibGVkKCkgJiYKLQkJCXZtdy0+dG9vbEJhcigpLT5iYXJQb3MoKT09S1Rvb2xCYXI6OkxlZnQpCi0JCVggKz0gdm13LT50b29sQmFyKCktPndpZHRoKCk7CisgICAgaWYgKHZtdy0+dG9vbEJhcigpLT5pc1Zpc2libGUoKSAmJiB2bXctPnRvb2xCYXIoKS0+aXNFbmFibGVkKCkKKwkJCQkgICYmIHZtdy0+dG9vbEJhcigpLT5iYXJQb3MoKT09S1Rvb2xCYXI6OkxlZnQpCisJWCArPSB2bXctPnRvb2xCYXIoKS0+d2lkdGgoKTsKICNlbmRpZiAvL0ZFQVRfVE9PTEJBUgotCWlmIChzYi0+dy0+b3JpZW50YXRpb24oKSA9PSBRdDo6VmVydGljYWwpIHsKLQkJYm9vbCBsZWZ0c2Nyb2xsPWd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfTEVGVF07Ci0JCWJvb2wgcmlnaHRzY3JvbGw9Z3VpLndoaWNoX3Njcm9sbGJhcnNbU0JBUl9SSUdIVF07Ci0JCWlmICh4PDIwKSAgbGVmdHNjcm9sbD10cnVlOwotCQllbHNlIHJpZ2h0c2Nyb2xsPXRydWU7Ci0JCWlmICh4PDIwKSBzYi0+dy0+c2V0R2VvbWV0cnkoWCx5K1ksdyxoKTsKLQkJZWxzZSBzYi0+dy0+c2V0R2VvbWV0cnkodm13LT53aWR0aCgpLXctMStYLCB5K1ksdyxoKTsKLQl9IGVsc2UgewotCQlzYi0+dy0+c2V0R2VvbWV0cnkoeCtYLHkrWSx3LGgpOwotCX0KKyAgICBpZiAoc2ItPnctPm9yaWVudGF0aW9uKCkgPT0gUXQ6OlZlcnRpY2FsKQorICAgIHsKKwlib29sIGxlZnRzY3JvbGw9Z3VpLndoaWNoX3Njcm9sbGJhcnNbU0JBUl9MRUZUXTsKKwlib29sIHJpZ2h0c2Nyb2xsPWd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfUklHSFRdOworCisJaWYgKHggPCAyMCkKKwkgICAgbGVmdHNjcm9sbCA9IHRydWU7CisJZWxzZQorCSAgICByaWdodHNjcm9sbCA9IHRydWU7CisJaWYgKHggPCAyMCkKKwkgICAgc2ItPnctPnNldEdlb21ldHJ5KFgsIHkrWSwgdywgaCk7CisJZWxzZQorCSAgICBzYi0+dy0+c2V0R2VvbWV0cnkodm13LT53aWR0aCgpIC0gdyAtIDEgKyBYLCB5ICsgWSwgdywgaCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJc2ItPnctPnNldEdlb21ldHJ5KHggKyBYLCB5ICsgWSwgdywgaCk7CisgICAgfQogfS8vfX19CiAKIC8qIFNCQVJfVkVSVCBvciBTQkFSX0hPUklaICovCi0Jdm9pZAotZ3VpX21jaF9jcmVhdGVfc2Nyb2xsYmFyKHNjcm9sbGJhcl9UICogc2IsIGludCBvcmllbnQpLy97e3sKKyAgICB2b2lkCitndWlfbWNoX2NyZWF0ZV9zY3JvbGxiYXIoc2Nyb2xsYmFyX1QgKnNiLCBpbnQgb3JpZW50KS8ve3t7CiB7Ci0Jc2Jwb29sLT5jcmVhdGUoc2Isb3JpZW50KTsKLQlpZiAob3JpZW50PT1TQkFSX1ZFUlQpCi0JCWd1aS5zY3JvbGxiYXJfd2lkdGggPSBzYi0+dy0+c2l6ZUhpbnQoKS53aWR0aCgpOwotCWVsc2UKLQkJZ3VpLnNjcm9sbGJhcl9oZWlnaHQgPSBzYi0+dy0+c2l6ZUhpbnQoKS5oZWlnaHQoKTsKKyAgICBzYnBvb2wtPmNyZWF0ZShzYixvcmllbnQpOworICAgIGlmIChvcmllbnQgPT0gU0JBUl9WRVJUKQorCWd1aS5zY3JvbGxiYXJfd2lkdGggPSBzYi0+dy0+c2l6ZUhpbnQoKS53aWR0aCgpOworICAgIGVsc2UKKwlndWkuc2Nyb2xsYmFyX2hlaWdodCA9IHNiLT53LT5zaXplSGludCgpLmhlaWdodCgpOwogfS8vfX19CiAKLQl2b2lkCisgICAgdm9pZAogZ3VpX21jaF9kZXN0cm95X3Njcm9sbGJhcihzY3JvbGxiYXJfVCAqIHNiKS8ve3t7CiB7Ci0Jc2Jwb29sLT5kZXN0cm95KHNiKTsKKyAgICBzYnBvb2wtPmRlc3Ryb3koc2IpOwogfS8vfX19CiAKICNpZiBkZWZpbmVkKEZFQVRfQlJPV1NFKSB8fCBkZWZpbmVkKFBST1RPKQpAQCAtNDY0LDcgKzUwMSw3IEBACiAgKiBmaWx0ZXIJCQlub3QgdXNlZCAoZmlsZSBuYW1lIGZpbHRlcikKICAqLwogLypBUkdTVVNFRCovCi1jaGFyX3UgKgorICAgIGNoYXJfdSAqCiBndWlfbWNoX2Jyb3dzZShpbnQgc2F2aW5nLC8ve3t7CiAJCWNoYXJfdSAqIHRpdGxlLAogCQljaGFyX3UgKiBkZmx0LApAQCAtNDcyLDM2ICs1MDksMzcgQEAKIAkJY2hhcl91ICogaW5pdGRpciwKIAkJY2hhcl91ICogZmlsdGVyKQogewotCWNoYXIgKiBmaWx0X2dsb2I7CisgICAgY2hhciAqZmlsdF9nbG9iOwogCi0JaWYgKGZpbHRlciAhPSAoY2hhcl91ICopIDB4MCApCi0JewotCQlmaWx0ZXIgPSB2aW1fc3Ryc2F2ZShmaWx0ZXIpOwotCQlzdHJ0b2soKGNoYXIgKikgZmlsdGVyLCAiKCIpOwotCQlmaWx0X2dsb2IgPSBzdHJ0b2soMEwsICIpIik7Ci0JfQotCWVsc2UKLQkJZmlsdF9nbG9iID0gKGNoYXIgKikgZmlsdGVyOworICAgIGlmIChmaWx0ZXIgIT0gKGNoYXJfdSAqKTB4MCkKKyAgICB7CisJZmlsdGVyID0gdmltX3N0cnNhdmUoZmlsdGVyKTsKKwlzdHJ0b2soKGNoYXIgKilmaWx0ZXIsICIoIik7CisJZmlsdF9nbG9iID0gc3RydG9rKDBMLCAiKSIpOworICAgIH0KKyAgICBlbHNlCisJZmlsdF9nbG9iID0gKGNoYXIgKilmaWx0ZXI7CiAKLQlndWlfbWNoX21vdXNlaGlkZShGQUxTRSk7CisgICAgZ3VpX21jaF9tb3VzZWhpZGUoRkFMU0UpOwogCi0JUVN0cmluZyBzOwotCWlmICghc2F2aW5nKQotCQlzID0gS0ZpbGVEaWFsb2c6OmdldE9wZW5GaWxlTmFtZSggKGNoYXIgKikgaW5pdGRpciwgKGNoYXIgKikgZmlsdF9nbG9iLCB2bXcsIChjaGFyICopIHRpdGxlICk7Ci0JZWxzZQotCQlzID0gS0ZpbGVEaWFsb2c6OmdldFNhdmVGaWxlTmFtZSggKTsKKyAgICBRU3RyaW5nIHM7CisgICAgaWYgKCFzYXZpbmcpCisJcyA9IEtGaWxlRGlhbG9nOjpnZXRPcGVuRmlsZU5hbWUoKGNoYXIgKilpbml0ZGlyLCAoY2hhciAqKWZpbHRfZ2xvYiwKKwkJCQkJCQkgIHZtdywgKGNoYXIgKil0aXRsZSk7CisgICAgZWxzZQorCXMgPSBLRmlsZURpYWxvZzo6Z2V0U2F2ZUZpbGVOYW1lKCk7CiAKLQlpZiAoZmlsdGVyKQotCQl2aW1fZnJlZShmaWx0ZXIpOworICAgIGlmIChmaWx0ZXIpCisJdmltX2ZyZWUoZmlsdGVyKTsKIAotCWlmIChzLmlzTnVsbCgpKQotCQlyZXR1cm4gTlVMTDsKLQlRQ1N0cmluZyB1bmlzdHJpbmcgPSB2bXctPmNvZGVjLT5mcm9tVW5pY29kZShzKTsKLQljaGFyX3UgKiBzMiA9IChjaGFyX3UgKikoY29uc3QgY2hhciopdW5pc3RyaW5nOwotCWlmIChzMikKLQkJczIgPSB2aW1fc3Ryc2F2ZSggczIgKTsKKyAgICBpZiAocy5pc051bGwoKSkKKwlyZXR1cm4gTlVMTDsKKyAgICBRQ1N0cmluZyB1bmlzdHJpbmcgPSB2bXctPmNvZGVjLT5mcm9tVW5pY29kZShzKTsKKyAgICBjaGFyX3UgKnMyID0gKGNoYXJfdSAqKShjb25zdCBjaGFyICopdW5pc3RyaW5nOworICAgIGlmIChzMikKKwlzMiA9IHZpbV9zdHJzYXZlKHMyKTsKIAotCXJldHVybiBzMjsKKyAgICByZXR1cm4gczI7CiB9Ly99fX0KIAogI2VuZGlmCS8qIEZFQVRfQlJPV1NFICovCkBAIC01MTEsOSArNTQ5LDkgQEAKIC8qIEFSR1NVU0VEICovCiAgICAgaW50CiBndWlfbWNoX2RpYWxvZyhpbnQgdHlwZSwJCS8qIHR5cGUgb2YgZGlhbG9nICovLy97e3sKLQkJY2hhcl91ICogdGl0bGUsCQkvKiB0aXRsZSBvZiBkaWFsb2cgKi8KLQkJY2hhcl91ICogbWVzc2FnZSwJLyogbWVzc2FnZSB0ZXh0ICovCi0JCWNoYXJfdSAqIGJ1dHRvbnMsCS8qIG5hbWVzIG9mIGJ1dHRvbnMgKi8KKwkJY2hhcl91ICp0aXRsZSwJCS8qIHRpdGxlIG9mIGRpYWxvZyAqLworCQljaGFyX3UgKm1lc3NhZ2UsCS8qIG1lc3NhZ2UgdGV4dCAqLworCQljaGFyX3UgKmJ1dHRvbnMsCS8qIG5hbWVzIG9mIGJ1dHRvbnMgKi8KIAkJaW50IGRlZl9idXQsCQkvKiBkZWZhdWx0IGJ1dHRvbiAqLwogCQljaGFyX3UgKnRleHRmaWVsZCkKIHsKQEAgLTU0Niw4ICs1ODQsOCBAQAogCiAKIC8qIEZpbmQgYW5kIFJlcGxhY2UgaW1wbGVtZW50YXRpb25zICovCi0Jdm9pZAotZ3VpX21jaF9maW5kX2RpYWxvZyhleGFyZ19UICogZWFwKS8ve3t7CisgICAgdm9pZAorZ3VpX21jaF9maW5kX2RpYWxvZyhleGFyZ19UICplYXApLy97e3sKIHsKICAgICAvLyBjaGFyX3UqIGVudHJ5X3RleHQ7CiAgICAgLy9pbnQgZXhhY3Rfd29yZD1GQUxTRTsKQEAgLTU1NSw4ICs1OTMsOSBAQAogCiAgICAgdm13LT5maW5kZGxnLT5zZXRDYXNlU2Vuc2l0aXZlKHRydWUpOwogCi0gICAgLyogICAgaWYgKGVudHJ5X3RleHQhPU5VTEwpIHsKLQkgIHZtdy0+ZmluZGRsZy0+c2V0VGV4dChRU3RyaW5nKChjaGFyKillbnRyeV90ZXh0KSk7CisgICAgLyogICAgaWYgKGVudHJ5X3RleHQhPU5VTEwpCisgICAgICogICAgeworCSAgdm13LT5maW5kZGxnLT5zZXRUZXh0KFFTdHJpbmcoKGNoYXIgKillbnRyeV90ZXh0KSk7CiAgICAgLy8gZXhhY3QgbWF0Y2ggc2hvdWxkIGdvIHRoZXJlLCBob3BlZnVsbHkgS0RFIG9sZCBLRWRGaW5kL0tFZFJlcGxhY2Ugd2lsbCBiZSByZXBsYWNlZCBpbiBLREUgNCBhcyBwcGxlIHdhbnRlZCBLREUgMydzIEZpbmQvUmVwbGFjZSB0byBiZSBrZXB0CiAgICAgfSovIC8vIERvbid0IHVzZSBpdCwgS0RFIGtlZXBzIG9sZCBzZWFyY2ggaW4gbWVtb3J5IGFuZCB2aW0gZ2l2ZSBcXENzZWFyY2gsIHdoaWNoIGlzIGRpZmZpY3VsdCB0byBoYW5kbGUKICAgICAvLyAgIHZpbV9mcmVlKGVudHJ5X3RleHQpOwpAQCAtNTY0LDI1ICs2MDMsMjYgQEAKICAgICB2bXctPmZpbmRkbGctPnNob3coKTsKIH0vL319fQogCi0Jdm9pZAotZ3VpX21jaF9yZXBsYWNlX2RpYWxvZyhleGFyZ19UICogZWFwKS8ve3t7CisgICAgdm9pZAorZ3VpX21jaF9yZXBsYWNlX2RpYWxvZyhleGFyZ19UICplYXApLy97e3sKIHsKLQkvLyAgY2hhcl91KiBlbnRyeV90ZXh0OwotCS8vaW50IGV4YWN0X3dvcmQ9RkFMU0U7CisgICAgLy8gIGNoYXJfdSogZW50cnlfdGV4dDsKKyAgICAvL2ludCBleGFjdF93b3JkPUZBTFNFOwogCi0JLy8gICAgZW50cnlfdGV4dCA9IGdldF9maW5kX2RpYWxvZ190ZXh0KGVhcC0+YXJnLCZleGFjdF93b3JkKTsKKyAgICAvLyAgICBlbnRyeV90ZXh0ID0gZ2V0X2ZpbmRfZGlhbG9nX3RleHQoZWFwLT5hcmcsJmV4YWN0X3dvcmQpOwogCi0JLyogICAgaWYgKGVudHJ5X3RleHQhPU5VTEwpIHsKLQkgICAgICB2bXctPnJlcGxkbGctPnNldFRleHQoUVN0cmluZygoY2hhciopZW50cnlfdGV4dCkpOwotCS8vIGV4YWN0IG1hdGNoIHNob3VsZCBnbyB0aGVyZSwgaG9wZWZ1bGx5IEtERSBvbGQgS0VkRmluZC9LRWRSZXBsYWNlIHdpbGwgYmUgcmVwbGFjZWQgaW4gS0RFIDQgYXMgcHBsZSB3YW50ZWQgS0RFIDMncyBGaW5kL1JlcGxhY2UgdG8gYmUga2VwdAotCX0qLwotCS8vdmltX2ZyZWUoZW50cnlfdGV4dCk7CisgICAgLyogICAgaWYgKGVudHJ5X3RleHQhPU5VTEwpCisgICAgICogICAgeworICAgICB2bXctPnJlcGxkbGctPnNldFRleHQoUVN0cmluZygoY2hhciAqKWVudHJ5X3RleHQpKTsKKyAgICAvLyBleGFjdCBtYXRjaCBzaG91bGQgZ28gdGhlcmUsIGhvcGVmdWxseSBLREUgb2xkIEtFZEZpbmQvS0VkUmVwbGFjZSB3aWxsIGJlIHJlcGxhY2VkIGluIEtERSA0IGFzIHBwbGUgd2FudGVkIEtERSAzJ3MgRmluZC9SZXBsYWNlIHRvIGJlIGtlcHQKKyAgICB9Ki8KKyAgICAvL3ZpbV9mcmVlKGVudHJ5X3RleHQpOwogCi0Jdm13LT5yZXBsZGxnLT5zaG93KCk7CisgICAgdm13LT5yZXBsZGxnLT5zaG93KCk7CiB9Ly99fX0KIAotCXZvaWQKKyAgICB2b2lkCiBleF9oZWxwZmluZChleGFyZ19UICplYXApLy97e3sKIHsKLQlkb19jbWRsaW5lX2NtZCgoY2hhcl91ICopImVtZW51IFRvb2xCYXIuRmluZEhlbHAiKTsKKyAgICBkb19jbWRsaW5lX2NtZCgoY2hhcl91ICopImVtZW51IFRvb2xCYXIuRmluZEhlbHAiKTsKIH0vL319fQpkaWZmIC0tZ2l0IGEvc3JjL2d1aV93MzIuYyBiL3NyYy9ndWlfdzMyLmMKaW5kZXggNDYxZGNlZi4uY2YwN2IyNiAxMDA2NDQKLS0tIGEvc3JjL2d1aV93MzIuYworKysgYi9zcmMvZ3VpX3czMi5jCkBAIC0yNTYyLDcgKzI1NjIsNyBAQAogCXR5cGUgPSAwOwogCiAgICAgLyogYWxsb2NhdGUgc29tZSBtZW1vcnkgZm9yIGRpYWxvZyB0ZW1wbGF0ZSAqLwotICAgIC8qIFRPRE8gc2hvdWxkIGNvbXB1dGUgdGhpcyByZWFsbHkqLworICAgIC8qIFRPRE8gc2hvdWxkIGNvbXB1dGUgdGhpcyByZWFsbHkgKi8KICAgICBwZGxndGVtcGxhdGUgPSBwID0gKFBXT1JEKUxvY2FsQWxsb2MoTFBUUiwgRExHX0FMTE9DX1NJWkUpOwogCiAgICAgaWYgKHAgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL3NyYy9ndWlfeDExLmMgYi9zcmMvZ3VpX3gxMS5jCmluZGV4IDkwZTZmYmQuLjAzMzAwZTQgMTAwNjQ0Ci0tLSBhL3NyYy9ndWlfeDExLmMKKysrIGIvc3JjL2d1aV94MTEuYwpAQCAtMTk5Miw2ICsxOTkyLDcgQEAKICAqIFJldHVybiB0aGUgbmFtZSBvZiBmb250ICJmb250IiBpbiBhbGxvY2F0ZWQgbWVtb3J5LgogICogRG9uJ3Qga25vdyBob3cgdG8gZ2V0IHRoZSBhY3R1YWwgbmFtZSwgdGh1cyB1c2UgdGhlIHByb3ZpZGVkIG5hbWUuCiAgKi8KKy8qQVJHU1VTRUQqLwogICAgIGNoYXJfdSAqCiBndWlfbWNoX2dldF9mb250bmFtZShmb250LCBuYW1lKQogICAgIEd1aUZvbnQgZm9udDsKZGlmZiAtLWdpdCBhL3NyYy9pZl94Y21kc3J2LmMgYi9zcmMvaWZfeGNtZHNydi5jCmluZGV4IGZlMTI3YTQuLmIyNDEwMWYgMTAwNjQ0Ci0tLSBhL3NyYy9pZl94Y21kc3J2LmMKKysrIGIvc3JjL2lmX3hjbWRzcnYuYwpAQCAtMTAzLDEwICsxMDMsMTQgQEAKICAqCiAgKiBFYWNoIGNvbW1hbmQgYW5kIGVhY2ggcmVzdWx0IHRha2VzIHRoZSBmb3JtIG9mIEFTQ0lJIHRleHQuICBGb3IgYQogICogY29tbWFuZCwgdGhlIHRleHQgY29uc2lzdHMgb2YgYSBudWwgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IHNldmVyYWwKLSAqIG51bC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZ3MuICBUaGUgZmlyc3Qgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZQotICogc2luZ2xlIGxldHRlciAiYyIgZm9yIGFuIGV4cHJlc3Npb24sIG9yICJrIiBmb3Iga2V5c3Ryb2tlcy4gIFN1YnNlcXVlbnQKLSAqIHN0cmluZ3MgaGF2ZSB0aGUgZm9ybSAib3B0aW9uIHZhbHVlIiB3aGVyZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlCi0gKiBzdXBwb3J0ZWQ6CisgKiBudWwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmdzLiAgVGhlIGZpcnN0IHN0cmluZyBjb25zaXN0cyBvZiBhCisgKiBzaW5nbGUgbGV0dGVyOgorICogImMiIGZvciBhbiBleHByZXNzaW9uCisgKiAiayIgZm9yIGtleXN0cm9rZXMKKyAqICJyIiBmb3IgcmVwbHkKKyAqICJuIiBmb3Igbm90aWZpY2F0aW9uLgorICogU3Vic2VxdWVudCBzdHJpbmdzIGhhdmUgdGhlIGZvcm0gIm9wdGlvbiB2YWx1ZSIgd2hlcmUgdGhlIGZvbGxvd2luZyBvcHRpb25zCisgKiBhcmUgc3VwcG9ydGVkOgogICoKICAqIC1yIGNvbW1XaW5kb3cgc2VyaWFsCiAgKgpAQCAtMTIwLDYgKzEyNCwxMCBAQAogICoJIk5hbWUiIGdpdmVzIHRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiBmb3Igd2hpY2ggdGhlIGNvbW1hbmQgaXMKICAqCWludGVuZGVkLiAgVGhpcyBvcHRpb24gbXVzdCBiZSBwcmVzZW50LgogICoKKyAqIC1FIGVuY29kaW5nCisgKglFbmNvZGluZyBuYW1lIHVzZWQgZm9yIHRoZSB0ZXh0LiAgVGhpcyBpcyB0aGUgJ2VuY29kaW5nJyBvZiB0aGUKKyAqCXNlbmRlci4gIFRoZSByZWNlaXZlciBtYXkgd2FudCB0byBkbyBjb252ZXJzaW9uIHRvIGhpcyAnZW5jb2RpbmcnLgorICoKICAqIC1zIHNjcmlwdAogICoJIlNjcmlwdCIgaXMgdGhlIHNjcmlwdCB0byBiZSBleGVjdXRlZC4gIFRoaXMgb3B0aW9uIG11c3QgYmUKICAqCXByZXNlbnQuICBUYWtlbiBhcyBhIHNlcmllcyBvZiBrZXlzdHJva2VzIGluIGEgImsiIGNvbW1hbmQgd2hlcmUKQEAgLTQ1MywxMSArNDYxLDE5IEBACiAgICAgICogU2VuZCB0aGUgY29tbWFuZCB0byB0YXJnZXQgaW50ZXJwcmV0ZXIgYnkgYXBwZW5kaW5nIGl0IHRvIHRoZQogICAgICAqIGNvbW0gd2luZG93IGluIHRoZSBjb21tdW5pY2F0aW9uIHdpbmRvdy4KICAgICAgKi8KLSAgICBsZW5ndGggPSBTVFJMRU4obmFtZSkgKyBTVFJMRU4oY21kKSArIDEwOwotICAgIHByb3BlcnR5ID0gKGNoYXJfdSAqKWFsbG9jKCh1bnNpZ25lZCkgbGVuZ3RoICsgMzApOworICAgIGxlbmd0aCA9IFNUUkxFTihuYW1lKSArIFNUUkxFTihjbWQpICsgMTQ7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGxlbmd0aCArPSBTVFJMRU4ocF9lbmMpOworI2VuZGlmCisgICAgcHJvcGVydHkgPSAoY2hhcl91ICopYWxsb2MoKHVuc2lnbmVkKWxlbmd0aCArIDMwKTsKIAorI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBzcHJpbnRmKChjaGFyICopcHJvcGVydHksICIlYyVjJWMtbiAlcyVjLUUgJXMlYy1zICVzIiwKKwkJICAgICAgMCwgYXNFeHByID8gJ2MnIDogJ2snLCAwLCBuYW1lLCAwLCBwX2VuYywgMCwgY21kKTsKKyNlbHNlCiAgICAgc3ByaW50ZigoY2hhciAqKXByb3BlcnR5LCAiJWMlYyVjLW4gJXMlYy1zICVzIiwKIAkJICAgICAgMCwgYXNFeHByID8gJ2MnIDogJ2snLCAwLCBuYW1lLCAwLCBjbWQpOworI2VuZGlmCiAgICAgaWYgKG5hbWUgPT0gbG9vc2VuYW1lKQogCXZpbV9mcmVlKGxvb3NlbmFtZSk7CiAgICAgLyogQWRkIGEgYmFjayByZWZlcmVuY2UgdG8gb3VyIGNvbW0gd2luZG93ICovCkBAIC03NTEsNyArNzY3LDcgQEAKIH0KIAogLyoKLSAqIFNlbmQgYSByZXBseSBzdHJpbmcgdG8gY2xpZW50IHdpdGggaWQgIm5hbWUiLgorICogU2VuZCBhIHJlcGx5IHN0cmluZyAobm90aWZpY2F0aW9uKSB0byBjbGllbnQgd2l0aCBpZCAibmFtZSIuCiAgKiBSZXR1cm4gLTEgaWYgdGhlIHdpbmRvdyBpcyBpbnZhbGlkLgogICovCiAgICAgaW50CkBAIC03NzMsMTEgKzc4OSwxOSBAQAogICAgIGlmICghV2luZG93VmFsaWQoZHB5LCB3aW4pKQogCXJldHVybiAtMTsKIAotICAgIGxlbmd0aCA9IFNUUkxFTihzdHIpICsgNzsKLSAgICBpZiAoKHByb3BlcnR5ID0gKGNoYXJfdSAqKWFsbG9jKCh1bnNpZ25lZCkgbGVuZ3RoICsgMzApKSAhPSBOVUxMKQorICAgIGxlbmd0aCA9IFNUUkxFTihzdHIpICsgMTE7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGxlbmd0aCArPSBTVFJMRU4ocF9lbmMpOworI2VuZGlmCisgICAgaWYgKChwcm9wZXJ0eSA9IChjaGFyX3UgKilhbGxvYygodW5zaWduZWQpbGVuZ3RoICsgMzApKSAhPSBOVUxMKQogICAgIHsKLQlzcHJpbnRmKChjaGFyICopcHJvcGVydHksICIlYyVjJWMtbiAlcyVjLXcgJXgiLAotCQkJICAwLCAnbicsIDAsIHN0ciwgMCwgKHVuc2lnbmVkIGludCljb21tV2luZG93KTsKKyNpZmRlZiBGRUFUX01CWVRFCisJc3ByaW50ZigoY2hhciAqKXByb3BlcnR5LCAiJWNuJWMtRSAlcyVjLW4gJXMlYy13ICV4IiwKKwkJCSAgICAwLCAwLCBwX2VuYywgMCwgc3RyLCAwLCAodW5zaWduZWQgaW50KWNvbW1XaW5kb3cpOworI2Vsc2UKKwlzcHJpbnRmKChjaGFyICopcHJvcGVydHksICIlY24lYy1uICVzJWMtdyAleCIsCisJCQkgICAgMCwgMCwgc3RyLCAwLCAodW5zaWduZWQgaW50KWNvbW1XaW5kb3cpOworI2VuZGlmCiAJbGVuZ3RoICs9IFNUUkxFTihwcm9wZXJ0eSArIGxlbmd0aCk7CiAJcmVzID0gQXBwZW5kUHJvcENhcmVmdWxseShkcHksIHdpbiwgY29tbVByb3BlcnR5LCBwcm9wZXJ0eSwgbGVuZ3RoICsgMSk7CiAJdmltX2ZyZWUocHJvcGVydHkpOwpAQCAtMTEyOSw2ICsxMTUzLDcgQEAKICAgICBpbnQJCXJlc3VsdCwgYWN0dWFsRm9ybWF0LCBjb2RlOwogICAgIGxvbmdfdQludW1JdGVtcywgYnl0ZXNBZnRlcjsKICAgICBBdG9tCWFjdHVhbFR5cGU7CisgICAgY2hhcl91CSp0b2ZyZWU7CiAKICAgICBpZiAoZXZlbnRQdHIgIT0gTlVMTCkKICAgICB7CkBAIC0xMTgwLDYgKzEyMDUsNyBAQAogCSAgICBjaGFyX3UJKm5hbWUsICpzY3JpcHQsICpzZXJpYWwsICplbmQsICpyZXM7CiAJICAgIEJvb2wJYXNLZXlzID0gKnAgPT0gJ2snOwogCSAgICBnYXJyYXlfVAlyZXBseTsKKwkgICAgY2hhcl91CSplbmM7CiAKIAkgICAgLyoKIAkgICAgICogVGhpcyBpcyBhbiBpbmNvbWluZyBjb21tYW5kIGZyb20gc29tZSBvdGhlciBhcHBsaWNhdGlvbi4KQEAgLTExOTIsNiArMTIxOCw3IEBACiAJICAgIHJlc1dpbmRvdyA9IE5vbmU7CiAJICAgIHNlcmlhbCA9IChjaGFyX3UgKikiIjsKIAkgICAgc2NyaXB0ID0gTlVMTDsKKwkgICAgZW5jID0gTlVMTDsKIAkgICAgd2hpbGUgKHAgLSBwcm9wSW5mbyA8IG51bUl0ZW1zICYmICpwID09ICctJykKIAkgICAgewogCQlzd2l0Y2ggKHBbMV0pCkBAIC0xMjIwLDYgKzEyNDcsMTAgQEAKIAkJCWlmIChwWzJdID09ICcgJykKIAkJCSAgICBzY3JpcHQgPSBwICsgMzsKIAkJCWJyZWFrOworCQkgICAgY2FzZSAnRSc6CisJCQlpZiAocFsyXSA9PSAnICcpCisJCQkgICAgZW5jID0gcCArIDM7CisJCQlicmVhazsKIAkJfQogCQl3aGlsZSAoKnAgIT0gMCkKIAkJICAgIHArKzsKQEAgLTEyMzYsMTggKzEyNjcsMjYgQEAKIAkgICAgaWYgKHJlc1dpbmRvdyAhPSBOb25lKQogCSAgICB7CiAJCWdhX2luaXQyKCZyZXBseSwgMSwgMTAwKTsKKyNpZmRlZiBGRUFUX01CWVRFCisJCWdhX2dyb3coJnJlcGx5LCA1MCArIFNUUkxFTihwX2VuYykpOworCQlzcHJpbnRmKHJlcGx5LmdhX2RhdGEsICIlY3IlYy1FICVzJWMtcyAlcyVjLXIgIiwKKwkJCQkJCSAgIDAsIDAsIHBfZW5jLCAwLCBzZXJpYWwsIDApOworI2Vsc2UKIAkJZ2FfZ3JvdygmcmVwbHksIDUwKTsKIAkJc3ByaW50ZihyZXBseS5nYV9kYXRhLCAiJWNyJWMtcyAlcyVjLXIgIiwgMCwgMCwgc2VyaWFsLCAwKTsKKyNlbmRpZgogCQlyZXBseS5nYV9sZW4gPSAxMCArIFNUUkxFTihzZXJpYWwpOwogCQlyZXBseS5nYV9yb29tIC09IHJlcGx5LmdhX2xlbjsKIAkgICAgfQogCSAgICByZXMgPSBOVUxMOwogCSAgICBpZiAoc2VydmVyTmFtZSAhPSBOVUxMICYmIFNUUklDTVAobmFtZSwgc2VydmVyTmFtZSkgPT0gMCkKIAkgICAgeworCQlzY3JpcHQgPSBzZXJ2ZXJDb252ZXJ0KGVuYywgc2NyaXB0LCAmdG9mcmVlKTsKIAkJaWYgKGFzS2V5cykKIAkJICAgIHNlcnZlcl90b19pbnB1dF9idWYoc2NyaXB0KTsKIAkJZWxzZQogCQkgICAgcmVzID0gZXZhbF9jbGllbnRfZXhwcl90b19zdHJpbmcoc2NyaXB0KTsKKwkJdmltX2ZyZWUodG9mcmVlKTsKIAkgICAgfQogCSAgICBpZiAocmVzV2luZG93ICE9IE5vbmUpCiAJICAgIHsKQEAgLTEyNjIsMTQgKzEzMDEsMTYgQEAKIAkJZ2FfYXBwZW5kKCZyZXBseSwgTlVMKTsKIAkJKHZvaWQpQXBwZW5kUHJvcENhcmVmdWxseShkcHksIHJlc1dpbmRvdywgY29tbVByb3BlcnR5LAogCQkJCQkgICByZXBseS5nYV9kYXRhLCByZXBseS5nYV9sZW4pOworCQlnYV9jbGVhcigmcmVwbHkpOwogCSAgICB9CiAJICAgIHZpbV9mcmVlKHJlcyk7CiAJfQogCWVsc2UgaWYgKCpwID09ICdyJyAmJiBwWzFdID09IDApCiAJewotCSAgICBpbnQJICAgIHNlcmlhbCwgZ290U2VyaWFsOwotCSAgICBjaGFyX3UgICpyZXM7Ci0JICAgIFBlbmRpbmdDb21tYW5kICpwY1B0cjsKKwkgICAgaW50CQkgICAgc2VyaWFsLCBnb3RTZXJpYWw7CisJICAgIGNoYXJfdQkgICAgKnJlczsKKwkgICAgUGVuZGluZ0NvbW1hbmQgICpwY1B0cjsKKwkgICAgY2hhcl91CSAgICAqZW5jOwogCiAJICAgIC8qCiAJICAgICAqIFRoaXMgaXMgYSByZXBseSB0byBzb21lIGNvbW1hbmQgdGhhdCB3ZSBzZW50IG91dC4gIEl0ZXJhdGUKQEAgLTEyODAsNiArMTMyMSw3IEBACiAJICAgIGdvdFNlcmlhbCA9IDA7CiAJICAgIHJlcyA9IChjaGFyX3UgKikiIjsKIAkgICAgY29kZSA9IDA7CisJICAgIGVuYyA9IE5VTEw7CiAJICAgIHdoaWxlICgocC1wcm9wSW5mbykgPCBudW1JdGVtcyAmJiAqcCA9PSAnLScpCiAJICAgIHsKIAkJc3dpdGNoIChwWzFdKQpAQCAtMTI4OCw2ICsxMzMwLDEwIEBACiAJCQlpZiAocFsyXSA9PSAnICcpCiAJCQkgICAgcmVzID0gcCArIDM7CiAJCQlicmVhazsKKwkJICAgIGNhc2UgJ0UnOgorCQkJaWYgKHBbMl0gPT0gJyAnKQorCQkJICAgIGVuYyA9IHAgKyAzOworCQkJYnJlYWs7CiAJCSAgICBjYXNlICdzJzoKIAkJCWlmIChzc2NhbmYoKGNoYXIgKilwICsgMiwgIiAlZCIsICZzZXJpYWwpID09IDEpCiAJCQkgICAgZ290U2VyaWFsID0gMTsKQEAgLTEzMTYsNyArMTM2MiwxMiBAQAogCiAJCXBjUHRyLT5jb2RlID0gY29kZTsKIAkJaWYgKHJlcyAhPSBOVUxMKQotCQkgICAgcGNQdHItPnJlc3VsdCA9IHZpbV9zdHJzYXZlKHJlcyk7CisJCXsKKwkJICAgIHJlcyA9IHNlcnZlckNvbnZlcnQoZW5jLCByZXMsICZ0b2ZyZWUpOworCQkgICAgaWYgKHRvZnJlZSA9PSBOVUxMKQorCQkJcmVzID0gdmltX3N0cnNhdmUocmVzKTsKKwkJICAgIHBjUHRyLT5yZXN1bHQgPSByZXM7CisJCX0KIAkJZWxzZQogCQkgICAgcGNQdHItPnJlc3VsdCA9IHZpbV9zdHJzYXZlKChjaGFyX3UgKikiIik7CiAJCWJyZWFrOwpAQCAtMTMzMCw2ICsxMzgxLDcgQEAKIAkgICAgY2hhcl91CSpzdHI7CiAJICAgIGNoYXJfdQl3aW5zdHJbMzBdOwogCSAgICBzdHJ1Y3QJU2VydmVyUmVwbHkgKnI7CisJICAgIGNoYXJfdQkqZW5jOwogCiAJICAgIC8qCiAJICAgICAqIFRoaXMgaXMgYSAobilvdGlmaWNhdGlvbi4gIFNlbnQgd2l0aCBzZXJ2ZXJyZXBseV9zZW5kIGluIFZpbUwuCkBAIC0xMzM4LDYgKzEzOTAsNyBAQAogCSAgICBwICs9IDI7CiAJICAgIGdvdFdpbmRvdyA9IDA7CiAJICAgIHN0ciA9IChjaGFyX3UgKikiIjsKKwkgICAgZW5jID0gTlVMTDsKIAkgICAgd2hpbGUgKChwLXByb3BJbmZvKSA8IG51bUl0ZW1zICYmICpwID09ICctJykKIAkgICAgewogCQlzd2l0Y2ggKHBbMV0pCkBAIC0xMzQ2LDYgKzEzOTksMTAgQEAKIAkJCWlmIChwWzJdID09ICcgJykKIAkJCSAgICBzdHIgPSBwICsgMzsKIAkJCWJyZWFrOworCQkgICAgY2FzZSAnRSc6CisJCQlpZiAocFsyXSA9PSAnICcpCisJCQkgICAgZW5jID0gcCArIDM7CisJCQlicmVhazsKIAkJICAgIGNhc2UgJ3cnOgogCQkJaWYgKHNzY2FuZigoY2hhciAqKXAgKyAyLCAiICV4IiwgJnUpID09IDEpCiAJCQl7CkBAIC0xMzYxLDYgKzE0MTgsNyBAQAogCiAJICAgIGlmICghZ290V2luZG93KQogCQljb250aW51ZTsKKwkgICAgc3RyID0gc2VydmVyQ29udmVydChlbmMsIHN0ciwgJnRvZnJlZSk7CiAJICAgIGlmICgociA9IFNlcnZlclJlcGx5RmluZCh3aW4sIFNST1BfQWRkKSkgIT0gTlVMTCkKIAkgICAgewogCQlnYV9jb25jYXQoJihyLT5zdHJpbmdzKSwgc3RyKTsKQEAgLTEzNzAsNyArMTQyOCw3IEBACiAJICAgIHNwcmludGYoKGNoYXIgKil3aW5zdHIsICIweCV4IiwgKHVuc2lnbmVkIGludCl3aW4pOwogCSAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9SRU1PVEVSRVBMWSwgd2luc3RyLCBzdHIsIFRSVUUsIGN1cmJ1Zik7CiAjZW5kaWYKLQorCSAgICB2aW1fZnJlZSh0b2ZyZWUpOwogCX0KIAllbHNlCiAJewpkaWZmIC0tZ2l0IGEvc3JjL21hY3Jvcy5oIGIvc3JjL21hY3Jvcy5oCmluZGV4IDQzYmRkYmEuLjk1OTY3OTYgMTAwNjQ0Ci0tLSBhL3NyYy9tYWNyb3MuaAorKysgYi9zcmMvbWFjcm9zLmgKQEAgLTI1MywzICsyNTMsMjEgQEAKIC8qIFdpdGhvdXQgdGhlICdudW1iZXJ3aWR0aCcgb3B0aW9uIGxpbmUgbnVtYmVycyBhcmUgYWx3YXlzIDcgY2hhcnMuICovCiAjIGRlZmluZSBudW1iZXJfd2lkdGgoeCkgNwogI2VuZGlmCisKKyNpZm5kZWYgRkVBVF9NQllURQorIyBkZWZpbmUgYWZ0ZXJfcGF0aHNlcChiLCBwKSB2aW1faXNwYXRoc2VwKCooKHApIC0gMSkpCisjZW5kaWYKKworLyoKKyAqIG1iX3B0cl9hZHYoKTogYWR2YW5jZSBhIHBvaW50ZXIgdG8gdGhlIG5leHQgY2hhcmFjdGVyLCB0YWtpbmcgY2FyZSBvZgorICogbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGlmIG5lZWRlZC4KKyAqIG1iX3B0cl9iYWNrKCk6IGJhY2t1cCBhIHBvaW50ZXIgdG8gdGhlIHByZXZpb3VzIGNoYXJhY3RlciwgdGFraW5nIGNhcmUgb2YKKyAqIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBpZiBuZWVkZWQuCisgKi8KKyNpZmRlZiBGRUFUX01CWVRFCisjIGRlZmluZSBtYl9wdHJfYWR2KHApIHAgKz0gaGFzX21ieXRlID8gKCptYl9wdHIybGVuX2NoZWNrKShwKSA6IDEKKyMgZGVmaW5lIG1iX3B0cl9iYWNrKHMsIHApIHAgLT0gaGFzX21ieXRlID8gKCgqbWJfaGVhZF9vZmYpKHMsIHAgLSAxKSArIDEpIDogMQorI2Vsc2UKKyMgZGVmaW5lIG1iX3B0cl9hZHYocCkgKytwCisjIGRlZmluZSBtYl9wdHJfYmFjayhzLCBwKSAtLXAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL21haW4uYyBiL3NyYy9tYWluLmMKaW5kZXggNTc5MWJiNi4uMTMzNTk3MCAxMDA2NDQKLS0tIGEvc3JjL21haW4uYworKysgYi9zcmMvbWFpbi5jCkBAIC0yMjI4LDExICsyMjI4LDEyIEBACiBnZXRvdXRfcHJlc2VydmVfbW9kaWZpZWQoZXhpdHZhbCkKICAgICBpbnQJCWV4aXR2YWw7CiB7Ci0jaWYgZGVmaW5lZChVTklYKQotICAgIC8qIElnbm9yZSBTSUdIVVAsIGJlY2F1c2UgYSBkcm9wcGVkIGNvbm5lY3Rpb24gbWF5IG1ha2UgVmltIGV4aXQgYW5kIHRoZW4KLSAgICAgKiBnZXQgYSBTSUdIVVAgd2hpbGUgZXhpdGluZywgd2hpY2ggY2F1c2VzIHZhcmlvdXMgcmVlbnRyZW50IHByb2JsZW1zLiAqLworIyBpZiBkZWZpbmVkKFNJR0hVUCkgJiYgZGVmaW5lZChTSUdfSUdOKQorICAgIC8qIElnbm9yZSBTSUdIVVAsIGJlY2F1c2UgYSBkcm9wcGVkIGNvbm5lY3Rpb24gY2F1c2VzIGEgcmVhZCBlcnJvciwgd2hpY2gKKyAgICAgKiBtYWtlcyBWaW0gZXhpdCBhbmQgdGhlbiBoYW5kbGluZyBTSUdIVVAgY2F1c2VzIHZhcmlvdXMgcmVlbnRyYW5jZQorICAgICAqIHByb2JsZW1zLiAqLwogICAgIHNpZ25hbChTSUdIVVAsIFNJR19JR04pOwotI2VuZGlmCisjIGVuZGlmCiAKICAgICBtbF9jbG9zZV9ub3Rtb2QoKTsJCSAgICAvKiBjbG9zZSBhbGwgbm90LW1vZGlmaWVkIGJ1ZmZlcnMgKi8KICAgICBtbF9zeW5jX2FsbChGQUxTRSwgRkFMU0UpOwkgICAgLyogcHJlc2VydmUgYWxsIHN3YXAgZmlsZXMgKi8KQEAgLTMyMjAsNiArMzIyMSw0MiBAQAogICAgIHJldHVybiByZXM7CiB9CiAKKy8qCisgKiBJZiBjb252ZXJzaW9uIGlzIG5lZWRlZCwgY29udmVydCAiZGF0YSIgZnJvbSAiY2xpZW50X2VuYyIgdG8gJ2VuY29kaW5nJyBhbmQKKyAqIHJldHVybiBhbiBhbGxvY2F0ZWQgc3RyaW5nLiAgT3RoZXJ3aXNlIHJldHVybiAiZGF0YSIuCisgKiAiKnRvZnJlZSIgaXMgc2V0IHRvIHRoZSByZXN1bHQgd2hlbiBpdCBuZWVkcyB0byBiZSBmcmVlZCBsYXRlci4KKyAqLworLypBUkdTVVNFRCovCisgICAgY2hhcl91ICoKK3NlcnZlckNvbnZlcnQoY2xpZW50X2VuYywgZGF0YSwgdG9mcmVlKQorICAgIGNoYXJfdSAqY2xpZW50X2VuYzsKKyAgICBjaGFyX3UgKmRhdGE7CisgICAgY2hhcl91ICoqdG9mcmVlOworeworICAgIGNoYXJfdQkqcmVzID0gZGF0YTsKKworICAgICp0b2ZyZWUgPSBOVUxMOworIyBpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGNsaWVudF9lbmMgIT0gTlVMTCAmJiBwX2VuYyAhPSBOVUxMKQorICAgIHsKKwl2aW1jb252X1QJdmltY29udjsKKworCXZpbWNvbnYudmNfdHlwZSA9IENPTlZfTk9ORTsKKwlpZiAoY29udmVydF9zZXR1cCgmdmltY29udiwgY2xpZW50X2VuYywgcF9lbmMpICE9IEZBSUwKKwkJCQkJICAgICAgJiYgdmltY29udi52Y190eXBlICE9IENPTlZfTk9ORSkKKwl7CisJICAgIHJlcyA9IHN0cmluZ19jb252ZXJ0KCZ2aW1jb252LCBkYXRhLCBOVUxMKTsKKwkgICAgaWYgKHJlcyA9PSBOVUxMKQorCQlyZXMgPSBkYXRhOworCSAgICBlbHNlCisJCSp0b2ZyZWUgPSByZXM7CisJfQorCWNvbnZlcnRfc2V0dXAoJnZpbWNvbnYsIE5VTEwsIE5VTEwpOworICAgIH0KKyMgZW5kaWYKKyAgICByZXR1cm4gcmVzOworfQorCiAKIC8qCiAgKiBNYWtlIG91ciBiYXNpYyBzZXJ2ZXIgbmFtZTogdXNlIHRoZSBzcGVjaWZpZWQgImFyZyIgaWYgZ2l2ZW4sIG90aGVyd2lzZSB1c2UKZGlmZiAtLWdpdCBhL3NyYy9tYXJrLmMgYi9zcmMvbWFyay5jCmluZGV4IGVhOTQxZTUuLjZhMTQ5YmYgMTAwNjQ0Ci0tLSBhL3NyYy9tYXJrLmMKKysrIGIvc3JjL21hcmsuYwpAQCAtNjMwLDE1ICs2MzAsMTEgQEAKIAlyZXR1cm4gTlVMTDsKICAgICAvKiBUcnVuY2F0ZSB0aGUgbGluZSB0byBmaXQgaXQgaW4gdGhlIHdpbmRvdyAqLwogICAgIGxlbiA9IDA7Ci0gICAgZm9yIChwID0gczsgKnAgIT0gTlVMOyArK3ApCisgICAgZm9yIChwID0gczsgKnAgIT0gTlVMOyBtYl9wdHJfYWR2KHApKQogICAgIHsKIAlsZW4gKz0gcHRyMmNlbGxzKHApOwogCWlmIChsZW4gPj0gQ29sdW1ucyAtIGxlYWRfbGVuKQogCSAgICBicmVhazsKLSNpZmRlZiBGRUFUX01CWVRFCi0JaWYgKGhhc19tYnl0ZSkKLQkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApIC0gMTsKLSNlbmRpZgogICAgIH0KICAgICAqcCA9IE5VTDsKICAgICByZXR1cm4gczsKZGlmZiAtLWdpdCBhL3NyYy9tYnl0ZS5jIGIvc3JjL21ieXRlLmMKaW5kZXggMDcxMDk2Ni4uZTczOWE1YiAxMDA2NDQKLS0tIGEvc3JjL21ieXRlLmMKKysrIGIvc3JjL21ieXRlLmMKQEAgLTY4MCw3ICs2ODAsNyBAQAogICAgIC8qIFdoZW4gdXNpbmcgVW5pY29kZSwgc2V0IGRlZmF1bHQgZm9yICdmaWxlZW5jb2RpbmdzJy4gKi8KICAgICBpZiAoZW5jX3V0ZjggJiYgIW9wdGlvbl93YXNfc2V0KChjaGFyX3UgKikiZmVuY3MiKSkKIAlzZXRfc3RyaW5nX29wdGlvbl9kaXJlY3QoKGNoYXJfdSAqKSJmZW5jcyIsIC0xLAotCQkJCSAoY2hhcl91ICopInVjcy1ib20sdXRmLTgsbGF0aW4xIiwgT1BUX0ZSRUUpOworCQkJICAoY2hhcl91ICopInVjcy1ib20sdXRmLTgsZGVmYXVsdCxsYXRpbjEiLCBPUFRfRlJFRSk7CiAjaWYgZGVmaW5lZChIQVZFX0JJTkRfVEVYVERPTUFJTl9DT0RFU0VUKSAmJiBkZWZpbmVkKEZFQVRfR0VUVEVYVCkKICAgICAvKiBHTlUgZ2V0dGV4dCAwLjEwLjM3IHN1cHBvcnRzIHRoaXMgZmVhdHVyZTogc2V0IHRoZSBjb2Rlc2V0IHVzZWQgZm9yCiAgICAgICogdHJhbnNsYXRlZCBtZXNzYWdlcyBpbmRlcGVuZGVudGx5IGZyb20gdGhlIGN1cnJlbnQgbG9jYWxlLiAqLwpAQCAtMjU5MCw3ICsyNTkwLDcgQEAKICAgICBjaGFyX3UgKnA7CiB7CiAgICAgaWYgKHAgPiBsaW5lKQotCXAgPSBwIC0gKCptYl9oZWFkX29mZikobGluZSwgcCAtIDEpIC0gMTsKKwltYl9wdHJfYmFjayhsaW5lLCBwKTsKICAgICByZXR1cm4gcDsKIH0KIApAQCAtMjc0Niw2ICsyNzQ2LDE3IEBACiAgICAgY2hhcl91CSpwLCAqczsKICAgICBpbnQJCWk7CiAKKyMgaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChTVFJDTVAoZW5jLCAiZGVmYXVsdCIpID09IDApCisgICAgeworCS8qIFVzZSB0aGUgZGVmYXVsdCBlbmNvZGluZyBhcyBpdCdzIGZvdW5kIGJ5IHNldF9pbml0XzEoKS4gKi8KKwlyID0gZ2V0X2VuY29kaW5nX2RlZmF1bHQoKTsKKwlpZiAociA9PSBOVUxMKQorCSAgICByID0gKGNoYXJfdSAqKSJsYXRpbjEiOworCXJldHVybiB2aW1fc3Ryc2F2ZShyKTsKKyAgICB9CisjIGVuZGlmCisKICAgICAvKiBjb3B5ICJlbmMiIHRvIGFsbG9jdGVkIG1lbW9yeSwgd2l0aCByb29tIGZvciB0d28gJy0nICovCiAgICAgciA9IGFsbG9jKCh1bnNpZ25lZCkoU1RSTEVOKGVuYykgKyAzKSk7CiAgICAgaWYgKHIgIT0gTlVMTCkKZGlmZiAtLWdpdCBhL3NyYy9tZW1saW5lLmMgYi9zcmMvbWVtbGluZS5jCmluZGV4IGEzYmQ5ZDcuLjEzZjM1YzIgMTAwNjQ0Ci0tLSBhL3NyYy9tZW1saW5lLmMKKysrIGIvc3JjL21lbWxpbmUuYwpAQCAtMTI1LDkgKzEyNSwxMCBAQAogI2RlZmluZSBJTkRFWF9TSVpFICAoc2l6ZW9mKHVuc2lnbmVkKSkJICAgIC8qIHNpemUgb2Ygb25lIGRiX2luZGV4IGVudHJ5ICovCiAjZGVmaW5lIEhFQURFUl9TSVpFIChzaXplb2YoREFUQV9CTCkgLSBJTkRFWF9TSVpFKSAgLyogc2l6ZSBvZiBkYXRhIGJsb2NrIGhlYWRlciAqLwogCi0jZGVmaW5lIEIwX0ZOQU1FX1NJWkUJOTAwCi0jZGVmaW5lIEIwX1VOQU1FX1NJWkUJNDAKLSNkZWZpbmUgQjBfSE5BTUVfU0laRQk0MAorI2RlZmluZSBCMF9GTkFNRV9TSVpFX09SRwk5MDAJLyogd2hhdCBpdCB3YXMgaW4gb2xkZXIgdmVyc2lvbnMgKi8KKyNkZWZpbmUgQjBfRk5BTUVfU0laRQkJODk4CisjZGVmaW5lIEIwX1VOQU1FX1NJWkUJCTQwCisjZGVmaW5lIEIwX0hOQU1FX1NJWkUJCTQwCiAvKgogICogUmVzdHJpY3QgdGhlIG51bWJlcnMgdG8gMzIgYml0cywgb3RoZXJ3aXNlIG1vc3QgY29tcGlsZXJzIHdpbGwgY29tcGxhaW4uCiAgKiBUaGlzIHdvbid0IGRldGVjdCBhIDY0IGJpdCBtYWNoaW5lIHRoYXQgb25seSBzd2FwcyBhIGJ5dGUgaW4gdGhlIHRvcCAzMgpAQCAtMTYwLDEzICsxNjEsMzkgQEAKICAgICBjaGFyX3UJYjBfcGlkWzRdOwkvKiBwcm9jZXNzIGlkIG9mIGNyZWF0b3IgKG9yIDApICovCiAgICAgY2hhcl91CWIwX3VuYW1lW0IwX1VOQU1FX1NJWkVdOyAvKiBuYW1lIG9mIHVzZXIgKHVpZCBpZiBubyBuYW1lKSAqLwogICAgIGNoYXJfdQliMF9obmFtZVtCMF9ITkFNRV9TSVpFXTsgLyogaG9zdCBuYW1lIChpZiBpdCBoYXMgYSBuYW1lKSAqLwotICAgIGNoYXJfdQliMF9mbmFtZVtCMF9GTkFNRV9TSVpFXTsgLyogbmFtZSBvZiBmaWxlIGJlaW5nIGVkaXRlZCAqLworICAgIGNoYXJfdQliMF9mbmFtZVtCMF9GTkFNRV9TSVpFX09SR107IC8qIG5hbWUgb2YgZmlsZSBiZWluZyBlZGl0ZWQgKi8KICAgICBsb25nCWIwX21hZ2ljX2xvbmc7CS8qIGNoZWNrIGZvciBieXRlIG9yZGVyIG9mIGxvbmcgKi8KICAgICBpbnQJCWIwX21hZ2ljX2ludDsJLyogY2hlY2sgZm9yIGJ5dGUgb3JkZXIgb2YgaW50ICovCiAgICAgc2hvcnQJYjBfbWFnaWNfc2hvcnQ7CS8qIGNoZWNrIGZvciBieXRlIG9yZGVyIG9mIHNob3J0ICovCiAgICAgY2hhcl91CWIwX21hZ2ljX2NoYXI7CS8qIGNoZWNrIGZvciBsYXN0IGNoYXIgKi8KIH07Ci0jZGVmaW5lICAgYjBfZGlydHkgYjBfZm5hbWVbQjBfRk5BTUVfU0laRS0xXQorCisvKgorICogTm90ZTogYjBfZm5hbWUgYW5kIGIwX2ZsYWdzIGFyZSBwdXQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBuYW1lLiAgRm9yIHZlcnkKKyAqIGxvbmcgZmlsZSBuYW1lcyBpbiBvbGRlciB2ZXJzaW9ucyBvZiBWaW0gdGhleSBhcmUgaW52YWxpZC4KKyAqIFRoZSAnZmlsZWVuY29kaW5nJyBjb21lcyBiZWZvcmUgYjBfZmxhZ3MsIHdpdGggYSBOVUwgaW4gZnJvbnQuICBCdXQgb25seQorICogd2hlbiB0aGVyZSBpcyByb29tLCBmb3IgdmVyeSBsb25nIGZpbGUgbmFtZXMgaXQncyBvbWl0dGVkLgorICovCisjZGVmaW5lIEIwX0RJUlRZCTB4NTUKKyNkZWZpbmUgYjBfZGlydHkJYjBfZm5hbWVbQjBfRk5BTUVfU0laRV9PUkctMV0KKworLyoKKyAqIFRoZSBiMF9mbGFncyBmaWVsZCBpcyBuZXcgaW4gVmltIDcuMC4KKyAqLworI2RlZmluZSBiMF9mbGFncwliMF9mbmFtZVtCMF9GTkFNRV9TSVpFX09SRy0yXQorCisvKiBUaGUgbG93ZXN0IHR3byBiaXRzIGNvbnRhaW4gdGhlIGZpbGVmb3JtYXQuICBaZXJvIG1lYW5zIGl0J3Mgbm90IHNldAorICogKGNvbXBhdGlibGUgd2l0aCBWaW0gNi54KSwgb3RoZXJ3aXNlIGl0J3MgRU9MX1VOSVggKyAxLCBFT0xfRE9TICsgMSBvcgorICogRU9MX01BQyArIDEuICovCisjZGVmaW5lIEIwX0ZGX01BU0sJMworCisvKiBTd2FwIGZpbGUgaXMgaW4gZGlyZWN0b3J5IG9mIGVkaXRlZCBmaWxlLiAgVXNlZCB0byBmaW5kIHRoZSBmaWxlIGZyb20KKyAqIGRpZmZlcmVudCBtb3VudCBwb2ludHMuICovCisjZGVmaW5lIEIwX1NBTUVfRElSCTQKKworLyogVGhlICdmaWxlZW5jb2RpbmcnIGlzIGF0IHRoZSBlbmQgb2YgYjBfZm5hbWVbXSwgd2l0aCBhIE5VTCBpbiBmcm9udCBvZiBpdC4KKyAqIFdoZW4gZW1wdHkgdGhlcmUgaXMgb25seSB0aGUgTlVMLiAqLworI2RlZmluZSBCMF9IQVNfRkVOQwk4CiAKICNkZWZpbmUgU1RBQ0tfSU5DUgk1CS8qIG5yIG9mIGVudHJpZXMgYWRkZWQgdG8gbWxfc3RhY2sgYXQgYSB0aW1lICovCiAKQEAgLTE4Nyw3ICsyMTQsMTIgQEAKICNkZWZpbmUgTUxfRkxVU0gJMHgwMgkgICAgLyogZmx1c2ggbG9ja2VkIGJsb2NrICovCiAjZGVmaW5lIE1MX1NJTVBMRSh4KQkoeCAmIDB4MTApICAvKiBERUwsIElOUyBvciBGSU5EICovCiAKK3N0YXRpYyB2b2lkIG1sX3VwZF9ibG9jazAgX19BUkdTKChidWZfVCAqYnVmLCBpbnQgc2V0Zm5hbWUpKTsKIHN0YXRpYyB2b2lkIHNldF9iMF9mbmFtZSBfX0FSR1MoKFpFUk9fQkwgKiwgYnVmX1QgKmJ1ZikpOworc3RhdGljIHZvaWQgc2V0X2IwX2Rpcl9mbGFnIF9fQVJHUygoWkVST19CTCAqYjBwLCBidWZfVCAqYnVmKSk7CisjaWZkZWYgRkVBVF9NQllURQorc3RhdGljIHZvaWQgYWRkX2IwX2ZlbmMgX19BUkdTKChaRVJPX0JMICpiMHAsIGJ1Zl9UICpidWYpKTsKKyNlbmRpZgogc3RhdGljIHRpbWVfdCBzd2FwZmlsZV9pbmZvIF9fQVJHUygoY2hhcl91ICopKTsKIHN0YXRpYyBpbnQgcmVjb3ZfZmlsZV9uYW1lcyBfX0FSR1MoKGNoYXJfdSAqKiwgY2hhcl91ICosIGludCBwcmVwZW5kX2RvdCkpOwogc3RhdGljIGludCBtbF9hcHBlbmRfaW50IF9fQVJHUygoYnVmX1QgKiwgbGluZW5yX1QsIGNoYXJfdSAqLCBjb2xucl9ULCBpbnQsIGludCkpOwpAQCAtMjgyLDcgKzMxNCw4IEBACiAKICAgICBiMHAtPmIwX2lkWzBdID0gQkxPQ0swX0lEMDsKICAgICBiMHAtPmIwX2lkWzFdID0gQkxPQ0swX0lEMTsKLSAgICBiMHAtPmIwX2RpcnR5ID0gY3VyYnVmLT5iX2NoYW5nZWQgPyAweDU1IDogMDsKKyAgICBiMHAtPmIwX2RpcnR5ID0gY3VyYnVmLT5iX2NoYW5nZWQgPyBCMF9ESVJUWSA6IDA7CisgICAgYjBwLT5iMF9mbGFncyA9IGdldF9maWxlZm9ybWF0KGN1cmJ1ZikgKyAxOwogICAgIGIwcC0+YjBfbWFnaWNfbG9uZyA9IChsb25nKUIwX01BR0lDX0xPTkc7CiAgICAgYjBwLT5iMF9tYWdpY19pbnQgPSAoaW50KUIwX01BR0lDX0lOVDsKICAgICBiMHAtPmIwX21hZ2ljX3Nob3J0ID0gKHNob3J0KUIwX01BR0lDX1NIT1JUOwpAQCAtNDMzLDYgKzQ2Niw3IEBACiAjZWxzZQogCSAgICBtZl9zZXRfZmZuYW1lKG1mcCk7CiAjZW5kaWYKKwkgICAgbWxfdXBkX2Jsb2NrMChidWYsIEZBTFNFKTsKIAkgICAgYnJlYWs7CiAJfQogCXZpbV9mcmVlKGZuYW1lKTsJICAgIC8qIHRoaXMgZm5hbWUgZGlkbid0IHdvcmssIHRyeSBhbm90aGVyICovCkBAIC01MDcsNiArNTQxLDggQEAKIAkgICAgICovCiAJICAgIG1mX2Z1bGxuYW1lKG1mcCk7CiAjZW5kaWYKKwkgICAgbWxfdXBkX2Jsb2NrMChidWYsIEZBTFNFKTsKKwogCSAgICAvKiBGbHVzaCBibG9jayB6ZXJvLCBzbyBvdGhlcnMgY2FuIHJlYWQgaXQgKi8KIAkgICAgaWYgKG1mX3N5bmMobWZwLCBNRlNfWkVSTykgPT0gT0spCiAJCWJyZWFrOwpAQCAtNjA4LDE5ICs2NDQsMzQgQEAKIG1sX3RpbWVzdGFtcChidWYpCiAgICAgYnVmX1QJKmJ1ZjsKIHsKKyAgICBtbF91cGRfYmxvY2swKGJ1ZiwgVFJVRSk7Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIHRpbWVzdGFtcCBvciB0aGUgQjBfU0FNRV9ESVIgZmxhZyBvZiB0aGUgLnN3cCBmaWxlLgorICovCisgICAgc3RhdGljIHZvaWQKK21sX3VwZF9ibG9jazAoYnVmLCBzZXRmbmFtZSkKKyAgICBidWZfVAkqYnVmOworICAgIGludAkJc2V0Zm5hbWU7Cit7CiAgICAgbWVtZmlsZV9UCSptZnA7CiAgICAgYmhkcl9UCSpocDsKICAgICBaRVJPX0JMCSpiMHA7CiAKICAgICBtZnAgPSBidWYtPmJfbWwubWxfbWZwOwotCiAgICAgaWYgKG1mcCA9PSBOVUxMIHx8IChocCA9IG1mX2dldChtZnAsIChibG9ja25yX1QpMCwgMSkpID09IE5VTEwpCiAJcmV0dXJuOwogICAgIGIwcCA9IChaRVJPX0JMICopKGhwLT5iaF9kYXRhKTsKICAgICBpZiAoYjBwLT5iMF9pZFswXSAhPSBCTE9DSzBfSUQwIHx8IGIwcC0+YjBfaWRbMV0gIT0gQkxPQ0swX0lEMSkKLQlFTVNHKF8oIkUzMDQ6IG1sX3RpbWVzdGFtcDogRGlkbid0IGdldCBibG9jayAwPz8iKSk7CisJRU1TRyhfKCJFMzA0OiBtbF91cGRfYmxvY2swKCk6IERpZG4ndCBnZXQgYmxvY2sgMD8/IikpOwogICAgIGVsc2UKLQlzZXRfYjBfZm5hbWUoYjBwLCBidWYpOworICAgIHsKKwlpZiAoc2V0Zm5hbWUpCisJICAgIHNldF9iMF9mbmFtZShiMHAsIGJ1Zik7CisJZWxzZQorCSAgICBzZXRfYjBfZGlyX2ZsYWcoYjBwLCBidWYpOworICAgIH0KICAgICBtZl9wdXQobWZwLCBocCwgVFJVRSwgRkFMU0UpOwogfQogCkBAIC02NDEsOSArNjkyLDE0IEBACiAgICAgZWxzZQogICAgIHsKICNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE1TV0lOKSB8fCBkZWZpbmVkKEFNSUdBKSB8fCBkZWZpbmVkKFJJU0NPUykKLQkvKiBzeXN0ZW1zIHRoYXQgY2Fubm90IHRyYW5zbGF0ZSAifnVzZXIiIGJhY2sgaW50byBhIHBhdGg6IGNvcHkgdGhlCi0JICogZmlsZSBuYW1lIHVubW9kaWZpZWQgKi8KKwkvKiBTeXN0ZW1zIHRoYXQgY2Fubm90IHRyYW5zbGF0ZSAifnVzZXIiIGJhY2sgaW50byBhIHBhdGg6IGNvcHkgdGhlCisJICogZmlsZSBuYW1lIHVubW9kaWZpZWQuICBEbyB1c2Ugc2xhc2hlcyBpbnN0ZWFkIG9mIGJhY2tzbGFzaGVzIGZvcgorCSAqIHBvcnRhYmlsaXR5LiAqLwogCVNUUk5DUFkoYjBwLT5iMF9mbmFtZSwgYnVmLT5iX2ZmbmFtZSwgQjBfRk5BTUVfU0laRSk7CisJYjBwLT5iMF9mbmFtZVtCMF9GTkFNRV9TSVpFIC0gMV0gPSBOVUw7CisjIGlmZGVmIEJBQ0tTTEFTSF9JTl9GSUxFTkFNRQorCWZvcndhcmRfc2xhc2goYjBwLT5iMF9mbmFtZSk7CisjIGVuZGlmCiAjZWxzZQogCXNpemVfdAlmbGVuLCB1bGVuOwogCWNoYXJfdQl1bmFtZVtCMF9VTkFNRV9TSVpFXTsKQEAgLTY2Miw3ICs3MTgsMTAgQEAKIAkgICAgLyogSWYgdGhlcmUgaXMgbm8gdXNlciBuYW1lIG9yIGl0IGlzIHRvbyBsb25nLCBkb24ndCB1c2UgIn4vIiAqLwogCSAgICBpZiAoZ2V0X3VzZXJfbmFtZSh1bmFtZSwgQjBfVU5BTUVfU0laRSkgPT0gRkFJTAogCQkJIHx8ICh1bGVuID0gU1RSTEVOKHVuYW1lKSkgKyBmbGVuID4gQjBfRk5BTUVfU0laRSAtIDEpCisJICAgIHsKIAkJU1RSTkNQWShiMHAtPmIwX2ZuYW1lLCBidWYtPmJfZmZuYW1lLCBCMF9GTkFNRV9TSVpFKTsKKwkJYjBwLT5iMF9mbmFtZVtCMF9GTkFNRV9TSVpFIC0gMV0gPSBOVUw7CisJICAgIH0KIAkgICAgZWxzZQogCSAgICB7CiAJCW1jaF9tZW1tb3ZlKGIwcC0+YjBfZm5hbWUgKyB1bGVuICsgMSwgYjBwLT5iMF9mbmFtZSArIDEsIGZsZW4pOwpAQCAtNjkxLDkgKzc1MCw1NiBAQAogCSAgICBidWYtPmJfb3JpZ19tb2RlID0gMDsKIAl9CiAgICAgfQorCisjaWZkZWYgRkVBVF9NQllURQorICAgIC8qIEFsc28gYWRkIHRoZSAnZmlsZWVuY29kaW5nJyBpZiB0aGVyZSBpcyByb29tLiAqLworICAgIGFkZF9iMF9mZW5jKGIwcCwgY3VyYnVmKTsKKyNlbmRpZgogfQogCiAvKgorICogVXBkYXRlIHRoZSBCMF9TQU1FX0RJUiBmbGFnIG9mIHRoZSBzd2FwIGZpbGUuICBJdCdzIHNldCBpZiB0aGUgZmlsZSBhbmQgdGhlCisgKiBzd2FwZmlsZSBmb3IgImJ1ZiIgYXJlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqIFRoaXMgaXMgZmFpbCBzYWZlOiBpZiB3ZSBhcmUgbm90IHN1cmUgdGhlIGRpcmVjdG9yaWVzIGFyZSBlcXVhbCB0aGUgZmxhZyBpcworICogbm90IHNldC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzZXRfYjBfZGlyX2ZsYWcoYjBwLCBidWYpCisgICAgWkVST19CTAkqYjBwOworICAgIGJ1Zl9UCSpidWY7Cit7CisgICAgaWYgKHNhbWVfZGlyZWN0b3J5KGJ1Zi0+Yl9tbC5tbF9tZnAtPm1mX2ZuYW1lLCBidWYtPmJfZmZuYW1lKSkKKwliMHAtPmIwX2ZsYWdzIHw9IEIwX1NBTUVfRElSOworICAgIGVsc2UKKwliMHAtPmIwX2ZsYWdzICY9IH5CMF9TQU1FX0RJUjsKK30KKworI2lmZGVmIEZFQVRfTUJZVEUKKy8qCisgKiBXaGVuIHRoZXJlIGlzIHJvb20sIGFkZCB0aGUgJ2ZpbGVlbmNvZGluZycgdG8gYmxvY2sgemVyby4KKyAqLworICAgIHN0YXRpYyB2b2lkCithZGRfYjBfZmVuYyhiMHAsIGJ1ZikKKyAgICBaRVJPX0JMCSpiMHA7CisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICBpbnQJCW47CisKKyAgICBuID0gU1RSTEVOKGJ1Zi0+Yl9wX2ZlbmMpOworICAgIGlmIChTVFJMRU4oYjBwLT5iMF9mbmFtZSkgKyBuICsgMSA+IEIwX0ZOQU1FX1NJWkUpCisJYjBwLT5iMF9mbGFncyAmPSB+QjBfSEFTX0ZFTkM7CisgICAgZWxzZQorICAgIHsKKwltY2hfbWVtbW92ZSgoY2hhciAqKWIwcC0+YjBfZm5hbWUgKyBCMF9GTkFNRV9TSVpFIC0gbiwKKwkJCQkJICAgIChjaGFyICopYnVmLT5iX3BfZmVuYywgKHNpemVfdCluKTsKKwkqKGIwcC0+YjBfZm5hbWUgKyBCMF9GTkFNRV9TSVpFIC0gbiAtIDEpID0gTlVMOworCWIwcC0+YjBfZmxhZ3MgfD0gQjBfSEFTX0ZFTkM7CisgICAgfQorfQorI2VuZGlmCisKKworLyoKICAqIHRyeSB0byByZWNvdmVyIGN1cmJ1ZiBmcm9tIHRoZSAuc3dwIGZpbGUKICAqLwogICAgIHZvaWQKQEAgLTcwNCw2ICs4MTAsOCBAQAogICAgIGNoYXJfdQkqZm5hbWU7CiAgICAgYmhkcl9UCSpocCA9IE5VTEw7CiAgICAgWkVST19CTAkqYjBwOworICAgIGludAkJYjBfZmY7CisgICAgY2hhcl91CSpiMF9mZW5jID0gTlVMTDsKICAgICBQVFJfQkwJKnBwOwogICAgIERBVEFfQkwJKmRwOwogICAgIGluZm9wdHJfVAkqaXA7CkBAIC05MjYsNiArMTAzNCwxNyBAQAogCUVNU0coXygiRTMwODogV2FybmluZzogT3JpZ2luYWwgZmlsZSBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQiKSk7CiAgICAgfQogICAgIG91dF9mbHVzaCgpOworCisgICAgLyogR2V0IHRoZSAnZmlsZWZvcm1hdCcgYW5kICdmaWxlZW5jb2RpbmcnIGZyb20gYmxvY2sgemVyby4gKi8KKyAgICBiMF9mZiA9IChiMHAtPmIwX2ZsYWdzICYgQjBfRkZfTUFTSyk7CisgICAgaWYgKGIwcC0+YjBfZmxhZ3MgJiBCMF9IQVNfRkVOQykKKyAgICB7CisJZm9yIChwID0gYjBwLT5iMF9mbmFtZSArIEIwX0ZOQU1FX1NJWkU7CisJCQkJICAgICAgIHAgPiBiMHAtPmIwX2ZuYW1lICYmIHBbLTFdICE9IE5VTDsgLS1wKQorCSAgICA7CisJYjBfZmVuYyA9IHZpbV9zdHJuc2F2ZShwLCBiMHAtPmIwX2ZuYW1lICsgQjBfRk5BTUVfU0laRSAtIHApOworICAgIH0KKwogICAgIG1mX3B1dChtZnAsIGhwLCBGQUxTRSwgRkFMU0UpOwkvKiByZWxlYXNlIGJsb2NrIDAgKi8KICAgICBocCA9IE5VTEw7CiAKQEAgLTk0OCw2ICsxMDY3LDE2IEBACiAJICAgIG1sX2RlbGV0ZSgobGluZW5yX1QpMSwgRkFMU0UpOwogICAgIH0KIAorICAgIC8qIFVzZSB0aGUgJ2ZpbGVmb3JtYXQnIGFuZCAnZmlsZWVuY29kaW5nJyBhcyBzdG9yZWQgaW4gdGhlIHN3YXAgZmlsZS4gKi8KKyAgICBpZiAoYjBfZmYgIT0gMCkKKwlzZXRfZmlsZWZvcm1hdChiMF9mZiAtIDEsIE9QVF9MT0NBTCk7CisgICAgaWYgKGIwX2ZlbmMgIT0gTlVMTCkKKyAgICB7CisJc2V0X29wdGlvbl92YWx1ZSgoY2hhcl91ICopImZlbmMiLCAwTCwgYjBfZmVuYywgT1BUX0xPQ0FMKTsKKwl2aW1fZnJlZShiMF9mZW5jKTsKKyAgICB9CisgICAgdW5jaGFuZ2VkKGN1cmJ1ZiwgVFJVRSk7CisKICAgICBibnVtID0gMTsJCS8qIHN0YXJ0IHdpdGggYmxvY2sgMSAqLwogICAgIHBhZ2VfY291bnQgPSAxOwkvKiB3aGljaCBpcyAxIHBhZ2UgKi8KICAgICBsbnVtID0gMDsJCS8qIGFwcGVuZCBhZnRlciBsaW5lIDAgaW4gY3VyYnVmICovCkBAIC0xMjk1LDcgKzE0MjQsNyBAQAogCSAgICB7CiAjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFdJTjMyNjQpCiAJCXAgPSBkaXJfbmFtZSArIFNUUkxFTihkaXJfbmFtZSk7Ci0JCWlmICh2aW1faXNwYXRoc2VwKHBbLTFdKSAmJiBwWy0xXSA9PSBwWy0yXSkKKwkJaWYgKGFmdGVyX3BhdGhzZXAoZGlyX25hbWUsIHApICYmIHBbLTFdID09IHBbLTJdKQogCQl7CiAJCSAgICAvKiBFbmRzIHdpdGggJy8vJywgVXNlIEZ1bGwgcGF0aCBmb3Igc3dhcCBuYW1lICovCiAJCSAgICB0YWlsID0gbWFrZV9wZXJjZW50X3N3bmFtZShkaXJfbmFtZSwgKmZuYW1lKTsKQEAgLTE0NDEsNyArMTU3MCw3IEBACiAgICAgY2hhcl91CSpkaXI7CiAgICAgY2hhcl91CSpuYW1lOwogewotICAgIGNoYXJfdSAqZCwgKnMsICpmLCAqcDsKKyAgICBjaGFyX3UgKmQsICpzLCAqZjsKIAogICAgIGYgPSBmaXhfZm5hbWUobmFtZSAhPSBOVUxMID8gbmFtZSA6IChjaGFyX3UgKikgIiIpOwogICAgIGQgPSBOVUxMOwpAQCAtMTQ1MCw5ICsxNTc5LDEwIEBACiAJcyA9IGFsbG9jKCh1bnNpZ25lZCkoU1RSTEVOKGYpICsgMSkpOwogCWlmIChzICE9IE5VTEwpCiAJewotCSAgICBmb3IgKGQgPSBzLCBwID0gZjsgKnA7IHArKywgZCsrKQotCQkqZCA9IHZpbV9pc3BhdGhzZXAoKnApID8gJyUnIDogKnA7Ci0JICAgICpkID0gMDsKKwkgICAgU1RSQ1BZKHMsIGYpOworCSAgICBmb3IgKGQgPSBzOyAqZCAhPSBOVUw7IG1iX3B0cl9hZHYoZCkpCisJCWlmICh2aW1faXNwYXRoc2VwKCpkKSkKKwkJICAgICpkID0gJyUnOwogCSAgICBkID0gY29uY2F0X2ZuYW1lcyhkaXIsIHMsIFRSVUUpOwogCSAgICB2aW1fZnJlZShzKTsKIAl9CkBAIC0zMjY2LDcgKzMzOTYsNyBAQAogCiAjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFdJTjMyNjQpICAvKiBOZWVkIF92ZXJ5XyBsb25nIGZpbGUgbmFtZXMgKi8KICAgICBzID0gZGlyX25hbWUgKyBTVFJMRU4oZGlyX25hbWUpOwotICAgIGlmICh2aW1faXNwYXRoc2VwKHNbLTFdKSAmJiBzWy0xXSA9PSBzWy0yXSkKKyAgICBpZiAoYWZ0ZXJfcGF0aHNlcChkaXJfbmFtZSwgcykgJiYgc1stMV0gPT0gc1stMl0pCiAgICAgewkJCSAgICAgICAvKiBFbmRzIHdpdGggJy8vJywgVXNlIEZ1bGwgcGF0aCAqLwogCXIgPSBOVUxMOwogCWlmICgocyA9IG1ha2VfcGVyY2VudF9zd25hbWUoZGlyX25hbWUsIGJ1Zi0+Yl9mbmFtZSkpICE9IE5VTEwpCkBAIC0zNjE3LDE4ICszNzQ3LDMzIEBACiAJCSAgICBpZiAocmVhZChmZCwgKGNoYXIgKikmYjAsIHNpemVvZihiMCkpID09IHNpemVvZihiMCkpCiAJCSAgICB7CiAJCQkvKgotCQkJICogVGhlIG5hbWUgaW4gdGhlIHN3YXAgZmlsZSBtYXkgYmUgIn51c2VyL3BhdGgvZmlsZSIuCi0JCQkgKiBFeHBhbmQgaXQgZmlyc3QuCisJCQkgKiBJZiB0aGUgc3dhcGZpbGUgaGFzIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUKKwkJCSAqIGJ1ZmZlciBkb24ndCBjb21wYXJlIHRoZSBkaXJlY3RvcnkgbmFtZXMsIHRoZXkgY2FuCisJCQkgKiBoYXZlIGEgZGlmZmVyZW50IG1vdW50cG9pbnQuCiAJCQkgKi8KLQkJCWV4cGFuZF9lbnYoYjAuYjBfZm5hbWUsIE5hbWVCdWZmLCBNQVhQQVRITCk7CisJCQlpZiAoYjAuYjBfZmxhZ3MgJiBCMF9TQU1FX0RJUikKKwkJCXsKKwkJCSAgICBpZiAoZm5hbWVjbXAoZ2V0dGFpbChidWYtPmJfZmZuYW1lKSwKKwkJCQkJCSAgIGdldHRhaWwoYjAuYjBfZm5hbWUpKSAhPSAwCisJCQkJICAgIHx8ICFzYW1lX2RpcmVjdG9yeShmbmFtZSwgYnVmLT5iX2ZmbmFtZSkpCisJCQkJZGlmZmVyID0gVFJVRTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCSAgICAvKgorCQkJICAgICAqIFRoZSBuYW1lIGluIHRoZSBzd2FwIGZpbGUgbWF5IGJlCisJCQkgICAgICogIn51c2VyL3BhdGgvZmlsZSIuICBFeHBhbmQgaXQgZmlyc3QuCisJCQkgICAgICovCisJCQkgICAgZXhwYW5kX2VudihiMC5iMF9mbmFtZSwgTmFtZUJ1ZmYsIE1BWFBBVEhMKTsKICNpZmRlZiBDSEVDS19JTk9ERQotCQkJaWYgKGZuYW1lY21wX2lubyhidWYtPmJfZmZuYW1lLCBOYW1lQnVmZiwKLQkJCQkJCSAgICAgY2hhcl90b19sb25nKGIwLmIwX2lubykpKQotCQkJICAgIGRpZmZlciA9IFRSVUU7CisJCQkgICAgaWYgKGZuYW1lY21wX2lubyhidWYtPmJfZmZuYW1lLCBOYW1lQnVmZiwKKwkJCQkJY2hhcl90b19sb25nKGIwLmIwX2lubykpKQorCQkJCWRpZmZlciA9IFRSVUU7CiAjZWxzZQotCQkJaWYgKGZuYW1lY21wKE5hbWVCdWZmLCBidWYtPmJfZmZuYW1lKSAhPSAwKQotCQkJICAgIGRpZmZlciA9IFRSVUU7CisJCQkgICAgaWYgKGZuYW1lY21wKE5hbWVCdWZmLCBidWYtPmJfZmZuYW1lKSAhPSAwKQorCQkJCWRpZmZlciA9IFRSVUU7CiAjZW5kaWYKKwkJCX0KIAkJICAgIH0KIAkJICAgIGNsb3NlKGZkKTsKIAkJfQpAQCAtMzk1NiwxMCArNDEwMSwxNSBAQAogICAgIHJldHVybiByZXR2YWw7CiB9CiAKKy8qCisgKiBTZXQgdGhlIGZsYWdzIGluIHRoZSBmaXJzdCBibG9jayBvZiB0aGUgc3dhcCBmaWxlOgorICogLSBmaWxlIGlzIG1vZGlmaWVkIG9yIG5vdDogYnVmLT5iX2NoYW5nZWQKKyAqIC0gJ2ZpbGVmb3JtYXQnCisgKiAtICdmaWxlZW5jb2RpbmcnCisgKi8KICAgICB2b2lkCi1tbF9zZXRkaXJ0eShidWYsIGZsYWcpCittbF9zZXRmbGFncyhidWYpCiAgICAgYnVmX1QJKmJ1ZjsKLSAgICBpbnQJCWZsYWc7CiB7CiAgICAgYmhkcl9UCSpocDsKICAgICBaRVJPX0JMCSpiMHA7CkBAIC0zOTcxLDcgKzQxMjEsMTIgQEAKIAlpZiAoaHAtPmJoX2JudW0gPT0gMCkKIAl7CiAJICAgIGIwcCA9IChaRVJPX0JMICopKGhwLT5iaF9kYXRhKTsKLQkgICAgYjBwLT5iMF9kaXJ0eSA9IGZsYWcgPyAweDU1IDogMDsKKwkgICAgYjBwLT5iMF9kaXJ0eSA9IGJ1Zi0+Yl9jaGFuZ2VkID8gQjBfRElSVFkgOiAwOworCSAgICBiMHAtPmIwX2ZsYWdzID0gKGIwcC0+YjBfZmxhZ3MgJiB+QjBfRkZfTUFTSykKKwkJCQkJCSAgfCAoZ2V0X2ZpbGVmb3JtYXQoYnVmKSArIDEpOworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgYWRkX2IwX2ZlbmMoYjBwLCBidWYpOworI2VuZGlmCiAJICAgIGhwLT5iaF9mbGFncyB8PSBCSF9ESVJUWTsKIAkgICAgbWZfc3luYyhidWYtPmJfbWwubWxfbWZwLCBNRlNfWkVSTyk7CiAJICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL21lbnUuYyBiL3NyYy9tZW51LmMKaW5kZXggYTY0NzQ1Yi4uYWViM2M2MSAxMDA2NDQKLS0tIGEvc3JjL21lbnUuYworKysgYi9zcmMvbWVudS5jCkBAIC0xNDYsMTIgKzE0Niw3IEBACiAJewogCSAgICBpZiAoKmFyZyA9PSAnXFwnKQogCQltY2hfbWVtbW92ZShhcmcsIGFyZyArIDEsIFNUUkxFTihhcmcpKTsKLSNpZmRlZiBGRUFUX01CWVRFCi0JICAgIGlmIChoYXNfbWJ5dGUpCi0JCWFyZyArPSAoKm1iX3B0cjJsZW5fY2hlY2spKGFyZyk7Ci0JICAgIGVsc2UKLSNlbmRpZgotCQkrK2FyZzsKKwkgICAgbWJfcHRyX2FkdihhcmcpOwogCX0KIAlpZiAoKmFyZyAhPSBOVUwpCiAJewpAQCAtNjgxLDE3ICs2NzYsMTMgQEAKIAogCQkgICAgU1RSQ1BZKHRlYXJwYXRoLCBtZW51X3BhdGgpOwogCQkgICAgaWR4ID0gKGludCkobmV4dF9uYW1lIC0gcGF0aF9uYW1lIC0gMSk7Ci0JCSAgICBmb3IgKHMgPSB0ZWFycGF0aDsgKnMgJiYgcyA8IHRlYXJwYXRoICsgaWR4OyArK3MpCisJCSAgICBmb3IgKHMgPSB0ZWFycGF0aDsgKnMgJiYgcyA8IHRlYXJwYXRoICsgaWR4OyBtYl9wdHJfYWR2KHMpKQogCQkgICAgewogCQkJaWYgKCgqcyA9PSAnXFwnIHx8ICpzID09IEN0cmxfVikgJiYgc1sxXSkKIAkJCXsKIAkJCSAgICArK2lkeDsKIAkJCSAgICArK3M7CiAJCQl9Ci0jICBpZmRlZiBGRUFUX01CWVRFCi0JCQlpZiAoaGFzX21ieXRlKQotCQkJICAgIHMgKz0gKCptYl9wdHIybGVuX2NoZWNrKShzKSAtIDE7Ci0jICBlbmRpZgogCQkgICAgfQogCQkgICAgdGVhcnBhdGhbaWR4XSA9IE5VTDsKIAkJICAgIGd1aV9hZGRfdGVhcm9mZih0ZWFycGF0aCwgcHJpX3RhYiwgcHJpX2lkeCk7CkBAIC0xNDEwLDcgKzE0MDEsNyBAQAogewogICAgIGNoYXJfdSAgKnA7CiAKLSAgICBmb3IgKHAgPSBuYW1lOyAqcCAmJiAqcCAhPSAnLic7IHArKykKKyAgICBmb3IgKHAgPSBuYW1lOyAqcCAmJiAqcCAhPSAnLic7IG1iX3B0cl9hZHYocCkpCiAgICAgewogCWlmICgqcCA9PSAnXFwnIHx8ICpwID09IEN0cmxfVikKIAl7CkBAIC0xNDE4LDEwICsxNDA5LDYgQEAKIAkgICAgaWYgKCpwID09IE5VTCkKIAkJYnJlYWs7CiAJfQotI2lmZGVmIEZFQVRfTUJZVEUKLQlpZiAoaGFzX21ieXRlKQotCSAgICBwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkgLSAxOwkvKiBza2lwIG11bHRpYnl0ZSBjaGFyICovCi0jZW5kaWYKICAgICB9CiAgICAgaWYgKCpwKQogCSpwKysgPSBOVUw7CmRpZmYgLS1naXQgYS9zcmMvbWVzc2FnZS5jIGIvc3JjL21lc3NhZ2UuYwppbmRleCBjYWY3YWMwLi42YTIzODY0IDEwMDY0NAotLS0gYS9zcmMvbWVzc2FnZS5jCisrKyBiL3NyYy9tZXNzYWdlLmMKQEAgLTI4OTcsMTIgKzI4OTcsNyBAQAogCSAgICB9CiAKIAkgICAgLyogYWR2YW5jZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgKi8KLSNpZmRlZiBGRUFUX01CWVRFCi0JICAgIGlmIChoYXNfbWJ5dGUpCi0JCXIgKz0gKCptYl9wdHIybGVuX2NoZWNrKShyKTsKLQkgICAgZWxzZQotI2VuZGlmCi0JCSsrcjsKKwkgICAgbWJfcHRyX2FkdihyKTsKIAl9CiAKIAlpZiAoY29weSkKQEAgLTI5MTAsMTIgKzI5MDUsNyBAQAogCSAgICAqbXNncCsrID0gJzonOwogCSAgICAqbXNncCsrID0gJyAnOwogCSAgICAqbXNncCA9IE5VTDsKLSNpZmRlZiBGRUFUX01CWVRFCi0JICAgIGlmIChoYXNfbWJ5dGUpCi0JCWhvdGtwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykoaG90a3ApOwotCSAgICBlbHNlCi0jZW5kaWYKLQkJKytob3RrcDsKKwkgICAgbWJfcHRyX2Fkdihob3RrcCk7CiAJICAgICpob3RrcCA9IE5VTDsKIAl9CiAJZWxzZQpAQCAtMzE0OCwxMSArMzEzOCw4IEBACiAJICAgIGlmIChmbmFtZSAhPSBOVUxMICYmICpmbmFtZSAhPSBOVUwgJiYgIW1jaF9pc2RpcihmbmFtZSkpCiAJICAgIHsKIAkJLyogUmVtb3ZlIHRoZSBmaWxlIG5hbWUuICovCi0JCWNoYXJfdQkgICAgKnMgPSBnZXRfcGFzdF9oZWFkKGZuYW1lKTsKLQkJY2hhcl91CSAgICAqdGFpbCA9IGdldHRhaWwoZm5hbWUpOworCQljaGFyX3UJICAgICp0YWlsID0gZ2V0dGFpbF9zZXAoZm5hbWUpOwogCi0JCXdoaWxlICh0YWlsID4gcyAmJiB2aW1faXNwYXRoc2VwKHRhaWxbLTFdKSkKLQkJICAgIC0tdGFpbDsKIAkJaWYgKHRhaWwgPT0gZm5hbWUpCiAJCSAgICAqdGFpbCsrID0gJy4nOwkvKiB1c2UgY3VycmVudCBkaXIgKi8KIAkJKnRhaWwgPSBOVUw7CmRpZmYgLS1naXQgYS9zcmMvbWlzYzEuYyBiL3NyYy9taXNjMS5jCmluZGV4IDRkYzVhNDEuLjg5MWZiYjUgMTAwNjQ0Ci0tLSBhL3NyYy9taXNjMS5jCisrKyBiL3NyYy9taXNjMS5jCkBAIC0xMDA2LDggKzEwMDYsNyBAQAogCiAJCQkgICAgd2hpbGUgKG9sZF9zaXplIDwgcmVwbF9zaXplICYmIHAgPiBsZWFkZXIpCiAJCQkgICAgewotCQkJCS0tcDsKLQkJCQlwIC09IG1iX2hlYWRfb2ZmKGxlYWRlciwgcCk7CisJCQkJbWJfcHRyX2JhY2sobGVhZGVyLCBwKTsKIAkJCQlvbGRfc2l6ZSArPSBwdHIyY2VsbHMocCk7CiAJCQkgICAgfQogCQkJICAgIGwgPSBsZWFkX3JlcGxfbGVuIC0gKGVuZHAgLSBwKTsKQEAgLTE3NDEsMTIgKzE3NDAsNyBAQAogICAgIHdoaWxlICgqcyAhPSBOVUwgJiYgLS1jb2x1bW4gPj0gMCkKICAgICB7CiAJY29sICs9IHdpbl9sYnJfY2hhcnRhYnNpemUod3AsIHMsIChjb2xucl9UKWNvbCwgTlVMTCk7Ci0jaWZkZWYgRkVBVF9NQllURQotCWlmIChoYXNfbWJ5dGUpCi0JICAgIHMgKz0gKCptYl9wdHIybGVuX2NoZWNrKShzKTsKLQllbHNlCi0jZW5kaWYKLQkgICAgKytzOworCW1iX3B0cl9hZHYocyk7CiAgICAgfQogCiAgICAgLyoKQEAgLTI0NTEsNyArMjQ0NSw3IEBACiAJICAgIH0KIAl9CiAJY3VyYnVmLT5iX2NoYW5nZWQgPSBUUlVFOwotCW1sX3NldGRpcnR5KGN1cmJ1ZiwgVFJVRSk7CisJbWxfc2V0ZmxhZ3MoY3VyYnVmKTsKICNpZmRlZiBGRUFUX1dJTkRPV1MKIAljaGVja19zdGF0dXMoY3VyYnVmKTsKICNlbmRpZgpAQCAtMjc4OCw3ICsyNzgyLDcgQEAKICAgICBpZiAoYnVmLT5iX2NoYW5nZWQgfHwgKGZmICYmIGZpbGVfZmZfZGlmZmVycyhidWYpKSkKICAgICB7CiAJYnVmLT5iX2NoYW5nZWQgPSAwOwotCW1sX3NldGRpcnR5KGJ1ZiwgRkFMU0UpOworCW1sX3NldGZsYWdzKGJ1Zik7CiAJaWYgKGZmKQogCSAgICBzYXZlX2ZpbGVfZmYoYnVmKTsKICNpZmRlZiBGRUFUX1dJTkRPV1MKQEAgLTM1MjAsMTUgKzM1MTQsMTYgQEAKIAkgICAgewogCQlTVFJDUFkoZHN0LCB2YXIpOwogCQlkc3RsZW4gLT0gKGludClTVFJMRU4odmFyKTsKLQkJZHN0ICs9IFNUUkxFTih2YXIpOworCQljID0gU1RSTEVOKHZhcik7CiAJCS8qIGlmIHZhcltdIGVuZHMgaW4gYSBwYXRoIHNlcGFyYXRvciBhbmQgdGFpbFtdIHN0YXJ0cwogCQkgKiB3aXRoIGl0LCBza2lwIGEgY2hhcmFjdGVyICovCi0JCWlmICgqdmFyICE9IE5VTCAmJiB2aW1faXNwYXRoc2VwKGRzdFstMV0pCisJCWlmICgqdmFyICE9IE5VTCAmJiBhZnRlcl9wYXRoc2VwKGRzdCwgZHN0ICsgYykKICNpZiBkZWZpbmVkKEJBQ0tTTEFTSF9JTl9GSUxFTkFNRSkgfHwgZGVmaW5lZChBTUlHQSkKIAkJCSYmIGRzdFstMV0gIT0gJzonCiAjZW5kaWYKIAkJCSYmIHZpbV9pc3BhdGhzZXAoKnRhaWwpKQogCQkgICAgKyt0YWlsOworCQlkc3QgKz0gYzsKIAkJc3JjID0gdGFpbDsKIAkJY29weV9jaGFyID0gRkFMU0U7CiAJICAgIH0KQEAgLTM2NjcsNyArMzY2Miw3IEBACiAjaWZuZGVmIE1BQ09TX0NMQVNTSUMKIAkgICAgLyogV2l0aCBNYWNPUyBwYXRoICh3aXRoICBjb2xvbnMpIHRoZSBmaW5hbCBjb2xvbiBpcyByZXF1aXJlZCAqLwogCSAgICAvKiB0byBhdm9pZCBjb25mdXNpb24gYmV0d2VlbiBhYnNvdWx1dGUgYW5kIHJlbGF0aXZlIHBhdGggKi8KLQkgICAgaWYgKHBlbmQgPiBwICYmIHZpbV9pc3BhdGhzZXAoKihwZW5kIC0gMSkpKQorCSAgICBpZiAocGVuZCA+IHAgJiYgYWZ0ZXJfcGF0aHNlcChwLCBwZW5kKSkKIAkJLS1wZW5kOwogI2VuZGlmCiAKQEAgLTM3ODksNyArMzc4NCw3IEBACiAKICAgICBpZiAobmV3ZW5kID49IHAKIAkgICAgJiYgZm5hbWVuY21wKG5ld2VuZCwgbmFtZSwgbGVuIC0gMSkgPT0gMAotCSAgICAmJiAobmV3ZW5kID09IHAgfHwgdmltX2lzcGF0aHNlcCgqKG5ld2VuZCAtIDEpKSkpCisJICAgICYmIChuZXdlbmQgPT0gcCB8fCBhZnRlcl9wYXRoc2VwKHAsIG5ld2VuZCkpKQogCXJldHVybiBuZXdlbmQ7CiAgICAgcmV0dXJuIHBlbmQ7CiB9CkBAIC0zODA5LDkgKzM4MDQsOSBAQAogICAgIGNoYXJfdQkqbmV3ZW5kID0gcGVuZCAtIGxlbjsKIAogICAgIGlmIChuZXdlbmQgPj0gcCAmJiBmbmFtZW5jbXAobmV3ZW5kLCBleHQsIGxlbiAtIDEpID09IDApCi0Jd2hpbGUgKG5ld2VuZCAhPSBwICYmICF2aW1faXNwYXRoc2VwKCoobmV3ZW5kIC0gMSkpKQotCSAgICAtLW5ld2VuZDsKLSAgICBpZiAobmV3ZW5kID09IHAgfHwgdmltX2lzcGF0aHNlcCgqKG5ld2VuZCAtIDEpKSkKKwl3aGlsZSAobmV3ZW5kICE9IHAgJiYgIWFmdGVyX3BhdGhzZXAobmV3ZW5kKSkKKwkgICAgbWJfcHRyX2JhY2sobmV3ZW5kKTsKKyAgICBpZiAobmV3ZW5kID09IHAgfHwgYWZ0ZXJfcGF0aHNlcChuZXdlbmQpKQogCXJldHVybiBuZXdlbmQ7CiAgICAgcmV0dXJuIHBlbmQ7CiB9CkBAIC00MTIyLDE3ICs0MTE3LDM1IEBACiAgICAgewogCWlmICh2aW1faXNwYXRoc2VwKCpwMikpCiAJICAgIHAxID0gcDIgKyAxOwotI2lmZGVmIEZFQVRfTUJZVEUKLQlpZiAoaGFzX21ieXRlKQotCSAgICBwMiArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHAyKTsKLQllbHNlCi0jZW5kaWYKLQkgICAgKytwMjsKKwltYl9wdHJfYWR2KHAyKTsKICAgICB9CiAgICAgcmV0dXJuIHAxOwogfQogCiAvKgorICogR2V0IHBvaW50ZXIgdG8gdGFpbCBvZiAiZm5hbWUiLCBpbmNsdWRpbmcgcGF0aCBzZXBhcmF0b3JzLiAgUHV0dGluZyBhIE5VTAorICogaGVyZSBsZWF2ZXMgdGhlIGRpcmVjdG9yeSBuYW1lLiAgVGFrZXMgY2FyZSBvZiAiYzovIiBhbmQgIi8vIi4KKyAqIEFsd2F5cyByZXR1cm5zIGEgdmFsaWQgcG9pbnRlci4KKyAqLworICAgIGNoYXJfdSAqCitnZXR0YWlsX3NlcChmbmFtZSkKKyAgICBjaGFyX3UJKmZuYW1lOworeworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJKnQ7CisKKyAgICBwID0gZ2V0X3Bhc3RfaGVhZChmbmFtZSk7CS8qIGRvbid0IHJlbW92ZSB0aGUgJy8nIGZyb20gImM6L2ZpbGUiICovCisgICAgdCA9IGdldHRhaWwoZm5hbWUpOworICAgIHdoaWxlICh0ID4gcCAmJiBhZnRlcl9wYXRoc2VwKGZuYW1lLCB0KSkKKwktLXQ7CisjaWZkZWYgVk1TCisgICAgLyogcGF0aCBzZXBhcmF0b3IgaXMgcGFydCBvZiB0aGUgcGF0aCAqLworICAgICsrdDsKKyNlbmRpZgorICAgIHJldHVybiB0OworfQorCisvKgogICogZ2V0IHRoZSBuZXh0IHBhdGggY29tcG9uZW50IChqdXN0IGFmdGVyIHRoZSBuZXh0IHBhdGggc2VwYXJhdG9yKS4KICAqLwogICAgIGNoYXJfdSAqCkBAIC00MTQwLDE4ICs0MTUzLDEyIEBACiAgICAgY2hhcl91ICpmbmFtZTsKIHsKICAgICB3aGlsZSAoKmZuYW1lICYmICF2aW1faXNwYXRoc2VwKCpmbmFtZSkpCi0JKytmbmFtZTsKKwltYl9wdHJfYWR2KGZuYW1lKTsKICAgICBpZiAoKmZuYW1lKQogCSsrZm5hbWU7CiAgICAgcmV0dXJuIGZuYW1lOwogfQogCi0jaWYgZGVmaW5lZChGRUFUX01PRElGWV9GTkFNRSkgfHwgZGVmaW5lZChGRUFUX0VWQUwpIFwKLQl8fCBkZWZpbmVkKEZFQVRfU0VTU0lPTikgfHwgZGVmaW5lZChNU1dJTikgXAotCXx8ICgoZGVmaW5lZChGRUFUX0dVSV9HVEspIHx8IGRlZmluZWQoRkVBVF9HVUlfS0RFKSkgXAotCQkJICAgICYmIChkZWZpbmVkKEZFQVRfV0lORE9XUykgfHwgZGVmaW5lZChGRUFUX0RORCkpKSBcCi0JfHwgZGVmaW5lZChGRUFUX1NVTl9XT1JLU0hPUCkgfHwgZGVmaW5lZChGRUFUX05FVEJFQU5TX0lOVEcpIFwKLQl8fCBkZWZpbmVkKFBST1RPKQogLyoKICAqIEdldCBhIHBvaW50ZXIgdG8gb25lIGNoYXJhY3RlciBwYXN0IHRoZSBoZWFkIG9mIGEgcGF0aCBuYW1lLgogICogVW5peDogYWZ0ZXIgIi8iOyBET1M6IGFmdGVyICJjOlwiOyBBbWlnYTogYWZ0ZXIgImRpc2s6LyI7IE1hYzogbm8gaGVhZC4KQEAgLTQxODUsNyArNDE5Miw2IEBACiAKICAgICByZXR1cm4gcmV0dmFsOwogfQotI2VuZGlmCiAKIC8qCiAgKiByZXR1cm4gVFJVRSBpZiAnYycgaXMgYSBwYXRoIHNlcGFyYXRvci4KQEAgLTQyOTksNyArNDMwNSw3IEBACiBhZGRfcGF0aHNlcChwKQogICAgIGNoYXJfdQkqcDsKIHsKLSAgICBpZiAoKnAgIT0gTlVMICYmICF2aW1faXNwYXRoc2VwKCoocCArIFNUUkxFTihwKSAtIDEpKSkKKyAgICBpZiAoKnAgIT0gTlVMICYmICFhZnRlcl9wYXRoc2VwKHAsIHAgKyBTVFJMRU4ocCkpKQogCVNUUkNBVChwLCBQQVRIU0VQU1RSKTsKIH0KIApAQCAtNzY1Myw5ICs3NjU5LDEwIEBACiAgICAgdm9pZAogcHJlcGFyZV90b19leGl0KCkKIHsKLSNpZiBkZWZpbmVkKFVOSVgpCi0gICAgLyogSWdub3JlIFNJR0hVUCwgYmVjYXVzZSBhIGRyb3BwZWQgY29ubmVjdGlvbiBtYXkgbWFrZSBWaW0gZXhpdCBhbmQgdGhlbgotICAgICAqIGdldCBhIFNJR0hVUCB3aGlsZSBleGl0aW5nLCB3aGljaCBjYXVzZXMgdmFyaW91cyByZWVudHJlbnQgcHJvYmxlbXMuICovCisjaWYgZGVmaW5lZChTSUdIVVApICYmIGRlZmluZWQoU0lHX0lHTikKKyAgICAvKiBJZ25vcmUgU0lHSFVQLCBiZWNhdXNlIGEgZHJvcHBlZCBjb25uZWN0aW9uIGNhdXNlcyBhIHJlYWQgZXJyb3IsIHdoaWNoCisgICAgICogbWFrZXMgVmltIGV4aXQgYW5kIHRoZW4gaGFuZGxpbmcgU0lHSFVQIGNhdXNlcyB2YXJpb3VzIHJlZW50cmFuY2UKKyAgICAgKiBwcm9ibGVtcy4gKi8KICAgICBzaWduYWwoU0lHSFVQLCBTSUdfSUdOKTsKICNlbmRpZgogCkBAIC03OTA0LDcgKzc5MTEsNyBAQAogICAgIHN0YXRpYyBpbnQgX2NkZWNsCiBwc3RyY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiB7Ci0gICAgcmV0dXJuIChwYXRoY21wKCooY2hhciAqKilhLCAqKGNoYXIgKiopYikpOworICAgIHJldHVybiAocGF0aGNtcCgqKGNoYXIgKiopYSwgKihjaGFyICoqKWIsIC0xKSk7CiB9CiAKICMgaWZuZGVmIFdJTjMyNjQKZGlmZiAtLWdpdCBhL3NyYy9taXNjMi5jIGIvc3JjL21pc2MyLmMKaW5kZXggNDdmZjRhNC4uN2E4NTAyNiAxMDA2NDQKLS0tIGEvc3JjL21pc2MyLmMKKysrIGIvc3JjL21pc2MyLmMKQEAgLTIwMCwxMiArMjAwLDcgQEAKIAkgICAgLyogQ291bnQgYSB0YWIgZm9yIHdoYXQgaXQncyB3b3J0aCAoaWYgbGlzdCBtb2RlIG5vdCBvbikgKi8KICNpZmRlZiBGRUFUX0xJTkVCUkVBSwogCSAgICBjc2l6ZSA9IHdpbl9sYnJfY2hhcnRhYnNpemUoY3Vyd2luLCBwdHIsIGNvbCwgJmhlYWQpOwotIyBpZmRlZiBGRUFUX01CWVRFCi0JICAgIGlmIChoYXNfbWJ5dGUpCi0JCXB0ciArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHB0cik7Ci0JICAgIGVsc2UKLSMgZW5kaWYKLQkJKytwdHI7CisJICAgIG1iX3B0cl9hZHYocHRyKTsKICNlbHNlCiAJICAgIGNzaXplID0gbGJyX2NoYXJ0YWJzaXplX2FkdigmcHRyLCBjb2wpOwogI2VuZGlmCkBAIC0xNDUxLDEyICsxNDQ2LDcgQEAKICAgICB7CiAJaWYgKCpzdHJpbmcgPT0gYykKIAkgICAgcmV0dmFsID0gc3RyaW5nOwotI2lmZGVmIEZFQVRfTUJZVEUKLQlpZiAoaGFzX21ieXRlKQotCSAgICBzdHJpbmcgKz0gKCptYl9wdHIybGVuX2NoZWNrKShzdHJpbmcpOwotCWVsc2UKLSNlbmRpZgotCSAgICArK3N0cmluZzsKKwltYl9wdHJfYWR2KHN0cmluZyk7CiAgICAgfQogICAgIHJldHVybiByZXR2YWw7CiB9CkBAIC0xNDc5LDEyICsxNDY5LDcgQEAKICAgICB7CiAJaWYgKHZpbV9zdHJjaHIoY2hhcnNldCwgKnMpICE9IE5VTEwpCiAJICAgIHJldHVybiBzOwotI2lmZGVmIEZFQVRfTUJZVEUKLQlpZiAoaGFzX21ieXRlKQotCSAgICBzICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocyk7Ci0JZWxzZQotI2VuZGlmCi0JICAgICsrczsKKwltYl9wdHJfYWR2KHMpOwogICAgIH0KICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTI2NDUsNiArMjYzMCw0NiBAQAogICAgIHJldHVybiBTdGF0ZTsKIH0KIAorI2lmIGRlZmluZWQoRkVBVF9NQllURSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiAicCIgcG9pbnRzIHRvIGp1c3QgYWZ0ZXIgYSBwYXRoIHNlcGFyYXRvci4KKyAqIFRha2UgY2FyZSBvZiBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCisgKiAiYiIgbXVzdCBwb2ludCB0byB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgbmFtZQorICovCisgICAgaW50CithZnRlcl9wYXRoc2VwKGIsIHApCisgICAgY2hhcl91CSpiOworICAgIGNoYXJfdQkqcDsKK3sKKyAgICByZXR1cm4gdmltX2lzcGF0aHNlcChwWy0xXSkKKwkJCSAgICAgJiYgKCFoYXNfbWJ5dGUgfHwgKCptYl9oZWFkX29mZikoYiwgcCAtIDEpID09IDApOworfQorI2VuZGlmCisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBmaWxlIG5hbWVzICJmMSIgYW5kICJmMiIgYXJlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqICJmMSIgbWF5IGJlIGEgc2hvcnQgbmFtZSwgImYyIiBtdXN0IGJlIGEgZnVsbCBwYXRoLgorICovCisgICAgaW50CitzYW1lX2RpcmVjdG9yeShmMSwgZjIpCisgICAgY2hhcl91CSpmMTsKKyAgICBjaGFyX3UJKmYyOworeworICAgIGNoYXJfdQlmZm5hbWVbTUFYUEFUSExdOworICAgIGNoYXJfdQkqdDE7CisgICAgY2hhcl91CSp0MjsKKworICAgIC8qIHNhZmV0eSBjaGVjayAqLworICAgIGlmIChmMSA9PSBOVUxMIHx8IGYyID09IE5VTEwpCisJcmV0dXJuIEZBTFNFOworCisgICAgKHZvaWQpdmltX0Z1bGxOYW1lKGYxLCBmZm5hbWUsIE1BWFBBVEhMLCBGQUxTRSk7CisgICAgdDEgPSBnZXR0YWlsX3NlcChmZm5hbWUpOworICAgIHQyID0gZ2V0dGFpbF9zZXAoZjIpOworICAgIHJldHVybiAodDEgLSBmZm5hbWUgPT0gdDIgLSBmMgorCSAgICAgJiYgcGF0aGNtcCgoY2hhciAqKWZmbmFtZSwgKGNoYXIgKilmMiwgKGludCkodDEgLSBmZm5hbWUpKSA9PSAwKTsKK30KKwogI2lmIGRlZmluZWQoRkVBVF9TRVNTSU9OKSB8fCBkZWZpbmVkKE1TV0lOKSB8fCBkZWZpbmVkKEZFQVRfR1VJX01BQykgXAogCXx8ICgoZGVmaW5lZChGRUFUX0dVSV9HVEspIHx8IGRlZmluZWQoRkVBVF9HVUlfS0RFKSkgXAogCQkJJiYgKCBkZWZpbmVkKEZFQVRfV0lORE9XUykgfHwgZGVmaW5lZChGRUFUX0RORCkpICkgXApAQCAtMjY1OSwxOCArMjY4NCwxMiBAQAogdmltX2NoZGlyZmlsZShmbmFtZSkKICAgICBjaGFyX3UJKmZuYW1lOwogewotICAgIGNoYXJfdQl0ZW1wX3N0cmluZ1tNQVhQQVRITF07Ci0gICAgY2hhcl91CSpwOwotICAgIGNoYXJfdQkqdDsKKyAgICBjaGFyX3UJZGlyW01BWFBBVEhMXTsKIAotICAgIFNUUkNQWSh0ZW1wX3N0cmluZywgZm5hbWUpOwotICAgIHAgPSBnZXRfcGFzdF9oZWFkKHRlbXBfc3RyaW5nKTsKLSAgICB0ID0gZ2V0dGFpbCh0ZW1wX3N0cmluZyk7Ci0gICAgd2hpbGUgKHQgPiBwICYmIHZpbV9pc3BhdGhzZXAodFstMV0pKQotCS0tdDsKLSAgICAqdCA9IE5VTDsgLyogY2hvcCBvZmYgZW5kIG9mIHN0cmluZyAqLwotCi0gICAgcmV0dXJuIG1jaF9jaGRpcigoY2hhciAqKXRlbXBfc3RyaW5nKSA9PSAwID8gT0sgOiBGQUlMOworICAgIFNUUk5DUFkoZGlyLCBmbmFtZSwgTUFYUEFUSEwpOworICAgIGRpcltNQVhQQVRITCAtIDFdID0gTlVMOworICAgICpnZXR0YWlsX3NlcChkaXIpID0gTlVMOworICAgIHJldHVybiBtY2hfY2hkaXIoKGNoYXIgKilkaXIpID09IDAgPyBPSyA6IEZBSUw7CiB9CiAjZW5kaWYKIApAQCAtNTE5NiwxNiArNTIxNSwxOCBAQAogI2lmICFkZWZpbmVkKE5PX0VYUEFORFBBVEgpIHx8IGRlZmluZWQoUFJPVE8pCiAvKgogICogQ29tcGFyZSBwYXRoICJwW10iIHRvICJxW10iLgorICogSWYgIm1heGxlbiIgPj0gMCBjb21wYXJlICJwW21heGxlbl0iIHRvICJxW21heGxlbl0iCiAgKiBSZXR1cm4gdmFsdWUgbGlrZSBzdHJjbXAocCwgcSksIGJ1dCBjb25zaWRlciBwYXRoIHNlcGFyYXRvcnMuCiAgKi8KICAgICBpbnQKLXBhdGhjbXAocCwgcSkKK3BhdGhjbXAocCwgcSwgbWF4bGVuKQogICAgIGNvbnN0IGNoYXIgKnAsICpxOworICAgIGludCBtYXhsZW47CiB7CiAgICAgaW50CQlpOwogICAgIGNvbnN0IGNoYXIJKnM7CiAKLSAgICBmb3IgKGkgPSAwOyA7ICsraSkKKyAgICBmb3IgKGkgPSAwOyBtYXhsZW4gPCAwIHx8IGkgPCBtYXhsZW47ICsraSkKICAgICB7CiAJLyogRW5kIG9mICJwIjogY2hlY2sgaWYgInEiIGFsc28gZW5kcyBvciBqdXN0IGhhcyBhIHNsYXNoLiAqLwogCWlmIChwW2ldID09IE5VTCkKQEAgLTUyNDUsMTMgKzUyNjYsMTYgQEAKICAgICB9CiAKICAgICAvKiBpZ25vcmUgYSB0cmFpbGluZyBzbGFzaCwgYnV0IG5vdCAiLy8iIG9yICI6LyIgKi8KLSAgICBpZiAoc1tpICsgMV0gPT0gTlVMICYmIGkgPiAwICYmICF2aW1faXNwYXRoc2VwKHNbaSAtIDFdKQorICAgIGlmIChpID49IG1heGxlbgorCSAgICB8fCAoc1tpICsgMV0gPT0gTlVMCisJCSYmIGkgPiAwCisJCSYmICFhZnRlcl9wYXRoc2VwKChjaGFyX3UgKilzLCAoY2hhcl91ICopcyArIGkpCiAjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCi0JICAgICYmIChzW2ldID09ICcvJyB8fCBzW2ldID09ICdcXCcpCisJCSYmIChzW2ldID09ICcvJyB8fCBzW2ldID09ICdcXCcpCiAjZWxzZQotCSAgICAmJiBzW2ldID09ICcvJworCQkmJiBzW2ldID09ICcvJwogI2VuZGlmCi0gICAgICAgKQorCSAgICAgICApKQogCXJldHVybiAwOyAgIC8qIG1hdGNoIHdpdGggdHJhaWxpbmcgc2xhc2ggKi8KICAgICBpZiAocyA9PSBxKQogCXJldHVybiAtMTsJICAgIC8qIG5vIG1hdGNoICovCmRpZmYgLS1naXQgYS9zcmMvb3BzLmMgYi9zcmMvb3BzLmMKaW5kZXggMjk4MGY5My4uZGVjNWQwNyAxMDA2NDQKLS0tIGEvc3JjL29wcy5jCisrKyBiL3NyYy9vcHMuYwpAQCAtMjQ4OCw3ICsyNDg4LDcgQEAKIAogI2lmZGVmIEZFQVRfVklTVUFMRVhUUkEKICAgICAvKgotICAgICAqIEluIFZpc3VhbCBibG9jayBtb2RlLCBoYW5kbGUgY29weWluZyB0aGUgbmV4dCB0ZXh0IHRvIGFsbCBsaW5lcyBvZiB0aGUKKyAgICAgKiBJbiBWaXN1YWwgYmxvY2sgbW9kZSwgaGFuZGxlIGNvcHlpbmcgdGhlIG5ldyB0ZXh0IHRvIGFsbCBsaW5lcyBvZiB0aGUKICAgICAgKiBibG9jay4KICAgICAgKi8KICAgICBpZiAob2FwLT5ibG9ja19tb2RlICYmIG9hcC0+c3RhcnQubG51bSAhPSBvYXAtPmVuZC5sbnVtKQpAQCAtMzk0NiwxMyArMzk0NiwxMiBAQAogI2lmZGVmIEZFQVRfTUJZVEUKIAlpZiAoaGFzX21ieXRlKQogCXsKLQkgICAgbmV4dCA9IGN1cnIgKyBjdXJyc2l6ZSAtIDE7Ci0JICAgIG5leHQgLT0gKCptYl9oZWFkX29mZikoY3VyciwgbmV4dCk7CisJICAgIG5leHQgPSBjdXJyICsgY3VycnNpemU7CisJICAgIG1iX3B0cl9iYWNrKGN1cnIsIG5leHQpOwogCSAgICBlbmRjdXJyMSA9ICgqbWJfcHRyMmNoYXIpKG5leHQpOwogCSAgICBpZiAobmV4dCA+IGN1cnIpCiAJICAgIHsKLQkJLS1uZXh0OwotCQluZXh0IC09ICgqbWJfaGVhZF9vZmYpKGN1cnIsIG5leHQpOworCQltYl9wdHJfYmFjayhjdXJyLCBuZXh0KTsKIAkJZW5kY3VycjIgPSAoKm1iX3B0cjJjaGFyKShuZXh0KTsKIAkgICAgfQogCX0KQEAgLTQ2MTQsMTIgKzQ2MTMsNyBAQAogCX0KICNlbmRpZgogCXByZXZfcHN0YXJ0ID0gcHN0YXJ0OwotI2lmZGVmIEZFQVRfTUJZVEUKLQlpZiAoaGFzX21ieXRlKQotCSAgICBwc3RhcnQgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwc3RhcnQpOwotCWVsc2UKLSNlbmRpZgotCSAgICArK3BzdGFydDsKKwltYl9wdHJfYWR2KHBzdGFydCk7CiAgICAgfQogICAgIGJkcC0+c3RhcnRfY2hhcl92Y29scyA9IGluY3I7CiAgICAgaWYgKGJkcC0+c3RhcnRfdmNvbCA8IG9hcC0+c3RhcnRfdmNvbCkJLyogbGluZSB0b28gc2hvcnQgKi8KQEAgLTQ5OTQsMTAgKzQ5ODgsMTIgQEAKIAlsZW5ndGggLT0gKGludClTVFJMRU4oYnVmMik7CiAKIAkvKgotCSAqIGFkanVzdCBudW1iZXIgb2YgemVyb3MgdG8gdGhlIG5ldyBudW1iZXIgb2YgZGlnaXRzLCBzbyB0aGUKLQkgKiB0b3RhbCBsZW5ndGggb2YgdGhlIG51bWJlciByZW1haW5zIHRoZSBzYW1lCisJICogQWRqdXN0IG51bWJlciBvZiB6ZXJvcyB0byB0aGUgbmV3IG51bWJlciBvZiBkaWdpdHMsIHNvIHRoZQorCSAqIHRvdGFsIGxlbmd0aCBvZiB0aGUgbnVtYmVyIHJlbWFpbnMgdGhlIHNhbWUuCisJICogRG9uJ3QgZG8gdGhpcyB3aGVuCisJICogdGhlIHJlc3VsdCBtYXkgbG9vayBsaWtlIGFuIG9jdGFsIG51bWJlci4KIAkgKi8KLQlpZiAoZmlyc3RkaWdpdCA9PSAnMCcpCisJaWYgKGZpcnN0ZGlnaXQgPT0gJzAnICYmICEoZG9vY3QgJiYgaGV4ID09IDApKQogCSAgICB3aGlsZSAobGVuZ3RoLS0gPiAwKQogCQkqcHRyKysgPSAnMCc7CiAJKnB0ciA9IE5VTDsKZGlmZiAtLWdpdCBhL3NyYy9vcHRpb24uYyBiL3NyYy9vcHRpb24uYwppbmRleCBkM2U0N2ViLi42YjU5NjgzIDEwMDY0NAotLS0gYS9zcmMvb3B0aW9uLmMKKysrIGIvc3JjL29wdGlvbi5jCkBAIC00NzIyLDcgKzQ3MjIsNyBAQAogICAgICAqIHNlcGFyYXRvciAoc2xhc2ggYW5kL29yIGJhY2tzbGFzaCksIHdpbGRjYXJkcyBhbmQgY2hhcmFjdGVycyB0aGF0IGFyZQogICAgICAqIG9mdGVuIGlsbGVnYWwgaW4gYSBmaWxlIG5hbWUuICovCiAgICAgZWxzZSBpZiAoKG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MgJiBQX05GTkFNRSkKLQkJCQkgICAmJiB2aW1fc3RycGJyaygqdmFycCwgIi9cXCo/W3w8PiIpICE9IE5VTEwpCisJCQkgJiYgdmltX3N0cnBicmsoKnZhcnAsIChjaGFyX3UgKikiL1xcKj9bfDw+IikgIT0gTlVMTCkKICAgICB7CiAJZXJybXNnID0gZV9pbnZhcmc7CiAgICAgfQpAQCAtNDk1MSwxMSArNDk1MSwxNSBAQAogCQkvKiBObyBjb21tYSBhbGxvd2VkIGluICdmaWxlZW5jb2RpbmcnOyBjYXRjaGVzIGNvbmZ1c2luZyBpdAogCQkgKiB3aXRoICdmaWxlZW5jb2RpbmdzJy4gKi8KIAkJZXJybXNnID0gZV9pbnZhcmc7Ci0jIGlmZGVmIEZFQVRfVElUTEUKIAkgICAgZWxzZQorCSAgICB7CisjIGlmZGVmIEZFQVRfVElUTEUKIAkJLyogTWF5IHNob3cgYSAiKyIgaW4gdGhlIHRpdGxlIG5vdy4gKi8KIAkJbmVlZF9tYWtldGl0bGUgPSBUUlVFOwogIyBlbmRpZgorCQkvKiBBZGQgJ2ZpbGVlbmNvZGluZycgdG8gdGhlIHN3YXAgZmlsZS4gKi8KKwkJbWxfc2V0ZmxhZ3MoY3VyYnVmKTsKKwkgICAgfQogCX0KIAlpZiAoZXJybXNnID09IE5VTEwpCiAJewpAQCAtNTA3NSw2ICs1MDc5LDggQEAKICNpZmRlZiBGRUFUX1RJVExFCiAJICAgIG5lZWRfbWFrZXRpdGxlID0gVFJVRTsKICNlbmRpZgorCSAgICAvKiB1cGRhdGUgZmxhZyBpbiBzd2FwIGZpbGUgKi8KKwkgICAgbWxfc2V0ZmxhZ3MoY3VyYnVmKTsKIAl9CiAgICAgfQogCkBAIC01Mjc1LDEyICs1MjgxLDcgQEAKIAl7CiAJICAgIGlmIChwdHIyY2VsbHMocykgIT0gMSkKIAkJZXJybXNnID0gKGNoYXJfdSAqKU5fKCJFNTk1OiBjb250YWlucyB1bnByaW50YWJsZSBvciB3aWRlIGNoYXJhY3RlciIpOwotIyBpZmRlZiBGRUFUX01CWVRFCi0JICAgIGlmIChoYXNfbWJ5dGUpCi0JCXMgKz0gKCptYl9wdHIybGVuX2NoZWNrKShzKTsKLQkgICAgZWxzZQotIyBlbmRpZgotCQkrK3M7CisJICAgIG1iX3B0cl9hZHYocyk7CiAJfQogICAgIH0KICNlbmRpZgpAQCAtNzMxMyw2ICs3MzE0LDE5IEBACiAgICAgcmV0dXJuIChjaGFyX3UgKilOVUxMOwogfQogCisjaWYgZGVmaW5lZChGRUFUX01CWVRFKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIGNoYXJfdSAqCitnZXRfZW5jb2RpbmdfZGVmYXVsdCgpCit7CisgICAgaW50IGk7CisKKyAgICBpID0gZmluZG9wdGlvbigoY2hhcl91ICopImVuYyIpOworICAgIGlmIChpID49IDApCisJcmV0dXJuIG9wdGlvbnNbaV0uZGVmX3ZhbFtWSV9ERUZBVUxUXTsKKyAgICByZXR1cm4gKGNoYXJfdSAqKU5VTEw7Cit9CisjZW5kaWYKKwogLyoKICAqIFRyYW5zbGF0ZSBhIHN0cmluZyBsaWtlICJ0X3h4IiwgIjx0X3h4PiIgb3IgIjxTLVRhYj4iIHRvIGEga2V5IG51bWJlci4KICAqLwpAQCAtODkwMiwyMCArODkxNiwxMyBAQAogI2lmZGVmIEJBQ0tTTEFTSF9JTl9GSUxFTkFNRQogICAgIC8qIEZvciBNUy1XaW5kb3dzIGV0IGFsLiB3ZSBkb24ndCBkb3VibGUgYmFja3NsYXNoZXMgYXQgdGhlIHN0YXJ0IGFuZAogICAgICAqIGJlZm9yZSBhIGZpbGUgbmFtZSBjaGFyYWN0ZXIuICovCi0gICAgZm9yICh2YXIgPSBidWY7ICp2YXIgIT0gTlVMOyApCi0gICAgeworICAgIGZvciAodmFyID0gYnVmOyAqdmFyICE9IE5VTDsgbWJfcHRyX2Fkdih2YXIpKQogCWlmICh2YXJbMF0gPT0gJ1xcJyAmJiB2YXJbMV0gPT0gJ1xcJwogCQkmJiBleHBhbmRfb3B0aW9uX2lkeCA+PSAwCiAJCSYmIChvcHRpb25zW2V4cGFuZF9vcHRpb25faWR4XS5mbGFncyAmIFBfRVhQQU5EKQogCQkmJiB2aW1faXNmaWxlYyh2YXJbMl0pCiAJCSYmICh2YXJbMl0gIT0gJ1xcJyB8fCAodmFyID09IGJ1ZiAmJiB2YXJbNF0gIT0gJ1xcJykpKQogCSAgICBtY2hfbWVtbW92ZSh2YXIsIHZhciArIDEsIFNUUkxFTih2YXIpKTsKLSNpZmRlZiBGRUFUX01CWVRFCi0JZWxzZSBpZiAoaGFzX21ieXRlKQotCSAgICB2YXIgKz0gKCptYl9wdHIybGVuX2NoZWNrKSh2YXIpIC0gMTsKLSNlbmRpZgotCSsrdmFyOwotICAgIH0KICNlbmRpZgogCiAgICAgKmZpbGVbMF0gPSBidWY7CkBAIC05MDI1LDEzICs5MDMyLDExIEBACiAKICAgICBmb3IgKHAgPSBwX2xhbmdtYXA7IHBbMF0gIT0gTlVMOyApCiAgICAgewotCWZvciAocDIgPSBwOyBwMlswXSAhPSBOVUwgJiYgcDJbMF0gIT0gJywnICYmIHAyWzBdICE9ICc7JzsgKytwMikKKwlmb3IgKHAyID0gcDsgcDJbMF0gIT0gTlVMICYmIHAyWzBdICE9ICcsJyAmJiBwMlswXSAhPSAnOyc7CisJCQkJCQkJICAgICAgIG1iX3B0cl9hZHYocDIpKQogCXsKIAkgICAgaWYgKHAyWzBdID09ICdcXCcgJiYgcDJbMV0gIT0gTlVMKQogCQkrK3AyOwotI2lmZGVmIEZFQVRfTUJZVEUKLQkgICAgcDIgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwMikgLSAxOwotI2VuZGlmCiAJfQogCWlmIChwMlswXSA9PSAnOycpCiAJICAgICsrcDI7CSAgICAvKiBhYmNkO0FCQ0QgZm9ybSwgcDIgcG9pbnRzIHRvIEEgKi8KQEAgLTkwNDgsMTEgKzkwNTMsNyBAQAogI2VuZGlmCiAJICAgIGlmIChwMiA9PSBOVUxMKQogCSAgICB7Ci0jaWZkZWYgRkVBVF9NQllURQotCQlwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCk7Ci0jZWxzZQotCQkrK3A7Ci0jZW5kaWYKKwkJbWJfcHRyX2FkdihwKTsKIAkJaWYgKHBbMF0gPT0gJ1xcJykKIAkJICAgICsrcDsKICNpZmRlZiBGRUFUX01CWVRFCkBAIC05MDgwLDExICs5MDgxLDcgQEAKIAkgICAgbGFuZ21hcF9tYXBjaGFyW2Zyb20gJiAyNTVdID0gdG87CiAKIAkgICAgLyogQWR2YW5jZSB0byBuZXh0IHBhaXIgKi8KLSNpZmRlZiBGRUFUX01CWVRFCi0JICAgIHAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKTsKLSNlbHNlCi0JICAgICsrcDsKLSNlbmRpZgorCSAgICBtYl9wdHJfYWR2KHApOwogCSAgICBpZiAocDIgPT0gTlVMTCkKIAkgICAgewogCQlpZiAocFswXSA9PSAnLCcpCkBAIC05MDk1LDExICs5MDkyLDcgQEAKIAkgICAgfQogCSAgICBlbHNlCiAJICAgIHsKLSNpZmRlZiBGRUFUX01CWVRFCi0JCXAyICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocDIpOwotI2Vsc2UKLQkJKytwMjsKLSNlbmRpZgorCQltYl9wdHJfYWR2KHAyKTsKIAkJaWYgKCpwID09ICc7JykKIAkJewogCQkgICAgcCA9IHAyOwpkaWZmIC0tZ2l0IGEvc3JjL29wdGlvbi5oIGIvc3JjL29wdGlvbi5oCmluZGV4IDU2NmE1NjEuLjhlZjg1MzYgMTAwNjQ0Ci0tLSBhL3NyYy9vcHRpb24uaAorKysgYi9zcmMvb3B0aW9uLmgKQEAgLTE2MSw5ICsxNjEsMTAgQEAKICNkZWZpbmUgQ1BPX0ZJTFRFUgknIScKICNkZWZpbmUgQ1BPX01BVENICSclJwogI2RlZmluZSBDUE9fU1RBUgknKicJLyogIjoqIiBtZWFucyAiOkAiICovCisjZGVmaW5lIENQT19QTFVTCScrJwkvKiAiOndyaXRlIGZpbGUiIHJlc2V0cyAnbW9kaWZpZWQnICovCiAjZGVmaW5lIENQT19TUEVDSQknPCcJLyogZG9uJ3QgcmVjb2duaXplIDw+IGluIG1hcHBpbmdzICovCiAjZGVmaW5lIENQT19ERUZBVUxUCSJhQUJjZUZzIgotI2RlZmluZSBDUE9fQUxMCQkiYUFiQmNDZERlRWZGZ2lJakprS2xMbU1ub09wclJzU3R1dndXeHkkISUqPCIKKyNkZWZpbmUgQ1BPX0FMTAkJImFBYkJjQ2REZUVmRmdpSWpKa0tsTG1Nbm9PcHJSc1N0dXZ3V3h5JCElKis8IgogCiAvKiBjaGFyYWN0ZXJzIGZvciBwX3d3IG9wdGlvbjogKi8KICNkZWZpbmUgV1dfQUxMCQkiYnNobDw+W10sfiIKZGlmZiAtLWdpdCBhL3NyYy9vc19hbWlnYS5jIGIvc3JjL29zX2FtaWdhLmMKaW5kZXggZjQ2MmNjYy4uNzcyYmRjZiAxMDA2NDQKLS0tIGEvc3JjL29zX2FtaWdhLmMKKysrIGIvc3JjL29zX2FtaWdhLmMKQEAgLTE1MDEsNyArMTUwMSw3IEBACiAgICAgY2hhciAqcyA9ICooY2hhciAqKilhOwogICAgIGNoYXIgKnQgPSAqKGNoYXIgKiopYjsKIAotICAgIHJldHVybiBwYXRoY21wKHMsIHQpOworICAgIHJldHVybiBwYXRoY21wKHMsIHQsIC0xKTsKIH0KIAogLyoKQEAgLTE1MTEsMTYgKzE1MTEsMTIgQEAKIG1jaF9oYXNfZXhwX3dpbGRjYXJkKHApCiAgICAgY2hhcl91ICpwOwogewotICAgIGZvciAoIDsgKnA7ICsrcCkKKyAgICBmb3IgKCA7ICpwOyBtYl9wdHJfYWR2KHApKQogICAgIHsKIAlpZiAoKnAgPT0gJ1xcJyAmJiBwWzFdICE9IE5VTCkKIAkgICAgKytwOwogCWVsc2UgaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKSIqP1soIyIsICpwKSAhPSBOVUxMKQogCSAgICByZXR1cm4gVFJVRTsKLSNpZmRlZiBGRUFUX01CWVRFCi0JaWYgKGhhc19tYnl0ZSkKLQkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApIC0gMTsKLSNlbmRpZgogICAgIH0KICAgICByZXR1cm4gRkFMU0U7CiB9CkBAIC0xNTI5LDcgKzE1MjUsNyBAQAogbWNoX2hhc193aWxkY2FyZChwKQogICAgIGNoYXJfdSAqcDsKIHsKLSAgICBmb3IgKCA7ICpwOyArK3ApCisgICAgZm9yICggOyAqcDsgbWJfcHRyX2FkdihwKSkKICAgICB7CiAJaWYgKCpwID09ICdcXCcgJiYgcFsxXSAhPSBOVUwpCiAJICAgICsrcDsKQEAgLTE1NDMsMTAgKzE1MzksNiBAQAogCQkJCQkJLCAqcCkgIT0gTlVMTAogCQkgICAgfHwgKCpwID09ICd+JyAmJiBwWzFdICE9IE5VTCkpCiAJCXJldHVybiBUUlVFOwotI2lmZGVmIEZFQVRfTUJZVEUKLQlpZiAoaGFzX21ieXRlKQotCSAgICBwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkgLSAxOwotI2VuZGlmCiAgICAgfQogICAgIHJldHVybiBGQUxTRTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9vc19tYWMuYyBiL3NyYy9vc19tYWMuYwppbmRleCBkMWViMDNkLi5jYzY1NmYwIDEwMDY0NAotLS0gYS9zcmMvb3NfbWFjLmMKKysrIGIvc3JjL29zX21hYy5jCkBAIC0yOTksNyArMjk5LDcgQEAKIHBzdHJjbXAoYSwgYikKICAgICBjb25zdCB2b2lkICphLCAqYjsKIHsKLSAgICByZXR1cm4gKHBhdGhjbXAoKihjaGFyICoqKWEsICooY2hhciAqKiliKSk7CisgICAgcmV0dXJuIChwYXRoY21wKCooY2hhciAqKilhLCAqKGNoYXIgKiopYiwgLTEpKTsKIH0KIAogICAgIHN0YXRpYyBpbnQKQEAgLTEwMDgsMTIgKzEwMDgsNyBAQAogICAgIHsKIAlpZiAoKnAgPT0gJy8nKQogCSAgICAqcCA9ICc6JzsKLSNpZmRlZiBGRUFUX01CWVRFCi0JaWYgKGhhc19tYnl0ZSkKLQkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApOwotCWVsc2UKLSNlbmRpZgotCSAgICArK3A7CisJbWJfcHRyX2FkdihwKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTEyMDcsMTYgKzEyMDIsMTIgQEAKIG1jaF9oYXNfZXhwX3dpbGRjYXJkKHApCiAgICAgY2hhcl91CSpwOwogewotICAgIGZvciAoIDsgKnA7ICsrcCkKKyAgICBmb3IgKCA7ICpwOyBtYl9wdHJfYWR2KHApKQogICAgIHsKIAlpZiAoKnAgPT0gJ1xcJyAmJiBwWzFdICE9IE5VTCkKIAkgICAgKytwOwogCWVsc2UgaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKVdJTERDSEFSX0xJU1QsICpwKSAhPSBOVUxMKQogCSAgICByZXR1cm4gVFJVRTsKLSNpZmRlZiBGRUFUX01CWVRFCi0JaWYgKGhhc19tYnl0ZSkKLQkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApIC0gMTsKLSNlbmRpZgogICAgIH0KICAgICByZXR1cm4gRkFMU0U7CiB9CmRpZmYgLS1naXQgYS9zcmMvb3NfbXNkb3MuYyBiL3NyYy9vc19tc2Rvcy5jCmluZGV4IDEwNTZmZTAuLjQxZDU4NzcgMTAwNjQ0Ci0tLSBhL3NyYy9vc19tc2Rvcy5jCisrKyBiL3NyYy9vc19tc2Rvcy5jCkBAIC0xNzAwLDEyICsxNzAwLDcgQEAKIAl7CiAJICAgIGlmICgqcCA9PSAnXFwnKQogCQkqcCA9ICcvJzsKLSNpZmRlZiBGRUFUX01CWVRFCi0JICAgIGlmIChoYXNfbWJ5dGUpCi0JCXAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKTsKLQkgICAgZWxzZQotI2VuZGlmCi0JCSsrcDsKKwkgICAgbWJfcHRyX2FkdihwKTsKIAl9CiAgICAgZWxzZQogI2VuZGlmCkBAIC0xNzEzLDEyICsxNzA4LDcgQEAKICAgICB7CiAJaWYgKCpwID09IHBzZXBjTikKIAkgICAgKnAgPSBwc2VwYzsKLSNpZmRlZiBGRUFUX01CWVRFCi0JaWYgKGhhc19tYnl0ZSkKLQkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApOwotCWVsc2UKLSNlbmRpZgotCSAgICArK3A7CisJbWJfcHRyX2FkdihwKTsKICAgICB9CiB9CiAKQEAgLTIwMzQsMTUgKzIwMjQsMTEgQEAKICAgICBpbnQKIG1jaF9oYXNfZXhwX3dpbGRjYXJkKGNoYXJfdSAqcCkKIHsKLSAgICBmb3IgKCA7ICpwOyArK3ApCisgICAgZm9yICggOyAqcDsgbWJfcHRyX2FkdihwKSkKICAgICB7CiAJaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKSI/KlsiLCAqcCkgIT0gTlVMTAogCQl8fCAoKnAgPT0gJ34nICYmIHBbMV0gIT0gTlVMKSkKIAkgICAgcmV0dXJuIFRSVUU7Ci0jaWZkZWYgRkVBVF9NQllURQotCWlmIChoYXNfbWJ5dGUpCi0JICAgIHAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKSAtIDE7Ci0jZW5kaWYKICAgICB9CiAgICAgcmV0dXJuIEZBTFNFOwogfQpAQCAtMjA1NCw3ICsyMDQwLDcgQEAKICAgICBpbnQKIG1jaF9oYXNfd2lsZGNhcmQoY2hhcl91ICpwKQogewotICAgIGZvciAoIDsgKnA7ICsrcCkKKyAgICBmb3IgKCA7ICpwOyBtYl9wdHJfYWR2KHApKQogICAgIHsKIAlpZiAodmltX3N0cmNocigoY2hhcl91ICopCiAjICBpZmRlZiBWSU1fQkFDS1RJQ0sKQEAgLTIwNjUsMTAgKzIwNTEsNiBAQAogCQkJCQkJLCAqcCkgIT0gTlVMTAogCQl8fCAoKnAgPT0gJ34nICYmIHBbMV0gIT0gTlVMKSkKIAkgICAgcmV0dXJuIFRSVUU7Ci0jaWZkZWYgRkVBVF9NQllURQotCWlmIChoYXNfbWJ5dGUpCi0JICAgIHAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKSAtIDE7Ci0jZW5kaWYKICAgICB9CiAgICAgcmV0dXJuIEZBTFNFOwogfQpAQCAtMjEzOCw3ICsyMTIwLDcgQEAKIAkgKiBmaWxlbmF+MS50eHQuICBJZiB3ZSByZW5hbWUgZmlsZW5hfjEudHh0IHRvIGZpbGVuYX4xLnR4dH4KIAkgKiAoaS5lLiwgd2UncmUgbWFraW5nIGEgYmFja3VwIHdoaWxlIHdyaXRpbmcgaXQpLCB0aGUgU0ZOCiAJICogZm9yIGZpbGVuYX4xLnR4dH4gd2lsbCBiZSBmaWxlbmF+MS50eHQsIGJ5IGRlZmF1bHQsIHdoaWNoCi0JICogd2lsbCBjYXVzZSBhbGwgc29ydHMgb2YgcHJvYmxlbXMgbGF0ZXIgaW4gYnVmX3dyaXRlLiAgU28sIHdlCisJICogd2lsbCBjYXVzZSBhbGwgc29ydHMgb2YgcHJvYmxlbXMgbGF0ZXIgaW4gYnVmX3dyaXRlKCkuICBTbywgd2UKIAkgKiBjcmVhdGUgYW4gZW1wdHkgZmlsZSBjYWxsZWQgZmlsZW5hfjEudHh0IGFuZCB0aGUgc3lzdGVtIHdpbGwgaGF2ZQogCSAqIHRvIGZpbmQgc29tZSBvdGhlciBTRk4gZm9yIGZpbGVuYX4xLnR4dH4sIHN1Y2ggYXMgZmlsZW5hfjIudHh0CiAJICovCmRpZmYgLS1naXQgYS9zcmMvb3NfbXN3aW4uYyBiL3NyYy9vc19tc3dpbi5jCmluZGV4IDQwOTgwM2YuLmNlYTEwNTQgMTAwNjQ0Ci0tLSBhL3NyYy9vc19tc3dpbi5jCisrKyBiL3NyYy9vc19tc3dpbi5jCkBAIC0zNjQsOSArMzY0LDkgQEAKIAogCiAvKgotICogR2V0IGFic29sdXRlIGZpbGUgbmFtZSBpbnRvIGJ1ZmZlciAnYnVmJyBvZiBsZW5ndGggJ2xlbicgYnl0ZXMsCi0gKiB0dXJuaW5nIGFsbCAnLydzIGludG8gJ1xcJ3MgYW5kIGdldHRpbmcgdGhlIGNvcnJlY3QgY2FzZSBvZiBlYWNoCi0gKiBjb21wb25lbnQgb2YgdGhlIGZpbGUgbmFtZS4gIEFwcGVuZCBhIGJhY2tzbGFzaCB0byBhIGRpcmVjdG9yeSBuYW1lLgorICogR2V0IGFic29sdXRlIGZpbGUgbmFtZSBpbnRvIGJ1ZmZlciAiYnVmIiBvZiBsZW5ndGggImxlbiIgYnl0ZXMsCisgKiB0dXJuaW5nIGFsbCAnLydzIGludG8gJ1xcJ3MgYW5kIGdldHRpbmcgdGhlIGNvcnJlY3QgY2FzZSBvZiBlYWNoIGNvbXBvbmVudAorICogb2YgdGhlIGZpbGUgbmFtZS4gIEFwcGVuZCBhIChiYWNrKXNsYXNoIHRvIGEgZGlyZWN0b3J5IG5hbWUuCiAgKiBXaGVuICdzaGVsbHNsYXNoJyBzZXQgZG8gaXQgdGhlIG90aGVyIHdheSBhcm91bmQuCiAgKiBSZXR1cm4gT0sgb3IgRkFJTC4KICAqLwpAQCAtMzg0LDE5ICszODQsNTUgQEAKIAluUmVzdWx0ID0gbWNoX2Rpcm5hbWUoYnVmLCBsZW4pOwogICAgIGVsc2UKICNlbmRpZgotCWlmIChfZnVsbHBhdGgoYnVmLCBmbmFtZSwgbGVuIC0gMSkgPT0gTlVMTCkKICAgICB7Ci0JU1RSTkNQWShidWYsIGZuYW1lLCBsZW4pOyAgIC8qIGZhaWxlZCwgdXNlIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgKi8KLQlidWZbbGVuIC0gMV0gPSBOVUw7Ci0jaWZuZGVmIFVTRV9GTkFNRV9DQVNFCi0Jc2xhc2hfYWRqdXN0KGJ1Zik7CisJaWYgKGVuY19jb2RlcGFnZSA+PSAwICYmIChpbnQpR2V0QUNQKCkgIT0gZW5jX2NvZGVwYWdlCisjIGlmZGVmIF9fQk9STEFORENfXworCQkvKiBXaWRlIGZ1bmN0aW9ucyBvZiBCb3JsYW5kIEMgNS41IGRvIG5vdCB3b3JrIG9uIFdpbmRvd3MgOTguICovCisJCSYmIGdfUGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQKKyMgZW5kaWYKKwkgICApCisJeworCSAgICBXQ0hBUgkqd25hbWU7CisJICAgIFdDSEFSCXdidWZbTUFYX1BBVEhdOworCSAgICBjaGFyX3UJKmNuYW1lID0gTlVMTDsKKworCSAgICAvKiBVc2UgdGhlIHdpZGUgZnVuY3Rpb246CisJICAgICAqIC0gY29udmVydCB0aGUgZm5hbWUgZnJvbSAnZW5jb2RpbmcnIHRvIFVDUzIuCisJICAgICAqIC0gaW52b2tlIF93ZnVsbHBhdGgoKQorCSAgICAgKiAtIGNvbnZlcnQgdGhlIHJlc3VsdCBmcm9tIFVDUzIgdG8gJ2VuY29kaW5nJy4KKwkgICAgICovCisJICAgIHduYW1lID0gZW5jX3RvX3VjczIoZm5hbWUsIE5VTEwpOworCSAgICBpZiAod25hbWUgIT0gTlVMTCAmJiBfd2Z1bGxwYXRoKHdidWYsIHduYW1lLCBNQVhfUEFUSCAtIDEpICE9IE5VTEwpCisJICAgIHsKKwkJY25hbWUgPSB1Y3MyX3RvX2VuYygoc2hvcnRfdSAqKXdidWYsIE5VTEwpOworCQlpZiAoY25hbWUgIT0gTlVMTCkKKwkJeworCQkgICAgU1RSTkNQWShidWYsIGNuYW1lLCBsZW4pOworCQkgICAgYnVmW2xlbiAtIDFdID0gTlVMOworCQkgICAgblJlc3VsdCA9IE9LOworCQl9CisJICAgIH0KKwkgICAgdmltX2ZyZWUod25hbWUpOworCSAgICB2aW1fZnJlZShjbmFtZSk7CisJfQorI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoblJlc3VsdCA9PSBGQUlMKQkgICAgLyogZmFsbCBiYWNrIHRvIG5vbi13aWRlIGZ1bmN0aW9uICovCiAjZW5kaWYKKwl7CisJICAgIGlmIChfZnVsbHBhdGgoYnVmLCBmbmFtZSwgbGVuIC0gMSkgPT0gTlVMTCkKKwkgICAgeworCQlTVFJOQ1BZKGJ1ZiwgZm5hbWUsIGxlbik7ICAgLyogZmFpbGVkLCB1c2UgcmVsYXRpdmUgcGF0aCBuYW1lICovCisJCWJ1ZltsZW4gLSAxXSA9IE5VTDsKKwkgICAgfQorCSAgICBlbHNlCisJCW5SZXN1bHQgPSBPSzsKKwl9CiAgICAgfQotICAgIGVsc2UKLQluUmVzdWx0ID0gT0s7CiAKICNpZmRlZiBVU0VfRk5BTUVfQ0FTRQogICAgIGZuYW1lX2Nhc2UoYnVmLCBsZW4pOworI2Vsc2UKKyAgICBzbGFzaF9hZGp1c3QoYnVmKTsKICNlbmRpZgogCiAgICAgcmV0dXJuIG5SZXN1bHQ7CkBAIC00MjAsNyArNDU2LDcgQEAKICAgICBpZiAobWNoX0Z1bGxOYW1lKGZuYW1lLCBzek5hbWUsIF9NQVhfUEFUSCwgRkFMU0UpID09IEZBSUwpCiAJcmV0dXJuIEZBTFNFOwogCi0gICAgcmV0dXJuIHBhdGhjbXAoZm5hbWUsIHN6TmFtZSkgPT0gMDsKKyAgICByZXR1cm4gcGF0aGNtcChmbmFtZSwgc3pOYW1lLCAtMSkgPT0gMDsKIH0KIAogLyoKQEAgLTQ0MSwxMiArNDc3LDcgQEAKIAl7CiAJICAgIGlmICgqcCA9PSBwc2VwY04pCiAJCSpwID0gcHNlcGM7Ci0jaWZkZWYgRkVBVF9NQllURQotCSAgICBpZiAoaGFzX21ieXRlKQotCQlwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCk7Ci0JICAgIGVsc2UKLSNlbmRpZgotCQkrK3A7CisJICAgIG1iX3B0cl9hZHYocCk7CiAJfQogfQogCkBAIC00NjQsMTEgKzQ5NSw3IEBACiAgICAgYnVmW19NQVhfUEFUSF0gPSBOVUw7CiAgICAgcCA9IGJ1ZiArIHN0cmxlbihidWYpOwogICAgIGlmIChwID4gYnVmKQotCS0tcDsKLSNpZmRlZiBGRUFUX01CWVRFCi0gICAgaWYgKHAgPiBidWYgJiYgaGFzX21ieXRlKQotCXAgLT0gKCptYl9oZWFkX29mZikoYnVmLCBwKTsKLSNlbmRpZgorCW1iX3B0cl9iYWNrKGJ1ZiwgcCk7CiAgICAgaWYgKHAgPiBidWYgJiYgKCpwID09ICdcXCcgfHwgKnAgPT0gJy8nKSAmJiBwWy0xXSAhPSAnOicpCiAJKnAgPSBOVUw7CiAjaWZkZWYgRkVBVF9NQllURQpAQCAtNTg4LDE1ICs2MTUsMTEgQEAKICAgICBpbnQKIG1jaF9oYXNfZXhwX3dpbGRjYXJkKGNoYXJfdSAqcCkKIHsKLSAgICBmb3IgKCA7ICpwOyArK3ApCisgICAgZm9yICggOyAqcDsgbWJfcHRyX2FkdihwKSkKICAgICB7CiAJaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKSI/KlsiLCAqcCkgIT0gTlVMTAogCQl8fCAoKnAgPT0gJ34nICYmIHBbMV0gIT0gTlVMKSkKIAkgICAgcmV0dXJuIFRSVUU7Ci0jaWZkZWYgRkVBVF9NQllURQotCWlmIChoYXNfbWJ5dGUpCi0JICAgIHAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKSAtIDE7Ci0jZW5kaWYKICAgICB9CiAgICAgcmV0dXJuIEZBTFNFOwogfQpAQCAtNjA4LDcgKzYzMSw3IEBACiAgICAgaW50CiBtY2hfaGFzX3dpbGRjYXJkKGNoYXJfdSAqcCkKIHsKLSAgICBmb3IgKCA7ICpwOyArK3ApCisgICAgZm9yICggOyAqcDsgbWJfcHRyX2FkdihwKSkKICAgICB7CiAJaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKQogIyAgaWZkZWYgVklNX0JBQ0tUSUNLCkBAIC02MTksMTAgKzY0Miw2IEBACiAJCQkJCQksICpwKSAhPSBOVUxMCiAJCXx8ICgqcCA9PSAnficgJiYgcFsxXSAhPSBOVUwpKQogCSAgICByZXR1cm4gVFJVRTsKLSNpZmRlZiBGRUFUX01CWVRFCi0JaWYgKGhhc19tYnl0ZSkKLQkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApIC0gMTsKLSNlbmRpZgogICAgIH0KICAgICByZXR1cm4gRkFMU0U7CiB9CkBAIC0yNDIwLDYgKzI0MzksNyBAQAogI2RlZmluZSBDT1BZREFUQV9FWFBSCQkxMAogI2RlZmluZSBDT1BZREFUQV9SRVNVTFQJCTExCiAjZGVmaW5lIENPUFlEQVRBX0VSUk9SX1JFU1VMVAkxMgorI2RlZmluZSBDT1BZREFUQV9FTkNPRElORwkyMAogCiAvKiBUaGlzIGlzIGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgYSBzZXJ2ZXIgSFdORCBhbmQgaXRzIG5hbWUuICovCiBzdHJ1Y3Qgc2VydmVyX2lkCkBAIC0yNDI4LDYgKzI0NDgsMjUgQEAKICAgICBjaGFyX3UgKm5hbWU7CiB9OwogCisvKiBMYXN0IHJlY2VpdmVkICdlbmNvZGluZycgdGhhdCB0aGUgY2xpZW50IHVzZXMuICovCitzdGF0aWMgY2hhcl91CSpjbGllbnRfZW5jID0gTlVMTDsKKworLyoKKyAqIFRlbGwgdGhlIG90aGVyIHNpZGUgd2hhdCBlbmNvZGluZyB3ZSBhcmUgdXNpbmcuCisgKiBFcnJvcnMgYXJlIGlnbm9yZWQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc2VydmVyU2VuZEVuYyhIV05EIHRhcmdldCkKK3sKKyAgICBDT1BZREFUQVNUUlVDVCBkYXRhOworCisgICAgZGF0YS5kd0RhdGEgPSBDT1BZREFUQV9FTkNPRElORzsKKyAgICBkYXRhLmNiRGF0YSA9IFNUUkxFTihwX2VuYykgKyAxOworICAgIGRhdGEubHBEYXRhID0gcF9lbmM7CisgICAgKHZvaWQpU2VuZE1lc3NhZ2UodGFyZ2V0LCBXTV9DT1BZREFUQSwgKFdQQVJBTSltZXNzYWdlX3dpbmRvdywKKwkJCQkJCQkgICAgIChMUEFSQU0pKCZkYXRhKSk7Cit9CisKIC8qCiAgKiBDbGVhbiB1cCBvbiBleGl0LiBUaGlzIGRlc3Ryb3lzIHRoZSBoaWRkZW4gbWVzc2FnZSB3aW5kb3cuCiAgKi8KQEAgLTI0NjMsNiArMjUwMiw5IEBACiAgICAgewogCS8qIFRoaXMgaXMgYSBtZXNzYWdlIGZyb20gYW5vdGhlciBWaW0uIFRoZSBkd0RhdGEgbWVtYmVyIG9mIHRoZQogCSAqIENPUFlEQVRBU1RSVUNUIGRldGVybWluZXMgdGhlIHR5cGUgb2YgbWVzc2FnZToKKwkgKiAgIENPUFlEQVRBX0VOQ09ESU5HOgorCSAqCVRoZSBlbmNvZGluZyB0aGF0IHRoZSBjbGllbnQgdXNlcy4gRm9sbG93aW5nIG1lc3NhZ2VzIHdpbGwKKwkgKgl1c2UgdGhpcyBlbmNvZGluZywgY29udmVydCBpZiBuZWVkZWQuCiAJICogICBDT1BZREFUQV9LRVlTOgogCSAqCUEga2V5IHNlcXVlbmNlLiBXZSBhcmUgYSBzZXJ2ZXIsIGFuZCBhIGNsaWVudCB3YW50cyB0aGVzZSBrZXlzCiAJICoJYWRkaW5nIHRvIHRoZSBpbnB1dCBxdWV1ZS4KQEAgLTI0ODUsMTYgKzI1MjcsMjYgQEAKIAljaGFyX3UJCSpyZXM7CiAJY2hhcl91CQl3aW5zdHJbMzBdOwogCWludAkJcmV0dmFsOworCWNoYXJfdQkJKnN0cjsKKwljaGFyX3UJCSp0b2ZyZWU7CiAKIAlzd2l0Y2ggKGRhdGEtPmR3RGF0YSkKIAl7CisJY2FzZSBDT1BZREFUQV9FTkNPRElORzoKKwkgICAgLyogUmVtZW1iZXIgdGhlIGVuY29kaW5nIHRoYXQgdGhlIGNsaWVudCB1c2VzLiAqLworCSAgICB2aW1fZnJlZShjbGllbnRfZW5jKTsKKwkgICAgY2xpZW50X2VuYyA9IGVuY19jYW5vbml6ZSgoY2hhcl91ICopZGF0YS0+bHBEYXRhKTsKKwkgICAgcmV0dXJuIDE7CisKIAljYXNlIENPUFlEQVRBX0tFWVM6CiAJICAgIC8qIFJlbWVtYmVyIHdobyBzZW50IHRoaXMsIGZvciA8Y2xpZW50PiAqLwogCSAgICBjbGllbnRXaW5kb3cgPSBzZW5kZXI7CiAKIAkgICAgLyogQWRkIHRoZSByZWNlaXZlZCBrZXlzIHRvIHRoZSBpbnB1dCBidWZmZXIuICBUaGUgbG9vcCB3YWl0aW5nCiAJICAgICAqIGZvciB0aGUgdXNlciB0byBkbyBzb21ldGhpbmcgc2hvdWxkIGNoZWNrIHRoZSBpbnB1dCBidWZmZXIuICovCi0JICAgIHNlcnZlcl90b19pbnB1dF9idWYoKGNoYXJfdSAqKShkYXRhLT5scERhdGEpKTsKKwkgICAgc3RyID0gc2VydmVyQ29udmVydChjbGllbnRfZW5jLCAoY2hhcl91ICopZGF0YS0+bHBEYXRhLCAmdG9mcmVlKTsKKwkgICAgc2VydmVyX3RvX2lucHV0X2J1ZihzdHIpOworCSAgICB2aW1fZnJlZSh0b2ZyZWUpOwogCiAjIGlmZGVmIEZFQVRfR1VJCiAJICAgIC8qIFdha2UgdXAgdGhlIG1haW4gR1VJIGxvb3AuICovCkBAIC0yNTA3LDcgKzI1NTksMTAgQEAKIAkgICAgLyogUmVtZW1iZXIgd2hvIHNlbnQgdGhpcywgZm9yIDxjbGllbnQ+ICovCiAJICAgIGNsaWVudFdpbmRvdyA9IHNlbmRlcjsKIAotCSAgICByZXMgPSBldmFsX2NsaWVudF9leHByX3RvX3N0cmluZyhkYXRhLT5scERhdGEpOworCSAgICBzdHIgPSBzZXJ2ZXJDb252ZXJ0KGNsaWVudF9lbmMsIChjaGFyX3UgKilkYXRhLT5scERhdGEsICZ0b2ZyZWUpOworCSAgICByZXMgPSBldmFsX2NsaWVudF9leHByX3RvX3N0cmluZyhzdHIpOworCSAgICB2aW1fZnJlZSh0b2ZyZWUpOworCiAJICAgIGlmIChyZXMgPT0gTlVMTCkKIAkgICAgewogCQlyZXMgPSB2aW1fc3Ryc2F2ZShfKGVfaW52ZXhwcm1zZykpOwpAQCAtMjUxOCw2ICsyNTczLDcgQEAKIAkgICAgcmVwbHkubHBEYXRhID0gcmVzOwogCSAgICByZXBseS5jYkRhdGEgPSBTVFJMRU4ocmVzKSArIDE7CiAKKwkgICAgc2VydmVyU2VuZEVuYyhzZW5kZXIpOwogCSAgICByZXR2YWwgPSBTZW5kTWVzc2FnZShzZW5kZXIsIFdNX0NPUFlEQVRBLCAoV1BBUkFNKW1lc3NhZ2Vfd2luZG93LAogCQkJCQkJCSAgICAoTFBBUkFNKSgmcmVwbHkpKTsKIAkgICAgdmltX2ZyZWUocmVzKTsKQEAgLTI1MjgsMTUgKzI1ODQsMjAgQEAKIAljYXNlIENPUFlEQVRBX0VSUk9SX1JFU1VMVDoKIAkgICAgaWYgKGRhdGEtPmxwRGF0YSAhPSBOVUxMKQogCSAgICB7Ci0JCXNhdmVfcmVwbHkoc2VuZGVyLCBkYXRhLT5scERhdGEsCisJCXN0ciA9IHNlcnZlckNvbnZlcnQoY2xpZW50X2VuYywgKGNoYXJfdSAqKWRhdGEtPmxwRGF0YSwKKwkJCQkJCQkJICAgICAmdG9mcmVlKTsKKwkJaWYgKHRvZnJlZSA9PSBOVUxMKQorCQkgICAgc3RyID0gdmltX3N0cnNhdmUoc3RyKTsKKwkJaWYgKHNhdmVfcmVwbHkoc2VuZGVyLCBzdHIsCiAJCQkgICAoZGF0YS0+ZHdEYXRhID09IENPUFlEQVRBX1JFUExZID8gIDAgOgogCQkJICAgKGRhdGEtPmR3RGF0YSA9PSBDT1BZREFUQV9SRVNVTFQgPyAxIDoKLQkJCQkJCQkgICAgICAyKSkpOworCQkJCQkJCSAgICAgIDIpKSkgPT0gRkFJTCkKKwkJICAgIHZpbV9mcmVlKHN0cik7CiAjaWZkZWYgRkVBVF9BVVRPQ01ECi0JCWlmIChkYXRhLT5kd0RhdGEgPT0gQ09QWURBVEFfUkVQTFkpCisJCWVsc2UgaWYgKGRhdGEtPmR3RGF0YSA9PSBDT1BZREFUQV9SRVBMWSkKIAkJewogCQkgICAgc3ByaW50ZigoY2hhciAqKXdpbnN0ciwgIjB4JXgiLCAodW5zaWduZWQpc2VuZGVyKTsKLQkJICAgIGFwcGx5X2F1dG9jbWRzKEVWRU5UX1JFTU9URVJFUExZLCB3aW5zdHIsIGRhdGEtPmxwRGF0YSwKKwkJICAgIGFwcGx5X2F1dG9jbWRzKEVWRU5UX1JFTU9URVJFUExZLCB3aW5zdHIsIHN0ciwKIAkJCQkJCQkJVFJVRSwgY3VyYnVmKTsKIAkJfQogI2VuZGlmCkBAIC0yNzYyLDYgKzI4MjMsNyBAQAogICAgIGRhdGEuY2JEYXRhID0gU1RSTEVOKHJlcGx5KSArIDE7CiAgICAgZGF0YS5scERhdGEgPSByZXBseTsKIAorICAgIHNlcnZlclNlbmRFbmModGFyZ2V0KTsKICAgICBpZiAoU2VuZE1lc3NhZ2UodGFyZ2V0LCBXTV9DT1BZREFUQSwgKFdQQVJBTSltZXNzYWdlX3dpbmRvdywKIAkJCQkJCQkgICAgIChMUEFSQU0pKCZkYXRhKSkpCiAJcmV0dXJuIDA7CkBAIC0yNzk3LDYgKzI4NTksNyBAQAogICAgIGRhdGEuY2JEYXRhID0gU1RSTEVOKGNtZCkgKyAxOwogICAgIGRhdGEubHBEYXRhID0gY21kOwogCisgICAgc2VydmVyU2VuZEVuYyh0YXJnZXQpOwogICAgIGlmIChTZW5kTWVzc2FnZSh0YXJnZXQsIFdNX0NPUFlEQVRBLCAoV1BBUkFNKW1lc3NhZ2Vfd2luZG93LAogCQkJCQkJCShMUEFSQU0pKCZkYXRhKSkgPT0gMCkKIAlyZXR1cm4gLTE7CkBAIC0yODUwLDYgKzI5MTMsOSBAQAogLyogRmxhZyB3aGljaCBpcyB1c2VkIHRvIHdhaXQgZm9yIGEgcmVwbHkgKi8KIHN0YXRpYyBpbnQgcmVwbHlfcmVjZWl2ZWQgPSAwOwogCisvKgorICogU3RvcmUgYSByZXBseS4gICJyZXBseSIgbXVzdCBiZSBhbGxvY2F0ZWQgbWVtb3J5IChvciBOVUxMKS4KKyAqLwogICAgIHN0YXRpYyBpbnQKIHNhdmVfcmVwbHkoSFdORCBzZXJ2ZXIsIGNoYXJfdSAqcmVwbHksIGludCBleHByKQogewpAQCAtMjg2MCw3ICsyOTI2LDcgQEAKIAogICAgIHJlcCA9IFJFUExZX0lURU0oUkVQTFlfQ09VTlQpOwogICAgIHJlcC0+c2VydmVyID0gc2VydmVyOwotICAgIHJlcC0+cmVwbHkgPSB2aW1fc3Ryc2F2ZShyZXBseSk7CisgICAgcmVwLT5yZXBseSA9IHJlcGx5OwogICAgIHJlcC0+ZXhwcl9yZXN1bHQgPSBleHByOwogICAgIGlmIChyZXAtPnJlcGx5ID09IE5VTEwpCiAJcmV0dXJuIEZBSUw7CmRpZmYgLS1naXQgYS9zcmMvb3NfdW5peC5jIGIvc3JjL29zX3VuaXguYwppbmRleCBlODA4ZDZlLi4wZGJjMWNiIDEwMDY0NAotLS0gYS9zcmMvb3NfdW5peC5jCisrKyBiL3NyYy9vc191bml4LmMKQEAgLTIxODksMTIgKzIxODksNyBAQAogICAgIHsKIAlpZiAoKnAgPT0gcHNlcGNOKQogCSAgICAqcCA9IHBzZXBjOwotI2lmZGVmIEZFQVRfTUJZVEUKLQlpZiAoaGFzX21ieXRlKQotCSAgICBwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCk7Ci0JZWxzZQotI2VuZGlmCi0JICAgICsrcDsKKwltYl9wdHJfYWR2KHApOwogICAgIH0KIH0KICNlbmRpZgpAQCAtNDUxMyw3ICs0NTA4LDcgQEAKIHBzdHJjbXAoYSwgYikKICAgICBjb25zdCB2b2lkICphLCAqYjsKIHsKLSAgICByZXR1cm4gKHBhdGhjbXAoKihjaGFyICoqKWEsICooY2hhciAqKiliKSk7CisgICAgcmV0dXJuIChwYXRoY21wKCooY2hhciAqKilhLCAqKGNoYXIgKiopYiwgLTEpKTsKIH0KIAogLyoKQEAgLTQ3OTQsMTAgKzQ3ODksMTAgQEAKIAkJICAgIGlmICgoKCpmaWxlKVsqbnVtX2ZpbGVdID0gYWxsb2MobGVuICsgMikpICE9IE5VTEwpCiAJCSAgICB7CiAJCQlTVFJDUFkoKCpmaWxlKVsqbnVtX2ZpbGVdLCBwKTsKLQkJCWlmICghdmltX2lzcGF0aHNlcCgoKmZpbGUpWypudW1fZmlsZV1bbGVuIC0gMV0pKQorCQkJaWYgKCFhZnRlcl9wYXRoc2VwKCgqZmlsZSlbKm51bV9maWxlXSArIGxlbikpCiAJCQl7CiAJCQkgICAgKCpmaWxlKVsqbnVtX2ZpbGVdW2xlbl0gPSBwc2VwYzsKLQkJCSAgICAoKmZpbGUpWypudW1fZmlsZV1bbGVuICsgMV0gPSAwOworCQkJICAgICgqZmlsZSlbKm51bV9maWxlXVtsZW4gKyAxXSA9IE5VTDsKIAkJCX0KIAkJICAgIH0KIAkJfQpAQCAtNTI1OSw3ICs1MjU0LDcgQEAKIG1jaF9oYXNfZXhwX3dpbGRjYXJkKHApCiAgICAgY2hhcl91ICAqcDsKIHsKLSAgICBmb3IgKCA7ICpwOyArK3ApCisgICAgZm9yICggOyAqcDsgbWJfcHRyX2FkdihwKSkKICAgICB7CiAjaWZuZGVmIE9TMgogCWlmICgqcCA9PSAnXFwnICYmIHBbMV0gIT0gTlVMKQpAQCAtNTI3OCwxMCArNTI3Myw2IEBACiAjZW5kaWYKIAkJCQkJCSwgKnApICE9IE5VTEwpCiAJICAgIHJldHVybiBUUlVFOwotI2lmZGVmIEZFQVRfTUJZVEUKLQlpZiAoaGFzX21ieXRlKQotCSAgICBwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkgLSAxOwotI2VuZGlmCiAgICAgfQogICAgIHJldHVybiBGQUxTRTsKIH0KQEAgLTUyOTQsNyArNTI4NSw3IEBACiBtY2hfaGFzX3dpbGRjYXJkKHApCiAgICAgY2hhcl91ICAqcDsKIHsKLSAgICBmb3IgKCA7ICpwOyArK3ApCisgICAgZm9yICggOyAqcDsgbWJfcHRyX2FkdihwKSkKICAgICB7CiAjaWZuZGVmIE9TMgogCWlmICgqcCA9PSAnXFwnICYmIHBbMV0gIT0gTlVMKQpAQCAtNTMxOCwxMCArNTMwOSw2IEBACiAJCQkJCQksICpwKSAhPSBOVUxMCiAJCXx8ICgqcCA9PSAnficgJiYgcFsxXSAhPSBOVUwpKQogCSAgICByZXR1cm4gVFJVRTsKLSNpZmRlZiBGRUFUX01CWVRFCi0JaWYgKGhhc19tYnl0ZSkKLQkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApIC0gMTsKLSNlbmRpZgogICAgIH0KICAgICByZXR1cm4gRkFMU0U7CiB9CmRpZmYgLS1naXQgYS9zcmMvb3Nfd2luMzIuYyBiL3NyYy9vc193aW4zMi5jCmluZGV4IDIzYTMxZjMuLjQwNTQ0YjIgMTAwNjQ0Ci0tLSBhL3NyYy9vc193aW4zMi5jCisrKyBiL3NyYy9vc193aW4zMi5jCkBAIC00MzQ1LDkgKzQzNDUsOSBAQAogICAgICAqIGZpbGVuYW1lLmFzYy50eHQgYnkgaXRzIFNGTiwgZmlsZW5hfjEudHh0LiAgSWYgd2UgcmVuYW1lIGZpbGVuYX4xLnR4dAogICAgICAqIHRvIGZpbGVuYX4xLnR4dH4gKGkuZS4sIHdlJ3JlIG1ha2luZyBhIGJhY2t1cCB3aGlsZSB3cml0aW5nIGl0KSwgdGhlCiAgICAgICogU0ZOIGZvciBmaWxlbmF+MS50eHR+IHdpbGwgYmUgZmlsZW5hfjEudHh0LCBieSBkZWZhdWx0LCB3aGljaCB3aWxsCi0gICAgICogY2F1c2UgYWxsIHNvcnRzIG9mIHByb2JsZW1zIGxhdGVyIGluIGJ1Zl93cml0ZS4gIFNvLCB3ZSBjcmVhdGUgYW4gZW1wdHkKLSAgICAgKiBmaWxlIGNhbGxlZCBmaWxlbmF+MS50eHQgYW5kIHRoZSBzeXN0ZW0gd2lsbCBoYXZlIHRvIGZpbmQgc29tZSBvdGhlcgotICAgICAqIFNGTiBmb3IgZmlsZW5hfjEudHh0fiwgc3VjaCBhcyBmaWxlbmF+Mi50eHQKKyAgICAgKiBjYXVzZSBhbGwgc29ydHMgb2YgcHJvYmxlbXMgbGF0ZXIgaW4gYnVmX3dyaXRlKCkuICBTbywgd2UgY3JlYXRlIGFuCisgICAgICogZW1wdHkgZmlsZSBjYWxsZWQgZmlsZW5hfjEudHh0IGFuZCB0aGUgc3lzdGVtIHdpbGwgaGF2ZSB0byBmaW5kIHNvbWUKKyAgICAgKiBvdGhlciBTRk4gZm9yIGZpbGVuYX4xLnR4dH4sIHN1Y2ggYXMgZmlsZW5hfjIudHh0CiAgICAgICovCiAgICAgaWYgKChoZiA9IENyZWF0ZUZpbGUocHN6T2xkRmlsZSwgR0VORVJJQ19XUklURSwgMCwgTlVMTCwgQ1JFQVRFX05FVywKIAkJICAgIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgTlVMTCkpID09IElOVkFMSURfSEFORExFX1ZBTFVFKQpAQCAtNDUzOCwxNSArNDUzOCwxMiBAQAogICAgIGludAogbWNoX29wZW4oY2hhciAqbmFtZSwgaW50IGZsYWdzLCBpbnQgbW9kZSkKIHsKKyAgICAvKiBfd29wZW4oKSBkb2VzIG5vdCB3b3JrIHdpdGggQm9ybGFuZCBDIDUuNTogY3JlYXRlcyBhIHJlYWQtb25seSBmaWxlLiAqLworIyBpZm5kZWYgX19CT1JMQU5EQ19fCiAgICAgV0NIQVIJKnduOwogICAgIGludAkJZjsKIAotICAgIGlmIChlbmNfY29kZXBhZ2UgPj0gMCAmJiAoaW50KUdldEFDUCgpICE9IGVuY19jb2RlcGFnZQotIyBpZmRlZiBfX0JPUkxBTkRDX18KLQkgICAgLyogV2lkZSBmdW5jdGlvbnMgb2YgQm9ybGFuZCBDIDUuNSBkbyBub3Qgd29yayBvbiBXaW5kb3dzIDk4LiAqLwotCSAgICAmJiBnX1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX05UCi0jIGVuZGlmCi0gICAgICAgKQorICAgIGlmIChlbmNfY29kZXBhZ2UgPj0gMCAmJiAoaW50KUdldEFDUCgpICE9IGVuY19jb2RlcGFnZSkKICAgICB7CiAJd24gPSBlbmNfdG9fdWNzMihuYW1lLCBOVUxMKTsKIAlpZiAod24gIT0gTlVMTCkKQEAgLTQ1NjAsNiArNDU1Nyw3IEBACiAJICAgICAqIHRoZSBfd29wZW4oKSBmYWlscyBmb3IgbWlzc2luZyB3aWRlIGZ1bmN0aW9ucy4gKi8KIAl9CiAgICAgfQorIyBlbmRpZgogCiAgICAgcmV0dXJuIG9wZW4obmFtZSwgZmxhZ3MsIG1vZGUpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL2V4X2NtZHMyLnBybyBiL3NyYy9wcm90by9leF9jbWRzMi5wcm8KaW5kZXggYWRmMmQ4Zi4uYzY2YzcwMiAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL2V4X2NtZHMyLnBybworKysgYi9zcmMvcHJvdG8vZXhfY21kczIucHJvCkBAIC0xOCw3ICsxOCw2IEBACiBpbnQgY2hlY2tfY2hhbmdlZF9hbnkgX19BUkdTKChpbnQgaGlkZGVuKSk7CiBpbnQgY2hlY2tfZm5hbWUgX19BUkdTKCh2b2lkKSk7CiBpbnQgYnVmX3dyaXRlX2FsbCBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCBmb3JjZWl0KSk7Ci1jaGFyX3UgKmRvX29uZV9hcmcgX19BUkdTKChjaGFyX3UgKnN0cikpOwogdm9pZCBzZXRfYXJnbGlzdCBfX0FSR1MoKGNoYXJfdSAqc3RyKSk7CiB2b2lkIGNoZWNrX2FyZ19pZHggX19BUkdTKCh3aW5fVCAqd2luKSk7CiB2b2lkIGV4X2FyZ3MgX19BUkdTKChleGFyZ19UICplYXApKTsKZGlmZiAtLWdpdCBhL3NyYy9wcm90by9tYWluLnBybyBiL3NyYy9wcm90by9tYWluLnBybwppbmRleCA3ZTk2NWZiLi5iZDc1MTc0IDEwMDY0NAotLS0gYS9zcmMvcHJvdG8vbWFpbi5wcm8KKysrIGIvc3JjL3Byb3RvL21haW4ucHJvCkBAIC05LDYgKzksNyBAQAogdm9pZCB0aW1lX21zZyBfX0FSR1MoKGNoYXIgKm1zZywgdm9pZCAqdHZfc3RhcnQpKTsKIHZvaWQgc2VydmVyX3RvX2lucHV0X2J1ZiBfX0FSR1MoKGNoYXJfdSAqc3RyKSk7CiBjaGFyX3UgKmV2YWxfY2xpZW50X2V4cHJfdG9fc3RyaW5nIF9fQVJHUygoY2hhcl91ICpleHByKSk7CitjaGFyX3UgKnNlcnZlckNvbnZlcnQgX19BUkdTKChjaGFyX3UgKmNsaWVudF9lbmMsIGNoYXJfdSAqZGF0YSwgY2hhcl91ICoqdG9mcmVlKSk7CiBpbnQgdG9GX1R5QSBfX0FSR1MoKGludCBjKSk7CiBpbnQgZmttYXAgX19BUkdTKChpbnQgYykpOwogdm9pZCBjb252X3RvX3B2aW0gX19BUkdTKCh2b2lkKSk7CmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vbWVtbGluZS5wcm8gYi9zcmMvcHJvdG8vbWVtbGluZS5wcm8KaW5kZXggMzZkMTA4Ni4uNGUwMzgyYSAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL21lbWxpbmUucHJvCisrKyBiL3NyYy9wcm90by9tZW1saW5lLnBybwpAQCAtMjUsNyArMjUsNyBAQAogbGluZW5yX1QgbWxfZmlyc3RtYXJrZWQgX19BUkdTKCh2b2lkKSk7CiB2b2lkIG1sX2NsZWFybWFya2VkIF9fQVJHUygodm9pZCkpOwogY2hhcl91ICpnZXRfZmlsZV9pbl9kaXIgX19BUkdTKChjaGFyX3UgKmZuYW1lLCBjaGFyX3UgKmRuYW1lKSk7Ci12b2lkIG1sX3NldGRpcnR5IF9fQVJHUygoYnVmX1QgKmJ1ZiwgaW50IGZsYWcpKTsKK3ZvaWQgbWxfc2V0ZmxhZ3MgX19BUkdTKChidWZfVCAqYnVmKSk7CiBsb25nIG1sX2ZpbmRfbGluZV9vcl9vZmZzZXQgX19BUkdTKChidWZfVCAqYnVmLCBsaW5lbnJfVCBsaW5lLCBsb25nICpvZmZwKSk7CiB2b2lkIGdvdG9fYnl0ZSBfX0FSR1MoKGxvbmcgY250KSk7CiAvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9taXNjMS5wcm8gYi9zcmMvcHJvdG8vbWlzYzEucHJvCmluZGV4IGZlYjk2OGEuLjYxYjk3NWYgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90by9taXNjMS5wcm8KKysrIGIvc3JjL3Byb3RvL21pc2MxLnBybwpAQCAtNTUsNiArNTUsNyBAQAogY2hhcl91ICpob21lX3JlcGxhY2Vfc2F2ZSBfX0FSR1MoKGJ1Zl9UICpidWYsIGNoYXJfdSAqc3JjKSk7CiBpbnQgZnVsbHBhdGhjbXAgX19BUkdTKChjaGFyX3UgKnMxLCBjaGFyX3UgKnMyLCBpbnQgY2hlY2tuYW1lKSk7CiBjaGFyX3UgKmdldHRhaWwgX19BUkdTKChjaGFyX3UgKmZuYW1lKSk7CitjaGFyX3UgKmdldHRhaWxfc2VwIF9fQVJHUygoY2hhcl91ICpmbmFtZSkpOwogY2hhcl91ICpnZXRuZXh0Y29tcCBfX0FSR1MoKGNoYXJfdSAqZm5hbWUpKTsKIGNoYXJfdSAqZ2V0X3Bhc3RfaGVhZCBfX0FSR1MoKGNoYXJfdSAqcGF0aCkpOwogaW50IHZpbV9pc3BhdGhzZXAgX19BUkdTKChpbnQgYykpOwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL21pc2MyLnBybyBiL3NyYy9wcm90by9taXNjMi5wcm8KaW5kZXggNjQxOTc0MC4uZWIwNDJmMCAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL21pc2MyLnBybworKysgYi9zcmMvcHJvdG8vbWlzYzIucHJvCkBAIC02Niw2ICs2Niw4IEBACiBpbnQgZGVmYXVsdF9maWxlZm9ybWF0IF9fQVJHUygodm9pZCkpOwogaW50IGNhbGxfc2hlbGwgX19BUkdTKChjaGFyX3UgKmNtZCwgaW50IG9wdCkpOwogaW50IGdldF9yZWFsX3N0YXRlIF9fQVJHUygodm9pZCkpOworaW50IGFmdGVyX3BhdGhzZXAgX19BUkdTKChjaGFyX3UgKmIsIGNoYXJfdSAqcCkpOworaW50IHNhbWVfZGlyZWN0b3J5IF9fQVJHUygoY2hhcl91ICpmMSwgY2hhcl91ICpmMikpOwogaW50IHZpbV9jaGRpcmZpbGUgX19BUkdTKChjaGFyX3UgKmZuYW1lKSk7CiBpbnQgaWxsZWdhbF9zbGFzaCBfX0FSR1MoKGNoYXIgKm5hbWUpKTsKIGNoYXJfdSAqcGFyc2Vfc2hhcGVfb3B0IF9fQVJHUygoaW50IHdoYXQpKTsKQEAgLTg2LDcgKzg4LDcgQEAKIGludCB2aW1fY2hkaXIgX19BUkdTKChjaGFyX3UgKm5ld19kaXIpKTsKIGludCBnZXRfdXNlcl9uYW1lIF9fQVJHUygoY2hhcl91ICpidWYsIGludCBsZW4pKTsKIHZvaWQgc29ydF9zdHJpbmdzIF9fQVJHUygoY2hhcl91ICoqZmlsZXMsIGludCBjb3VudCkpOwotaW50IHBhdGhjbXAgX19BUkdTKChjb25zdCBjaGFyICpwLCBjb25zdCBjaGFyICpxKSk7CitpbnQgcGF0aGNtcCBfX0FSR1MoKGNvbnN0IGNoYXIgKnAsIGNvbnN0IGNoYXIgKnEsIGludCBtYXhsZW4pKTsKIGNoYXJfdSAqcGFyc2VfbGlzdF9vcHRpb25zIF9fQVJHUygoY2hhcl91ICpvcHRpb25fc3RyLCBvcHRpb25fdGFibGVfVCAqdGFibGUsIGludCB0YWJsZV9zaXplKSk7CiB2b2lkIG1zZ19zdHIgX19BUkdTKChjaGFyX3UgKnMsIGNoYXJfdSAqYXJnKSk7CiAvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9vcHRpb24ucHJvIGIvc3JjL3Byb3RvL29wdGlvbi5wcm8KaW5kZXggYzBhNTY3Yi4uYzBjNTUwNCAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL29wdGlvbi5wcm8KKysrIGIvc3JjL3Byb3RvL29wdGlvbi5wcm8KQEAgLTIyLDYgKzIyLDcgQEAKIHZvaWQgc2V0X29wdGlvbl92YWx1ZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgbG9uZyBudW1iZXIsIGNoYXJfdSAqc3RyaW5nLCBpbnQgb3B0X2ZsYWdzKSk7CiBjaGFyX3UgKmdldF90ZXJtX2NvZGUgX19BUkdTKChjaGFyX3UgKnRuYW1lKSk7CiBjaGFyX3UgKmdldF9oaWdobGlnaHRfZGVmYXVsdCBfX0FSR1MoKHZvaWQpKTsKK2NoYXJfdSAqZ2V0X2VuY29kaW5nX2RlZmF1bHQgX19BUkdTKCh2b2lkKSk7CiBpbnQgbWFrZXNldCBfX0FSR1MoKEZJTEUgKmZkLCBpbnQgb3B0X2ZsYWdzLCBpbnQgbG9jYWxfb25seSkpOwogaW50IG1ha2Vmb2xkc2V0IF9fQVJHUygoRklMRSAqZmQpKTsKIHZvaWQgY2xlYXJfdGVybW9wdGlvbnMgX19BUkdTKCh2b2lkKSk7CmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vb3NfbXN3aW4ucHJvIGIvc3JjL3Byb3RvL29zX21zd2luLnBybwppbmRleCBjOWU0OTVkLi5kZTk2YTA0IDEwMDY0NAotLS0gYS9zcmMvcHJvdG8vb3NfbXN3aW4ucHJvCisrKyBiL3NyYy9wcm90by9vc19tc3dpbi5wcm8KQEAgLTU4LDUgKzU4LDUgQEAKIGNoYXJfdSAqc2VydmVyR2V0UmVwbHkgX19BUkdTKChIV05EIHNlcnZlciwgaW50ICpleHByX3JlcywgaW50IHJlbW92ZSwgaW50IHdhaXQpKTsKIHZvaWQgc2VydmVyUHJvY2Vzc1BlbmRpbmdNZXNzYWdlcyBfX0FSR1MoKHZvaWQpKTsKIGNoYXIgKmNoYXJzZXRfaWQybmFtZSBfX0FSR1MoKGludCBpZCkpOwotaW50IGdldF9sb2dmb250IF9fQVJHUygoTE9HRk9OVCAqbGYsIGNoYXJfdSAqbmFtZSwgSERDIHByaW50ZXJfZGMpKTsKK2ludCBnZXRfbG9nZm9udCBfX0FSR1MoKExPR0ZPTlQgKmxmLCBjaGFyX3UgKm5hbWUsIEhEQyBwcmludGVyX2RjLCBpbnQgdmVyYm9zZSkpOwogLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcmVnZXhwLmMgYi9zcmMvcmVnZXhwLmMKaW5kZXggMjNlMzFhZi4uMmU4Mjg1NCAxMDA2NDQKLS0tIGEvc3JjL3JlZ2V4cC5jCisrKyBiL3NyYy9yZWdleHAuYwpAQCAtNDk3LDE0ICs0OTcsNyBAQAogCSAgICB7CiAJCSsrcDsKIAkJaWYgKCpwICE9ICddJyAmJiAqcCAhPSBOVUwpCi0JCXsKLSNpZmRlZiBGRUFUX01CWVRFCi0JCSAgICBpZiAoaGFzX21ieXRlKQotCQkJcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApOwotCQkgICAgZWxzZQotI2VuZGlmCi0JCQkrK3A7Ci0JCX0KKwkJICAgIG1iX3B0cl9hZHYocCk7CiAJICAgIH0KIAllbHNlIGlmICgqcCA9PSAnXFwnCiAJCSYmICh2aW1fc3RyY2hyKFJFR0VYUF9JTlJBTkdFLCBwWzFdKSAhPSBOVUxMCkBAIC03NTUsNyArNzQ4LDcgQEAKICAgICBlbHNlCiAJbXltYWdpYyA9IE1BR0lDX09GRjsKIAotICAgIGZvciAoOyBwWzBdICE9IE5VTDsgKytwKQorICAgIGZvciAoOyBwWzBdICE9IE5VTDsgbWJfcHRyX2FkdihwKSkKICAgICB7CiAJaWYgKHBbMF0gPT0gZGlyYykJLyogZm91bmQgZW5kIG9mIHJlZ2V4cCAqLwogCSAgICBicmVhazsKQEAgLTc4OSwxMCArNzgyLDYgQEAKIAkgICAgZWxzZSBpZiAoKnAgPT0gJ1YnKQogCQlteW1hZ2ljID0gTUFHSUNfTk9ORTsKIAl9Ci0jaWZkZWYgRkVBVF9NQllURQotCWVsc2UgaWYgKGhhc19tYnl0ZSkKLQkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApIC0gMTsKLSNlbmRpZgogICAgIH0KICAgICByZXR1cm4gcDsKIH0KQEAgLTI5MzUsNyArMjkyNCw4IEBACiAgICAgcmV0dXJuICh2aW1fcmVnZXhlY19ib3RoKGxpbmUsIGNvbCkgIT0gMCk7CiB9CiAKLSNpZiBkZWZpbmVkKEZFQVRfTU9ESUZZX0ZOQU1FKSB8fCBkZWZpbmVkKEZFQVRfRVZBTCkgfHwgZGVmaW5lZChQUk9UTykKKyNpZiBkZWZpbmVkKEZFQVRfTU9ESUZZX0ZOQU1FKSB8fCBkZWZpbmVkKEZFQVRfRVZBTCkgXAorCXx8IGRlZmluZWQoRklORF9SRVBMQUNFX0RJQUxPRykgfHwgZGVmaW5lZChQUk9UTykKIC8qCiAgKiBMaWtlIHZpbV9yZWdleGVjKCksIGJ1dCBjb25zaWRlciBhICJcbiIgaW4gImxpbmUiIHRvIGJlIGEgbGluZSBicmVhay4KICAqLwpAQCAtMzEwNSwxMiArMzA5NSw3IEBACiAJewogCSAgICBpZiAoY3N0cm5jbXAocywgcHJvZy0+cmVnbXVzdCwgJnByb2ctPnJlZ21sZW4pID09IDApCiAJCWJyZWFrOwkJLyogRm91bmQgaXQuICovCi0jaWZkZWYgRkVBVF9NQllURQotCSAgICBpZiAoaGFzX21ieXRlKQotCQlzICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocyk7Ci0JICAgIGVsc2UKLSNlbmRpZgotCQkrK3M7CisJICAgIG1iX3B0cl9hZHYocyk7CiAJfQogCWlmIChzID09IE5VTEwpCQkvKiBOb3QgcHJlc2VudC4gKi8KIAkgICAgZ290byB0aGVlbmQ7CkBAIC0zMzM4LDIxICszMzIzLDggQEAKIH0KIAogI2lmZGVmIEZFQVRfTUJZVEUKLS8qIG11bHRpLWJ5dGU6IGFkdmFuY2UgcmVnaW5wdXQgd2l0aCBhIGZ1bmN0aW9uICovCi0jIGRlZmluZSBBRFZBTkNFX1JFR0lOUFVUKCkgYWR2YW5jZV9yZWdpbnB1dCgpCi0KLXN0YXRpYyB2b2lkIGFkdmFuY2VfcmVnaW5wdXQgX19BUkdTKCh2b2lkKSk7CiBzdGF0aWMgaW50IHJlZ19wcmV2X2NsYXNzIF9fQVJHUygodm9pZCkpOwogCi0gICAgc3RhdGljIHZvaWQKLWFkdmFuY2VfcmVnaW5wdXQoKQotewotICAgIGlmIChoYXNfbWJ5dGUpCi0JcmVnaW5wdXQgKz0gKCptYl9wdHIybGVuX2NoZWNrKShyZWdpbnB1dCk7Ci0gICAgZWxzZQotCSsrcmVnaW5wdXQ7Ci19Ci0KIC8qCiAgKiBHZXQgY2xhc3Mgb2YgcHJldmlvdXMgY2hhcmFjdGVyLgogICovCkBAIC0zMzY1LDEwICszMzM3LDggQEAKICAgICByZXR1cm4gLTE7CiB9CiAKLSNlbHNlCi0vKiBObyBtdWx0aS1ieXRlOiBJdCdzIHRvbyBzaW1wbGUgdG8gbWFrZSBhIGZ1bmN0aW9uIGZvci4gKi8KLSMgZGVmaW5lIEFEVkFOQ0VfUkVHSU5QVVQoKSArK3JlZ2lucHV0CiAjZW5kaWYKKyNkZWZpbmUgQURWQU5DRV9SRUdJTlBVVCgpIG1iX3B0cl9hZHYocmVnaW5wdXQpCiAKIC8qCiAgKiBUaGUgYXJndW1lbnRzIGZyb20gQlJBQ0VfTElNSVRTIGFyZSBzdG9yZWQgaGVyZS4gIFRoZXkgYXJlIGFjdHVhbGx5IGxvY2FsCkBAIC00MjcwLDEzICs0MjQwLDcgQEAKIAkJCQlyZXR1cm4gRkFMU0U7CiAJCQl9CiAJCQllbHNlCi0JCQl7Ci0JCQkgICAgLS1yZWdpbnB1dDsKLSNpZmRlZiBGRUFUX01CWVRFCi0JCQkgICAgaWYgKGhhc19tYnl0ZSkKLQkJCQlyZWdpbnB1dCAtPSAoKm1iX2hlYWRfb2ZmKShyZWdsaW5lLCByZWdpbnB1dCk7Ci0jZW5kaWYKLQkJCX0KKwkJCSAgICBtYl9wdHJfYmFjayhyZWdsaW5lLCByZWdpbnB1dCk7CiAJCSAgICB9CiAJCX0KIAkJZWxzZQpAQCAtNDQ2NiwxMiArNDQzMCw2IEBACiAgICAgcmV0dXJuIEZBTFNFOwogfQogCi0jaWZkZWYgRkVBVF9NQllURQotIyBkZWZpbmUgQURWQU5DRV9QKHgpIGlmIChoYXNfbWJ5dGUpIHggKz0gKCptYl9wdHIybGVuX2NoZWNrKSh4KTsgZWxzZSArK3gKLSNlbHNlCi0jIGRlZmluZSBBRFZBTkNFX1AoeCkgKyt4Ci0jZW5kaWYKLQogLyoKICAqIHJlZ3JlcGVhdCAtIHJlcGVhdGVkbHkgbWF0Y2ggc29tZXRoaW5nIHNpbXBsZSwgcmV0dXJuIGhvdyBtYW55LgogICogQWR2YW5jZXMgcmVnaW5wdXQgKGFuZCByZWdsbnVtKSB0byBqdXN0IGFmdGVyIHRoZSBtYXRjaGVkIGNoYXJzLgpAQCAtNDUwMCw3ICs0NDU4LDcgQEAKIAkgICAgd2hpbGUgKCpzY2FuICE9IE5VTCAmJiBjb3VudCA8IG1heGNvdW50KQogCSAgICB7CiAJCSsrY291bnQ7Ci0JCUFEVkFOQ0VfUChzY2FuKTsKKwkJbWJfcHRyX2FkdihzY2FuKTsKIAkgICAgfQogCSAgICBpZiAoIVdJVEhfTkwoT1AocCkpIHx8IHJlZ2xudW0gPT0gcmVnX21heGxpbmUgfHwgY291bnQgPT0gbWF4Y291bnQpCiAJCWJyZWFrOwpAQCAtNDUyMiw3ICs0NDgwLDcgQEAKIAl7CiAJICAgIGlmICh2aW1faXNJRGMoKnNjYW4pICYmICh0ZXN0dmFsIHx8ICFWSU1fSVNESUdJVCgqc2NhbikpKQogCSAgICB7Ci0JCUFEVkFOQ0VfUChzY2FuKTsKKwkJbWJfcHRyX2FkdihzY2FuKTsKIAkgICAgfQogCSAgICBlbHNlIGlmICgqc2NhbiA9PSBOVUwpCiAJICAgIHsKQEAgLTQ1NTEsNyArNDUwOSw3IEBACiAJewogCSAgICBpZiAodmltX2lzd29yZHAoc2NhbikgJiYgKHRlc3R2YWwgfHwgIVZJTV9JU0RJR0lUKCpzY2FuKSkpCiAJICAgIHsKLQkJQURWQU5DRV9QKHNjYW4pOworCQltYl9wdHJfYWR2KHNjYW4pOwogCSAgICB9CiAJICAgIGVsc2UgaWYgKCpzY2FuID09IE5VTCkKIAkgICAgewpAQCAtNDU4MCw3ICs0NTM4LDcgQEAKIAl7CiAJICAgIGlmICh2aW1faXNmaWxlYygqc2NhbikgJiYgKHRlc3R2YWwgfHwgIVZJTV9JU0RJR0lUKCpzY2FuKSkpCiAJICAgIHsKLQkJQURWQU5DRV9QKHNjYW4pOworCQltYl9wdHJfYWR2KHNjYW4pOwogCSAgICB9CiAJICAgIGVsc2UgaWYgKCpzY2FuID09IE5VTCkKIAkgICAgewpAQCAtNDYxOCw3ICs0NTc2LDcgQEAKIAkgICAgfQogCSAgICBlbHNlIGlmIChwdHIyY2VsbHMoc2NhbikgPT0gMSAmJiAodGVzdHZhbCB8fCAhVklNX0lTRElHSVQoKnNjYW4pKSkKIAkgICAgewotCQlBRFZBTkNFX1Aoc2Nhbik7CisJCW1iX3B0cl9hZHYoc2Nhbik7CiAJICAgIH0KIAkgICAgZWxzZSBpZiAocmVnX2xpbmVfbGJyICYmICpzY2FuID09ICdcbicgJiYgV0lUSF9OTChPUChwKSkpCiAJCSsrc2NhbjsKQEAgLTU5NzUsNyArNTkzMyw3IEBACiAJICAgIGV2YWxfcmVzdWx0ID0gZXZhbF90b19zdHJpbmcoc291cmNlICsgMiwgTlVMTCk7CiAJICAgIGlmIChldmFsX3Jlc3VsdCAhPSBOVUxMKQogCSAgICB7Ci0JCWZvciAocyA9IGV2YWxfcmVzdWx0OyAqcyAhPSBOVUw7ICsrcykKKwkJZm9yIChzID0gZXZhbF9yZXN1bHQ7ICpzICE9IE5VTDsgbWJfcHRyX2FkdihzKSkKIAkJewogCQkgICAgLyogQ2hhbmdlIE5MIHRvIENSLCBzbyB0aGF0IGl0IGJlY29tZXMgYSBsaW5lIGJyZWFrLgogCQkgICAgICogU2tpcCBvdmVyIGEgYmFja3NsYXNoZWQgY2hhcmFjdGVyLiAqLwpAQCAtNTk4MywxMCArNTk0MSw2IEBACiAJCQkqcyA9IENBUjsKIAkJICAgIGVsc2UgaWYgKCpzID09ICdcXCcgJiYgc1sxXSAhPSBOVUwpCiAJCQkrK3M7Ci0jaWZkZWYgRkVBVF9NQllURQotCQkgICAgaWYgKGhhc19tYnl0ZSkKLQkJCXMgKz0gKCptYl9wdHIybGVuX2NoZWNrKShzKSAtIDE7Ci0jZW5kaWYKIAkJfQogCiAJCWRzdCArPSBTVFJMRU4oZXZhbF9yZXN1bHQpOwpkaWZmIC0tZ2l0IGEvc3JjL3NjcmVlbi5jIGIvc3JjL3NjcmVlbi5jCmluZGV4IDg4YjE3ZDQuLmFiZDliZTcgMTAwNjQ0Ci0tLSBhL3NyYy9zY3JlZW4uYworKysgYi9zcmMvc2NyZWVuLmMKQEAgLTI3NzksMTEgKzI3NzksOCBAQAogCSAgICB2Y29sICs9IGM7CiAjaWZkZWYgRkVBVF9NQllURQogCSAgICBwcmV2X3B0ciA9IHB0cjsKLQkgICAgaWYgKGhhc19tYnl0ZSkKLQkJcHRyICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocHRyKTsKLQkgICAgZWxzZQogI2VuZGlmCi0JCSsrcHRyOworCSAgICBtYl9wdHJfYWR2KHB0cik7CiAJfQogCiAjaWZkZWYgRkVBVF9WSVJUVUFMRURJVApAQCAtMzY0MCw3ICszNjM3LDkgQEAKIAkJCSYmICgod3AtPndfcF9saXN0ICYmIGxjc19lb2wgPiAwKQogCQkJICAgIHx8ICgoZnJvbWNvbCA+PSAwIHx8IGZyb21jb2xfcHJldiA+PSAwKQogCQkJCSYmIHRvY29sID4gdmNvbAorI2lmZGVmIEZFQVRfVklTVUFMCiAJCQkJJiYgVklzdWFsX21vZGUgIT0gQ3RybF9WCisjZW5kaWYKIAkJCQkmJiAoCiAjIGlmZGVmIEZFQVRfUklHSFRMRUZUCiAJCQkJICAgIHdwLT53X3BfcmwgPyAoY29sID49IDApIDoKQEAgLTQ3NzIsMTYgKzQ3NzEsOCBAQAogI2VuZGlmCiAJCSkKIAkgICAgKytzOwotI2lmZGVmIEZFQVRfTUJZVEUKLQlpZiAoaGFzX21ieXRlKQotCXsKLQkgICAgbGVuICs9IHB0cjJjZWxscyhzKTsKLQkgICAgcyArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHMpOwotCX0KLQllbHNlCi0jZW5kaWYKLQkgICAgbGVuICs9IHB0cjJjZWxscyhzKyspOwotCisJbGVuICs9IHB0cjJjZWxscyhzKyspOworCW1iX3B0cl9hZHYocyk7CiAgICAgfQogCiAgICAgcmV0dXJuIGxlbjsKQEAgLTQ4MjcsNyArNDgxOCwxMiBAQAogICAgIGlmIChtYXRjaGVzID09IE5VTEwpCS8qIGludGVycnVwdGVkIGNvbXBsZXRpb24/ICovCiAJcmV0dXJuOwogCi0gICAgYnVmID0gYWxsb2MoKHVuc2lnbmVkKUNvbHVtbnMgKyAxKTsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGhhc19tYnl0ZSkKKwlidWYgPSBhbGxvYygodW5zaWduZWQpQ29sdW1ucyAqIE1CX01BWEJZVEVTICsgMSk7CisgICAgZWxzZQorI2VuZGlmCisJYnVmID0gYWxsb2MoKHVuc2lnbmVkKUNvbHVtbnMgKyAxKTsKICAgICBpZiAoYnVmID09IE5VTEwpCiAJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9zcmMvdGFnLmMgYi9zcmMvdGFnLmMKaW5kZXggYjgzZWFmNC4uNDQyNzE3ZiAxMDA2NDQKLS0tIGEvc3JjL3RhZy5jCisrKyBiL3NyYy90YWcuYwpAQCAtMzI1OCw3ICszMjU4LDcgQEAKIAkJdGFpbCA9IHAgKyAxOwogCQlpZiAocFsxXSAhPSBOVUwpCiAJCSAgICB3aGlsZSAodmltX2lzcGF0aHNlcCgqdGFpbCkpCi0JCQkrK3RhaWw7CisJCQltYl9wdHJfYWR2KHRhaWwpOwogCQllbHNlIGlmIChwID4gc3RhcnQpCiAJCSAgICAtLXA7CQkvKiBzdHJpcCBwcmVjZWRpbmcgcGF0aCBzZXBhcmF0b3IgKi8KIAkJbW92ZXRhaWwocCwgdGFpbCk7CkBAIC0zMjcwLDcgKzMyNzAsNyBAQAogCSAgICAvKiBTa2lwIHRvIGFmdGVyICIuLiIgb3IgIi4uLyIgb3IgIi4uLy8vIi4gKi8KIAkgICAgdGFpbCA9IHAgKyAyOwogCSAgICB3aGlsZSAodmltX2lzcGF0aHNlcCgqdGFpbCkpCi0JCSsrdGFpbDsKKwkJbWJfcHRyX2Fkdih0YWlsKTsKIAogCSAgICBpZiAoY29tcG9uZW50cyA+IDApCQkvKiBzdHJpcCBvbmUgcHJlY2VkaW5nIGNvbXBvbmVudCAqLwogCSAgICB7CkBAIC0zMjk2LDggKzMyOTYsOCBAQAogCiAJCSAgICAtLXA7CiAJCSAgICAvKiBTa2lwIGJhY2sgdG8gYWZ0ZXIgcHJldmlvdXMgJy8nLiAqLwotCQkgICAgd2hpbGUgKHAgPiBzdGFydCAmJiAhdmltX2lzcGF0aHNlcChwWy0xXSkpCi0JCQktLXA7CisJCSAgICB3aGlsZSAocCA+IHN0YXJ0ICYmICFhZnRlcl9wYXRoc2VwKHN0YXJ0LCBwKSkKKwkJCW1iX3B0cl9iYWNrKHN0YXJ0LCBwKTsKIAogCQkgICAgaWYgKCFkb19zdHJpcCkKIAkJICAgIHsKZGlmZiAtLWdpdCBhL3NyYy90ZXJtLmMgYi9zcmMvdGVybS5jCmluZGV4IGE4M2Y1MDYuLjgxNDRmYWQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXJtLmMKKysrIGIvc3JjL3Rlcm0uYwpAQCAtMzQwMCw2ICszNDAwLDcgQEAKICAgICB9CiB9CiAKKyNpZiBkZWZpbmVkKENVUlNPUl9TSEFQRSkgfHwgZGVmaW5lZChQUk9UTykKIC8qCiAgKiBTZXQgY3Vyc29yIHNoYXBlIHRvIG1hdGNoIEluc2VydCBtb2RlLgogICovCkBAIC0zNDI0LDYgKzM0MjUsNyBAQAogCXNob3dpbmdfaW5zZXJ0X21vZGUgPSBGQUxTRTsKICAgICB9CiB9CisjZW5kaWYKIAogLyoKICAqIFNldCBzY3JvbGxpbmcgcmVnaW9uIGZvciB3aW5kb3cgJ3dwJy4KZGlmZiAtLWdpdCBhL3NyYy91aS5jIGIvc3JjL3VpLmMKaW5kZXggYWM4OGRjNi4uZGQ0MTBjNSAxMDA2NDQKLS0tIGEvc3JjL3VpLmMKKysrIGIvc3JjL3VpLmMKQEAgLTI5NTIsMTIgKzI5NTIsNyBAQAogICAgIHsKIAkrK2NvbDsKIAljb3VudCArPSB3aW5fbGJyX2NoYXJ0YWJzaXplKHdwLCBwdHIsIGNvdW50LCBOVUxMKTsKLSMgaWZkZWYgRkVBVF9NQllURQotCWlmIChoYXNfbWJ5dGUpCi0JICAgIHB0ciArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHB0cik7Ci0JZWxzZQotIyBlbmRpZgotCSAgICArK3B0cjsKKwltYl9wdHJfYWR2KHB0cik7CiAgICAgfQogICAgIHJldHVybiBjb2w7CiB9CmRpZmYgLS1naXQgYS9zcmMvdmVyc2lvbi5oIGIvc3JjL3ZlcnNpb24uaAppbmRleCBlOGYxMDc4Li43NTk2YWY2IDEwMDY0NAotLS0gYS9zcmMvdmVyc2lvbi5oCisrKyBiL3NyYy92ZXJzaW9uLmgKQEAgLTM2LDUgKzM2LDUgQEAKICNkZWZpbmUgVklNX1ZFUlNJT05fTk9ET1QJInZpbTcwYWEiCiAjZGVmaW5lIFZJTV9WRVJTSU9OX1NIT1JUCSI3LjBhYSIKICNkZWZpbmUgVklNX1ZFUlNJT05fTUVESVVNCSI3LjBhYSBBTFBIQSIKLSNkZWZpbmUgVklNX1ZFUlNJT05fTE9ORwkiVklNIC0gVmkgSU1wcm92ZWQgNy4wYWEgQUxQSEEgKDIwMDQgRGVjIDkpIgotI2RlZmluZSBWSU1fVkVSU0lPTl9MT05HX0RBVEUJIlZJTSAtIFZpIElNcHJvdmVkIDcuMGFhIEFMUEhBICgyMDA0IERlYyA5LCBjb21waWxlZCAiCisjZGVmaW5lIFZJTV9WRVJTSU9OX0xPTkcJIlZJTSAtIFZpIElNcHJvdmVkIDcuMGFhIEFMUEhBICgyMDA0IERlYyAxNykiCisjZGVmaW5lIFZJTV9WRVJTSU9OX0xPTkdfREFURQkiVklNIC0gVmkgSU1wcm92ZWQgNy4wYWEgQUxQSEEgKDIwMDQgRGVjIDE3LCBjb21waWxlZCAiCmRpZmYgLS1naXQgYS9zcmMvdmltLmggYi9zcmMvdmltLmgKaW5kZXggNzk4ZDgwZC4uZjhlZTRlMiAxMDA2NDQKLS0tIGEvc3JjL3ZpbS5oCisrKyBiL3NyYy92aW0uaApAQCAtMzIwLDEyICszMjAsMTIgQEAKICMgZW5kaWYKICNlbmRpZgogI2lmZGVmIEJBQ0tTTEFTSF9JTl9GSUxFTkFNRQotIyBkZWZpbmUgUEFUSF9FU0NfQ0hBUlMgKChjaGFyX3UgKikiICo/W3tgJSMiKQorIyBkZWZpbmUgUEFUSF9FU0NfQ0hBUlMgKChjaGFyX3UgKikiIFx0Kj9be2AlIyIpCiAjZWxzZQogIyBpZmRlZiBDT0xPTl9BU19QQVRIU0VQCi0jICBkZWZpbmUgUEFUSF9FU0NfQ0hBUlMgKChjaGFyX3UgKikiICo/W3tgJCUjLyIpCisjICBkZWZpbmUgUEFUSF9FU0NfQ0hBUlMgKChjaGFyX3UgKikiIFx0Kj9be2AkJSMvIikKICMgZWxzZQotIyAgZGVmaW5lIFBBVEhfRVNDX0NIQVJTICgoY2hhcl91ICopIiAqP1t7YCRcXCUjJ1wifCIpCisjICBkZWZpbmUgUEFUSF9FU0NfQ0hBUlMgKChjaGFyX3UgKikiIFx0Kj9be2AkXFwlIydcInwiKQogIyBlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL3NyYy92aW0ucmMgYi9zcmMvdmltLnJjCmluZGV4IDI3ZDM1YTkuLjRjZWI2MzggMTAwNjQ0Ci0tLSBhL3NyYy92aW0ucmMKKysrIGIvc3JjL3ZpbS5yYwpAQCAtOSwyNSArOSwxMyBAQAogLy8gICBJY29uIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGZvciB0aGUgV2luMzIgdmVyc2lvbiBvZiBWaW0KIC8vICAgTXVzdCBiZSBpbiBET1MgZm9ybWF0IDxDUj48Tkw+IQogCi0jaWZkZWYgX19NSU5HVzMyX18KLSMgaW5jbHVkZSA8d2luZG93cy5oPgotIyBpZm5kZWYgVlNfRkZJX0ZJTEVGTEFHU01BU0sKLSMgIGRlZmluZSBWU19GRklfRklMRUZMQUdTTUFTSyAgICAweDAwMDAwMDNGTAotIyBlbmRpZgotIyBpZm5kZWYgVk9TX19XSU5ET1dTMzIKLSMgIGRlZmluZSBWT1NfX1dJTkRPV1MzMgkgIDB4MDAwMDAwMDRMCi0jIGVuZGlmCi0jZWxzZQotIyBpbmNsdWRlIDx3aW52ZXIuaD4KLSNlbmRpZgorI2luY2x1ZGUgPHdpbnZlci5oPgogI2luY2x1ZGUgInZlcnNpb24uaCIKICNpbmNsdWRlICJndWlfdzMyX3JjLmgiCi0jaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQoX19DWUdXSU4zMl9fKQorI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9fQ1lHV0lOMzJfXykgfHwgZGVmaW5lZChfX01JTkdXMzJfXykKICMgaW5jbHVkZSA8d2lucmVzcmMuaD4KICNlbHNlCi0jIGlmbmRlZiBfX01JTkdXMzJfXwotIyAgaW5jbHVkZSA8d2lucmVzLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHdpbnJlcy5oPgogI2VuZGlmCiAKIC8vCg==