SW5kZXg6IHByc0RlY28uYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHByc0RlY28uYwkocmV2aXNpb24gNDky NSkNCisrKyBwcnNEZWNvLmMJKHdvcmtpbmcgY29weSkNCkBAIC0yMywxOSArMjMsMjkgQEANCiAJ CWNhc2UgJ0snOiBkdCA9IERfSEFUOyBicmVhazsKIAkJY2FzZSAnayc6IGR0ID0gRF9BVFQ7IGJy ZWFrOwogCQljYXNlICchJzoKKwkJY2FzZSAnKyc6CiAJCQlWNSAiJXM6IERlY28gISU0cyAuLi5c biIsRixQIFY7Ci0JCQlkdCA9IHByc0FubigpOwotCQkJVjUgIiVzOiBEZWNvICVkIHR5cGUgJWQ9 JXMuXG4iLEYsZGVjb3MsZHQsYW5ubmFtZVtkdF0udmFsdWUgVjsKKwkJCWlmIChwcnNBbm4gKCkp IC8vIHByc0FubiB3aWxsIGNhbGwgYWRkRGVjbyBpZiBpdCBmaW5kcyBhIGRlY29yYXRpb24KKyAg ICAgICAgICAgIHsgICAgICAgICAgICAgIC8vIGFuZCB3aWxsIHJldHVybiB0cnVlIGlmIGl0IGZp bmRzIGFueSBzb3J0IG9mCisgICAgICAgICAgICAgICAgY29udGludWU7ICAvLyBhbm5vdGF0aW9u IGF0IGFsbAorLy8JCQlWNSAiJXM6IERlY28gJWQgdHlwZSAlZD0lcy5cbiIsRixkZWNvcyxkdCxh bm5uYW1lW2R0XS52YWx1ZSBWOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIG5vdCBhIHZhbGlkIGFubm90YXRpb24sIHRo ZSBsaXN0IG9mIGRlY29yYXRpb25zIG11c3QKKyAgICAgICAgICAgICAgICAvLyBiZSBkb25lCisg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAJCX0KIAkJaWYgKGR0KSB7Ci0J CQlWNSAiJXM6IERFQ08gJWQgaXMgdHlwZSAlZC5cbiIsRixkZWNvcyxkdCBWOworLy8JCQlWNSAi JXM6IERFQ08gJWQgaXMgdHlwZSAlZC5cbiIsRixkZWNvcyxkdCBWOwogCQkJUCsrOwotCQkJZHR5 cGVbZGVjb3MrK10gPSBkdDsKKyAgICAgICAgICAgIGFkZERlY28gKGR0KTsKIAkJCW4rKzsKIAkJ fSBlbHNlIHsKIAkJCWJyZWFrOwogCQl9CiAJfQotCVYzICIlczogJWQgZGVjb3MgZm91bmQsICVk IHRvdGFsLlxuIixGLG4sZGVjb3MgVjsKKy8vCVYzICIlczogJWQgZGVjb3MgZm91bmQsICVkIHRv dGFsLlxuIixGLG4sZGVjb3MgVjsKIAlyZXR1cm4gbjsKIH0KSW5kZXg6IHN5bXMuYw0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIHN5bXMuYwkocmV2aXNpb24gNDkyNSkNCisrKyBzeW1zLmMJKHdvcmtpbmcgY29w eSkNCkBAIC00MjMsNiArNDIzLDQ1IEBADQogCWFkZF9jdiAoZnAsZjEsZjIscCw1LDEpOwogCWZw cmludGYgKGZwLCAiICAgZmlsbFxufSBiaW5kIGRlZlxuIik7CiAKKyAgICAvLyBDb2RlIGJvcnJv d2VkIGZyb20geWFwcywKKyAgICAvLyBjb3B5cmlnaHQgTWljaGFlbCBNZXRoZmVzc2VsIGFuZCBK YW1lcyBBbGx3cmlnaHQKKyAgICBmcHJpbnRmKGZwLCAiL3NlZ25vIHsgJSUgc2Vnbm8gc3ltYm9s IHVzYWdlOiB5IHNlZ25vXG4iKTsKKyAgICBmcHJpbnRmKGZwLCAiICB4IDMuNzUgc3ViIGV4Y2hc biIpOyAvLyBtYWtlIGl0IHggeSBsaWtlIHRoZSBvcmlnaW5hbAorICAgIGZwcmludGYoZnAsICIg IGdzYXZlIHRyYW5zbGF0ZVxuIik7CisgICAgZnByaW50ZihmcCwgIiAgNS44MiAwLjg0IG1vdmV0 b1xuIik7CisgICAgZnByaW50ZihmcCwgIiAgNC42MiAxLjE1ICAgNS4wNCAzLjIwICAgNC42IDMu NjQgY3VydmV0b1xuIik7CisgICAgZnByaW50ZihmcCwgIiAgNC4xNyA0LjA4ICAgMy4xOSAyLjc1 ICAgMy45IDEuNTEgY3VydmV0b1xuIik7CisgICAgZnByaW50ZihmcCwgIiAgNC42MiAwLjI3ICAg Ny40NSAwLjAgICAgOC4wMyAxLjgyIGN1cnZldG9cbiIpOworICAgIGZwcmludGYoZnAsICIgIDgu NjEgMy42NCAgIDUuMDYgNy44MSAgIDMuMzggOS42NyBjdXJ2ZXRvXG4iKTsKKyAgICBmcHJpbnRm KGZwLCAiICAxLjY5IDExLjUzICAxLjU5IDE0LjQ2ICAyLjc5IDE0LjE2IGN1cnZldG9cbiIpOwor ICAgIGZwcmludGYoZnAsICIgIDMuOTkgMTMuODUgIDMuNTUgMTEuODAgIDQuMDAgMTEuMzYgY3Vy dmV0b1xuIik7CisgICAgZnByaW50ZihmcCwgIiAgNC40NCAxMC45MiAgNS4zMyAxMi4yNSAgNC42 NiAxMy40OSBjdXJ2ZXRvXG4iKTsKKyAgICBmcHJpbnRmKGZwLCAiICAzLjk5IDE0LjczICAxLjE1 IDE1LjAgICAwLjU3IDEzLjE4IGN1cnZldG9cbiIpOworICAgIGZwcmludGYoZnAsICIgIDAuMCAg MTEuMzYgIDMuNTAgNy4xOSAgIDUuMjEgNS4zMiAgY3VydmV0b1xuIik7CisgICAgZnByaW50Zihm cCwgIiAgNi45MiAzLjQ2ICAgNy4wMSAwLjUzICAgNS44MiAwLjg0IGN1cnZldG9cbiIpOworICAg IGZwcmludGYoZnAsICIgIGNsb3NlcGF0aCBmaWxsXG4iKTsKKyAgICBmcHJpbnRmKGZwLCAiICAt MC40MyAyLjkzIG1vdmV0b1xuIik7CisgICAgZnByaW50ZihmcCwgIiAgOC43OSAxMi4yNSBsaW5l dG8gOS4zMiAxMS43MiBsaW5ldG8gLTAuMDkgMi40MCBsaW5ldG9cbiIpOworICAgIGZwcmludGYo ZnAsICIgIGNsb3NlcGF0aCBmaWxsXG4iKTsKKyAgICBmcHJpbnRmKGZwLCAiICAwLjcxIDcuNTAg MS4wIDAgMzYwIGFyY1xuIik7CisgICAgZnByaW50ZihmcCwgIiAgY2xvc2VwYXRoIGZpbGxcbiIp OworICAgIGZwcmludGYoZnAsICIgIDcuODUgNy41MCAxLjAgMCAzNjAgYXJjXG4iKTsKKyAgICBm cHJpbnRmKGZwLCAiICBjbG9zZXBhdGggZmlsbFxuIik7CisgICAgZnByaW50ZihmcCwgIiAgZ3Jl c3RvcmVcbiIpOworICAgIGZwcmludGYoZnAsICJ9IGJpbmQgZGVmXG4iKTsKKyAgICBmcHJpbnRm KGZwLCAiXG4iKTsKKyAgICBmcHJpbnRmKGZwLCAiL2NvZGEgeyAlJSBjb2RhIDogdXNhZ2UgeSBj b2RhXG4iKTsKKyAgICBmcHJpbnRmKGZwLCAiICB4IDcuNSBzdWIgZXhjaFxuIik7IC8vIG1ha2Ug aXQgeCB5IGxpa2UgdGhlIG9yaWdpbmFsPworICAgIGZwcmludGYoZnAsICIgIGdzYXZlXG4iKTsK KyAgICBmcHJpbnRmKGZwLCAiICB0cmFuc2xhdGVcbiIpOworICAgIGZwcmludGYoZnAsICIgIDEu MCBzZXRsaW5ld2lkdGhcbiIpOworICAgIGZwcmludGYoZnAsICIgIDAuMCA3LjUgbW92ZXRvIDE1 LjAgNy41IGxpbmV0byBzdHJva2VcbiIpOworICAgIGZwcmludGYoZnAsICIgIDcuNSAwLjAgbW92 ZXRvIDcuNSAxNS4wIGxpbmV0byBzdHJva2VcbiIpOworICAgIGZwcmludGYoZnAsICIgIDcuNSA3 LjUgNS4wIDAgMzYwIGFyYyBzdHJva2VcbiIpOworICAgIGZwcmludGYoZnAsICIgIGdyZXN0b3Jl XG4iKTsKKyAgICBmcHJpbnRmKGZwLCAifSBiaW5kIGRlZlxuIik7CisgICAgZnByaW50ZihmcCwg IlxuIik7CisKIAlmMT1mMj0wLjg7CiAJZnByaW50ZiAoZnAsICJcbi9kbmIgeyAgJSUgdXNhZ2U6 ICB5IGRuYiAgLSBkb3duIGJvd1xuIgogCQkJIiAgeCBleGNoIG1vdmV0b1xuIik7CkluZGV4OiBq Y2FiYzJwcy5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQotLS0gamNhYmMycHMuaAkocmV2aXNpb24gNDkyNSkNCisr KyBqY2FiYzJwcy5oCSh3b3JraW5nIGNvcHkpDQpAQCAtMjUwLDYgKzI1MCw4IEBADQogI2RlZmlu ZSBEX1RSSUxMICAgICAgOQogI2RlZmluZSBEX0hBVCAgICAgICAxMAogI2RlZmluZSBEX0FUVCAg ICAgICAxMQorI2RlZmluZSBEX1NFR05PICAgICAxMgorI2RlZmluZSBEX0NPREEgICAgICAxMwog CiAvKiB0eXBlcyBvZiBoZWFkcwogKi8KSW5kZXg6IHByc0Fubi5jDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g cHJzQW5uLmMJKHJldmlzaW9uIDQ5MjUpDQorKysgcHJzQW5uLmMJKHdvcmtpbmcgY29weSkNCkBA IC0xNyw2ICsxNyw4IEBADQogCXtEX1RSSUxMLCAgICJUUklMTCJ9LCAgIC8qICA5ICovCiAJe0Rf SEFULCAgICAgIkhBVCJ9LCAgICAgLyogMTAgKi8KIAl7RF9BVFQsICAgICAiQVRUIn0sICAgICAv KiAxMSAqLworCXtEX1NFR05PLCAgICJzZWdubyJ9LCAgIC8qIDEyICovCisJe0RfQ09EQSwgICAg ImNvZGEifSwgICAgLyogMTMgKi8KIAl7MH0sCiB9OwogCkBAIC0zMiw4MSArMzQsMTA0IEBADQog CWludCAgIGMsIGksIGw7CiAJaW50ICAgbj0wOwkJLy8gQW5ub3RhdGlvbiBjb3VudAogCWZsb2F0 IHl5OworICAgIGNoYXIgYW5uX3RbMjAwXTsKKyAgICBkb3VibGUgYW5uX3gsIGFubl95OworICAg IGludCBhbm5fcCA9IDA7CisgICAgY2hhciBtYXJrZXI7CiAKIAlWMyAiJXM6IENhbGxlZCBhdCA8 JXM+XG4iLEYsUCBWOwotCWlmICgqUCAhPSAnIScpIHtWNSAiJXM6IE5vIGFubm90YXRpb25cbiIs RiBWOyAgICAgICAgIHJldHVybiAwO30KLQlpZiAoIVBbMV0pICAgICB7VjUgIiVzOiBUcmFpbGlu ZyAnISdcbiIsRiBWOyAgICAgICAgICByZXR1cm4gMDt9CisgICAgbWFya2VyID0gKlA7CisJaWYg KCpQICE9ICchJyAmJiAqUCAhPSAnKycpIHsKKyAgICAgICAgVjUgIiVzOiBObyBhbm5vdGF0aW9u XG4iLEYgVjsgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisJaWYgKCFQWzFdKSAgICAge1Y1ICIl czogVHJhaWxpbmcgJyVjJ1xuIixGLG1hcmtlciBWOyAgICAgICAgICByZXR1cm4gMDt9CiAJaWYg KCFhbm4pIHsKIAkJVjUgIiVzOiBObyBjdXJyZW50IGFubm90YXRpb25cbiIsRiBWOwogCQlUZXh0 SW5pdCgmYW5uLDMyKTsKIAl9CiAJcSA9IFA7CQkJCS8qIE5vdGUgcG9zaXRpb24gb2Ygb3Blbmlu ZyBxdW90ZSAqLwogCVArKzsJCQkJLyogU2tpcCB0byBmaXJzdCBjaGFyIG9mIHN0cmluZyAqLwot CWFubi0+cCA9IDA7Ci0JYW5uLT54ID0gYW5uLT55ID0gMC4wOworCWFubl9wID0gMDsKKwlhbm5f eCA9IGFubl95ID0gMC4wOworICAgIGwgPSAwOwogCXN3aXRjaCAoYyA9ICpQKSB7CS8qIENoZWNr IGZvciBwb3NpdGlvbiBjaGFyICovCiAJY2FzZSAnXic6CQkJLyogQWJvdmUgc3RhZmYgKi8KIAkJ VjMgIiAgQW5ub3RhdGlvbiBwb3NpdGlvbiAnJWMnIGFib3ZlIHN0YWZmLlxuIixjIFY7Ci0JCVAr KzsgYW5uLT5wID0gUF9BQk9WRTsgYW5uLT55ID0gMzg7IGJyZWFrOworCQlQKys7IGFubl9wID0g UF9BQk9WRTsgYW5uX3kgPSAzODsgYnJlYWs7CiAJY2FzZSAnPCc6CQkJLyogTGVmdCBvZiBub3Rl ICovCiAJCVYzICIgIEFubm90YXRpb24gcG9zaXRpb24gJyVjJyBsZWZ0IG9mIG5vdGUuXG4iLGMg VjsKLQkJUCsrOyBhbm4tPnAgPSBQX0xFRlQ7IGJyZWFrOworCQlQKys7IGFubl9wID0gUF9MRUZU OyBicmVhazsKIAljYXNlICc9JzoJCQkvKiBOZXh0IHRvIG5vdGUgKi8KIAkJVjMgIiAgQW5ub3Rh dGlvbiBwb3NpdGlvbiAnJWMnIG5leHQgdG8gbm90ZS5cbiIsYyBWOwotCQlQKys7IGFubi0+cCA9 IFBfTkVYVDsgYnJlYWs7CisJCVArKzsgYW5uX3AgPSBQX05FWFQ7IGJyZWFrOwogCWNhc2UgJz4n OgkJCS8qIFJpZ2h0IG9mIG5vdGUgKi8KIAkJVjMgIiAgQW5ub3RhdGlvbiBwb3NpdGlvbiAnJWMn IHJpZ2h0IG9mIG5vdGUuXG4iLGMgVjsKLQkJUCsrOyBhbm4tPnAgPSBQX1JJR0hUOyBicmVhazsK KwkJUCsrOyBhbm5fcCA9IFBfUklHSFQ7IGJyZWFrOwogCWNhc2UgJ18nOgkJCS8qIEJlbG93IHN0 YWZmICovCiAJCVYzICIgIEFubm90YXRpb24gcG9zaXRpb24gJyVjJyBiZWxvdyBzdGFmZi5cbiIs YyBWOwotCQlQKys7IGFubi0+cCA9IFBfQkVMT1c7IGFubi0+eSA9IC0xMjsgYnJlYWs7CisJCVAr KzsgYW5uX3AgPSBQX0JFTE9XOyBhbm5feSA9IC0xMjsgYnJlYWs7CiAJfQotCVYzICIlczogUG9z aXRpb24gaXMgJWQgYW5uLT55PSUuM2ZcbiIsRixhbm4tPnAsYW5uLT55IFY7Ci0JbCA9IGFubi0+ bDsJCQkvKiBMZW5ndGggb2YgYW5ub3RhdGlvbiBzbyBmYXIgKi8KLQlpZiAobCA+IDApIHsJCS8q IE9ubHkgb25lIGFsbG93ZWQgYXQgcHJlc2VudCAqLwotCQlzeW50YXgoIk92ZXJ3cml0ZSBlYXJs aWVyIGFubm90YXRpb24iLCBxKTsKLQkJVGV4dEluaXQoJmFubiw2NCk7Ci0JfQotCXdoaWxlICgo YyA9ICpQKSAmJiAoYyAhPSAnIScpICYmIChjICE9ICcgJykpIHsKLQkJYW5uLT50W2wrK10gPSBj OwotCQlhbm4tPnRbbF0gPSAwOwotCQlhbm4tPmwgKys7CisJVjMgIiVzOiBQb3NpdGlvbiBpcyAl ZCBhbm5feT0lLjNmXG4iLEYsYW5uX3AsYW5uX3kgVjsKKwl3aGlsZSAoKGMgPSAqUCkgJiYgKGMg IT0gbWFya2VyKSAmJiAoYyAhPSAnICcpKSB7CisJCWFubl90W2wrK10gPSBjOworCQlhbm5fdFts XSA9IDA7CiAJCWlmIChjID09ICdAJykgewogCQkJaWYgKHNzY2FuZihQKzEsIiVmIiwmeXkpID4g MCkgewotCQkJCWFubi0+eSA9IHl5OwotCQkJCVY1ICIlczogTWF0Y2hlZCBhbm4tPnk9JTYuM2Zc biIsRix5eSBWOworCQkJCWFubl95ID0geXk7CisJCQkJVjUgIiVzOiBNYXRjaGVkIGFubl95PSU2 LjNmXG4iLEYseXkgVjsKIAkJCX0KIAkJfQotCQlWNyAiJXM6IGFubj1cIiVzXCJcbiIsRixhbm4t PnQgVjsKKwkJVjcgIiVzOiBhbm49XCIlc1wiXG4iLEYsYW5uX3QgVjsKIAkJaWYgKGwgPj0gMjAw KSB7CiAJCQlzeW50YXgoIlN0cmluZyBmb3IgYW5ub3RhdGlvbiB0b28gbG9uZyIsIHEpOwotCQkJ cmV0dXJuIDE7CisJCQlyZXR1cm4gMTsgLy8gdGhpcyBiZWhhdmlvciBzdHJpa2VzIG1lIGFzIHF1 ZXN0aW9uYWJsZQogCQl9CiAJCVArKzsKIAl9Ci0JaWYgKGMgIT0gJyEnKSB7CisJaWYgKGMgIT0g bWFya2VyKSB7CiAJCWlmICghYykgVjMgIiVzOiBFT0wgcmVhY2hlZCB3aGlsZSBwYXJzaW5nIGFu bm90YXRpb24uXG4iLEYgVjsKIAkJaWYgKCBjKSBWMyAiJXM6ICclYycgZm91bmQgIHdoaWxlIHBh cnNpbmcgYW5ub3RhdGlvbi5cbiIsRixjIFY7CiAJCVAgPSBxICsgMTsJCQkvKiBSZXBvc2l0aW9u IGp1c3QgYWZ0ZXIgdGhlICEgKi8KIAkJd2hpbGUgKChjID0gKlApICYmIGlzc3BhY2UoYykpIFAr KzsKLQkJVGV4dEluaXQoJmFubiw2NCk7CQkvKiBEaXNjYXJkIGFjY3VtdWxhdGVkIGNoYXJzICov CisvLwkJVGV4dEluaXQoJmFubiw2NCk7CQkvKiBEaXNjYXJkIGFjY3VtdWxhdGVkIGNoYXJzICov IC0tIG5vIGxvbmdlciBuZWVkZWQKIAkJVjMgIiVzOiBDb250aW51ZSBhdCA8JTMuM3M+XG4iLEYs UCBWOwogCQlyZXR1cm4gMDsJCQkvKiBJZ25vcmUgaXQ7IGl0J3MgYW4gYWJjMndpbiAhICovCiAJ fQorCiAJUCsrOwotCVYzICIgIHBhcnNlZCBhbm5vdGF0aW9uIDwlcz5cbiIsVGV4dFN0cihhbm4p IFY7CisKKyAgICAvLyBza2lwIHRyYWlsaW5nIHdoaXRlc3BhY2VzCisJd2hpbGUgKChjID0gKlAp ICYmIChjID09ICcgJykgfHwgKGMgPT0gJ1x0JykpIHsKKwkJUCsrOworCX0KKworCVYzICIgIHBh cnNlZCBhbm5vdGF0aW9uIDwlcz5cbiIsYW5uX3QgVjsKIAlmb3IgKGk9MDsgYW5ubmFtZVtpXS52 YWx1ZTsgaSsrKSB7Ci0JCWlmICghc3RyY2FzZWNtcChhbm4tPnQsYW5ubmFtZVtpXS52YWx1ZSkp IHsKKwkJaWYgKCFzdHJjYXNlY21wKGFubl90LGFubm5hbWVbaV0udmFsdWUpKSB7CiAJCQlWNSAi JXM6IE1hdGNoZWQgYW5ub3RhdGlvbiBuYW1lICVkLlxuIixGLGkgVjsKLQkJCWR0eXBlW2RlY29z XSA9IGFubm5hbWVbaV0udHlwZTsKLQkJCVY1ICIlczogRGVjbyBkdHlwZVslZF0gaXMgJWQgXCIl c1wiXG4iLEYsZGVjb3MsZHR5cGVbZGVjb3NdLFRleHRTdHIoYW5uKSBWOwotCQkJZGVjb3MrKzsK KyAgICAgICAgICAgIGFkZERlY28gKGFubm5hbWVbaV0udHlwZSk7CisvLwkJCVY1ICIlczogRGVj byBkdHlwZVslZF0gaXMgJWQgXCIlc1wiXG4iLEYsZGVjb3MsZHR5cGVbZGVjb3NdLFRleHRTdHIo YW5uKSBWOwogCQkJKytuOwkvLyBOdW1iZXIgb2YgZGVjb3MgZm91bmQKIAkJCWJyZWFrOwogCQl9 CiAJfQotCVYzICIlczogJWQgZGVjb3MgZm91bmQsICVkIHRvdGFsLlxuIixGLG4sZGVjb3MgVjsK LQlWMyAiJXM6IFJldHVybiAxIGZvciBhbm4gISVzIVxuIixGLFRleHRTdHIoYW5uKSBWOworCisg ICAgaWYgKG4gPT0gMCkgLy8gaWYgbm8gZGVjb3JhdGlvbiBmb3VuZCwgdHJlYXQgYXMgYW5ub3Rh dGlvbgorICAgIHsKKyAgICAJaWYgKGFubi0+bCA+IDApIHsJCS8qIE9ubHkgb25lIGFsbG93ZWQg YXQgcHJlc2VudCAqLworICAgIAkJc3ludGF4KCJPdmVyd3JpdGUgZWFybGllciBhbm5vdGF0aW9u IiwgcSk7CisgICAgCQlUZXh0SW5pdCgmYW5uLDY0KTsKKyAgICAJfQorCisgICAgICAgIHN0cmNw eSAoYW5uLT50LCBhbm5fdCk7CisgICAgICAgIGFubi0+bCA9IGw7CisgICAgICAgIGFubi0+eCA9 IGFubl94OworICAgICAgICBhbm4tPnkgPSBhbm5feTsKKyAgICAgICAgYW5uLT5wID0gYW5uX3A7 CisgICAgfQorCisvLwlWMyAiJXM6ICVkIGRlY29zIGZvdW5kLCAlZCB0b3RhbC5cbiIsRixuLGRl Y29zIFY7CisJVjMgIiVzOiBSZXR1cm4gMSBmb3IgYW5uICVjJXMlY1xuIixGLG1hcmtlcixUZXh0 U3RyKGFubiksbWFya2VyIFY7CiAJcmV0dXJuIDE7CiB9CiAKSW5kZXg6IHBhcnNlLmMNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCi0tLSBwYXJzZS5jCShyZXZpc2lvbiA0OTI1KQ0KKysrIHBhcnNlLmMJKHdvcmtpbmcg Y29weSkNCkBAIC05OSw2ICs5OSw0NCBAQA0KIAogLyogIHN1YnJvdXRpbmVzIGNvbm5lY3RlZCB3 aXRoIHBhcnNpbmcgdGhlIGlucHV0IGZpbGUgICovCiAKK3ZvaWQgY2xlYXJEZWNvcyAodm9pZCkK K3sKKyAgICBjaGFyICpGID0iY2xlYXJEZWNvcyI7CisKKyAgICBWMyAiJXM6IERFQ09zIGNsZWFy ZWQgb3V0XG4iLEYgVjsKKyAgICBkZWNvcyA9IDA7Cit9CisKK3ZvaWQgYWRkRGVjbygKKwlpbnQg ZGVjb190eXBlKQoreworICAgIGNoYXIgKkYgPSJhZGREZWNvIjsKKworICAgIGlmIChkZWNvcyA8 IDMwKQorICAgIHsKKyAgICAgICAgVjUgIiVzOiBERUNPICVkIGlzIHR5cGUgJWQuXG4iLEYsZGVj b3MsZGVjb190eXBlIFY7CisgICAgICAgIGR0eXBlW2RlY29zKytdID0gZGVjb190eXBlOworICAg IH0KKyAgICBlbHNlCisgICAgeworCQlWNSAiJXM6IERFQ08gYnVmZmVyIGZ1bGwsIHNraXBwaW5n IERFQ08gb2YgdHlwZSAlZC5cbiIsRixkZWNvX3R5cGUgVjsKKyAgICB9Cit9CisKK3ZvaWQgY29w eURlY29zVG9TeW0oCisgICAgU3ltICpzcCkKK3sKKyAgICBjaGFyICpGID0iY29weURlY29zVG9T eW0iOworICAgIGludCBpOworCisgICAgVjMgIiVzOiBDb3B5aW5nIERFQ09zIHRvIHN5bWJvbFxu IixGIFY7CisgICAgZm9yIChpID0gMDtpPGRlY29zO2krKykgeworICAgICAgICBzcC0+ZGMudFtp XSA9IGR0eXBlW2ldOworICAgICAgICBWNSAiJXM6IGRlY29yYXRpb24gJWQgaXMgdHlwZSAlZC5c biIsRixpLHNwLT5kYy50W2ldIFY7CisgICAgfQorICAgIHNwLT5kYy5uID0gZGVjb3M7ICAgICAg ICAvKiBEZWNvcmF0aW9uIGNvdW50ICovCit9CisKIC8qIC0tLS0tIHN5dGF4OiBwcmludCBtZXNz YWdlIGZvciBzeW50YXggZXJycm9yIC0tLS0tLS0tICovCiB2b2lkIHN5bnRheCgKIAljaGFyICpt c2csCkBAIC0yMjg0LDcgKzIzMjIsNyBAQA0KIC8vCW5nciA9IHByc0dyU2VxKHBncixhZ3IpOyAv KiBncmFjZSBub3RlcyAqLwogLy8Jd2hpbGUgKChjID0gKlApICYmIGlzc3BhY2UoYykpICsrUDsK IAlWMyAiJXM6IEJhciBzeW0gaGFzICVkIGdyYWNlIG5vdGVzIGF0IDwlcz4uXG4iLEYsbmdyLFAg VjsKLQlwcnNBbm4oKTsJLy8gQWxsb3cgYW5ub3RhdGlvbnMgb24gcGFyIGxpbmVzCisJcHJzRGVj bygpOwkvLyBBbGxvdyBkZWNvcmF0aW9ucyBhbmQgYW5ub3RhdGlvbnMgb24gcGFyIGxpbmVzCiAJ cHJzQWNoKCk7CS8vIEFsbG93ICJjaG9yZHMiIG9uIGJhciBsaW5lcwogCiAJLy8gc3BlY2lhbCBj YXNlczogWyBhbmQgZGlnaXQgb3IgcXVvdGUgd2l0aG91dCBhIHByZWNlZWRpbmcgYmFyLCBbIGVu ZGluZwpAQCAtMjM4Nyw2ICsyNDI1LDkgQEANCiAJVjMgIiVzOiBCYXIgc3ltdlslZF1bJWRdIGhh cyAlZCBncmFjZSBub3Rlcy5cbiIsRixpdmMsayxuZ3IgVjsKIAlzcCA9ICZzeW12W2l2Y11ba107 CiAJc3AtPmdyLm4gPSBuZ3I7CQkJLyogR3JhY2Ugbm90ZSBjb3VudCAqLworCisgICAgY29weURl Y29zVG9TeW0gKHNwKTsKKyAgICBjbGVhckRlY29zICgpOwogCVYzICIlczogQmFyIHN5bXZbJWRd WyVkXSBoYXMgJWQgZGVjb3JhdGlvbnMgYW5kICVkIGdyYWNlIG5vdGVzLlxuIixGLGl2YyxrLHNw LT5kYy5uLHNwLT5nci5uIFY7CiAJZm9yIChpID0gMDtpPG5ncjtpKyspIHsKIAkJc3AtPmdyLnBb aV0gPSBwZ3JbaV07CkBAIC0yOTgzLDExICszMDI0LDcgQEANCiAJayA9IGFkZF9zeW0odHlwZSk7 CQkvKiBhZGQgbmV3IHN5bWJvbCB0byBsaXN0ICovCiAJc3AgPSAmc3ltdltpdmNdW2tdOwogCi0J Zm9yIChpID0gMDtpPGRlY29zO2krKykgewotCQlzcC0+ZGMudFtpXSA9IGR0eXBlW2ldOwotCQlW NSAiJXM6IHN5bXZbJWRdWyVkXSBkZWNvcmF0aW9uICVkIGlzIHR5cGUgJWQuXG4iLEYsaXZjLGss aSxzcC0+ZGMudFtpXSBWOwotCX0KLQlzcC0+ZGMubiA9IGRlY29zOwkJLyogRGVjb3JhdGlvbiBj b3VudCAqLworICAgIGNvcHlEZWNvc1RvU3ltIChzcCk7CiAJc3AtPmdyLm4gPSBuZ3I7CQkJLyog R3JhY2Ugbm90ZSBjb3VudCAqLwogCVY1ICIlczogQmFyIHN5bXZbJWRdWyVkXSBoYXMgJWQgZGVj b3JhdGlvbnMgYW5kICVkIGdyYWNlIG5vdGVzLlxuIixGLGl2YyxrLHNwLT5kYy5uLHNwLT5nci5u IFY7CiAJZm9yIChpID0gMDtpPG5ncjtpKyspIHsKQEAgLTMwMzgsOSArMzA3NSw3IEBADQogCQkJ fQogCQkJcHJzRGVjbygpOwkvKiBmb3IgZXh0cmEgZGVjb3JhdGlvbnMgd2l0aGluIGNob3JkICov CiAJCQlWNSAiJXM6ICVkIGRlY29zIGZvdW5kIGluIGNob3JkLlxuIixGLGRlY29zIFY7Ci0JCQlm b3IgKGkgPSAwO2k8ZGVjb3M7aSsrKQotCQkJCXNwLT5kYy50W2krc3AtPmRjLm5dID0gZHR5cGVb aV07Ci0JCQlzcC0+ZGMubiA9IGRlY29zOworICAgICAgICAgICAgY29weURlY29zVG9TeW0gKHNw KTsKIAogCQkJaWYgKChyYyA9IHBhcnNlX2Jhc2ljX25vdGUoJnBpdGNoLCZsZW5ndGgsJmFjY2lk ZW50YWwpKSA9PSAwKSB7CiAJCQkJdm9pY2VbaXZjXS5uc3ltLS07CkBAIC0zMTM1LDYgKzMxNzAs NyBAQA0KICNlbmRpZgogCWlkZW50aWZ5X25vdGUoJnN5bXZbaXZjXVtrXSxxMCk7CiAJVjMgIiVz OiBzeW12WyVkXVslZF0gcmV0dXJucyB0eXBlICVkIHdpdGggYW5ub3RhdGlvbiAhJXMhXG4iLEYs aXZjLGssdHlwZSxUZXh0U3RyKHNwLT5hbm4pIFY7CisgICAgY2xlYXJEZWNvcyAoKTsKIAlyZXR1 cm4gdHlwZTsKIH0KIApAQCAtMzE5Niw3ICszMjMyLDYgQEANCiAJaW50IGk7CiAKIAlWNSAiJXM6 IENhbGxlZCBhdCA8JXM+XG4iLEYsUCBWOwotCWRlY29zID0gMDsKIAlkb01hY3JvKCk7CiAJaWYg KHByc0FubigpKSAgICAgICAgICB7VjQgIiVzOiBSZXR1cm4gJWQ9QU5OT1RcbiIsRixBTk5PVCBW OyAgICAgcmV0dXJuIEFOTk9UO30KIAlpZiAocHJzQWNoKCkpICAgICAgICAgIHtWNCAiJXM6IFJl dHVybiAlZD1BQ0hPUkRcbiIsRixBQ0hPUkQgVjsgICByZXR1cm4gQUNIT1JEO30KQEAgLTMzMTAs NiArMzM0NSw3IEBADQogCW5iciA9IDA7CiAJUCA9IFEgPSBsaW5lOwkJLy8gUG9zaXRpb25zIGlu IG11c2ljIGxpbmUKIAlwbXggPSBQK3N0cmxlbihQKTsJLy8gRW5kIG9mIG11c2ljIGxpbmUKKyAg ICBjbGVhckRlY29zICgpOwogCiAJd2hpbGUgKCpQICE9IDApIHsJLy8gRW5kIGF0IG51bGwgYnl0 ZQogCQlpZiAodmIgPiA2KSB7CkluZGV4OiBwYXJzZS5oDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gcGFyc2Uu aAkocmV2aXNpb24gNDkyNSkNCisrKyBwYXJzZS5oCSh3b3JraW5nIGNvcHkpDQpAQCAtMTAsOSAr MTAsMTAgQEANCiAjaW5jbHVkZSAiamNhYmMycHMuaCIKIAogZXh0ZXJuIGludCBvbGRrczsKLWV4 dGVybiBpbnQgZHR5cGVbMzBdOwkJLyogRGVjb3JhdGlvbiB0eXBlcyAqLwotZXh0ZXJuIGludCBk ZWNvczsJCS8qIE51bWJlciBvZiBkZWNvcmF0aW9ucyBvbiBjdXJyZW50IHN5bWJvbCAqLworLy8g ZXh0ZXJuIGludCBkdHlwZVszMF07CQkvKiBEZWNvcmF0aW9uIHR5cGVzICovCisvLyBleHRlcm4g aW50IGRlY29zOwkJLyogTnVtYmVyIG9mIGRlY29yYXRpb25zIG9uIGN1cnJlbnQgc3ltYm9sICov CiAKK3ZvaWQgYWRkRGVjbyhpbnQgZGVjb190eXBlKTsKIGludCAgYWRkX3N5bShpbnQgdHlwZSk7 CiBpbnQgIGZpbmRfdm9pY2UoY2hhciB2aWRbXSwgaW50ICpuZXcpOwogaW50ICBnZXRfaGFsZnRv bmVzKHN0cnVjdCBLRVlTVFIga2V5LCBjaGFyIHRyYW5zcG9zZVtdKTsKSW5kZXg6IG11c2ljLmMN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBtdXNpYy5jCShyZXZpc2lvbiA0OTI1KQ0KKysrIG11c2ljLmMJKHdv cmtpbmcgY29weSkNCkBAIC0yMDY5LDYgKzIwNjksNyBAQA0KIAlTeW0gICpzcCkJLy8gU3ltYm9s CiB7CWNoYXIgKkY9ImRyYXdCYXIiOwogCWludCAgIG47CisgICAgZmxvYXQgdG9wLCB0b3AyOwog CiAJVjUgIiVzOiBDYWxsZWQgYXQgeD0lLjJmIHNwLT51PSVkLlxuIixGLHgsc3AtPnUgVjsKIAlp ZiAoc3AtPmdyLm4gPiAwKSB7CkBAIC0yMTIyLDYgKzIxMjMsMTAgQEANCiAJfSBlbHNlIHsKIAkJ ZnByaW50ZihzdGRlcnIsIj4+PiBkb250IGtub3cgaG93IHRvIGRyYXcgYmFyIHR5cGUgJWRcbiIs IHNwLT51KTsKIAl9CisKKyAgICBQVVQxKCIveCAlLjJmIGRlZiIsIHgpCisgICAgdG9wID0gZHJh d0RlY29zICh4LHNwLCZ0b3AyKTsgICAgICAgICAgICAgICAgLyogYWRkIGRlY29yYXRpb25zICov CisKIAlQVVQwKCJcbiIpCiB9CiAKQEAgLTIzMjAsMzYgKzIzMjUsNDQgQEANCiB7IAljaGFyICpG ID0gImRyYXdSZXN0IjsKIAlpbnQgeSxpOwogCWZsb2F0IGRvdHgsZG90eTsKKyAgICBmbG9hdCB0 b3AsIHRvcDI7CiAKIAlkcmF3R3JhY2VOb3Rlcyh4LCB3LCBkLCAmcyk7CQkJCQkvKiBkcmF3IGdy YWNlIG5vdGVzICovCiAKIAkqYWNoeSA9IERmbENoWVlBOwogCSphbm55ID0gRGZsQW5ZWUE7Ci0J aWYgKHMuaW52aXMpIHJldHVybjsKKwlpZiAoIXMuaW52aXMpCisgICAgeworICAgIAl5ID0gKGlu dClzLnk7CisgICAgCVBVVDIoIiUuMmYgJS4wZiIsIHgsIHl5KQogCi0JeSA9IChpbnQpcy55Owot CVBVVDIoIiUuMmYgJS4wZiIsIHgsIHl5KQorICAgIAlpZiAocy5oZWFkID09IEhfT1ZBTCkgICAg IHtQVVQwKCIgcjEiKTt9CisgICAgCWVsc2lmIChzLmhlYWQgPT0gSF9FTVBUWSkge1BVVDAoIiBy MiIpO30KKyAgICAJZWxzZSB7CisgICAgCQlpZiAocy5mbGFncyA9PSAwKSAgICAge1BVVDAoIiBy NCIpO30KKyAgICAJCWVsc2lmIChzLmZsYWdzID09IDEpICB7UFVUMCgiIHI4Iik7fQorICAgIAkJ ZWxzaWYgKHMuZmxhZ3MgPT0gMikgIHtQVVQwKCIgcjE2Iik7fQorICAgIAkJZWxzaWYgKHMuZmxh Z3MgPT0gMykgIHtQVVQwKCIgcjMyIik7fQorICAgIAkJZWxzZSAgICAgICAgICAgICAgICAgIHtQ VVQwKCIgcjY0Iik7fQorICAgIAl9CiAKLQlpZiAocy5oZWFkID09IEhfT1ZBTCkgICAgIHtQVVQw KCIgcjEiKTt9Ci0JZWxzaWYgKHMuaGVhZCA9PSBIX0VNUFRZKSB7UFVUMCgiIHIyIik7fQotCWVs c2UgewotCQlpZiAocy5mbGFncyA9PSAwKSAgICAge1BVVDAoIiByNCIpO30KLQkJZWxzaWYgKHMu ZmxhZ3MgPT0gMSkgIHtQVVQwKCIgcjgiKTt9Ci0JCWVsc2lmIChzLmZsYWdzID09IDIpICB7UFVU MCgiIHIxNiIpO30KLQkJZWxzaWYgKHMuZmxhZ3MgPT0gMykgIHtQVVQwKCIgcjMyIik7fQotCQll bHNlICAgICAgICAgICAgICAgICAge1BVVDAoIiByNjQiKTt9Ci0JfQorICAgIAlpZiAoeSU2KSB7 IGRvdHg9Ni41OyBkb3R5PTA7IH0gICAgICAgICAgICAgICAgICAgLyogZG90cyAqLworICAgIAll bHNlICAgICB7IGRvdHg9Ni41OyBkb3R5PTM7IH0KKyAgICAJaWYgKHMuaGVhZCA9PSBIX09WQUwp ICB7IGRvdHg9ODsgZG90eT0tMzsgfQorICAgIAlpZiAocy5oZWFkID09IEhfRU1QVFkpIHsgZG90 eD04OyBkb3R5PTM7ICB9CisgICAgCWZvciAoaT0wO2k8cy5kb3RzO2krKykgeworICAgIAkJUFVU MigiICUuMWYgJS4xZiBkdCIsIGRvdHgsIGRvdHkpCisgICAgCQlkb3R4PWRvdHgrMy41OworICAg IAl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIGRlZmluZSB4IHNvIHRoZSBk ZWNvcmF0aW9ucyBrbm93IHdoZXJlIHRvIGdvIQorICAgIAlQVVQxKCIveCAlLjJmIGRlZiIsIHgp CisgICAgfQogCi0JaWYgKHklNikgeyBkb3R4PTYuNTsgZG90eT0wOyB9ICAgICAgICAgICAgICAg ICAgIC8qIGRvdHMgKi8KLQllbHNlICAgICB7IGRvdHg9Ni41OyBkb3R5PTM7IH0KLQlpZiAocy5o ZWFkID09IEhfT1ZBTCkgIHsgZG90eD04OyBkb3R5PS0zOyB9Ci0JaWYgKHMuaGVhZCA9PSBIX0VN UFRZKSB7IGRvdHg9ODsgZG90eT0zOyAgfQotCWZvciAoaT0wO2k8cy5kb3RzO2krKykgewotCQlQ VVQyKCIgJS4xZiAlLjFmIGR0IiwgZG90eCwgZG90eSkKLQkJZG90eD1kb3R4KzMuNTsKLQl9CisJ dG9wID0gZHJhd0RlY29zICh4LCZzLCZ0b3AyKTsgICAgICAgICAgICAgICAgLyogYWRkIGRlY29y YXRpb25zICovCiAKLQogCVBVVDAoIlxuIikKIH0KIApAQCAtMjY0NCw2ICsyNjU3LDMwIEBADQog CQkJaWYgKHRvcDx5YysxMikgdG9wPXljKzEyOwogCQkJUFVUMSgiICUuMWYgaGxkIiwgeWMpCiAJ CX0KKwkJaWYgKGRlY28gPT0gRF9TRUdOTykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHNlZ25vIHNpZ24gKi8KKwkJCXljPTI3OworCQkJaWYgKHMtPnN0ZW0gPT0gMSkgeworCQkJCXkx PXMtPnlzKzQ7CisJCQl9IGVsc2UgeworCQkJCXkxPXMtPnlteCs2OworCQkJfQorCQkJaWYgKHlj PHkxKSB5Yz15MTsKKwkJCWlmICh5Yzx0b3ArNCkgeWM9dG9wKzQ7CisJCQlpZiAodG9wPHljKzEy KSB0b3A9eWMrMTI7CisJCQlQVVQxKCIgJS4xZiBzZWdubyIsIHljKQorCQl9CisJCWlmIChkZWNv ID09IERfQ09EQSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvZGEgc2lnbiAqLwor CQkJeWM9Mjc7CisJCQlpZiAocy0+c3RlbSA9PSAxKSB7CisJCQkJeTE9cy0+eXMrNDsKKwkJCX0g ZWxzZSB7CisJCQkJeTE9cy0+eW14KzY7CisJCQl9CisJCQlpZiAoeWM8eTEpIHljPXkxOworCQkJ aWYgKHljPHRvcCs0KSB5Yz10b3ArNDsKKwkJCWlmICh0b3A8eWMrMTIpIHRvcD15YysxMjsKKwkJ CVBVVDEoIiAlLjFmIGNvZGEiLCB5YykKKwkJfQogCQlpZiAoZGVjbyA9PSBEX1RSSUxMKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cmlsbCBzaWduICovCiAJCQl5Yz0zMDsKIAkJCWlm IChzLT5zdGVtID09IDEpIHsK