Name: series-workflow7b4js Phase: Succeeded StartedAt: 2026-08-23 19:48:46 +0000 UTC FinishedAt: 2026-08-23 23:33:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[0] Phase: Succeeded StartedAt: 2026-08-23 19:48:46 +0000 UTC FinishedAt: 2026-08-23 19:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[0].run-triage Phase: Succeeded StartedAt: 2026-08-23 19:48:46 +0000 UTC FinishedAt: 2026-08-23 19:51:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "08745c62350126bc31b09548137be87e2866f628", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "08745c62350126bc31b09548137be87e2866f628", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE" ], "series_id": "bc82cdb1-19ba-49ee-8477-2ce7b83dc394" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memory_failure" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgKGhhcmR3YXJlIHBvaXNvbikgaGFuZGxpbmcgbG9naWMgZm9yIHNobWVtIHBhZ2VzLCBjaGFuZ2luZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gIHRvIGBNRl9ERUxBWUVEYCBhbmQgdXBkYXRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBwcm9wZXJseSBoYW5kbGUgdGhpcyBzdGF0ZS4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGZvciBoYXJkd2FyZSBlcnJvciByZWNvdmVyeSBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGZvciBzaG1lbSBwYWdlcyBieSByZXR1cm5pbmcgTUZfREVMQVlFRCBpbnN0ZWFkIG9mIDAgaW4gc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvLCBhbmQgdXBkYXRlcyB0cnVuY2F0ZV9lcnJvcl9mb2xpbyB0byBoYW5kbGUgdGhpcyBuZXcgcmV0dXJuIHZhbHVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX0hXUE9JU09OKSBvbiBzaG1lbSBtYXBwaW5ncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMzMmE3MzYzOTRkYTlhNmVkNWFmY2YzNzBlYTZlYjNlN2RhM2YwM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxOTo1MDowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYWFmMTQ2MDhiMzBlMi4uYzdhMDBjN2JlMzY4ZSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC04NDcsMjQgJiM0Mzs4NDcsMjUgQEAgc3RhdGljIGludCBraWxsX2FjY2Vzc2luZ19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gfVxuIFxuIC8qXG4tICogTUZfSUdOT1JFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uZWQmIzM5O2VkLlxuJiM0MzsgKiBNRl9JR05PUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb24mIzM5O2VkLlxuICAqIEJ1dCBpdCBjb3VsZCBub3QgZG8gbW9yZSB0byBpc29sYXRlIHRoZSBwYWdlIGZyb20gYmVpbmcgYWNjZXNzZWQgYWdhaW4sXG4gICogbm9yIGRvZXMgaXQga2lsbCB0aGUgcHJvY2Vzcy4gVGhpcyBpcyBleHRyZW1lbHkgcmFyZSBhbmQgb25lIG9mIHRoZVxuICAqIHBvdGVudGlhbCBjYXVzZXMgaXMgdGhhdCB0aGUgcGFnZSBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkIGR1ZSB0b1xuICAqIHVuZGVybHlpbmcgcmFjZSBjb25kaXRpb24uIFRoaXMgaXMgdGhlIG1vc3Qgc2V2ZXJlIG91dGNvbWVzLlxuICAqXG4tICogTUZfRkFJTEVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCYjMzk7ZWQuXG4mIzQzOyAqIE1GX0ZBSUxFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJiMzOTtlZC5cbiAgKiBJdCBzaG91bGQgaGF2ZSBraWxsZWQgdGhlIHByb2Nlc3MsIGJ1dCBpdCBjYW4mIzM5O3QgaXNvbGF0ZSB0aGUgcGFnZSxcbiAgKiBkdWUgdG8gY29uZGl0aW9ucyBzdWNoIGFzIGV4dHJhIHBpbiwgdW5tYXAgZmFpbHVyZSwgZXRjLiBBY2Nlc3NpbmdcbiAgKiB0aGUgcGFnZSBhZ2FpbiBtYXkgdHJpZ2dlciBhbm90aGVyIE1DRSBhbmQgdGhlIHByb2Nlc3Mgd2lsbCBiZSBraWxsZWRcbiAgKiBieSB0aGUgbS1mKCkgaGFuZGxlciBpbW1lZGlhdGVseS5cbiAgKlxuLSAqIE1GX0RFTEFZRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbmVkJiMzOTtlZC5cbi0gKiBUaGUgcGFnZSBpcyB1bm1hcHBlZCwgYW5kIGlzIHJlbW92ZWQgZnJvbSB0aGUgTFJVIG9yIGZpbGUgbWFwcGluZy5cbi0gKiBBbiBhdHRlbXB0IHRvIGFjY2VzcyB0aGUgcGFnZSBhZ2FpbiB3aWxsIHRyaWdnZXIgcGFnZSBmYXVsdCBhbmQgdGhlXG4tICogUEYgaGFuZGxlciB3aWxsIGtpbGwgdGhlIHByb2Nlc3MuXG4mIzQzOyAqIE1GX0RFTEFZRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbiYjMzk7ZWQuXG4mIzQzOyAqIEl0IG1lYW5zIHRoZSBwYWdlIHdhcyB1bm1hcHBlZCBhbmQgcGFydGlhbGx5IGlzb2xhdGVkIChlLmcuIHJlbW92ZWQgZnJvbVxuJiM0MzsgKiBmaWxlIG1hcHBpbmcgb3IgdGhlIExSVSkgYnV0IGZ1bGwgY2xlYW51cCBpcyBkZWZlcnJlZCAoZS5nLiB0aGUgbWV0YWRhdGFcbiYjNDM7ICogZm9yIHRoZSBtZW1vcnksIGFzIGluIHN0cnVjdCBwYWdlL2ZvbGlvLCBpcyBzdGlsbCByZWZlcmVuY2VkKS4gQW55XG4mIzQzOyAqIGZ1cnRoZXIgYWNjZXNzIHRvIHRoZSBwYWdlIHdpbGwgcmVzdWx0IGluIHRoZSBwcm9jZXNzIGJlaW5nIGtpbGxlZC5cbiAgKlxuLSAqIE1GX1JFQ09WRVJFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uZWQmIzM5O2VkLlxuJiM0MzsgKiBNRl9SRUNPVkVSRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbiYjMzk7ZWQuXG4gICogVGhlIHBhZ2UgaGFzIGJlZW4gY29tcGxldGVseSBpc29sYXRlZCwgdGhhdCBpcywgdW5tYXBwZWQsIHRha2VuIG91dCBvZlxuICAqIHRoZSBidWRkeSBzeXN0ZW0sIG9yIGhvbGUtcHVuY2hlZCBvdXQgb2YgdGhlIGZpbGUgbWFwcGluZy5cbiAgKi9cbkBAIC05MzgsMTAgJiM0Mzs5MzksMTIgQEAgc3RhdGljIGludCB0cnVuY2F0ZV9lcnJvcl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdGlmIChtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWVycm9yX3JlbW92ZV9mb2xpbykge1xuIFx0XHRpbnQgZXJyID0gbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VlcnJvcl9yZW1vdmVfZm9saW8obWFwcGluZywgZm9saW8pO1xuIFxuLVx0XHRpZiAoZXJyICE9IDApXG4mIzQzO1x0XHRpZiAoZXJyID09IE1GX0RFTEFZRUQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHRcdGVsc2UgaWYgKGVyciAhPSAwKVxuIFx0XHRcdHByX2luZm8oXCYjMzQ7JSNseDogRmFpbGVkIHRvIHB1bmNoIHBhZ2U6ICVkXFxuXCYjMzQ7LCBwZm4sIGVycik7XG4gXHRcdGVsc2UgaWYgKCFmaWxlbWFwX3JlbGVhc2VfZm9saW8oZm9saW8sIEdGUF9OT0lPKSlcbi1cdFx0XHRwcl9pbmZvKFwmIzM0OyUjbHg6IGZhaWxlZCB0byByZWxlYXNlIGJ1ZmZlcnNcXG5cJiMzNDssIHBmbik7XG4mIzQzO1x0XHRcdHByX2luZm8oXCYjMzQ7JSNseDogRmFpbGVkIHRvIHJlbGVhc2UgYnVmZmVyc1xcblwmIzM0OywgcGZuKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHJldCA9IE1GX1JFQ09WRVJFRDtcbiBcdH0gZWxzZSB7XG5AQCAtMTAzNiwxOCAmIzQzOzEwMzksMTQgQEAgc3RhdGljIGludCBtZV9wYWdlY2FjaGVfY2xlYW4oc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogVGhlIHNobWVtIHBhZ2UgaXMga2VwdCBpbiBwYWdlIGNhY2hlIGluc3RlYWQgb2YgdHJ1bmNhdGluZ1xuLVx0ICogc28gaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhbiBleHRyYSByZWZjb3VudCBhZnRlciBlcnJvci1oYW5kbGluZy5cbi1cdCAqL1xuLVx0ZXh0cmFfcGlucyA9IHNobWVtX21hcHBpbmcobWFwcGluZyk7XG4tXG4gXHQvKlxuIFx0ICogVHJ1bmNhdGlvbiBpcyBhIGJpdCB0cmlja3kuIEVuYWJsZSBpdCBwZXIgZmlsZSBzeXN0ZW0gZm9yIG5vdy5cbiBcdCAqXG4gXHQgKiBPcGVuOiB0byB0YWtlIGlfcndzZW0gb3Igbm90IGZvciB0aGlzPyBSaWdodCBub3cgd2UgZG9uJiMzOTt0LlxuIFx0ICovXG4gXHRyZXQgPSB0cnVuY2F0ZV9lcnJvcl9mb2xpbyhmb2xpbywgcGFnZV90b19wZm4ocCksIG1hcHBpbmcpO1xuJiM0MztcbiYjNDM7XHRleHRyYV9waW5zID0gcmV0ID09IE1GX0RFTEFZRUQ7XG4gXHRpZiAoaGFzX2V4dHJhX3JlZmNvdW50KHBzLCBwLCBleHRyYV9waW5zKSlcbiBcdFx0cmV0ID0gTUZfRkFJTEVEO1xuIFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA3NzRmNGIxOGZmNWM2Li5kNmY5NDc4NmU3MDllIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTUxMzYsNyAmIzQzOzUxMzYsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2htZW1fZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpXG4gc3RhdGljIGludCBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBNRl9ERUxBWUVEO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBzaG1lbV9hb3BzID0ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCAxYTVhMzJlMjJjY2UyLi41YjI2ZjBjNDQ2NjQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTIwLDYgJiM0MzsyMCwxMCBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuIFxuJiM0MzsjaWZuZGVmIGZhbGx0aHJvdWdoXG4mIzQzOyMgZGVmaW5lIGZhbGx0aHJvdWdoIF9fYXR0cmlidXRlX18oKF9fZmFsbHRocm91Z2hfXykpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiBlbnVtIGluamVjdF90eXBlIHtcbiBcdE1BRFZfSEFSRCxcbiBcdE1BRFZfU09GVCxcbkBAIC0yOSw5ICYjNDM7MzMsMTQgQEAgZW51bSByZXN1bHRfdHlwZSB7XG4gXHRNQURWX0hBUkRfQU5PTixcbiBcdE1BRFZfSEFSRF9DTEVBTl9QQUdFQ0FDSEUsXG4gXHRNQURWX0hBUkRfRElSVFlfUEFHRUNBQ0hFLFxuJiM0MztcdE1BRFZfSEFSRF9DTEVBTl9TSE1FTSxcbiYjNDM7XHRNQURWX0hBUkRfRElSVFlfU0hNRU0sXG4gXHRNQURWX1NPRlRfQU5PTixcbiBcdE1BRFZfU09GVF9DTEVBTl9QQUdFQ0FDSEUsXG4gXHRNQURWX1NPRlRfRElSVFlfUEFHRUNBQ0hFLFxuJiM0MztcdE1BRFZfU09GVF9DTEVBTl9TSE1FTSxcbiYjNDM7XHRNQURWX1NPRlRfRElSVFlfU0hNRU0sXG4mIzQzO1x0UkVBRF9FUlJPUixcbiB9O1xuIFxuIHN0YXRpYyBqbXBfYnVmIHNpZ25hbF9qbXBfYnVmO1xuQEAgLTE1NywxNyAmIzQzOzE2NiwyMiBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZVxuIFx0Y2FzZSBNQURWX0hBUkRfQ0xFQU5fUEFHRUNBQ0hFOlxuIFx0Y2FzZSBNQURWX1NPRlRfQ0xFQU5fUEFHRUNBQ0hFOlxuIFx0Y2FzZSBNQURWX1NPRlRfRElSVFlfUEFHRUNBQ0hFOlxuLVx0XHQvKiBJdCBpcyBub3QgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIFNJR0JVUyBzaWduYWwuICovXG4tXHRcdEFTU0VSVF9FUShzZXRqbXAsIDApO1xuLVxuJiM0MztcdGNhc2UgTUFEVl9TT0ZUX0RJUlRZX1NITUVNOlxuIFx0XHQvKiBUaGUgcGFnZSBjb250ZW50IHNob3VsZCByZW1haW4gdW5jaGFuZ2VkLiAqL1xuIFx0XHRBU1NFUlRfVFJVRShjaGVja19tZW1vcnkodmFkZHIsIHNlbGYtXHUwMDNlcGFnZV9zaXplKSk7XG4mIzQzO1x0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRjYXNlIE1BRFZfSEFSRF9DTEVBTl9TSE1FTTpcbiYjNDM7XHRjYXNlIE1BRFZfU09GVF9DTEVBTl9TSE1FTTpcbiYjNDM7XHRcdC8qIEl0IGlzIG5vdCBleHBlY3RlZCB0byByZWNlaXZlIGEgU0lHQlVTIHNpZ25hbC4gKi9cbiYjNDM7XHRcdEFTU0VSVF9FUShzZXRqbXAsIDApO1xuIFxuIFx0XHQvKiBUaGUgYmFja2luZyBwZm4gb2YgYWRkciBzaG91bGQgaGF2ZSBjaGFuZ2VkLiAqL1xuIFx0XHRBU1NFUlRfTkUocGFnZW1hcF9nZXRfcGZuKHNlbGYtXHUwMDNlcGFnZW1hcF9mZCwgdmFkZHIpLCBzZWxmLVx1MDAzZXBmbik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBNQURWX0hBUkRfQU5PTjpcbiBcdGNhc2UgTUFEVl9IQVJEX0RJUlRZX1BBR0VDQUNIRTpcbiYjNDM7XHRjYXNlIE1BRFZfSEFSRF9ESVJUWV9TSE1FTTpcbiYjNDM7XHRjYXNlIFJFQURfRVJST1I6XG4gXHRcdC8qIFRoZSBTSUdCVVMgc2lnbmFsIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQuICovXG4gXHRcdEFTU0VSVF9FUShzZXRqbXAsIDEpO1xuIFxuQEAgLTI2Myw2ICYjNDM7Mjc3LDIwIEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9maWxlKGNvbnN0IGNoYXIgKmZuYW1lLCB1bnNpZ25lZCBsb25nIHNpemUpXG4gXHRyZXR1cm4gZmQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHByZXBhcmVfc2htZW0oY29uc3QgY2hhciAqZm5hbWUsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBtZW1mZF9jcmVhdGUoZm5hbWUsIDApO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAoZnRydW5jYXRlKGZkLCBzaXplKSBcdTAwM2MgMCkge1xuJiM0MztcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gZmQ7XG4mIzQzO31cbiYjNDM7XG4gLyogQm9ycm93ZWQgZnJvbSBtbS9ndXBfbG9uZ3Rlcm0uYy4gKi9cbiBzdGF0aWMgaW50IGdldF9mc190eXBlKGludCBmZClcbiB7XG5AQCAtMzU1LDQgJiM0MzszODMsODggQEAgVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBkaXJ0eV9wYWdlY2FjaGUpXG4gXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbiB9XG4gXG4mIzQzO1RFU1RfRihtZW1vcnlfZmFpbHVyZSwgZGlydHlfc2htZW0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0Y2hhciAqYWRkcjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRmZCA9IHByZXBhcmVfc2htZW0oXCYjMzQ7c2htZW0tZmlsZVwmIzM0Oywgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtmYWlsZWQgdG8gb3BlbiB0ZXN0IHNobWVtLWZpbGUuXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YWRkciA9IG1tYXAoMCwgc2VsZi1cdTAwM2VwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICAgTUFQX1NIQVJFRCwgZmQsIDApO1xuJiM0MztcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDttbWFwIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkuXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1x0bWVtc2V0KGFkZHIsIDB4Y2UsIHNlbGYtXHUwMDNlcGFnZV9zaXplKTtcbiYjNDM7XG4mIzQzO1x0cHJlcGFyZShfbWV0YWRhdGEsIHNlbGYsIGFkZHIpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBzaWdzZXRqbXAoc2lnbmFsX2ptcF9idWYsIDEpO1xuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhc2VsZi1cdTAwM2VpbmplY3Rpb25fYXR0ZW1wdGVkKSB7XG4mIzQzO1x0XHRzZWxmLVx1MDAzZWluamVjdGlvbl9hdHRlbXB0ZWQgPSB0cnVlO1xuJiM0MztcdFx0QVNTRVJUX0VRKHZhcmlhbnQtXHUwMDNlaW5qZWN0KHNlbGYsIGFkZHIpLCAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh2YXJpYW50LVx1MDAzZXR5cGUgPT0gTUFEVl9IQVJEKSB7XG4mIzQzO1x0XHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfSEFSRF9ESVJUWV9TSE1FTSwgcmV0KTtcbiYjNDM7XHRcdHJldCA9IHNpZ3NldGptcChzaWduYWxfam1wX2J1ZiwgMSk7XG4mIzQzO1x0XHRpZiAocmV0ID09IDApXG4mIzQzO1x0XHRcdEZPUkNFX1JFQUQoKmFkZHIpO1xuJiM0MztcdFx0Y2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBSRUFEX0VSUk9SLCByZXQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfU09GVF9ESVJUWV9TSE1FTSwgcmV0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShtdW5tYXAoYWRkciwgc2VsZi1cdTAwM2VwYWdlX3NpemUpLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihtZW1vcnlfZmFpbHVyZSwgY2xlYW5fc2htZW0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0Y2hhciAqYWRkcjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRmZCA9IHByZXBhcmVfc2htZW0oXCYjMzQ7c2htZW0tZmlsZVwmIzM0Oywgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtmYWlsZWQgdG8gb3BlbiB0ZXN0IHNobWVtLWZpbGUuXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YWRkciA9IG1tYXAoMCwgc2VsZi1cdTAwM2VwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICAgTUFQX1NIQVJFRCwgZmQsIDApO1xuJiM0MztcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDttbWFwIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkuXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1x0Rk9SQ0VfUkVBRCgqYWRkcik7XG4mIzQzO1xuJiM0MztcdHByZXBhcmUoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTtcbiYjNDM7XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIXNlbGYtXHUwMDNlaW5qZWN0aW9uX2F0dGVtcHRlZCkge1xuJiM0MztcdFx0c2VsZi1cdTAwM2VpbmplY3Rpb25fYXR0ZW1wdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdEFTU0VSVF9FUSh2YXJpYW50LVx1MDAzZWluamVjdChzZWxmLCBhZGRyKSwgMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodmFyaWFudC1cdTAwM2V0eXBlID09IE1BRFZfSEFSRCkge1xuJiM0MztcdFx0Y2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBNQURWX0hBUkRfQ0xFQU5fU0hNRU0sIHJldCk7XG4mIzQzO1x0XHRyZXQgPSBzaWdzZXRqbXAoc2lnbmFsX2ptcF9idWYsIDEpO1xuJiM0MztcdFx0aWYgKHJldCA9PSAwKVxuJiM0MztcdFx0XHRGT1JDRV9SRUFEKCphZGRyKTtcbiYjNDM7XHRcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgUkVBRF9FUlJPUiwgcmV0KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogVGVzdCB0aGUgYWRkcmVzcyBhY2Nlc3NhYmlsaXR5IHdpdGhvdXQgY2hlY2tfbWVtb3J5KCkuICovXG4mIzQzO1x0XHRGT1JDRV9SRUFEKCphZGRyKTtcbiYjNDM7XHRcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9TT0ZUX0NMRUFOX1NITUVNLCByZXQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKG11bm1hcChhZGRyLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSksIDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBURVNUX0hBUk5FU1NfTUFJTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBmb3Igc2htZW0gcGFnZXMgYnkgcmV0dXJuaW5nIE1GX0RFTEFZRUQgaW5zdGVhZCBvZiAwIGluIHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpbywgYW5kIHVwZGF0ZXMgdHJ1bmNhdGVfZXJyb3JfZm9saW8gdG8gaGFuZGxlIHRoaXMgbmV3IHJldHVybiB2YWx1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBpcyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgb24gc2htZW0gbWFwcGluZ3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMzJhNzM2Mzk0ZGE5YTZlZDVhZmNmMzcwZWE2ZWIzZTdkYTNmMDNlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMTk6NTA6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCBhYWYxNDYwOGIzMGUyLi5jN2EwMGM3YmUzNjhlIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTg0NywyNCAmIzQzOzg0NywyNSBAQCBzdGF0aWMgaW50IGtpbGxfYWNjZXNzaW5nX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBsb25nIHBmbiwKIH0KIAogLyoKLSAqIE1GX0lHTk9SRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbmVkJiMzOTtlZC4KJiM0MzsgKiBNRl9JR05PUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb24mIzM5O2VkLgogICogQnV0IGl0IGNvdWxkIG5vdCBkbyBtb3JlIHRvIGlzb2xhdGUgdGhlIHBhZ2UgZnJvbSBiZWluZyBhY2Nlc3NlZCBhZ2FpbiwKICAqIG5vciBkb2VzIGl0IGtpbGwgdGhlIHByb2Nlc3MuIFRoaXMgaXMgZXh0cmVtZWx5IHJhcmUgYW5kIG9uZSBvZiB0aGUKICAqIHBvdGVudGlhbCBjYXVzZXMgaXMgdGhhdCB0aGUgcGFnZSBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkIGR1ZSB0bwogICogdW5kZXJseWluZyByYWNlIGNvbmRpdGlvbi4gVGhpcyBpcyB0aGUgbW9zdCBzZXZlcmUgb3V0Y29tZXMuCiAgKgotICogTUZfRkFJTEVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCYjMzk7ZWQuCiYjNDM7ICogTUZfRkFJTEVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb24mIzM5O2VkLgogICogSXQgc2hvdWxkIGhhdmUga2lsbGVkIHRoZSBwcm9jZXNzLCBidXQgaXQgY2FuJiMzOTt0IGlzb2xhdGUgdGhlIHBhZ2UsCiAgKiBkdWUgdG8gY29uZGl0aW9ucyBzdWNoIGFzIGV4dHJhIHBpbiwgdW5tYXAgZmFpbHVyZSwgZXRjLiBBY2Nlc3NpbmcKICAqIHRoZSBwYWdlIGFnYWluIG1heSB0cmlnZ2VyIGFub3RoZXIgTUNFIGFuZCB0aGUgcHJvY2VzcyB3aWxsIGJlIGtpbGxlZAogICogYnkgdGhlIG0tZigpIGhhbmRsZXIgaW1tZWRpYXRlbHkuCiAgKgotICogTUZfREVMQVlFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uZWQmIzM5O2VkLgotICogVGhlIHBhZ2UgaXMgdW5tYXBwZWQsIGFuZCBpcyByZW1vdmVkIGZyb20gdGhlIExSVSBvciBmaWxlIG1hcHBpbmcuCi0gKiBBbiBhdHRlbXB0IHRvIGFjY2VzcyB0aGUgcGFnZSBhZ2FpbiB3aWxsIHRyaWdnZXIgcGFnZSBmYXVsdCBhbmQgdGhlCi0gKiBQRiBoYW5kbGVyIHdpbGwga2lsbCB0aGUgcHJvY2Vzcy4KJiM0MzsgKiBNRl9ERUxBWUVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb24mIzM5O2VkLgomIzQzOyAqIEl0IG1lYW5zIHRoZSBwYWdlIHdhcyB1bm1hcHBlZCBhbmQgcGFydGlhbGx5IGlzb2xhdGVkIChlLmcuIHJlbW92ZWQgZnJvbQomIzQzOyAqIGZpbGUgbWFwcGluZyBvciB0aGUgTFJVKSBidXQgZnVsbCBjbGVhbnVwIGlzIGRlZmVycmVkIChlLmcuIHRoZSBtZXRhZGF0YQomIzQzOyAqIGZvciB0aGUgbWVtb3J5LCBhcyBpbiBzdHJ1Y3QgcGFnZS9mb2xpbywgaXMgc3RpbGwgcmVmZXJlbmNlZCkuIEFueQomIzQzOyAqIGZ1cnRoZXIgYWNjZXNzIHRvIHRoZSBwYWdlIHdpbGwgcmVzdWx0IGluIHRoZSBwcm9jZXNzIGJlaW5nIGtpbGxlZC4KICAqCi0gKiBNRl9SRUNPVkVSRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbmVkJiMzOTtlZC4KJiM0MzsgKiBNRl9SRUNPVkVSRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbiYjMzk7ZWQuCiAgKiBUaGUgcGFnZSBoYXMgYmVlbiBjb21wbGV0ZWx5IGlzb2xhdGVkLCB0aGF0IGlzLCB1bm1hcHBlZCwgdGFrZW4gb3V0IG9mCiAgKiB0aGUgYnVkZHkgc3lzdGVtLCBvciBob2xlLXB1bmNoZWQgb3V0IG9mIHRoZSBmaWxlIG1hcHBpbmcuCiAgKi8KQEAgLTkzOCwxMCAmIzQzOzkzOSwxMiBAQCBzdGF0aWMgaW50IHRydW5jYXRlX2Vycm9yX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgcGZuLAogCWlmIChtYXBwaW5nLSZndDthX29wcy0mZ3Q7ZXJyb3JfcmVtb3ZlX2ZvbGlvKSB7CiAJCWludCBlcnIgPSBtYXBwaW5nLSZndDthX29wcy0mZ3Q7ZXJyb3JfcmVtb3ZlX2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTsKIAotCQlpZiAoZXJyICE9IDApCiYjNDM7CQlpZiAoZXJyID09IE1GX0RFTEFZRUQpCiYjNDM7CQkJcmV0ID0gZXJyOwomIzQzOwkJZWxzZSBpZiAoZXJyICE9IDApCiAJCQlwcl9pbmZvKCYjMzQ7JSNseDogRmFpbGVkIHRvIHB1bmNoIHBhZ2U6ICVkXG4mIzM0OywgcGZuLCBlcnIpOwogCQllbHNlIGlmICghZmlsZW1hcF9yZWxlYXNlX2ZvbGlvKGZvbGlvLCBHRlBfTk9JTykpCi0JCQlwcl9pbmZvKCYjMzQ7JSNseDogZmFpbGVkIHRvIHJlbGVhc2UgYnVmZmVyc1xuJiMzNDssIHBmbik7CiYjNDM7CQkJcHJfaW5mbygmIzM0OyUjbHg6IEZhaWxlZCB0byByZWxlYXNlIGJ1ZmZlcnNcbiYjMzQ7LCBwZm4pOwogCQllbHNlCiAJCQlyZXQgPSBNRl9SRUNPVkVSRUQ7CiAJfSBlbHNlIHsKQEAgLTEwMzYsMTggJiM0MzsxMDM5LDE0IEBAIHN0YXRpYyBpbnQgbWVfcGFnZWNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApCiAJCWdvdG8gb3V0OwogCX0KIAotCS8qCi0JICogVGhlIHNobWVtIHBhZ2UgaXMga2VwdCBpbiBwYWdlIGNhY2hlIGluc3RlYWQgb2YgdHJ1bmNhdGluZwotCSAqIHNvIGlzIGV4cGVjdGVkIHRvIGhhdmUgYW4gZXh0cmEgcmVmY291bnQgYWZ0ZXIgZXJyb3ItaGFuZGxpbmcuCi0JICovCi0JZXh0cmFfcGlucyA9IHNobWVtX21hcHBpbmcobWFwcGluZyk7Ci0KIAkvKgogCSAqIFRydW5jYXRpb24gaXMgYSBiaXQgdHJpY2t5LiBFbmFibGUgaXQgcGVyIGZpbGUgc3lzdGVtIGZvciBub3cuCiAJICoKIAkgKiBPcGVuOiB0byB0YWtlIGlfcndzZW0gb3Igbm90IGZvciB0aGlzPyBSaWdodCBub3cgd2UgZG9uJiMzOTt0LgogCSAqLwogCXJldCA9IHRydW5jYXRlX2Vycm9yX2ZvbGlvKGZvbGlvLCBwYWdlX3RvX3BmbihwKSwgbWFwcGluZyk7CiYjNDM7CiYjNDM7CWV4dHJhX3BpbnMgPSByZXQgPT0gTUZfREVMQVlFRDsKIAlpZiAoaGFzX2V4dHJhX3JlZmNvdW50KHBzLCBwLCBleHRyYV9waW5zKSkKIAkJcmV0ID0gTUZfRkFJTEVEOwogCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA3NzRmNGIxOGZmNWM2Li5kNmY5NDc4NmU3MDllIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTUxMzYsNyAmIzQzOzUxMzYsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2htZW1fZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCiBzdGF0aWMgaW50IHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkgICBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gTUZfREVMQVlFRDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc2htZW1fYW9wcyA9IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IDFhNWEzMmUyMmNjZTIuLjViMjZmMGM0NDY2NDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtMjAsNiAmIzQzOzIwLDEwIEBACiAKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKIAomIzQzOyNpZm5kZWYgZmFsbHRocm91Z2gKJiM0MzsjIGRlZmluZSBmYWxsdGhyb3VnaCBfX2F0dHJpYnV0ZV9fKChfX2ZhbGx0aHJvdWdoX18pKQomIzQzOyNlbmRpZgomIzQzOwogZW51bSBpbmplY3RfdHlwZSB7CiAJTUFEVl9IQVJELAogCU1BRFZfU09GVCwKQEAgLTI5LDkgJiM0MzszMywxNCBAQCBlbnVtIHJlc3VsdF90eXBlIHsKIAlNQURWX0hBUkRfQU5PTiwKIAlNQURWX0hBUkRfQ0xFQU5fUEFHRUNBQ0hFLAogCU1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEUsCiYjNDM7CU1BRFZfSEFSRF9DTEVBTl9TSE1FTSwKJiM0MzsJTUFEVl9IQVJEX0RJUlRZX1NITUVNLAogCU1BRFZfU09GVF9BTk9OLAogCU1BRFZfU09GVF9DTEVBTl9QQUdFQ0FDSEUsCiAJTUFEVl9TT0ZUX0RJUlRZX1BBR0VDQUNIRSwKJiM0MzsJTUFEVl9TT0ZUX0NMRUFOX1NITUVNLAomIzQzOwlNQURWX1NPRlRfRElSVFlfU0hNRU0sCiYjNDM7CVJFQURfRVJST1IsCiB9OwogCiBzdGF0aWMgam1wX2J1ZiBzaWduYWxfam1wX2J1ZjsKQEAgLTE1NywxNyAmIzQzOzE2NiwyMiBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZQogCWNhc2UgTUFEVl9IQVJEX0NMRUFOX1BBR0VDQUNIRToKIAljYXNlIE1BRFZfU09GVF9DTEVBTl9QQUdFQ0FDSEU6CiAJY2FzZSBNQURWX1NPRlRfRElSVFlfUEFHRUNBQ0hFOgotCQkvKiBJdCBpcyBub3QgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIFNJR0JVUyBzaWduYWwuICovCi0JCUFTU0VSVF9FUShzZXRqbXAsIDApOwotCiYjNDM7CWNhc2UgTUFEVl9TT0ZUX0RJUlRZX1NITUVNOgogCQkvKiBUaGUgcGFnZSBjb250ZW50IHNob3VsZCByZW1haW4gdW5jaGFuZ2VkLiAqLwogCQlBU1NFUlRfVFJVRShjaGVja19tZW1vcnkodmFkZHIsIHNlbGYtJmd0O3BhZ2Vfc2l6ZSkpOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgTUFEVl9IQVJEX0NMRUFOX1NITUVNOgomIzQzOwljYXNlIE1BRFZfU09GVF9DTEVBTl9TSE1FTToKJiM0MzsJCS8qIEl0IGlzIG5vdCBleHBlY3RlZCB0byByZWNlaXZlIGEgU0lHQlVTIHNpZ25hbC4gKi8KJiM0MzsJCUFTU0VSVF9FUShzZXRqbXAsIDApOwogCiAJCS8qIFRoZSBiYWNraW5nIHBmbiBvZiBhZGRyIHNob3VsZCBoYXZlIGNoYW5nZWQuICovCiAJCUFTU0VSVF9ORShwYWdlbWFwX2dldF9wZm4oc2VsZi0mZ3Q7cGFnZW1hcF9mZCwgdmFkZHIpLCBzZWxmLSZndDtwZm4pOwogCQlicmVhazsKIAljYXNlIE1BRFZfSEFSRF9BTk9OOgogCWNhc2UgTUFEVl9IQVJEX0RJUlRZX1BBR0VDQUNIRToKJiM0MzsJY2FzZSBNQURWX0hBUkRfRElSVFlfU0hNRU06CiYjNDM7CWNhc2UgUkVBRF9FUlJPUjoKIAkJLyogVGhlIFNJR0JVUyBzaWduYWwgc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZC4gKi8KIAkJQVNTRVJUX0VRKHNldGptcCwgMSk7CiAKQEAgLTI2Myw2ICYjNDM7Mjc3LDIwIEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9maWxlKGNvbnN0IGNoYXIgKmZuYW1lLCB1bnNpZ25lZCBsb25nIHNpemUpCiAJcmV0dXJuIGZkOwogfQogCiYjNDM7c3RhdGljIGludCBwcmVwYXJlX3NobWVtKGNvbnN0IGNoYXIgKmZuYW1lLCB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CWZkID0gbWVtZmRfY3JlYXRlKGZuYW1lLCAwKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKGZ0cnVuY2F0ZShmZCwgc2l6ZSkgJmx0OyAwKSB7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGZkOwomIzQzO30KJiM0MzsKIC8qIEJvcnJvd2VkIGZyb20gbW0vZ3VwX2xvbmd0ZXJtLmMuICovCiBzdGF0aWMgaW50IGdldF9mc190eXBlKGludCBmZCkKIHsKQEAgLTM1NSw0ICYjNDM7MzgzLDg4IEBAIFRFU1RfRihtZW1vcnlfZmFpbHVyZSwgZGlydHlfcGFnZWNhY2hlKQogCUFTU0VSVF9FUShjbG9zZShmZCksIDApOwogfQogCiYjNDM7VEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBkaXJ0eV9zaG1lbSkKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJY2hhciAqYWRkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZmQgPSBwcmVwYXJlX3NobWVtKCYjMzQ7c2htZW0tZmlsZSYjMzQ7LCBzZWxmLSZndDtwYWdlX3NpemUpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7ZmFpbGVkIHRvIG9wZW4gdGVzdCBzaG1lbS1maWxlLlxuJiMzNDspOwomIzQzOwomIzQzOwlhZGRyID0gbW1hcCgwLCBzZWxmLSZndDtwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICAgTUFQX1NIQVJFRCwgZmQsIDApOwomIzQzOwlpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDttbWFwIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkuXG4mIzM0Oyk7CiYjNDM7CX0KJiM0MzsJbWVtc2V0KGFkZHIsIDB4Y2UsIHNlbGYtJmd0O3BhZ2Vfc2l6ZSk7CiYjNDM7CiYjNDM7CXByZXBhcmUoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTsKJiM0MzsKJiM0MzsJcmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTsKJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyAhc2VsZi0mZ3Q7aW5qZWN0aW9uX2F0dGVtcHRlZCkgewomIzQzOwkJc2VsZi0mZ3Q7aW5qZWN0aW9uX2F0dGVtcHRlZCA9IHRydWU7CiYjNDM7CQlBU1NFUlRfRVEodmFyaWFudC0mZ3Q7aW5qZWN0KHNlbGYsIGFkZHIpLCAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmFyaWFudC0mZ3Q7dHlwZSA9PSBNQURWX0hBUkQpIHsKJiM0MzsJCWNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9IQVJEX0RJUlRZX1NITUVNLCByZXQpOwomIzQzOwkJcmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTsKJiM0MzsJCWlmIChyZXQgPT0gMCkKJiM0MzsJCQlGT1JDRV9SRUFEKCphZGRyKTsKJiM0MzsJCWNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgUkVBRF9FUlJPUiwgcmV0KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9TT0ZUX0RJUlRZX1NITUVNLCByZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShtdW5tYXAoYWRkciwgc2VsZi0mZ3Q7cGFnZV9zaXplKSwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShjbG9zZShmZCksIDApOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGNsZWFuX3NobWVtKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwljaGFyICphZGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlmZCA9IHByZXBhcmVfc2htZW0oJiMzNDtzaG1lbS1maWxlJiMzNDssIHNlbGYtJmd0O3BhZ2Vfc2l6ZSk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtmYWlsZWQgdG8gb3BlbiB0ZXN0IHNobWVtLWZpbGUuXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWFkZHIgPSBtbWFwKDAsIHNlbGYtJmd0O3BhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJCSAgICBNQVBfU0hBUkVELCBmZCwgMCk7CiYjNDM7CWlmIChhZGRyID09IE1BUF9GQUlMRUQpIHsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O21tYXAgZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeS5cbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwlGT1JDRV9SRUFEKCphZGRyKTsKJiM0MzsKJiM0MzsJcHJlcGFyZShfbWV0YWRhdGEsIHNlbGYsIGFkZHIpOwomIzQzOwomIzQzOwlyZXQgPSBzaWdzZXRqbXAoc2lnbmFsX2ptcF9idWYsIDEpOwomIzQzOwlpZiAoIXJldCAmYW1wOyZhbXA7ICFzZWxmLSZndDtpbmplY3Rpb25fYXR0ZW1wdGVkKSB7CiYjNDM7CQlzZWxmLSZndDtpbmplY3Rpb25fYXR0ZW1wdGVkID0gdHJ1ZTsKJiM0MzsJCUFTU0VSVF9FUSh2YXJpYW50LSZndDtpbmplY3Qoc2VsZiwgYWRkciksIDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDt0eXBlID09IE1BRFZfSEFSRCkgewomIzQzOwkJY2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBNQURWX0hBUkRfQ0xFQU5fU0hNRU0sIHJldCk7CiYjNDM7CQlyZXQgPSBzaWdzZXRqbXAoc2lnbmFsX2ptcF9idWYsIDEpOwomIzQzOwkJaWYgKHJldCA9PSAwKQomIzQzOwkJCUZPUkNFX1JFQUQoKmFkZHIpOwomIzQzOwkJY2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBSRUFEX0VSUk9SLCByZXQpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogVGVzdCB0aGUgYWRkcmVzcyBhY2Nlc3NhYmlsaXR5IHdpdGhvdXQgY2hlY2tfbWVtb3J5KCkuICovCiYjNDM7CQlGT1JDRV9SRUFEKCphZGRyKTsKJiM0MzsJCWNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9TT0ZUX0NMRUFOX1NITUVNLCByZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShtdW5tYXAoYWRkciwgc2VsZi0mZ3Q7cGFnZV9zaXplKSwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShjbG9zZShmZCksIDApOwomIzQzO30KJiM0MzsKIFRFU1RfSEFSTkVTU19NQUlOCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4OTQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIFJlbGF0ZWQgdG8gTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBzb21lIGNyaXRpY2FsIGNvZGU6IGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgYG1tL3NobWVtLmNgLCBhbmQgYSBzZWxmdGVzdCBmaWxlLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdDsgYW55dGhpbmcgZGVhbGluZyB3aXRoIG1lbW9yeSBmYWlsdXJlcyBpcyBzZW5zaXRpdmUuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IHRoZSBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCBmdW5jdGlvbiBpbiBgbW0vc2htZW0uY2AgcmVwb3J0cyBpdHMgb3V0Y29tZS4gSW5zdGVhZCBvZiByZXR1cm5pbmcgMCAoc3VjY2Vzcywgb3IgYXQgbGVhc3Qgbm8gaW1tZWRpYXRlIGVycm9yKSwgaXQmIzM5O3Mgbm93IHJldHVybmluZyBgTUZfREVMQVlFRGAuIFRoaXMgc2VlbXMgbGlrZSBhIHNpZ25hbCB0aGF0IHRoZSByZW1vdmFsIGlzbiYjMzk7dCAqaW1tZWRpYXRlbHkqIGNvbXBsZXRlLCBwZXJoYXBzIGR1ZSB0byBzb21lIGRlZmVycmVkIGFjdGlvbi4KClRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGB0cnVuY2F0ZV9lcnJvcl9mb2xpb2AgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIG5lZWRzIHRvICpoYW5kbGUqIHRoaXMgYE1GX0RFTEFZRURgIHJldHVybiB2YWx1ZS4gU3BlY2lmaWNhbGx5LCB0aGVyZSYjMzk7cyBsb2dpYyBhZGRlZCB0byBjaGVjayBmb3IgdGhhdCByZXR1cm4gY29kZSBhbmQgYWN0IGFjY29yZGluZ2x5LiBUaGVuLCB3ZSBoYXZlIGFuIHVwZGF0ZSB0byBgbWVfcGFnZWNhY2hlX2NsZWFuYCB0byBkZWFsIHdpdGggYHJldCA9PSBNRl9ERUxBWUVEYCBmb3IgYGV4dHJhX3BpbnNgLgoKTGV0JiMzOTtzIGRpZyBpbi4gYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgaXMgYW4gYWRkcmVzcyBzcGFjZSBvcGVyYXRpb24sIHNvIHRoaXMgbG9va3MgbGlrZSBrZXJuZWwgbG9naWMuIE1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBNQURWX0hXUE9JU09OIGFuZCBoYXJkd2FyZSBNQ0VzIGFyZSBrZXkgdHJpZ2dlcmluZyBtZWNoYW5pc21zLgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AuIE9rYXksIHRoZSBjb2RlIGp1c3QgcmV0dXJucyBgTUZfREVMQVlFRGAuIFN0cmFpZ2h0Zm9yd2FyZC4gVGhpcyB0cmlnZ2VycyB0aGUgbmV3IGBNRl9ERUxBWUVEYCBoYW5kbGluZyBpbiBgdHJ1bmNhdGVfZXJyb3JfZm9saW9gLiBUaGUgY29kZSBjaGVja3MgaWYgYG1hcHBpbmctJmd0O2Ffb3BzLSZndDtlcnJvcl9yZW1vdmVfZm9saW9gIGlzIGRlZmluZWQsIGNhbGxzIGl0LCBhbmQgdGhlbiBoYW5kbGVzIHRoZSByZXR1cm4gdmFsdWUgKGluY2x1ZGluZyBgTUZfREVMQVlFRGApLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBkZWZlcnJpbmcgdGhlIGFjdHVhbCBwYWdlIHJlbW92YWwgaW4gYHNobWVtYC4KCmBtZV9wYWdlY2FjaGVfY2xlYW5gIGlzIHdoZXJlIHRoaW5ncyBhcmUgc3RhcnRpbmcgdG8gZ2V0IGludGVyZXN0aW5nLiBUaGUgY29kZSBjYWxscyBgdHJ1bmNhdGVfZXJyb3JfZm9saW9gLCBhbmQgdGhlbiBjaGVja3MgZm9yIGByZXQgPT0gTUZfREVMQVlFRGAuIElmIGl0IGdldHMgYSBkZWxheWVkIHJldHVybiwgaXQgc2V0cyBgZXh0cmFfcGlucyA9IHRydWVgLiBTbyB3ZSYjMzk7cmUgZXNzZW50aWFsbHkgc2F5aW5nLCAmIzM0O0hleSwgd2UmIzM5O3JlIG5vdCBkb25lIHdpdGggdGhpcyBwYWdlIHlldDsga2VlcCBpdCBwaW5uZWQuJiMzNDsKClRoaXMgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgbWVfcGFnZWNhY2hlX2NsZWFuYCwgYHRydW5jYXRlX2Vycm9yX2ZvbGlvYCwgYW5kIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gLgoKTm93LCB3YWl0IGEgc2Vjb25kLi4uIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gIGlzICpzdGF0aWMqLiBCdXQgaXQmIzM5O3MgYW4gQVBJIGVudHJ5cG9pbnQgZm9yIGBlcnJvcl9yZW1vdmVfZm9saW9gLiBPa2F5LCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgc2htZW1fYW9wcy5lcnJvcl9yZW1vdmVfZm9saW9gLiBGaW5lLgoKTGV0JiMzOTtzIGp1c3QgY29uZmlybSBgdHJ1bmNhdGVfZXJyb3JfZm9saW9gIGlzIGFsc28gc3RhdGljLiBZdXAsIGl0IGlzLiBBbmQgYG1lX3BhZ2VjYWNoZV9jbGVhbmAgdG9vLiBBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMuCgpBbHJpZ2h0LCBJIG5lZWQgdG8gY2hlY2sgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFnYWluLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBoZXJlLiBUaGUgbWFpbiBvbmUgaXMgYG1lbW9yeV9mYWlsdXJlYC4gT2theSwgbGV0JiMzOTtzIHNlYXJjaCBmb3IgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IG1lbW9yeV9mYWlsdXJlXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTIzMTk9c3RhdGljIGludCBtZW1vcnlfZmFpbHVyZV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzODQtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzODU6aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzODYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipDb25zaWRlcmluZyBNZW1vcnkgTWFuYWdlbWVudCBTdHJhdGVnaWVzKioKCk9rYXksIHNvIGBtZW1vcnlfZmFpbHVyZWAgaXNuJiMzOTt0IGEgc3RhdGljIGNvbmNlcHQsIHRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUuIE5vdyBJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IGFsdGVybmF0aXZlcyBvciByZWxhdGVkIGlkZWFzIGFuZCBob3cgdGhleSBwbGF5IGludG8gdGhpcy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBtaWdodCBiZSByZWxldmFudC4gSXMgaXQgYSBwb3RlbnRpYWwgc29sdXRpb24/IERvZXMgaXQgcHJvdmlkZSBhIGNvbXBsZW1lbnRhcnkgYXBwcm9hY2g/IE9yIGNvdWxkIGl0IGJlIGEgcG90ZW50aWFsIGNvdW50ZXItaW5kaWNhdGlvbj8gSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggaG93IHRoZXNlIHR3byBjb25jZXB0cyBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2luamVjdF9lcnJvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MTMzOD1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDQ2LSAqL1xubW0vbWFkdmlzZS5jOjE0NDc6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbm1tL21hZHZpc2UuYy0xNDQ4LXtcbi0tXG5tbS9tYWR2aXNlLmM9MTQ5Mj1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTUwNC1cbm1tL21hZHZpc2UuYzoxNTA1OnN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG5tbS9tYWR2aXNlLmMtMTUwNi17XG4tLVxubW0vbWFkdmlzZS5jPTE4ODc9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXG4tLVxubW0vbWFkdmlzZS5jLTE4OTYtXHRcdHJhbmdlLVx1MDAzZWVuZCA9IHN0YXJ0ICYjNDM7IGxlbl9pbjtcbm1tL21hZHZpc2UuYzoxODk3Olx0XHRyZXR1cm4gbWFkdmlzZV9pbmplY3RfZXJyb3IobWFkdl9iZWhhdmlvcik7XG5tbS9tYWR2aXNlLmMtMTg5OC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjU3CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBGdW5jdGlvbnMgaW4gTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKUmlnaHQsIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgc3RhdGljLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkLiBOb3csIGxldCYjMzk7cyBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGhhbmdpbmcgYXJvdW5kIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIG90aGVyLCBwZXJoYXBzIG1vcmUgZ2xvYmFsbHkgYWNjZXNzaWJsZSwgdG9vbHMgaW4gdGhhdCBmaWxlIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gZXJyb3IgaW5qZWN0aW9uLCBvciBtb3JlIGdlbmVyYWxseSwgbWVtb3J5IGZhdWx0IGhhbmRsaW5nLiBEaWdnaW5nIGludG8gdGhpcyBmaWxlIGlzIG9mdGVuIGtleSB0byBkZWJ1Z2dpbmcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBhbmQgZmluZGluZyByZXVzYWJsZSwgbm9uLXN0YXRpYyBmdW5jdGlvbmFsaXR5IGNvdWxkIHByb3ZpZGUgdmFsdWFibGUgaW5zaWdodHMgb3IgYnVpbGRpbmcgYmxvY2tzIGZvciBteSBvd24gd29yay4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHNpbWlsYXIgY29kZSBzdHJ1Y3R1cmVzIG9mdGVuIGV4aXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgc29tZSB0aGF0IG1pZ2h0IGJlIG9mIHVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl8wLTldJiM0MzsgW2EtekEtWl8wLTldJiM0MztcXCguKlxcKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz04Mj1zdGF0aWMgYm9vbCBod19tZW1vcnlfZmFpbHVyZSBfX3JlYWRfbW9zdGx5O1xubW0vbWVtb3J5LWZhaWx1cmUuYy04My1cbm1tL21lbW9yeS1mYWlsdXJlLmM6ODQ6c3RhdGljIERFRklORV9NVVRFWChtZl9tdXRleCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTg1LVxubW0vbWVtb3J5LWZhaWx1cmUuYzo4Njp2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXG5tbS9tZW1vcnktZmFpbHVyZS5jLTg3LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTkxLVxubW0vbWVtb3J5LWZhaWx1cmUuYzo5Mjp2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtOTMte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTA0PXN0YXRpYyBzc2l6ZV90IF9uYW1lIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXHRcdFx0XFxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMS19XHRcdFx0XHRcdFx0XHRcdFxcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjExMjpzdGF0aWMgREVWSUNFX0FUVFJfUk8oX25hbWUpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMy1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE3Mz1zdGF0aWMgc3RydWN0IHJiX3Jvb3RfY2FjaGVkIHBmbl9zcGFjZV9pdHJlZSA9IFJCX1JPT1RfQ0FDSEVEO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzQtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE3NTpzdGF0aWMgREVGSU5FX01VVEVYKHBmbl9zcGFjZV9sb2NrKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTc2LVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjIzPXN0YXRpYyBod3BvaXNvbl9maWx0ZXJfZnVuY190IF9fcmN1ICpod3BvaXNvbl9maWx0ZXJfZnVuYyBfX3JlYWRfbW9zdGx5O1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjQtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIyNTp2b2lkIGh3cG9pc29uX2ZpbHRlcl9yZWdpc3Rlcihod3BvaXNvbl9maWx0ZXJfZnVuY190ICpmaWx0ZXIpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyNi17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMjk9RVhQT1JUX1NZTUJPTF9HUEwoaHdwb2lzb25fZmlsdGVyX3JlZ2lzdGVyKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjMwLVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMzE6dm9pZCBod3BvaXNvbl9maWx0ZXJfdW5yZWdpc3Rlcih2b2lkKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzIte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjg2PXN0YXRpYyBpbnQga2lsbF9wcm9jKHN0cnVjdCB0b19raWxsICp0aywgdW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTMxNi0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MzE3OnZvaWQgc2hha2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMzE4LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTEzMTU9c3RhdGljIGlubGluZSBib29sIFBhZ2VIV1BvaXNvblRha2VuT2ZmKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTMxOS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTMyMDp2b2lkIFNldFBhZ2VIV1BvaXNvblRha2VuT2ZmKHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzIxLXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMjQtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzMjU6dm9pZCBDbGVhclBhZ2VIV1BvaXNvblRha2VuT2ZmKHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzI2LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE1NDk9c3RhdGljIGludCBnZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE1NjYtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE1Njc6aW50IHVubWFwX3BvaXNvbmVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIG11c3Rfa2lsbClcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTU2OC17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODc1PXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfbGlzdF9oZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODc5LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxODgwOmJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4ODEte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTk4Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDAxLVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMDAyOnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDAzLXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIyMTI9c3RhdGljIHZvaWQga2lsbF9wcm9jc19ub3coc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjIzLVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMjI0OmludCByZWdpc3Rlcl9wZm5fYWRkcmVzc19zcGFjZShzdHJ1Y3QgcGZuX2FkZHJlc3Nfc3BhY2UgKnBmbl9zcGFjZSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjIyNS17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMjQwPUVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX3Bmbl9hZGRyZXNzX3NwYWNlKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjI0MS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjI0Mjp2b2lkIHVucmVnaXN0ZXJfcGZuX2FkZHJlc3Nfc3BhY2Uoc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyNDMte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjMxOT1zdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM4NC0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjM4NTppbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM4Ni17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNjI4PXN0cnVjdCBtZW1vcnlfZmFpbHVyZV9jcHUge1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYzNC1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjYzNTpzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IG1lbW9yeV9mYWlsdXJlX2NwdSwgbWVtb3J5X2ZhaWx1cmVfY3B1KTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYzNi1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NTItICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2NTM6dm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjU0LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3MTM9Y29yZV9pbml0Y2FsbChtZW1vcnlfZmFpbHVyZV9pbml0KTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MzQtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3MzU6aW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjczNi17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yODQ4PXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk2NS0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjk2NjppbnQgc29mdF9vZmZsaW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk2Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE5NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IFBvaXNvbmluZyBUZWNobmlxdWVzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcyBtZW1vcnkgcG9pc29uaW5nIHN0dWZmLiBMb29rcyBsaWtlIGBtZW1vcnlfZmFpbHVyZWAsIGB1bnBvaXNvbl9tZW1vcnlgLCBhbmQgYHNvZnRfb2ZmbGluZV9wYWdlYCBhcmUgdGhlIG9idmlvdXMgcGxhY2VzIHRvIHN0YXJ0IGRpZ2dpbmcuIEdvb2QgZW50cnkgcG9pbnRzLCBmb3Igc3VyZS4gQWgsIGFuZCBoZXJlIGl0IGlzOiBgbWFkdmlzZWAgd2l0aCBgTUFEVl9IV1BPSVNPTmAgaXMgdGhlIG1haW4gbWV0aG9kIHRvIHRyaWdnZXIgdGhpcyBmcm9tIHVzZXJzcGFjZS4gTm93LCB3YWl0IGEgc2Vjb25kLi4uIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgZ2V0cyBjYWxsZWQgZnJvbSBgbWFkdmlzZV9kb19iZWhhdmlvcmAgd2hlbiB0aGUgYG1hZHZfYmVoYXZpb3ItJmd0O2JlaGF2aW9yYCBpcyBlaXRoZXIgYE1BRFZfSFdQT0lTT05gIG9yIGBNQURWX1NPRlRfT0ZGTElORWAuIFRoYXQmIzM5O3MgdGhlIGNvbm5lY3Rpb24gSSB3YXMgbG9va2luZyBmb3IuIFJpZ2h0LCBsZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBtbS9tYWR2aXNlLmNgIGFuZCBjaGVjayBvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBNQURWX0hXUE9JU09OYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgc2hvdWxkIGJlIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFEVl9IV1BPSVNPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MTQ5Mj1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTQ5NC1cdHN3aXRjaCAobWFkdl9iZWhhdmlvci1cdTAwM2ViZWhhdmlvcikge1xubW0vbWFkdmlzZS5jOjE0OTU6XHRjYXNlIE1BRFZfSFdQT0lTT046XG5tbS9tYWR2aXNlLmMtMTQ5Ni1cdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG4tLVxubW0vbWFkdmlzZS5jPTE1MTg9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE1NTEtXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxubW0vbWFkdmlzZS5jOjE1NTI6XHRjYXNlIE1BRFZfSFdQT0lTT046XG5tbS9tYWR2aXNlLmMtMTU1My0jZW5kaWZcbi0tXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTk0My0gKiAgTUFEVl9LRUVQT05GT1JLIC0gdW5kbyB0aGUgZWZmZWN0IG9mIE1BRFZfV0lQRU9ORk9SS1xubW0vbWFkdmlzZS5jOjE5NDQ6ICogIE1BRFZfSFdQT0lTT04gLSB0cmlnZ2VyIG1lbW9yeSBlcnJvciBoYW5kbGVyIGFzIGlmIHRoZSBnaXZlbiBtZW1vcnkgcmFuZ2Vcbm1tL21hZHZpc2UuYy0xOTQ1LSAqXHRcdHdlcmUgY29ycnVwdGVkIGJ5IHVucmVjb3ZlcmFibGUgaGFyZHdhcmUgbWVtb3J5IGZhaWx1cmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MDAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IEVycm9yIEluamVjdGlvbioqCgpPa2F5LCBzbyB0aGUgYG1hZHZpc2VgIHdpdGggYE1BRFZfSFdQT0lTT05gIHJvdXRlIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoIGZvciB0cmlnZ2VyaW5nIHRoaXMgbWVtb3J5IGVycm9yIGNvbmRpdGlvbi4gVGhhdCYjMzk7cyB0aGUgZXN0YWJsaXNoZWQgbWV0aG9kLiBOb3csIHRoZSB0cmljayBpcyBwaW5wb2ludGluZyB0aGUgKmV4YWN0KiBmb2N1cyBzeW1ib2xzIGZvciBzeXprYWxsZXIgdG8gdGFyZ2V0LgoKSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgYG1lbW9yeV9mYWlsdXJlYCwgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCAod2hpY2gsIGltcG9ydGFudGx5LCBjYWxscyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgKSwgb3IgZXZlbiBqdXN0IGZvY3VzaW5nIG9uIGBtZW1vcnlfZmFpbHVyZWAgZGlyZWN0bHkgYWxvbmdzaWRlIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gLiBJIHRob3VnaHQgbWF5YmUgZnV6emluZyBtaWdodCBieXBhc3Mgc3RhdGljIGlubGluaW5nLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgaXMgYWN0dWFsbHkgYW4gYWRkcmVzcyBzcGFjZSBvcGVyYXRpb24sIHNvIGl0ICpjYW4mIzM5O3QqIGJlIGlubGluZWQuIEJ1dCB3YWl0LCBpdCYjMzk7cyBzdGF0aWMhIFRoYXQgbWlnaHQgYmUgcHJvYmxlbWF0aWMgZm9yIHN5emthbGxlciBpZiBpdCBkb2VzbiYjMzk7dCBoYXZlIGEgc3BlY2lmaWMsIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBJdCBpcyBhc3NpZ25lZCB0byBhIHN0cnVjdCwgd2hpY2ggbWVhbnMgaXRzIGFkZHJlc3MgaXMgZGVmaW5pdGVseSB0YWtlbiBhbmQgbm90IGlubGluZWQsIHdoaWNoIGdpdmVzIHVzIGEgdmFsaWQgc3ltYm9sIQoKSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyBjbGVhcmx5IHNheSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLiBTbywgdGhhdCBzZXR0bGVzIGl0OyBgbWVtb3J5X2ZhaWx1cmVgIGlzIGEgZ29vZCBjYW5kaWRhdGUsIGEgZ29vZCBwbGFjZSB0byBzdGFydC4KCkkmIzM5O20gbm93IHRoaW5raW5nIGFib3V0IGB0cnVuY2F0ZV9lcnJvcl9mb2xpb2AuIEl0JiMzOTtzIHN0YXRpYywgYnV0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBtZV9wYWdlY2FjaGVfY2xlYW5gLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIHRoZSBgcGFnZV9hY3Rpb25gIGFycmF5LiBUaGlzIGlzIGFuIGludGVyZXN0aW5nIGNvbm5lY3Rpb24uIEkgbmVlZCB0byBjaGVjayB0aGUgYHBhZ2VfYWN0aW9uYCBhcnJheSBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgdG8gc2VlIGlmIHRoaXMgaXMgYSB2aWFibGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV9hY3Rpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9MTI4MD1zdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTI5OC1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTI5OTpzdGF0aWMgaW50IHBhZ2VfYWN0aW9uKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnAsXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMDAtXHRcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNjg0PXN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzAzLVx0XHRcdFx0YnJlYWs7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjE3MDQ6XHRyZXR1cm4gcGFnZV9hY3Rpb24ocHMsIHAsIHBmbik7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTE3MDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc4MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkNvbmZpZyBPcHRpb24gRGl2ZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBiZWFyaW5ncy4gQmVmb3JlIGRpdmluZyBpbnRvIHRoZSBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgY29kZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFJpZ2h0LCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBjb250cm9scyB0aGUgYmVoYXZpb3IgSSYjMzk7bSBpbnRlcmVzdGVkIGluLCBiYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCBpcyBtb3N0IGxpa2VseSBgTUVNT1JZX0ZBSUxVUkVgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBzZXQgY29ycmVjdGx5IGFuZCBmaWd1cmUgb3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uIHRvIHBpbiBkb3duIGJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgdG91Y2hpbmcgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzQ3PWNvbmZpZyBERUZBVUxUX01NQVBfTUlOX0FERFJcbi0tXG5tbS9LY29uZmlnLTc2NS1cbm1tL0tjb25maWc6NzY2OmNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG5tbS9LY29uZmlnLTc2Ny1cdGJvb2xcbm1tL0tjb25maWctNzY4LVxubW0vS2NvbmZpZzo3Njk6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG5tbS9LY29uZmlnLTc3MC1cdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnOjc3MTpcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NzItXHRib29sIFwmIzM0O0VuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTc4MD1jb25maWcgSFdQT0lTT05fSU5KRUNUXG5tbS9LY29uZmlnLTc4MS1cdHRyaXN0YXRlIFwmIzM0O0hXUG9pc29uIHBhZ2VzIGluamVjdG9yXCYjMzQ7XG5tbS9LY29uZmlnOjc4MjpcdGRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgXHUwMDI2XHUwMDI2IERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgUFJPQ19GU1xubW0vS2NvbmZpZy03ODMtXHRzZWxlY3QgUFJPQ19QQUdFX01PTklUT1JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIGEgTWVtb3J5IEZhaWx1cmUgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTt2ZSBnb3QgYSBgTUVNT1JZX0ZBSUxVUkVgIGlzc3VlLCBhbmQgSSBpbW1lZGlhdGVseSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGNvZGUgdGhhdCBoYW5kbGVzIGl0IHJlc2lkZXMuIE9rYXksIEkgcmVjYWxsIHNlZWluZyBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCBtZW50aW9uZWQgc29tZXdoZXJlIHJlY2VudGx5IOKAkyB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBOb3csIHdoZXJlIHdhcyB0aGF0IGZ1bmN0aW9uIGRlZmluZWQgYWdhaW4/IEFoLCB5ZXMsIGl0JiMzOTtzIGluIGBtbS9zaG1lbS5jYC4gQnV0IGlzIHRoYXQgZmlsZSBhbHdheXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsPyBJdCB3b3VsZCBiZSB0ZXJyaWJsZSBpZiB3ZSBlbmRlZCB1cCBuZWVkaW5nIHNvbWV0aGluZyB0aGF0IHdhcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG91dC4gTGV0IG1lIHNlZSwgYENPTkZJR19TSE1FTWAgaXMgdXN1YWxseSBlbmFibGVkIGluIG1vc3QgY29uZmlndXJhdGlvbnMsIHNvIGNoYW5jZXMgYXJlLCB5ZXMsIGBzaG1lbS5jYCBpcyBnb2luZyB0byBiZSBwcmVzZW50LiBOb3csIGEga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgaXRzZWxmIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgaXQmIzM5O3Mgd3JhcHBlZCBpbiBhbiBgI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRWAgYmxvY2suIFRoaXMgaXMgY3JpdGljYWwsIHNpbmNlIGlmIGl0JiMzOTtzIG5vdCwgd2UmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHRvIHNlZSBpZiB0aGUgcmVxdWlyZWQgY29kZSBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX2Vycm9yX3JlbW92ZV9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NobWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz01MTMwPXN0YXRpYyB2b2lkIF9faW5pdCBzaG1lbV9kZXN0cm95X2lub2RlY2FjaGUodm9pZClcbi0tXG5tbS9zaG1lbS5jLTUxMzUtLyogS2VlcCB0aGUgcGFnZSBpbiBwYWdlIGNhY2hlIGluc3RlYWQgb2YgdHJ1bmNhdGluZyBpdCAqL1xubW0vc2htZW0uYzo1MTM2OnN0YXRpYyBpbnQgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxubW0vc2htZW0uYy01MTM3LVx0XHRcdFx0ICAgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zaG1lbS5jPTUxNDI9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc2htZW1fYW9wcyA9IHtcbi0tXG5tbS9zaG1lbS5jLTUxNTAtI2VuZGlmXG5tbS9zaG1lbS5jOjUxNTE6XHQuZXJyb3JfcmVtb3ZlX2ZvbGlvID0gc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvLFxubW0vc2htZW0uYy01MTUyLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzc5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgRmFpbHVyZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uIGlzIGhhbmRsZWQsIGFuZCBpdCBzZWVtcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBpc24mIzM5O3QgZGlyZWN0bHkgdGllZCB0byBgI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRWAuIFRoYXQmIzM5O3Mgbm90IHRoZSB0cmlnZ2VyLCBidXQgcmF0aGVyLCBgTUVNT1JZX0ZBSUxVUkVgIGlzIHRoZSByZWFsIGRlcGVuZGVuY3kuIEl0IGFwcGVhcnMgYE1FTU9SWV9GQUlMVVJFYCBlbmFibGVzIHRoZSB3aG9sZSBtZWNoYW5pc20gYW5kIGlzIHJlcXVpcmVkIHRvIHByb3Blcmx5IHVzZSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuIFRoaXMgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24uCgpJIHNob3VsZCB2ZXJpZnkgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGluZGlyZWN0bHkgcmVsYXRlIHRvIHRoaXMgc2NlbmFyaW8uIFRoZSBgSFdQT0lTT05fSU5KRUNUYCBjb25maWcgbWlnaHQgc2VlbSByZWxldmFudCBhdCBmaXJzdCBnbGFuY2UsIGJ1dCBpdCBhcHBlYXJzIHRoYXQgdGhlIGBtYWR2aXNlYCBjYWxsIHdpdGggYE1BRFZfSFdQT0lTT05gIGZ1bmN0aW9ucyBjb3JyZWN0bHkgd2hlbiBgTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQsIHdpdGhvdXQgZXhwbGljaXRseSBuZWVkaW5nIGBIV1BPSVNPTl9JTkpFQ1RgLiBTbywgYE1FTU9SWV9GQUlMVVJFYCBpcyB0aGUgcHJpbWFyeSBvbmUuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgYG1tL21hZHZpc2UuY2AgZmlsZSBhZ2FpbiB0byBjb25maXJtIGhvdyBgTUFEVl9IV1BPSVNPTmAgaXMgaGFuZGxlZC4gSXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01BRFZfSFdQT0lTT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTE0OTI9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE0OTQtXHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXHUwMDNlYmVoYXZpb3IpIHtcbm1tL21hZHZpc2UuYzoxNDk1Olx0Y2FzZSBNQURWX0hXUE9JU09OOlxubW0vbWFkdmlzZS5jLTE0OTYtXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxuLS1cbm1tL21hZHZpc2UuYz0xNTE4PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTUxLVx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbm1tL21hZHZpc2UuYzoxNTUyOlx0Y2FzZSBNQURWX0hXUE9JU09OOlxubW0vbWFkdmlzZS5jLTE1NTMtI2VuZGlmXG4tLVxubW0vbWFkdmlzZS5jPTE4ODc9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXG4tLVxubW0vbWFkdmlzZS5jLTE5NDMtICogIE1BRFZfS0VFUE9ORk9SSyAtIHVuZG8gdGhlIGVmZmVjdCBvZiBNQURWX1dJUEVPTkZPUktcbm1tL21hZHZpc2UuYzoxOTQ0OiAqICBNQURWX0hXUE9JU09OIC0gdHJpZ2dlciBtZW1vcnkgZXJyb3IgaGFuZGxlciBhcyBpZiB0aGUgZ2l2ZW4gbWVtb3J5IHJhbmdlXG5tbS9tYWR2aXNlLmMtMTk0NS0gKlx0XHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUyMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYG1hZHZpc2VfYmVoYXZpb3JfdmFsaWRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBtYWR2aXNlX2JlaGF2aW9yX3ZhbGlkYCwgYW5kIHRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0JiMzOTtzIGFsbCBjb25kaXRpb25hbCBvbiBgI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGxvZ2ljIHJlc2lkZXMuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsICYjMzQ7VGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBiZWhhdmlvciB2YWxpZGF0aW9uIGlzIHNvbWVob3cgbW9kaWZpZWQsIG9yIHBvdGVudGlhbGx5IGV2ZW4gYnlwYXNzZWQsIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSBjb25maWd1cmVkIHRvIHNpbXVsYXRlIG9yIGhhbmRsZSBtZW1vcnkgZmFpbHVyZXMuJiMzNDsgTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSB2YWxpZGl0eSBjaGVja3MgbWlnaHQgYmUgcmVsYXhlZCwgcGVyaGFwcyBhbGxvd2luZyBjZXJ0YWluIGBtYWR2aXNlYCBoaW50cyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIHJlamVjdGVkIHRvIHBhc3MgdGhyb3VnaCwgb3IgbWF5YmUgZXZlbiBpbXBsZW1lbnRpbmcgbW9yZSBhZ2dyZXNzaXZlIGVycm9yIGhhbmRsaW5nIHRvIHRlc3QgdGhlIGZhaWx1cmUgbWVjaGFuaXNtcy4gSXQgY291bGQgYWxzbyBpbnZvbHZlIGFsbG93aW5nIGNhbGxzIGluIGNvbnRleHRzIHdoZXJlIGl0IHdvdWxkIG5vcm1hbGx5IGJlIGZvcmJpZGRlbi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGRlZXBlciBpbnRvIHRoZSBjb2RlIGJyYW5jaGVzIHdpdGhpbiB0aGF0IG1hY3JvIHRvIGZ1bGx5IGdyYXNwIHRoZSBtb2RpZmljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgZ29hbCBpcyB0byBtYWtlIHRoZSBzeXN0ZW0gbW9yZSByb2J1c3Qgd2hlbiB1bmRlciBkdXJlc3MuIFRoaXMgd291bGQgYmUgdHlwaWNhbCBmb3IgdGVzdGluZyBmYWlsdXJlIG1vZGVzIGluIGEgY29udHJvbGxlZCBtYW5uZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MTMzOD1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDQyLVxubW0vbWFkdmlzZS5jOjE0NDM6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxubW0vbWFkdmlzZS5jLTE0NDQtLypcbi0tXG5tbS9tYWR2aXNlLmM9MTUxMD1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTUxNC1cbm1tL21hZHZpc2UuYzoxNTE1OiNlbmRpZlx0LyogQ09ORklHX01FTU9SWV9GQUlMVVJFICovXG5tbS9tYWR2aXNlLmMtMTUxNi1cbi0tXG5tbS9tYWR2aXNlLmM9MTUxOD1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTU0OS1cdGNhc2UgTUFEVl9HVUFSRF9SRU1PVkU6XG5tbS9tYWR2aXNlLmM6MTU1MDojaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5tbS9tYWR2aXNlLmMtMTU1MS1cdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDg0CgkJCQkJCQlvdXRwdXQ6IDExNAoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgRmFpbHVyZSBQYXRjaCoqCgpBbHJpZ2h0LCB5ZXAsIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGRlZmluaXRlbHkgYSBrZXkgY29uZmlndXJhdGlvbiBoZXJlLiBUaGlzIHBhdGNoIGlzIG1ha2luZyBhIHByZXR0eSBmb2N1c2VkIGJ1dCBpbXBvcnRhbnQgY2hhbmdlIGRlZXAgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSByZXNwb25kcyB0byBtZW1vcnkgZmFpbHVyZXMgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgc2hhcmVkIG1lbW9yeSAoc2htZW0pIGFuZCB0bXBmcyBzdWJzeXN0ZW1zLgoKRXNzZW50aWFsbHksIHRoZSBwYXRjaCBhbHRlcnMgdGhlIHJldHVybiB2YWx1ZSBvZiBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCB0byBgTUZfREVMQVlFRGAgaW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyAwLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgYWRqdXN0bWVudCwgYW5kIGl0IGNhc2NhZGVzIGJlY2F1c2UgYHRydW5jYXRlX2Vycm9yX2ZvbGlvYCBpcyBhbHNvIG1vZGlmaWVkIHRvIHByb3Blcmx5IGhhbmRsZSB0aGlzIG5ldyBgTUZfREVMQVlFRGAgcmV0dXJuLiBGdW5jdGlvbmFsbHksIHRoaXMgaW1wYWN0cyBob3cgbWVtb3J5IGZhaWx1cmVzIGFyZSBoYW5kbGVkIGZvciB0aG9zZSBzaG1lbS90bXBmcyBwYWdlcy4gSXQmIzM5O3Mgbm90IGEgc3VwZXJmaWNpYWwgZml4OyBpdCYjMzk7cyBhIGRpcmVjdCBpbnRlcnZlbnRpb24gaW50byB0aGUgd2F5IHRoZSBzeXN0ZW0gZGVhbHMgd2l0aCB0aGVzZSBlcnJvcnMuCgpXZSBjYW4gdHJpZ2dlciB0aGlzIGNoYW5nZSB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9uIGEgc2htZW0gbWFwcGluZywgd2hpY2ggaXMgYSBmYWlybHkgc3RhbmRhcmQgd2F5IHRvIHRlc3QgbWVtb3J5IGNvcnJ1cHRpb24gc2NlbmFyaW9zLiBBbmQgaXQmIzM5O3MgZ29vZCB0byBzZWUgdGhlIHNlbGZ0ZXN0IGlzIGFsc28gYmVpbmcgdXBkYXRlZOKAlGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jYCB3aWxsIG5vdyBpbmNsdWRlIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ24gdGhhdCB0aGV5JiMzOTtyZSB0aGlua2luZyBhYm91dCB0aGUgdGVzdCBjb3ZlcmFnZS4KCk15IGFwcHJvYWNoIHdpbGwgYmUgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYCBnaXZlbiB0aGlzIG1vZGlmaWNhdGlvbiBpbiBjb3JlIGJlaGF2aW9yLiBUaGUgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBjbGVhcmx5IGBtZW1vcnlfZmFpbHVyZWAgZm9yIHByZWNpc2lvbi4gQW5kIG9mIGNvdXJzZSwgSSB3aWxsIGVuYWJsZSBgTUVNT1JZX0ZBSUxVUkVgIGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiB0aGlzIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBtZWNoYW5pc20sIGFuZCBpdCYjMzk7cyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIGEgY29udHJvbGxlZCB3YXksIG1ha2luZyBpdCBwcmltZSB0ZXJyaXRvcnkgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBmb3Igc2htZW0gcGFnZXMgYnkgcmV0dXJuaW5nIE1GX0RFTEFZRUQgaW5zdGVhZCBvZiAwIGluIHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpbywgYW5kIHVwZGF0ZXMgdHJ1bmNhdGVfZXJyb3JfZm9saW8gdG8gaGFuZGxlIHRoaXMgbmV3IHJldHVybiB2YWx1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBpcyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgb24gc2htZW0gbWFwcGluZ3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGZvciBzaG1lbSBwYWdlcyBieSByZXR1cm5pbmcgTUZfREVMQVlFRCBpbnN0ZWFkIG9mIDAgaW4gc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvLCBhbmQgdXBkYXRlcyB0cnVuY2F0ZV9lcnJvcl9mb2xpbyB0byBoYW5kbGUgdGhpcyBuZXcgcmV0dXJuIHZhbHVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX0hXUE9JU09OKSBvbiBzaG1lbSBtYXBwaW5ncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgKGhhcmR3YXJlIHBvaXNvbikgaGFuZGxpbmcgbG9naWMgZm9yIHNobWVtIHBhZ2VzLCBjaGFuZ2luZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gIHRvIGBNRl9ERUxBWUVEYCBhbmQgdXBkYXRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBwcm9wZXJseSBoYW5kbGUgdGhpcyBzdGF0ZS4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGZvciBoYXJkd2FyZSBlcnJvciByZWNvdmVyeSBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzMyYTczNjM5NGRhOWE2ZWQ1YWZjZjM3MGVhNmViM2U3ZGEzZjAzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDE5OjUwOjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggYWFmMTQ2MDhiMzBlMi4uYzdhMDBjN2JlMzY4ZSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC04NDcsMjQgJiM0Mzs4NDcsMjUgQEAgc3RhdGljIGludCBraWxsX2FjY2Vzc2luZ19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgbG9uZyBwZm4sCiB9CiAKIC8qCi0gKiBNRl9JR05PUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCYjMzk7ZWQuCiYjNDM7ICogTUZfSUdOT1JFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJiMzOTtlZC4KICAqIEJ1dCBpdCBjb3VsZCBub3QgZG8gbW9yZSB0byBpc29sYXRlIHRoZSBwYWdlIGZyb20gYmVpbmcgYWNjZXNzZWQgYWdhaW4sCiAgKiBub3IgZG9lcyBpdCBraWxsIHRoZSBwcm9jZXNzLiBUaGlzIGlzIGV4dHJlbWVseSByYXJlIGFuZCBvbmUgb2YgdGhlCiAgKiBwb3RlbnRpYWwgY2F1c2VzIGlzIHRoYXQgdGhlIHBhZ2Ugc3RhdGUgaGFzIGJlZW4gY2hhbmdlZCBkdWUgdG8KICAqIHVuZGVybHlpbmcgcmFjZSBjb25kaXRpb24uIFRoaXMgaXMgdGhlIG1vc3Qgc2V2ZXJlIG91dGNvbWVzLgogICoKLSAqIE1GX0ZBSUxFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uZWQmIzM5O2VkLgomIzQzOyAqIE1GX0ZBSUxFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJiMzOTtlZC4KICAqIEl0IHNob3VsZCBoYXZlIGtpbGxlZCB0aGUgcHJvY2VzcywgYnV0IGl0IGNhbiYjMzk7dCBpc29sYXRlIHRoZSBwYWdlLAogICogZHVlIHRvIGNvbmRpdGlvbnMgc3VjaCBhcyBleHRyYSBwaW4sIHVubWFwIGZhaWx1cmUsIGV0Yy4gQWNjZXNzaW5nCiAgKiB0aGUgcGFnZSBhZ2FpbiBtYXkgdHJpZ2dlciBhbm90aGVyIE1DRSBhbmQgdGhlIHByb2Nlc3Mgd2lsbCBiZSBraWxsZWQKICAqIGJ5IHRoZSBtLWYoKSBoYW5kbGVyIGltbWVkaWF0ZWx5LgogICoKLSAqIE1GX0RFTEFZRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbmVkJiMzOTtlZC4KLSAqIFRoZSBwYWdlIGlzIHVubWFwcGVkLCBhbmQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBMUlUgb3IgZmlsZSBtYXBwaW5nLgotICogQW4gYXR0ZW1wdCB0byBhY2Nlc3MgdGhlIHBhZ2UgYWdhaW4gd2lsbCB0cmlnZ2VyIHBhZ2UgZmF1bHQgYW5kIHRoZQotICogUEYgaGFuZGxlciB3aWxsIGtpbGwgdGhlIHByb2Nlc3MuCiYjNDM7ICogTUZfREVMQVlFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJiMzOTtlZC4KJiM0MzsgKiBJdCBtZWFucyB0aGUgcGFnZSB3YXMgdW5tYXBwZWQgYW5kIHBhcnRpYWxseSBpc29sYXRlZCAoZS5nLiByZW1vdmVkIGZyb20KJiM0MzsgKiBmaWxlIG1hcHBpbmcgb3IgdGhlIExSVSkgYnV0IGZ1bGwgY2xlYW51cCBpcyBkZWZlcnJlZCAoZS5nLiB0aGUgbWV0YWRhdGEKJiM0MzsgKiBmb3IgdGhlIG1lbW9yeSwgYXMgaW4gc3RydWN0IHBhZ2UvZm9saW8sIGlzIHN0aWxsIHJlZmVyZW5jZWQpLiBBbnkKJiM0MzsgKiBmdXJ0aGVyIGFjY2VzcyB0byB0aGUgcGFnZSB3aWxsIHJlc3VsdCBpbiB0aGUgcHJvY2VzcyBiZWluZyBraWxsZWQuCiAgKgotICogTUZfUkVDT1ZFUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCYjMzk7ZWQuCiYjNDM7ICogTUZfUkVDT1ZFUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb24mIzM5O2VkLgogICogVGhlIHBhZ2UgaGFzIGJlZW4gY29tcGxldGVseSBpc29sYXRlZCwgdGhhdCBpcywgdW5tYXBwZWQsIHRha2VuIG91dCBvZgogICogdGhlIGJ1ZGR5IHN5c3RlbSwgb3IgaG9sZS1wdW5jaGVkIG91dCBvZiB0aGUgZmlsZSBtYXBwaW5nLgogICovCkBAIC05MzgsMTAgJiM0Mzs5MzksMTIgQEAgc3RhdGljIGludCB0cnVuY2F0ZV9lcnJvcl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIHBmbiwKIAlpZiAobWFwcGluZy0mZ3Q7YV9vcHMtJmd0O2Vycm9yX3JlbW92ZV9mb2xpbykgewogCQlpbnQgZXJyID0gbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O2Vycm9yX3JlbW92ZV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7CiAKLQkJaWYgKGVyciAhPSAwKQomIzQzOwkJaWYgKGVyciA9PSBNRl9ERUxBWUVEKQomIzQzOwkJCXJldCA9IGVycjsKJiM0MzsJCWVsc2UgaWYgKGVyciAhPSAwKQogCQkJcHJfaW5mbygmIzM0OyUjbHg6IEZhaWxlZCB0byBwdW5jaCBwYWdlOiAlZFxuJiMzNDssIHBmbiwgZXJyKTsKIAkJZWxzZSBpZiAoIWZpbGVtYXBfcmVsZWFzZV9mb2xpbyhmb2xpbywgR0ZQX05PSU8pKQotCQkJcHJfaW5mbygmIzM0OyUjbHg6IGZhaWxlZCB0byByZWxlYXNlIGJ1ZmZlcnNcbiYjMzQ7LCBwZm4pOwomIzQzOwkJCXByX2luZm8oJiMzNDslI2x4OiBGYWlsZWQgdG8gcmVsZWFzZSBidWZmZXJzXG4mIzM0OywgcGZuKTsKIAkJZWxzZQogCQkJcmV0ID0gTUZfUkVDT1ZFUkVEOwogCX0gZWxzZSB7CkBAIC0xMDM2LDE4ICYjNDM7MTAzOSwxNCBAQCBzdGF0aWMgaW50IG1lX3BhZ2VjYWNoZV9jbGVhbihzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKQogCQlnb3RvIG91dDsKIAl9CiAKLQkvKgotCSAqIFRoZSBzaG1lbSBwYWdlIGlzIGtlcHQgaW4gcGFnZSBjYWNoZSBpbnN0ZWFkIG9mIHRydW5jYXRpbmcKLQkgKiBzbyBpcyBleHBlY3RlZCB0byBoYXZlIGFuIGV4dHJhIHJlZmNvdW50IGFmdGVyIGVycm9yLWhhbmRsaW5nLgotCSAqLwotCWV4dHJhX3BpbnMgPSBzaG1lbV9tYXBwaW5nKG1hcHBpbmcpOwotCiAJLyoKIAkgKiBUcnVuY2F0aW9uIGlzIGEgYml0IHRyaWNreS4gRW5hYmxlIGl0IHBlciBmaWxlIHN5c3RlbSBmb3Igbm93LgogCSAqCiAJICogT3BlbjogdG8gdGFrZSBpX3J3c2VtIG9yIG5vdCBmb3IgdGhpcz8gUmlnaHQgbm93IHdlIGRvbiYjMzk7dC4KIAkgKi8KIAlyZXQgPSB0cnVuY2F0ZV9lcnJvcl9mb2xpbyhmb2xpbywgcGFnZV90b19wZm4ocCksIG1hcHBpbmcpOwomIzQzOwomIzQzOwlleHRyYV9waW5zID0gcmV0ID09IE1GX0RFTEFZRUQ7CiAJaWYgKGhhc19leHRyYV9yZWZjb3VudChwcywgcCwgZXh0cmFfcGlucykpCiAJCXJldCA9IE1GX0ZBSUxFRDsKIApkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggNzc0ZjRiMThmZjVjNi4uZDZmOTQ3ODZlNzA5ZSAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC01MTM2LDcgJiM0Mzs1MTM2LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHNobWVtX2Rlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKQogc3RhdGljIGludCBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJICAgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIE1GX0RFTEFZRUQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHNobWVtX2FvcHMgPSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCAxYTVhMzJlMjJjY2UyLi41YjI2ZjBjNDQ2NjQ0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTIwLDYgJiM0MzsyMCwxMCBAQAogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAKJiM0MzsjaWZuZGVmIGZhbGx0aHJvdWdoCiYjNDM7IyBkZWZpbmUgZmFsbHRocm91Z2ggX19hdHRyaWJ1dGVfXygoX19mYWxsdGhyb3VnaF9fKSkKJiM0MzsjZW5kaWYKJiM0MzsKIGVudW0gaW5qZWN0X3R5cGUgewogCU1BRFZfSEFSRCwKIAlNQURWX1NPRlQsCkBAIC0yOSw5ICYjNDM7MzMsMTQgQEAgZW51bSByZXN1bHRfdHlwZSB7CiAJTUFEVl9IQVJEX0FOT04sCiAJTUFEVl9IQVJEX0NMRUFOX1BBR0VDQUNIRSwKIAlNQURWX0hBUkRfRElSVFlfUEFHRUNBQ0hFLAomIzQzOwlNQURWX0hBUkRfQ0xFQU5fU0hNRU0sCiYjNDM7CU1BRFZfSEFSRF9ESVJUWV9TSE1FTSwKIAlNQURWX1NPRlRfQU5PTiwKIAlNQURWX1NPRlRfQ0xFQU5fUEFHRUNBQ0hFLAogCU1BRFZfU09GVF9ESVJUWV9QQUdFQ0FDSEUsCiYjNDM7CU1BRFZfU09GVF9DTEVBTl9TSE1FTSwKJiM0MzsJTUFEVl9TT0ZUX0RJUlRZX1NITUVNLAomIzQzOwlSRUFEX0VSUk9SLAogfTsKIAogc3RhdGljIGptcF9idWYgc2lnbmFsX2ptcF9idWY7CkBAIC0xNTcsMTcgJiM0MzsxNjYsMjIgQEAgc3RhdGljIHZvaWQgY2hlY2soc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBGSVhUVVJFX0RBVEEobWVtb3J5X2ZhaWx1cmUKIAljYXNlIE1BRFZfSEFSRF9DTEVBTl9QQUdFQ0FDSEU6CiAJY2FzZSBNQURWX1NPRlRfQ0xFQU5fUEFHRUNBQ0hFOgogCWNhc2UgTUFEVl9TT0ZUX0RJUlRZX1BBR0VDQUNIRToKLQkJLyogSXQgaXMgbm90IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBTSUdCVVMgc2lnbmFsLiAqLwotCQlBU1NFUlRfRVEoc2V0am1wLCAwKTsKLQomIzQzOwljYXNlIE1BRFZfU09GVF9ESVJUWV9TSE1FTToKIAkJLyogVGhlIHBhZ2UgY29udGVudCBzaG91bGQgcmVtYWluIHVuY2hhbmdlZC4gKi8KIAkJQVNTRVJUX1RSVUUoY2hlY2tfbWVtb3J5KHZhZGRyLCBzZWxmLSZndDtwYWdlX3NpemUpKTsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwljYXNlIE1BRFZfSEFSRF9DTEVBTl9TSE1FTToKJiM0MzsJY2FzZSBNQURWX1NPRlRfQ0xFQU5fU0hNRU06CiYjNDM7CQkvKiBJdCBpcyBub3QgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIFNJR0JVUyBzaWduYWwuICovCiYjNDM7CQlBU1NFUlRfRVEoc2V0am1wLCAwKTsKIAogCQkvKiBUaGUgYmFja2luZyBwZm4gb2YgYWRkciBzaG91bGQgaGF2ZSBjaGFuZ2VkLiAqLwogCQlBU1NFUlRfTkUocGFnZW1hcF9nZXRfcGZuKHNlbGYtJmd0O3BhZ2VtYXBfZmQsIHZhZGRyKSwgc2VsZi0mZ3Q7cGZuKTsKIAkJYnJlYWs7CiAJY2FzZSBNQURWX0hBUkRfQU5PTjoKIAljYXNlIE1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEU6CiYjNDM7CWNhc2UgTUFEVl9IQVJEX0RJUlRZX1NITUVNOgomIzQzOwljYXNlIFJFQURfRVJST1I6CiAJCS8qIFRoZSBTSUdCVVMgc2lnbmFsIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQuICovCiAJCUFTU0VSVF9FUShzZXRqbXAsIDEpOwogCkBAIC0yNjMsNiAmIzQzOzI3NywyMCBAQCBzdGF0aWMgaW50IHByZXBhcmVfZmlsZShjb25zdCBjaGFyICpmbmFtZSwgdW5zaWduZWQgbG9uZyBzaXplKQogCXJldHVybiBmZDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgcHJlcGFyZV9zaG1lbShjb25zdCBjaGFyICpmbmFtZSwgdW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlmZCA9IG1lbWZkX2NyZWF0ZShmbmFtZSwgMCk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CWlmIChmdHJ1bmNhdGUoZmQsIHNpemUpICZsdDsgMCkgewomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CXJldHVybiBmZDsKJiM0Mzt9CiYjNDM7CiAvKiBCb3Jyb3dlZCBmcm9tIG1tL2d1cF9sb25ndGVybS5jLiAqLwogc3RhdGljIGludCBnZXRfZnNfdHlwZShpbnQgZmQpCiB7CkBAIC0zNTUsNCAmIzQzOzM4Myw4OCBAQCBURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGRpcnR5X3BhZ2VjYWNoZSkKIAlBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTsKIH0KIAomIzQzO1RFU1RfRihtZW1vcnlfZmFpbHVyZSwgZGlydHlfc2htZW0pCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CWNoYXIgKmFkZHI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWZkID0gcHJlcGFyZV9zaG1lbSgmIzM0O3NobWVtLWZpbGUmIzM0Oywgc2VsZi0mZ3Q7cGFnZV9zaXplKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O2ZhaWxlZCB0byBvcGVuIHRlc3Qgc2htZW0tZmlsZS5cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJYWRkciA9IG1tYXAoMCwgc2VsZi0mZ3Q7cGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJICAgIE1BUF9TSEFSRUQsIGZkLCAwKTsKJiM0MzsJaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkgewomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bW1hcCBmYWlsZWQsIG5vdCBlbm91Z2ggbWVtb3J5LlxuJiMzNDspOwomIzQzOwl9CiYjNDM7CW1lbXNldChhZGRyLCAweGNlLCBzZWxmLSZndDtwYWdlX3NpemUpOwomIzQzOwomIzQzOwlwcmVwYXJlKF9tZXRhZGF0YSwgc2VsZiwgYWRkcik7CiYjNDM7CiYjNDM7CXJldCA9IHNpZ3NldGptcChzaWduYWxfam1wX2J1ZiwgMSk7CiYjNDM7CWlmICghcmV0ICZhbXA7JmFtcDsgIXNlbGYtJmd0O2luamVjdGlvbl9hdHRlbXB0ZWQpIHsKJiM0MzsJCXNlbGYtJmd0O2luamVjdGlvbl9hdHRlbXB0ZWQgPSB0cnVlOwomIzQzOwkJQVNTRVJUX0VRKHZhcmlhbnQtJmd0O2luamVjdChzZWxmLCBhZGRyKSwgMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZhcmlhbnQtJmd0O3R5cGUgPT0gTUFEVl9IQVJEKSB7CiYjNDM7CQljaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfSEFSRF9ESVJUWV9TSE1FTSwgcmV0KTsKJiM0MzsJCXJldCA9IHNpZ3NldGptcChzaWduYWxfam1wX2J1ZiwgMSk7CiYjNDM7CQlpZiAocmV0ID09IDApCiYjNDM7CQkJRk9SQ0VfUkVBRCgqYWRkcik7CiYjNDM7CQljaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIFJFQURfRVJST1IsIHJldCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQljaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfU09GVF9ESVJUWV9TSE1FTSwgcmV0KTsKJiM0MzsJfQomIzQzOwomIzQzOwlBU1NFUlRfRVEobXVubWFwKGFkZHIsIHNlbGYtJmd0O3BhZ2Vfc2l6ZSksIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBjbGVhbl9zaG1lbSkKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJY2hhciAqYWRkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZmQgPSBwcmVwYXJlX3NobWVtKCYjMzQ7c2htZW0tZmlsZSYjMzQ7LCBzZWxmLSZndDtwYWdlX3NpemUpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7ZmFpbGVkIHRvIG9wZW4gdGVzdCBzaG1lbS1maWxlLlxuJiMzNDspOwomIzQzOwomIzQzOwlhZGRyID0gbW1hcCgwLCBzZWxmLSZndDtwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICAgTUFQX1NIQVJFRCwgZmQsIDApOwomIzQzOwlpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDttbWFwIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkuXG4mIzM0Oyk7CiYjNDM7CX0KJiM0MzsJRk9SQ0VfUkVBRCgqYWRkcik7CiYjNDM7CiYjNDM7CXByZXBhcmUoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTsKJiM0MzsKJiM0MzsJcmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTsKJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyAhc2VsZi0mZ3Q7aW5qZWN0aW9uX2F0dGVtcHRlZCkgewomIzQzOwkJc2VsZi0mZ3Q7aW5qZWN0aW9uX2F0dGVtcHRlZCA9IHRydWU7CiYjNDM7CQlBU1NFUlRfRVEodmFyaWFudC0mZ3Q7aW5qZWN0KHNlbGYsIGFkZHIpLCAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmFyaWFudC0mZ3Q7dHlwZSA9PSBNQURWX0hBUkQpIHsKJiM0MzsJCWNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9IQVJEX0NMRUFOX1NITUVNLCByZXQpOwomIzQzOwkJcmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTsKJiM0MzsJCWlmIChyZXQgPT0gMCkKJiM0MzsJCQlGT1JDRV9SRUFEKCphZGRyKTsKJiM0MzsJCWNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgUkVBRF9FUlJPUiwgcmV0KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIFRlc3QgdGhlIGFkZHJlc3MgYWNjZXNzYWJpbGl0eSB3aXRob3V0IGNoZWNrX21lbW9yeSgpLiAqLwomIzQzOwkJRk9SQ0VfUkVBRCgqYWRkcik7CiYjNDM7CQljaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfU09GVF9DTEVBTl9TSE1FTSwgcmV0KTsKJiM0MzsJfQomIzQzOwomIzQzOwlBU1NFUlRfRVEobXVubWFwKGFkZHIsIHNlbGYtJmd0O3BhZ2Vfc2l6ZSksIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTsKJiM0Mzt9CiYjNDM7CiBURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5MQoJCQkJCQkJb3V0cHV0OiAxNDcKCQkJCQkJCXRob3VnaHRzOiA5MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbjogU2htZW0gTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQmIzM5O3MgZm9jdXNlZCBvbiBpbXByb3ZpbmcgdGhlIGtlcm5lbCYjMzk7cyBoYW5kbGluZyBvZiBtZW1vcnkgZmFpbHVyZXMg4oCTIHNwZWNpZmljYWxseSwgaGFyZHdhcmUtZGV0ZWN0ZWQgZXJyb3JzIHdpdGhpbiBzaG1lbSBwYWdlcy4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gIGluIGBtbS9zaG1lbS5jYC4gSW5zdGVhZCBvZiByZXR1cm5pbmcgMCwgaXQgbm93IHJldHVybnMgYE1GX0RFTEFZRURgLiBUaGlzIHNpZ25hbHMgdG8gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCAoYHRydW5jYXRlX2Vycm9yX2ZvbGlvYCBhbmQgYG1lX3BhZ2VjYWNoZV9jbGVhbmApIHRoYXQgdGhlIGZvbGlvIHJlbW92YWwgaXMgZGVmZXJyZWQuIFRoZSBwYXRjaCB0aGVuIGFkanVzdHMgdGhlIGxvZ2ljIGluIGB0cnVuY2F0ZV9lcnJvcl9mb2xpb2AgYW5kIGBtZV9wYWdlY2FjaGVfY2xlYW5gIHRvIGFjY29tbW9kYXRlIHRoZSBgTUZfREVMQVlFRGAgcmV0dXJuIHZhbHVlLCBjaGFuZ2luZyBzb21lIGNvbnRyb2wgZmxvdy4gIFdlIGFsc28gc2VlIG5ldyBzZWxmdGVzdHMgYWRkZWQgZm9yIHRoaXMgYmVoYXZpb3IuCgpOb3csIGxldCYjMzk7cyBhcHBseSBteSBpbnRlcm5hbCBLTVNBTiBjaGVja2xpc3Q6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZToqKiBOb3BlLiBOb3RoaW5nIGhlcmUgaW50cm9kdWNlcyBuZXcgc3RydWN0dXJlcyBvciBtb2RpZmllcyBleGlzdGluZyBvbmVzIGluIGEgd2F5IHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoaXMgaXMgYWxsIGludGVybmFsIGtlcm5lbCBlcnJvciBoYW5kbGluZy4KCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBkZXBlbmRlbnQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uIFdoaWxlIHdlIGFyZSBtb2RpZnlpbmcgY29udHJvbCBmbG93IGJhc2VkIG9uIGBNRl9ERUxBWUVEYCwgdGhpcyBpcyBhICpkZWZpbmVkKiB2YWx1ZSwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUsIHdlIGFyZSBub3QgaW50cm9kdWNpbmcgbmV3IHdheXMgdG8gbWFrZSB0aGUga2VybmVsIHJlYWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9ubHkgY29udHJvbCBob3cgdG8gaGFuZGxlIGFuIGVycm9yIHRoYXQgaXMgYWxyZWFkeSBiZWluZyBoYW5kbGVkLgoKMy4gICoqQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlczoqKiBOby4gVGhpcyBpcyBub3QgYWJvdXQgYWxsb2NhdGluZyBuZXcgZGF0YSBzdHJ1Y3R1cmVzLiBJdCYjMzk7cyBhYm91dCBob3cgd2UgaGFuZGxlIGVycm9ycyBvbiAqZXhpc3RpbmcqIHNobWVtIHBhZ2VzLgoKNC4gICoqQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM6KiogQWdhaW4sIG5vLiBUaGUgY2hhbmdlcyByZWZpbmUgdGhlIGxvZ2ljIGZvciBob3cgd2UgaGFuZGxlIGV4aXN0aW5nIHNobWVtIHBhZ2VzIGVuY291bnRlcmluZyBoYXJkd2FyZSBlcnJvcnMuIE5vIG5ldyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBpcyBlbmFibGVkLgoKVGhlcmVmb3JlLCBhZnRlciBhIGNhcmVmdWwgcmV2aWV3LCB0aGUgcGF0Y2ggZG9lcyBub3QgbWVldCBhbnkgb2YgbXkgS01TQU4gY3JpdGVyaWEuIE5vIEtNU0FOIGlzIG5lZWRlZC4gSSYjMzk7bSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgYWRkaW5nIG15IHJlYXNvbmluZyB0byB0aGUgcmVjb3JkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgKGhhcmR3YXJlIHBvaXNvbikgaGFuZGxpbmcgbG9naWMgZm9yIHNobWVtIHBhZ2VzLCBjaGFuZ2luZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gIHRvIGBNRl9ERUxBWUVEYCBhbmQgdXBkYXRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBwcm9wZXJseSBoYW5kbGUgdGhpcyBzdGF0ZS4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGZvciBoYXJkd2FyZSBlcnJvciByZWNvdmVyeSBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSAoaGFyZHdhcmUgcG9pc29uKSBoYW5kbGluZyBsb2dpYyBmb3Igc2htZW0gcGFnZXMsIGNoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgdG8gYE1GX0RFTEFZRURgIGFuZCB1cGRhdGluZyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIHRvIHByb3Blcmx5IGhhbmRsZSB0aGlzIHN0YXRlLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgZm9yIGhhcmR3YXJlIGVycm9yIHJlY292ZXJ5IGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDowMS40MDY4NzMyMDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjUzODA3NDQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgKGhhcmR3YXJlIHBvaXNvbikgaGFuZGxpbmcgbG9naWMgZm9yIHNobWVtIHBhZ2VzLCBjaGFuZ2luZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gIHRvIGBNRl9ERUxBWUVEYCBhbmQgdXBkYXRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBwcm9wZXJseSBoYW5kbGUgdGhpcyBzdGF0ZS4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGZvciBoYXJkd2FyZSBlcnJvciByZWNvdmVyeSBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgZm9yIHNobWVtIHBhZ2VzIGJ5IHJldHVybmluZyBNRl9ERUxBWUVEIGluc3RlYWQgb2YgMCBpbiBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW8sIGFuZCB1cGRhdGVzIHRydW5jYXRlX2Vycm9yX2ZvbGlvIHRvIGhhbmRsZSB0aGlzIG5ldyByZXR1cm4gdmFsdWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIG9uIHNobWVtIG1hcHBpbmdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDowMS40MDY4Nzk0NTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTU1MTE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMzMmE3MzYzOTRkYTlhNmVkNWFmY2YzNzBlYTZlYjNlN2RhM2YwM2VcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMjMgMTk6NTA6MDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5pbmRleCBhYWYxNDYwOGIzMGUyLi5jN2EwMGM3YmUzNjhlIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuQEAgLTg0NywyNCArODQ3LDI1IEBAIHN0YXRpYyBpbnQga2lsbF9hY2Nlc3NpbmdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbiB9XFxuIFxcbiAvKlxcbi0gKiBNRl9JR05PUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCdlZC5cXG4rICogTUZfSUdOT1JFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJ2VkLlxcbiAgKiBCdXQgaXQgY291bGQgbm90IGRvIG1vcmUgdG8gaXNvbGF0ZSB0aGUgcGFnZSBmcm9tIGJlaW5nIGFjY2Vzc2VkIGFnYWluLFxcbiAgKiBub3IgZG9lcyBpdCBraWxsIHRoZSBwcm9jZXNzLiBUaGlzIGlzIGV4dHJlbWVseSByYXJlIGFuZCBvbmUgb2YgdGhlXFxuICAqIHBvdGVudGlhbCBjYXVzZXMgaXMgdGhhdCB0aGUgcGFnZSBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkIGR1ZSB0b1xcbiAgKiB1bmRlcmx5aW5nIHJhY2UgY29uZGl0aW9uLiBUaGlzIGlzIHRoZSBtb3N0IHNldmVyZSBvdXRjb21lcy5cXG4gICpcXG4tICogTUZfRkFJTEVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCdlZC5cXG4rICogTUZfRkFJTEVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb24nZWQuXFxuICAqIEl0IHNob3VsZCBoYXZlIGtpbGxlZCB0aGUgcHJvY2VzcywgYnV0IGl0IGNhbid0IGlzb2xhdGUgdGhlIHBhZ2UsXFxuICAqIGR1ZSB0byBjb25kaXRpb25zIHN1Y2ggYXMgZXh0cmEgcGluLCB1bm1hcCBmYWlsdXJlLCBldGMuIEFjY2Vzc2luZ1xcbiAgKiB0aGUgcGFnZSBhZ2FpbiBtYXkgdHJpZ2dlciBhbm90aGVyIE1DRSBhbmQgdGhlIHByb2Nlc3Mgd2lsbCBiZSBraWxsZWRcXG4gICogYnkgdGhlIG0tZigpIGhhbmRsZXIgaW1tZWRpYXRlbHkuXFxuICAqXFxuLSAqIE1GX0RFTEFZRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbmVkJ2VkLlxcbi0gKiBUaGUgcGFnZSBpcyB1bm1hcHBlZCwgYW5kIGlzIHJlbW92ZWQgZnJvbSB0aGUgTFJVIG9yIGZpbGUgbWFwcGluZy5cXG4tICogQW4gYXR0ZW1wdCB0byBhY2Nlc3MgdGhlIHBhZ2UgYWdhaW4gd2lsbCB0cmlnZ2VyIHBhZ2UgZmF1bHQgYW5kIHRoZVxcbi0gKiBQRiBoYW5kbGVyIHdpbGwga2lsbCB0aGUgcHJvY2Vzcy5cXG4rICogTUZfREVMQVlFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJ2VkLlxcbisgKiBJdCBtZWFucyB0aGUgcGFnZSB3YXMgdW5tYXBwZWQgYW5kIHBhcnRpYWxseSBpc29sYXRlZCAoZS5nLiByZW1vdmVkIGZyb21cXG4rICogZmlsZSBtYXBwaW5nIG9yIHRoZSBMUlUpIGJ1dCBmdWxsIGNsZWFudXAgaXMgZGVmZXJyZWQgKGUuZy4gdGhlIG1ldGFkYXRhXFxuKyAqIGZvciB0aGUgbWVtb3J5LCBhcyBpbiBzdHJ1Y3QgcGFnZS9mb2xpbywgaXMgc3RpbGwgcmVmZXJlbmNlZCkuIEFueVxcbisgKiBmdXJ0aGVyIGFjY2VzcyB0byB0aGUgcGFnZSB3aWxsIHJlc3VsdCBpbiB0aGUgcHJvY2VzcyBiZWluZyBraWxsZWQuXFxuICAqXFxuLSAqIE1GX1JFQ09WRVJFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uZWQnZWQuXFxuKyAqIE1GX1JFQ09WRVJFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJ2VkLlxcbiAgKiBUaGUgcGFnZSBoYXMgYmVlbiBjb21wbGV0ZWx5IGlzb2xhdGVkLCB0aGF0IGlzLCB1bm1hcHBlZCwgdGFrZW4gb3V0IG9mXFxuICAqIHRoZSBidWRkeSBzeXN0ZW0sIG9yIGhvbGUtcHVuY2hlZCBvdXQgb2YgdGhlIGZpbGUgbWFwcGluZy5cXG4gICovXFxuQEAgLTkzOCwxMCArOTM5LDEyIEBAIHN0YXRpYyBpbnQgdHJ1bmNhdGVfZXJyb3JfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdGlmIChtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZXJyb3JfcmVtb3ZlX2ZvbGlvKSB7XFxuIFxcdFxcdGludCBlcnIgPSBtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZXJyb3JfcmVtb3ZlX2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcXG4gXFxuLVxcdFxcdGlmIChlcnIgIT0gMClcXG4rXFx0XFx0aWYgKGVyciA9PSBNRl9ERUxBWUVEKVxcbitcXHRcXHRcXHRyZXQgPSBlcnI7XFxuK1xcdFxcdGVsc2UgaWYgKGVyciAhPSAwKVxcbiBcXHRcXHRcXHRwcl9pbmZvKFxcXCIlI2x4OiBGYWlsZWQgdG8gcHVuY2ggcGFnZTogJWRcXFxcblxcXCIsIHBmbiwgZXJyKTtcXG4gXFx0XFx0ZWxzZSBpZiAoIWZpbGVtYXBfcmVsZWFzZV9mb2xpbyhmb2xpbywgR0ZQX05PSU8pKVxcbi1cXHRcXHRcXHRwcl9pbmZvKFxcXCIlI2x4OiBmYWlsZWQgdG8gcmVsZWFzZSBidWZmZXJzXFxcXG5cXFwiLCBwZm4pO1xcbitcXHRcXHRcXHRwcl9pbmZvKFxcXCIlI2x4OiBGYWlsZWQgdG8gcmVsZWFzZSBidWZmZXJzXFxcXG5cXFwiLCBwZm4pO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJldCA9IE1GX1JFQ09WRVJFRDtcXG4gXFx0fSBlbHNlIHtcXG5AQCAtMTAzNiwxOCArMTAzOSwxNCBAQCBzdGF0aWMgaW50IG1lX3BhZ2VjYWNoZV9jbGVhbihzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0LypcXG4tXFx0ICogVGhlIHNobWVtIHBhZ2UgaXMga2VwdCBpbiBwYWdlIGNhY2hlIGluc3RlYWQgb2YgdHJ1bmNhdGluZ1xcbi1cXHQgKiBzbyBpcyBleHBlY3RlZCB0byBoYXZlIGFuIGV4dHJhIHJlZmNvdW50IGFmdGVyIGVycm9yLWhhbmRsaW5nLlxcbi1cXHQgKi9cXG4tXFx0ZXh0cmFfcGlucyA9IHNobWVtX21hcHBpbmcobWFwcGluZyk7XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBUcnVuY2F0aW9uIGlzIGEgYml0IHRyaWNreS4gRW5hYmxlIGl0IHBlciBmaWxlIHN5c3RlbSBmb3Igbm93LlxcbiBcXHQgKlxcbiBcXHQgKiBPcGVuOiB0byB0YWtlIGlfcndzZW0gb3Igbm90IGZvciB0aGlzPyBSaWdodCBub3cgd2UgZG9uJ3QuXFxuIFxcdCAqL1xcbiBcXHRyZXQgPSB0cnVuY2F0ZV9lcnJvcl9mb2xpbyhmb2xpbywgcGFnZV90b19wZm4ocCksIG1hcHBpbmcpO1xcbitcXG4rXFx0ZXh0cmFfcGlucyA9IHJldCA9PSBNRl9ERUxBWUVEO1xcbiBcXHRpZiAoaGFzX2V4dHJhX3JlZmNvdW50KHBzLCBwLCBleHRyYV9waW5zKSlcXG4gXFx0XFx0cmV0ID0gTUZfRkFJTEVEO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcXG5pbmRleCA3NzRmNGIxOGZmNWM2Li5kNmY5NDc4NmU3MDllIDEwMDY0NFxcbi0tLSBhL21tL3NobWVtLmNcXG4rKysgYi9tbS9zaG1lbS5jXFxuQEAgLTUxMzYsNyArNTEzNiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzaG1lbV9kZXN0cm95X2lub2RlY2FjaGUodm9pZClcXG4gc3RhdGljIGludCBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBNRl9ERUxBWUVEO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBzaG1lbV9hb3BzID0ge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IDFhNWEzMmUyMmNjZTIuLjViMjZmMGM0NDY2NDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcXG5AQCAtMjAsNiArMjAsMTAgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuIFxcbisjaWZuZGVmIGZhbGx0aHJvdWdoXFxuKyMgZGVmaW5lIGZhbGx0aHJvdWdoIF9fYXR0cmlidXRlX18oKF9fZmFsbHRocm91Z2hfXykpXFxuKyNlbmRpZlxcbitcXG4gZW51bSBpbmplY3RfdHlwZSB7XFxuIFxcdE1BRFZfSEFSRCxcXG4gXFx0TUFEVl9TT0ZULFxcbkBAIC0yOSw5ICszMywxNCBAQCBlbnVtIHJlc3VsdF90eXBlIHtcXG4gXFx0TUFEVl9IQVJEX0FOT04sXFxuIFxcdE1BRFZfSEFSRF9DTEVBTl9QQUdFQ0FDSEUsXFxuIFxcdE1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEUsXFxuK1xcdE1BRFZfSEFSRF9DTEVBTl9TSE1FTSxcXG4rXFx0TUFEVl9IQVJEX0RJUlRZX1NITUVNLFxcbiBcXHRNQURWX1NPRlRfQU5PTixcXG4gXFx0TUFEVl9TT0ZUX0NMRUFOX1BBR0VDQUNIRSxcXG4gXFx0TUFEVl9TT0ZUX0RJUlRZX1BBR0VDQUNIRSxcXG4rXFx0TUFEVl9TT0ZUX0NMRUFOX1NITUVNLFxcbitcXHRNQURWX1NPRlRfRElSVFlfU0hNRU0sXFxuK1xcdFJFQURfRVJST1IsXFxuIH07XFxuIFxcbiBzdGF0aWMgam1wX2J1ZiBzaWduYWxfam1wX2J1ZjtcXG5AQCAtMTU3LDE3ICsxNjYsMjIgQEAgc3RhdGljIHZvaWQgY2hlY2soc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBGSVhUVVJFX0RBVEEobWVtb3J5X2ZhaWx1cmVcXG4gXFx0Y2FzZSBNQURWX0hBUkRfQ0xFQU5fUEFHRUNBQ0hFOlxcbiBcXHRjYXNlIE1BRFZfU09GVF9DTEVBTl9QQUdFQ0FDSEU6XFxuIFxcdGNhc2UgTUFEVl9TT0ZUX0RJUlRZX1BBR0VDQUNIRTpcXG4tXFx0XFx0LyogSXQgaXMgbm90IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBTSUdCVVMgc2lnbmFsLiAqL1xcbi1cXHRcXHRBU1NFUlRfRVEoc2V0am1wLCAwKTtcXG4tXFxuK1xcdGNhc2UgTUFEVl9TT0ZUX0RJUlRZX1NITUVNOlxcbiBcXHRcXHQvKiBUaGUgcGFnZSBjb250ZW50IHNob3VsZCByZW1haW4gdW5jaGFuZ2VkLiAqL1xcbiBcXHRcXHRBU1NFUlRfVFJVRShjaGVja19tZW1vcnkodmFkZHIsIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSkpO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBNQURWX0hBUkRfQ0xFQU5fU0hNRU06XFxuK1xcdGNhc2UgTUFEVl9TT0ZUX0NMRUFOX1NITUVNOlxcbitcXHRcXHQvKiBJdCBpcyBub3QgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIFNJR0JVUyBzaWduYWwuICovXFxuK1xcdFxcdEFTU0VSVF9FUShzZXRqbXAsIDApO1xcbiBcXG4gXFx0XFx0LyogVGhlIGJhY2tpbmcgcGZuIG9mIGFkZHIgc2hvdWxkIGhhdmUgY2hhbmdlZC4gKi9cXG4gXFx0XFx0QVNTRVJUX05FKHBhZ2VtYXBfZ2V0X3BmbihzZWxmLVxcdTAwM2VwYWdlbWFwX2ZkLCB2YWRkciksIHNlbGYtXFx1MDAzZXBmbik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE1BRFZfSEFSRF9BTk9OOlxcbiBcXHRjYXNlIE1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEU6XFxuK1xcdGNhc2UgTUFEVl9IQVJEX0RJUlRZX1NITUVNOlxcbitcXHRjYXNlIFJFQURfRVJST1I6XFxuIFxcdFxcdC8qIFRoZSBTSUdCVVMgc2lnbmFsIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQuICovXFxuIFxcdFxcdEFTU0VSVF9FUShzZXRqbXAsIDEpO1xcbiBcXG5AQCAtMjYzLDYgKzI3NywyMCBAQCBzdGF0aWMgaW50IHByZXBhcmVfZmlsZShjb25zdCBjaGFyICpmbmFtZSwgdW5zaWduZWQgbG9uZyBzaXplKVxcbiBcXHRyZXR1cm4gZmQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcHJlcGFyZV9zaG1lbShjb25zdCBjaGFyICpmbmFtZSwgdW5zaWduZWQgbG9uZyBzaXplKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gbWVtZmRfY3JlYXRlKGZuYW1lLCAwKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRpZiAoZnRydW5jYXRlKGZkLCBzaXplKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGZkO1xcbit9XFxuK1xcbiAvKiBCb3Jyb3dlZCBmcm9tIG1tL2d1cF9sb25ndGVybS5jLiAqL1xcbiBzdGF0aWMgaW50IGdldF9mc190eXBlKGludCBmZClcXG4ge1xcbkBAIC0zNTUsNCArMzgzLDg4IEBAIFRFU1RfRihtZW1vcnlfZmFpbHVyZSwgZGlydHlfcGFnZWNhY2hlKVxcbiBcXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcXG4gfVxcbiBcXG4rVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBkaXJ0eV9zaG1lbSlcXG4re1xcbitcXHRpbnQgZmQ7XFxuK1xcdGNoYXIgKmFkZHI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRmZCA9IHByZXBhcmVfc2htZW0oXFxcInNobWVtLWZpbGVcXFwiLCBzZWxmLVxcdTAwM2VwYWdlX3NpemUpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcImZhaWxlZCB0byBvcGVuIHRlc3Qgc2htZW0tZmlsZS5cXFxcblxcXCIpO1xcbitcXG4rXFx0YWRkciA9IG1tYXAoMCwgc2VsZi1cXHUwMDNlcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHQgICAgTUFQX1NIQVJFRCwgZmQsIDApO1xcbitcXHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7XFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJtbWFwIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkuXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXHRtZW1zZXQoYWRkciwgMHhjZSwgc2VsZi1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFxuK1xcdHByZXBhcmUoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTtcXG4rXFxuK1xcdHJldCA9IHNpZ3NldGptcChzaWduYWxfam1wX2J1ZiwgMSk7XFxuK1xcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2ICFzZWxmLVxcdTAwM2VpbmplY3Rpb25fYXR0ZW1wdGVkKSB7XFxuK1xcdFxcdHNlbGYtXFx1MDAzZWluamVjdGlvbl9hdHRlbXB0ZWQgPSB0cnVlO1xcbitcXHRcXHRBU1NFUlRfRVEodmFyaWFudC1cXHUwMDNlaW5qZWN0KHNlbGYsIGFkZHIpLCAwKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZhcmlhbnQtXFx1MDAzZXR5cGUgPT0gTUFEVl9IQVJEKSB7XFxuK1xcdFxcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9IQVJEX0RJUlRZX1NITUVNLCByZXQpO1xcbitcXHRcXHRyZXQgPSBzaWdzZXRqbXAoc2lnbmFsX2ptcF9idWYsIDEpO1xcbitcXHRcXHRpZiAocmV0ID09IDApXFxuK1xcdFxcdFxcdEZPUkNFX1JFQUQoKmFkZHIpO1xcbitcXHRcXHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIFJFQURfRVJST1IsIHJldCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9TT0ZUX0RJUlRZX1NITUVNLCByZXQpO1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRVEobXVubWFwKGFkZHIsIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSksIDApO1xcbitcXG4rXFx0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XFxuK31cXG4rXFxuK1RFU1RfRihtZW1vcnlfZmFpbHVyZSwgY2xlYW5fc2htZW0pXFxuK3tcXG4rXFx0aW50IGZkO1xcbitcXHRjaGFyICphZGRyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZmQgPSBwcmVwYXJlX3NobWVtKFxcXCJzaG1lbS1maWxlXFxcIiwgc2VsZi1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJmYWlsZWQgdG8gb3BlbiB0ZXN0IHNobWVtLWZpbGUuXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGFkZHIgPSBtbWFwKDAsIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0ICAgIE1BUF9TSEFSRUQsIGZkLCAwKTtcXG4rXFx0aWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkge1xcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwibW1hcCBmYWlsZWQsIG5vdCBlbm91Z2ggbWVtb3J5LlxcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFx0Rk9SQ0VfUkVBRCgqYWRkcik7XFxuK1xcbitcXHRwcmVwYXJlKF9tZXRhZGF0YSwgc2VsZiwgYWRkcik7XFxuK1xcbitcXHRyZXQgPSBzaWdzZXRqbXAoc2lnbmFsX2ptcF9idWYsIDEpO1xcbitcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhc2VsZi1cXHUwMDNlaW5qZWN0aW9uX2F0dGVtcHRlZCkge1xcbitcXHRcXHRzZWxmLVxcdTAwM2VpbmplY3Rpb25fYXR0ZW1wdGVkID0gdHJ1ZTtcXG4rXFx0XFx0QVNTRVJUX0VRKHZhcmlhbnQtXFx1MDAzZWluamVjdChzZWxmLCBhZGRyKSwgMCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2YXJpYW50LVxcdTAwM2V0eXBlID09IE1BRFZfSEFSRCkge1xcbitcXHRcXHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfSEFSRF9DTEVBTl9TSE1FTSwgcmV0KTtcXG4rXFx0XFx0cmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTtcXG4rXFx0XFx0aWYgKHJldCA9PSAwKVxcbitcXHRcXHRcXHRGT1JDRV9SRUFEKCphZGRyKTtcXG4rXFx0XFx0Y2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBSRUFEX0VSUk9SLCByZXQpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBUZXN0IHRoZSBhZGRyZXNzIGFjY2Vzc2FiaWxpdHkgd2l0aG91dCBjaGVja19tZW1vcnkoKS4gKi9cXG4rXFx0XFx0Rk9SQ0VfUkVBRCgqYWRkcik7XFxuK1xcdFxcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9TT0ZUX0NMRUFOX1NITUVNLCByZXQpO1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRVEobXVubWFwKGFkZHIsIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSksIDApO1xcbitcXG4rXFx0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XFxuK31cXG4rXFxuIFRFU1RfSEFSTkVTU19NQUlOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjAxLjg3MzIxNjAzOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUwNDI0NDIwMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X2ZhaWx1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgZm9yIHNobWVtIHBhZ2VzIGJ5IHJldHVybmluZyBNRl9ERUxBWUVEIGluc3RlYWQgb2YgMCBpbiBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW8sIGFuZCB1cGRhdGVzIHRydW5jYXRlX2Vycm9yX2ZvbGlvIHRvIGhhbmRsZSB0aGlzIG5ldyByZXR1cm4gdmFsdWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIG9uIHNobWVtIG1hcHBpbmdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMzJhNzM2Mzk0ZGE5YTZlZDVhZmNmMzcwZWE2ZWIzZTdkYTNmMDNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMTk6NTA6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYWFmMTQ2MDhiMzBlMi4uYzdhMDBjN2JlMzY4ZSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC04NDcsMjQgKzg0NywyNSBAQCBzdGF0aWMgaW50IGtpbGxfYWNjZXNzaW5nX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBsb25nIHBmbixcbiB9XG4gXG4gLypcbi0gKiBNRl9JR05PUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCdlZC5cbisgKiBNRl9JR05PUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb24nZWQuXG4gICogQnV0IGl0IGNvdWxkIG5vdCBkbyBtb3JlIHRvIGlzb2xhdGUgdGhlIHBhZ2UgZnJvbSBiZWluZyBhY2Nlc3NlZCBhZ2FpbixcbiAgKiBub3IgZG9lcyBpdCBraWxsIHRoZSBwcm9jZXNzLiBUaGlzIGlzIGV4dHJlbWVseSByYXJlIGFuZCBvbmUgb2YgdGhlXG4gICogcG90ZW50aWFsIGNhdXNlcyBpcyB0aGF0IHRoZSBwYWdlIHN0YXRlIGhhcyBiZWVuIGNoYW5nZWQgZHVlIHRvXG4gICogdW5kZXJseWluZyByYWNlIGNvbmRpdGlvbi4gVGhpcyBpcyB0aGUgbW9zdCBzZXZlcmUgb3V0Y29tZXMuXG4gICpcbi0gKiBNRl9GQUlMRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbmVkJ2VkLlxuKyAqIE1GX0ZBSUxFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJ2VkLlxuICAqIEl0IHNob3VsZCBoYXZlIGtpbGxlZCB0aGUgcHJvY2VzcywgYnV0IGl0IGNhbid0IGlzb2xhdGUgdGhlIHBhZ2UsXG4gICogZHVlIHRvIGNvbmRpdGlvbnMgc3VjaCBhcyBleHRyYSBwaW4sIHVubWFwIGZhaWx1cmUsIGV0Yy4gQWNjZXNzaW5nXG4gICogdGhlIHBhZ2UgYWdhaW4gbWF5IHRyaWdnZXIgYW5vdGhlciBNQ0UgYW5kIHRoZSBwcm9jZXNzIHdpbGwgYmUga2lsbGVkXG4gICogYnkgdGhlIG0tZigpIGhhbmRsZXIgaW1tZWRpYXRlbHkuXG4gICpcbi0gKiBNRl9ERUxBWUVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCdlZC5cbi0gKiBUaGUgcGFnZSBpcyB1bm1hcHBlZCwgYW5kIGlzIHJlbW92ZWQgZnJvbSB0aGUgTFJVIG9yIGZpbGUgbWFwcGluZy5cbi0gKiBBbiBhdHRlbXB0IHRvIGFjY2VzcyB0aGUgcGFnZSBhZ2FpbiB3aWxsIHRyaWdnZXIgcGFnZSBmYXVsdCBhbmQgdGhlXG4tICogUEYgaGFuZGxlciB3aWxsIGtpbGwgdGhlIHByb2Nlc3MuXG4rICogTUZfREVMQVlFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJ2VkLlxuKyAqIEl0IG1lYW5zIHRoZSBwYWdlIHdhcyB1bm1hcHBlZCBhbmQgcGFydGlhbGx5IGlzb2xhdGVkIChlLmcuIHJlbW92ZWQgZnJvbVxuKyAqIGZpbGUgbWFwcGluZyBvciB0aGUgTFJVKSBidXQgZnVsbCBjbGVhbnVwIGlzIGRlZmVycmVkIChlLmcuIHRoZSBtZXRhZGF0YVxuKyAqIGZvciB0aGUgbWVtb3J5LCBhcyBpbiBzdHJ1Y3QgcGFnZS9mb2xpbywgaXMgc3RpbGwgcmVmZXJlbmNlZCkuIEFueVxuKyAqIGZ1cnRoZXIgYWNjZXNzIHRvIHRoZSBwYWdlIHdpbGwgcmVzdWx0IGluIHRoZSBwcm9jZXNzIGJlaW5nIGtpbGxlZC5cbiAgKlxuLSAqIE1GX1JFQ09WRVJFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uZWQnZWQuXG4rICogTUZfUkVDT1ZFUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb24nZWQuXG4gICogVGhlIHBhZ2UgaGFzIGJlZW4gY29tcGxldGVseSBpc29sYXRlZCwgdGhhdCBpcywgdW5tYXBwZWQsIHRha2VuIG91dCBvZlxuICAqIHRoZSBidWRkeSBzeXN0ZW0sIG9yIGhvbGUtcHVuY2hlZCBvdXQgb2YgdGhlIGZpbGUgbWFwcGluZy5cbiAgKi9cbkBAIC05MzgsMTAgKzkzOSwxMiBAQCBzdGF0aWMgaW50IHRydW5jYXRlX2Vycm9yX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0aWYgKG1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZXJyb3JfcmVtb3ZlX2ZvbGlvKSB7XG4gXHRcdGludCBlcnIgPSBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWVycm9yX3JlbW92ZV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4gXG4tXHRcdGlmIChlcnIgIT0gMClcbitcdFx0aWYgKGVyciA9PSBNRl9ERUxBWUVEKVxuK1x0XHRcdHJldCA9IGVycjtcbitcdFx0ZWxzZSBpZiAoZXJyICE9IDApXG4gXHRcdFx0cHJfaW5mbyhcIiUjbHg6IEZhaWxlZCB0byBwdW5jaCBwYWdlOiAlZFxcblwiLCBwZm4sIGVycik7XG4gXHRcdGVsc2UgaWYgKCFmaWxlbWFwX3JlbGVhc2VfZm9saW8oZm9saW8sIEdGUF9OT0lPKSlcbi1cdFx0XHRwcl9pbmZvKFwiJSNseDogZmFpbGVkIHRvIHJlbGVhc2UgYnVmZmVyc1xcblwiLCBwZm4pO1xuK1x0XHRcdHByX2luZm8oXCIlI2x4OiBGYWlsZWQgdG8gcmVsZWFzZSBidWZmZXJzXFxuXCIsIHBmbik7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXQgPSBNRl9SRUNPVkVSRUQ7XG4gXHR9IGVsc2Uge1xuQEAgLTEwMzYsMTggKzEwMzksMTQgQEAgc3RhdGljIGludCBtZV9wYWdlY2FjaGVfY2xlYW4oc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogVGhlIHNobWVtIHBhZ2UgaXMga2VwdCBpbiBwYWdlIGNhY2hlIGluc3RlYWQgb2YgdHJ1bmNhdGluZ1xuLVx0ICogc28gaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhbiBleHRyYSByZWZjb3VudCBhZnRlciBlcnJvci1oYW5kbGluZy5cbi1cdCAqL1xuLVx0ZXh0cmFfcGlucyA9IHNobWVtX21hcHBpbmcobWFwcGluZyk7XG4tXG4gXHQvKlxuIFx0ICogVHJ1bmNhdGlvbiBpcyBhIGJpdCB0cmlja3kuIEVuYWJsZSBpdCBwZXIgZmlsZSBzeXN0ZW0gZm9yIG5vdy5cbiBcdCAqXG4gXHQgKiBPcGVuOiB0byB0YWtlIGlfcndzZW0gb3Igbm90IGZvciB0aGlzPyBSaWdodCBub3cgd2UgZG9uJ3QuXG4gXHQgKi9cbiBcdHJldCA9IHRydW5jYXRlX2Vycm9yX2ZvbGlvKGZvbGlvLCBwYWdlX3RvX3BmbihwKSwgbWFwcGluZyk7XG4rXG4rXHRleHRyYV9waW5zID0gcmV0ID09IE1GX0RFTEFZRUQ7XG4gXHRpZiAoaGFzX2V4dHJhX3JlZmNvdW50KHBzLCBwLCBleHRyYV9waW5zKSlcbiBcdFx0cmV0ID0gTUZfRkFJTEVEO1xuIFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA3NzRmNGIxOGZmNWM2Li5kNmY5NDc4NmU3MDllIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTUxMzYsNyArNTEzNiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzaG1lbV9kZXN0cm95X2lub2RlY2FjaGUodm9pZClcbiBzdGF0aWMgaW50IHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRcdCAgIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gTUZfREVMQVlFRDtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc2htZW1fYW9wcyA9IHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggMWE1YTMyZTIyY2NlMi4uNWIyNmYwYzQ0NjY0NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0yMCw2ICsyMCwxMCBAQFxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiBcbisjaWZuZGVmIGZhbGx0aHJvdWdoXG4rIyBkZWZpbmUgZmFsbHRocm91Z2ggX19hdHRyaWJ1dGVfXygoX19mYWxsdGhyb3VnaF9fKSlcbisjZW5kaWZcbitcbiBlbnVtIGluamVjdF90eXBlIHtcbiBcdE1BRFZfSEFSRCxcbiBcdE1BRFZfU09GVCxcbkBAIC0yOSw5ICszMywxNCBAQCBlbnVtIHJlc3VsdF90eXBlIHtcbiBcdE1BRFZfSEFSRF9BTk9OLFxuIFx0TUFEVl9IQVJEX0NMRUFOX1BBR0VDQUNIRSxcbiBcdE1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEUsXG4rXHRNQURWX0hBUkRfQ0xFQU5fU0hNRU0sXG4rXHRNQURWX0hBUkRfRElSVFlfU0hNRU0sXG4gXHRNQURWX1NPRlRfQU5PTixcbiBcdE1BRFZfU09GVF9DTEVBTl9QQUdFQ0FDSEUsXG4gXHRNQURWX1NPRlRfRElSVFlfUEFHRUNBQ0hFLFxuK1x0TUFEVl9TT0ZUX0NMRUFOX1NITUVNLFxuK1x0TUFEVl9TT0ZUX0RJUlRZX1NITUVNLFxuK1x0UkVBRF9FUlJPUixcbiB9O1xuIFxuIHN0YXRpYyBqbXBfYnVmIHNpZ25hbF9qbXBfYnVmO1xuQEAgLTE1NywxNyArMTY2LDIyIEBAIHN0YXRpYyB2b2lkIGNoZWNrKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgRklYVFVSRV9EQVRBKG1lbW9yeV9mYWlsdXJlXG4gXHRjYXNlIE1BRFZfSEFSRF9DTEVBTl9QQUdFQ0FDSEU6XG4gXHRjYXNlIE1BRFZfU09GVF9DTEVBTl9QQUdFQ0FDSEU6XG4gXHRjYXNlIE1BRFZfU09GVF9ESVJUWV9QQUdFQ0FDSEU6XG4tXHRcdC8qIEl0IGlzIG5vdCBleHBlY3RlZCB0byByZWNlaXZlIGEgU0lHQlVTIHNpZ25hbC4gKi9cbi1cdFx0QVNTRVJUX0VRKHNldGptcCwgMCk7XG4tXG4rXHRjYXNlIE1BRFZfU09GVF9ESVJUWV9TSE1FTTpcbiBcdFx0LyogVGhlIHBhZ2UgY29udGVudCBzaG91bGQgcmVtYWluIHVuY2hhbmdlZC4gKi9cbiBcdFx0QVNTRVJUX1RSVUUoY2hlY2tfbWVtb3J5KHZhZGRyLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSkpO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgTUFEVl9IQVJEX0NMRUFOX1NITUVNOlxuK1x0Y2FzZSBNQURWX1NPRlRfQ0xFQU5fU0hNRU06XG4rXHRcdC8qIEl0IGlzIG5vdCBleHBlY3RlZCB0byByZWNlaXZlIGEgU0lHQlVTIHNpZ25hbC4gKi9cbitcdFx0QVNTRVJUX0VRKHNldGptcCwgMCk7XG4gXG4gXHRcdC8qIFRoZSBiYWNraW5nIHBmbiBvZiBhZGRyIHNob3VsZCBoYXZlIGNoYW5nZWQuICovXG4gXHRcdEFTU0VSVF9ORShwYWdlbWFwX2dldF9wZm4oc2VsZi1cdTAwM2VwYWdlbWFwX2ZkLCB2YWRkciksIHNlbGYtXHUwMDNlcGZuKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE1BRFZfSEFSRF9BTk9OOlxuIFx0Y2FzZSBNQURWX0hBUkRfRElSVFlfUEFHRUNBQ0hFOlxuK1x0Y2FzZSBNQURWX0hBUkRfRElSVFlfU0hNRU06XG4rXHRjYXNlIFJFQURfRVJST1I6XG4gXHRcdC8qIFRoZSBTSUdCVVMgc2lnbmFsIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQuICovXG4gXHRcdEFTU0VSVF9FUShzZXRqbXAsIDEpO1xuIFxuQEAgLTI2Myw2ICsyNzcsMjAgQEAgc3RhdGljIGludCBwcmVwYXJlX2ZpbGUoY29uc3QgY2hhciAqZm5hbWUsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiBcdHJldHVybiBmZDtcbiB9XG4gXG4rc3RhdGljIGludCBwcmVwYXJlX3NobWVtKGNvbnN0IGNoYXIgKmZuYW1lLCB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0aW50IGZkO1xuK1xuK1x0ZmQgPSBtZW1mZF9jcmVhdGUoZm5hbWUsIDApO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAoZnRydW5jYXRlKGZkLCBzaXplKSBcdTAwM2MgMCkge1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcdHJldHVybiBmZDtcbit9XG4rXG4gLyogQm9ycm93ZWQgZnJvbSBtbS9ndXBfbG9uZ3Rlcm0uYy4gKi9cbiBzdGF0aWMgaW50IGdldF9mc190eXBlKGludCBmZClcbiB7XG5AQCAtMzU1LDQgKzM4Myw4OCBAQCBURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGRpcnR5X3BhZ2VjYWNoZSlcbiBcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuIH1cbiBcbitURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGRpcnR5X3NobWVtKVxuK3tcbitcdGludCBmZDtcbitcdGNoYXIgKmFkZHI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZmQgPSBwcmVwYXJlX3NobWVtKFwic2htZW0tZmlsZVwiLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdFNLSVAocmV0dXJuLCBcImZhaWxlZCB0byBvcGVuIHRlc3Qgc2htZW0tZmlsZS5cXG5cIik7XG4rXG4rXHRhZGRyID0gbW1hcCgwLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgIE1BUF9TSEFSRUQsIGZkLCAwKTtcbitcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHtcbitcdFx0Y2xvc2UoZmQpO1xuK1x0XHRTS0lQKHJldHVybiwgXCJtbWFwIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkuXFxuXCIpO1xuK1x0fVxuK1x0bWVtc2V0KGFkZHIsIDB4Y2UsIHNlbGYtXHUwMDNlcGFnZV9zaXplKTtcbitcbitcdHByZXBhcmUoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTtcbitcbitcdHJldCA9IHNpZ3NldGptcChzaWduYWxfam1wX2J1ZiwgMSk7XG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIXNlbGYtXHUwMDNlaW5qZWN0aW9uX2F0dGVtcHRlZCkge1xuK1x0XHRzZWxmLVx1MDAzZWluamVjdGlvbl9hdHRlbXB0ZWQgPSB0cnVlO1xuK1x0XHRBU1NFUlRfRVEodmFyaWFudC1cdTAwM2VpbmplY3Qoc2VsZiwgYWRkciksIDApO1xuK1x0fVxuK1xuK1x0aWYgKHZhcmlhbnQtXHUwMDNldHlwZSA9PSBNQURWX0hBUkQpIHtcbitcdFx0Y2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBNQURWX0hBUkRfRElSVFlfU0hNRU0sIHJldCk7XG4rXHRcdHJldCA9IHNpZ3NldGptcChzaWduYWxfam1wX2J1ZiwgMSk7XG4rXHRcdGlmIChyZXQgPT0gMClcbitcdFx0XHRGT1JDRV9SRUFEKCphZGRyKTtcbitcdFx0Y2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBSRUFEX0VSUk9SLCByZXQpO1xuK1x0fSBlbHNlIHtcbitcdFx0Y2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBNQURWX1NPRlRfRElSVFlfU0hNRU0sIHJldCk7XG4rXHR9XG4rXG4rXHRBU1NFUlRfRVEobXVubWFwKGFkZHIsIHNlbGYtXHUwMDNlcGFnZV9zaXplKSwgMCk7XG4rXG4rXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbit9XG4rXG4rVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBjbGVhbl9zaG1lbSlcbit7XG4rXHRpbnQgZmQ7XG4rXHRjaGFyICphZGRyO1xuK1x0aW50IHJldDtcbitcbitcdGZkID0gcHJlcGFyZV9zaG1lbShcInNobWVtLWZpbGVcIiwgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJmYWlsZWQgdG8gb3BlbiB0ZXN0IHNobWVtLWZpbGUuXFxuXCIpO1xuK1xuK1x0YWRkciA9IG1tYXAoMCwgc2VsZi1cdTAwM2VwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdCAgICBNQVBfU0hBUkVELCBmZCwgMCk7XG4rXHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0U0tJUChyZXR1cm4sIFwibW1hcCBmYWlsZWQsIG5vdCBlbm91Z2ggbWVtb3J5LlxcblwiKTtcbitcdH1cbitcdEZPUkNFX1JFQUQoKmFkZHIpO1xuK1xuK1x0cHJlcGFyZShfbWV0YWRhdGEsIHNlbGYsIGFkZHIpO1xuK1xuK1x0cmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTtcbitcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhc2VsZi1cdTAwM2VpbmplY3Rpb25fYXR0ZW1wdGVkKSB7XG4rXHRcdHNlbGYtXHUwMDNlaW5qZWN0aW9uX2F0dGVtcHRlZCA9IHRydWU7XG4rXHRcdEFTU0VSVF9FUSh2YXJpYW50LVx1MDAzZWluamVjdChzZWxmLCBhZGRyKSwgMCk7XG4rXHR9XG4rXG4rXHRpZiAodmFyaWFudC1cdTAwM2V0eXBlID09IE1BRFZfSEFSRCkge1xuK1x0XHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfSEFSRF9DTEVBTl9TSE1FTSwgcmV0KTtcbitcdFx0cmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTtcbitcdFx0aWYgKHJldCA9PSAwKVxuK1x0XHRcdEZPUkNFX1JFQUQoKmFkZHIpO1xuK1x0XHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIFJFQURfRVJST1IsIHJldCk7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBUZXN0IHRoZSBhZGRyZXNzIGFjY2Vzc2FiaWxpdHkgd2l0aG91dCBjaGVja19tZW1vcnkoKS4gKi9cbitcdFx0Rk9SQ0VfUkVBRCgqYWRkcik7XG4rXHRcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9TT0ZUX0NMRUFOX1NITUVNLCByZXQpO1xuK1x0fVxuK1xuK1x0QVNTRVJUX0VRKG11bm1hcChhZGRyLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSksIDApO1xuK1xuK1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4rfVxuK1xuIFRFU1RfSEFSTkVTU19NQUlOXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDowMS44NzMyMTc0MDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTc3OTk1MzY0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBSZWxhdGVkIHRvIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgc29tZSBjcml0aWNhbCBjb2RlOiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGBtbS9zaG1lbS5jYCwgYW5kIGEgc2VsZnRlc3QgZmlsZS4gVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3Q7IGFueXRoaW5nIGRlYWxpbmcgd2l0aCBtZW1vcnkgZmFpbHVyZXMgaXMgc2Vuc2l0aXZlLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IHRoZSBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCBmdW5jdGlvbiBpbiBgbW0vc2htZW0uY2AgcmVwb3J0cyBpdHMgb3V0Y29tZS4gSW5zdGVhZCBvZiByZXR1cm5pbmcgMCAoc3VjY2Vzcywgb3IgYXQgbGVhc3Qgbm8gaW1tZWRpYXRlIGVycm9yKSwgaXQncyBub3cgcmV0dXJuaW5nIGBNRl9ERUxBWUVEYC4gVGhpcyBzZWVtcyBsaWtlIGEgc2lnbmFsIHRoYXQgdGhlIHJlbW92YWwgaXNuJ3QgKmltbWVkaWF0ZWx5KiBjb21wbGV0ZSwgcGVyaGFwcyBkdWUgdG8gc29tZSBkZWZlcnJlZCBhY3Rpb24uXG5cblRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGB0cnVuY2F0ZV9lcnJvcl9mb2xpb2AgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIG5lZWRzIHRvICpoYW5kbGUqIHRoaXMgYE1GX0RFTEFZRURgIHJldHVybiB2YWx1ZS4gU3BlY2lmaWNhbGx5LCB0aGVyZSdzIGxvZ2ljIGFkZGVkIHRvIGNoZWNrIGZvciB0aGF0IHJldHVybiBjb2RlIGFuZCBhY3QgYWNjb3JkaW5nbHkuIFRoZW4sIHdlIGhhdmUgYW4gdXBkYXRlIHRvIGBtZV9wYWdlY2FjaGVfY2xlYW5gIHRvIGRlYWwgd2l0aCBgcmV0ID09IE1GX0RFTEFZRURgIGZvciBgZXh0cmFfcGluc2AuXG5cbkxldCdzIGRpZyBpbi4gYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgaXMgYW4gYWRkcmVzcyBzcGFjZSBvcGVyYXRpb24sIHNvIHRoaXMgbG9va3MgbGlrZSBrZXJuZWwgbG9naWMuIE1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBNQURWX0hXUE9JU09OIGFuZCBoYXJkd2FyZSBNQ0VzIGFyZSBrZXkgdHJpZ2dlcmluZyBtZWNoYW5pc21zLlxuXG5JIG5lZWQgdG8gY29uZmlybSB3aGF0J3MgaGFwcGVuaW5nIGluIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gLiBPa2F5LCB0aGUgY29kZSBqdXN0IHJldHVybnMgYE1GX0RFTEFZRURgLiBTdHJhaWdodGZvcndhcmQuIFRoaXMgdHJpZ2dlcnMgdGhlIG5ldyBgTUZfREVMQVlFRGAgaGFuZGxpbmcgaW4gYHRydW5jYXRlX2Vycm9yX2ZvbGlvYC4gVGhlIGNvZGUgY2hlY2tzIGlmIGBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWVycm9yX3JlbW92ZV9mb2xpb2AgaXMgZGVmaW5lZCwgY2FsbHMgaXQsIGFuZCB0aGVuIGhhbmRsZXMgdGhlIHJldHVybiB2YWx1ZSAoaW5jbHVkaW5nIGBNRl9ERUxBWUVEYCkuIEl0IHNlZW1zIGxpa2Ugd2UncmUgZGVmZXJyaW5nIHRoZSBhY3R1YWwgcGFnZSByZW1vdmFsIGluIGBzaG1lbWAuXG5cbmBtZV9wYWdlY2FjaGVfY2xlYW5gIGlzIHdoZXJlIHRoaW5ncyBhcmUgc3RhcnRpbmcgdG8gZ2V0IGludGVyZXN0aW5nLiBUaGUgY29kZSBjYWxscyBgdHJ1bmNhdGVfZXJyb3JfZm9saW9gLCBhbmQgdGhlbiBjaGVja3MgZm9yIGByZXQgPT0gTUZfREVMQVlFRGAuIElmIGl0IGdldHMgYSBkZWxheWVkIHJldHVybiwgaXQgc2V0cyBgZXh0cmFfcGlucyA9IHRydWVgLiBTbyB3ZSdyZSBlc3NlbnRpYWxseSBzYXlpbmcsIFwiSGV5LCB3ZSdyZSBub3QgZG9uZSB3aXRoIHRoaXMgcGFnZSB5ZXQ7IGtlZXAgaXQgcGlubmVkLlwiXG5cblRoaXMgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgbWVfcGFnZWNhY2hlX2NsZWFuYCwgYHRydW5jYXRlX2Vycm9yX2ZvbGlvYCwgYW5kIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gLlxuXG5Ob3csIHdhaXQgYSBzZWNvbmQuLi4gYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgaXMgKnN0YXRpYyouIEJ1dCBpdCdzIGFuIEFQSSBlbnRyeXBvaW50IGZvciBgZXJyb3JfcmVtb3ZlX2ZvbGlvYC4gT2theSwgaXQncyBhc3NpZ25lZCB0byBgc2htZW1fYW9wcy5lcnJvcl9yZW1vdmVfZm9saW9gLiBGaW5lLlxuXG5MZXQncyBqdXN0IGNvbmZpcm0gYHRydW5jYXRlX2Vycm9yX2ZvbGlvYCBpcyBhbHNvIHN0YXRpYy4gWXVwLCBpdCBpcy4gQW5kIGBtZV9wYWdlY2FjaGVfY2xlYW5gIHRvby4gQWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gY2hlY2sgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFnYWluLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBoZXJlLiBUaGUgbWFpbiBvbmUgaXMgYG1lbW9yeV9mYWlsdXJlYC4gT2theSwgbGV0J3Mgc2VhcmNoIGZvciB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODk0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjEzLjY1MzE3NDY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MDIxODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgbWVtb3J5X2ZhaWx1cmVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9MjMxOT1zdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzg0LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjM4NTppbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzODYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDoxMy43MTcyMDE2NTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODA2NDE1MzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkNvbnNpZGVyaW5nIE1lbW9yeSBNYW5hZ2VtZW50IFN0cmF0ZWdpZXMqKlxuXG5Pa2F5LCBzbyBgbWVtb3J5X2ZhaWx1cmVgIGlzbid0IGEgc3RhdGljIGNvbmNlcHQsIHRoYXQncyB0aGUgZmlyc3QgdGhpbmcgdG8gbm90ZS4gTm93IEknbSBzdGFydGluZyB0byB0aGluayBhYm91dCBhbHRlcm5hdGl2ZXMgb3IgcmVsYXRlZCBpZGVhcyBhbmQgaG93IHRoZXkgcGxheSBpbnRvIHRoaXMuIEknbSB3b25kZXJpbmcgaWYgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBtaWdodCBiZSByZWxldmFudC4gSXMgaXQgYSBwb3RlbnRpYWwgc29sdXRpb24/IERvZXMgaXQgcHJvdmlkZSBhIGNvbXBsZW1lbnRhcnkgYXBwcm9hY2g/IE9yIGNvdWxkIGl0IGJlIGEgcG90ZW50aWFsIGNvdW50ZXItaW5kaWNhdGlvbj8gSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggaG93IHRoZXNlIHR3byBjb25jZXB0cyBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc2NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjE2LjUyMzYxOTM2MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDI5NDI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2luamVjdF9lcnJvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTEzMzg9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNDQ2LSAqL1xcbm1tL21hZHZpc2UuYzoxNDQ3OnN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTE0NDgte1xcbi0tXFxubW0vbWFkdmlzZS5jPTE0OTI9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTUwNC1cXG5tbS9tYWR2aXNlLmM6MTUwNTpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbm1tL21hZHZpc2UuYy0xNTA2LXtcXG4tLVxcbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE4OTYtXFx0XFx0cmFuZ2UtXFx1MDAzZWVuZCA9IHN0YXJ0ICsgbGVuX2luO1xcbm1tL21hZHZpc2UuYzoxODk3OlxcdFxcdHJldHVybiBtYWR2aXNlX2luamVjdF9lcnJvcihtYWR2X2JlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmMtMTg5OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjE2LjYxNzkxOTI5MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTA0MTU4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBGdW5jdGlvbnMgaW4gTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKlxuXG5SaWdodCwgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIE5vdywgbGV0J3Mgc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBoYW5naW5nIGFyb3VuZCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBvdGhlciwgcGVyaGFwcyBtb3JlIGdsb2JhbGx5IGFjY2Vzc2libGUsIHRvb2xzIGluIHRoYXQgZmlsZSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIGVycm9yIGluamVjdGlvbiwgb3IgbW9yZSBnZW5lcmFsbHksIG1lbW9yeSBmYXVsdCBoYW5kbGluZy4gRGlnZ2luZyBpbnRvIHRoaXMgZmlsZSBpcyBvZnRlbiBrZXkgdG8gZGVidWdnaW5nIG1lbW9yeS1yZWxhdGVkIGlzc3VlcywgYW5kIGZpbmRpbmcgcmV1c2FibGUsIG5vbi1zdGF0aWMgZnVuY3Rpb25hbGl0eSBjb3VsZCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHRzIG9yIGJ1aWxkaW5nIGJsb2NrcyBmb3IgbXkgb3duIHdvcmsuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBzaW1pbGFyIGNvZGUgc3RydWN0dXJlcyBvZnRlbiBleGlzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIHNvbWUgdGhhdCBtaWdodCBiZSBvZiB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNTcsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDoxOS45MjgzMzc4NjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1NDQyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfMC05XSsgW2EtekEtWl8wLTldK1xcXFwoLipcXFxcKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9ODI9c3RhdGljIGJvb2wgaHdfbWVtb3J5X2ZhaWx1cmUgX19yZWFkX21vc3RseTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTgzLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6ODQ6c3RhdGljIERFRklORV9NVVRFWChtZl9tdXRleCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy04NS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjg2OnZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbilcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTg3LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtOTEtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzo5Mjp2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTkzLXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTA0PXN0YXRpYyBzc2l6ZV90IF9uYW1lIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFx0XFx0XFx0XFxcXFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMTEtfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjExMjpzdGF0aWMgREVWSUNFX0FUVFJfUk8oX25hbWUpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMTMtXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE3Mz1zdGF0aWMgc3RydWN0IHJiX3Jvb3RfY2FjaGVkIHBmbl9zcGFjZV9pdHJlZSA9IFJCX1JPT1RfQ0FDSEVEO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTc0LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTc1OnN0YXRpYyBERUZJTkVfTVVURVgocGZuX3NwYWNlX2xvY2spO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTc2LVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMjM9c3RhdGljIGh3cG9pc29uX2ZpbHRlcl9mdW5jX3QgX19yY3UgKmh3cG9pc29uX2ZpbHRlcl9mdW5jIF9fcmVhZF9tb3N0bHk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjQtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMjU6dm9pZCBod3BvaXNvbl9maWx0ZXJfcmVnaXN0ZXIoaHdwb2lzb25fZmlsdGVyX2Z1bmNfdCAqZmlsdGVyKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjI2LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjI5PUVYUE9SVF9TWU1CT0xfR1BMKGh3cG9pc29uX2ZpbHRlcl9yZWdpc3Rlcik7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzAtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMzE6dm9pZCBod3BvaXNvbl9maWx0ZXJfdW5yZWdpc3Rlcih2b2lkKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjMyLXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjg2PXN0YXRpYyBpbnQga2lsbF9wcm9jKHN0cnVjdCB0b19raWxsICp0aywgdW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMzE2LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MzE3OnZvaWQgc2hha2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTMxOC17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTEzMTU9c3RhdGljIGlubGluZSBib29sIFBhZ2VIV1BvaXNvblRha2VuT2ZmKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzE5LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTMyMDp2b2lkIFNldFBhZ2VIV1BvaXNvblRha2VuT2ZmKHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTMyMS17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMjQtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMzI1OnZvaWQgQ2xlYXJQYWdlSFdQb2lzb25UYWtlbk9mZihzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMjYte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNTQ5PXN0YXRpYyBpbnQgZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE1NjYtICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNTY3OmludCB1bm1hcF9wb2lzb25lZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBtdXN0X2tpbGwpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNTY4LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTg3NT1zdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2xpc3RfaGVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODc5LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg4MDpib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg4MS17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE5ODM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDAxLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjAwMjp2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwMDMte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMjEyPXN0YXRpYyB2b2lkIGtpbGxfcHJvY3Nfbm93KHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjIzLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjIyNDppbnQgcmVnaXN0ZXJfcGZuX2FkZHJlc3Nfc3BhY2Uoc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjI1LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjI0MD1FWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9wZm5fYWRkcmVzc19zcGFjZSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjQxLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjI0Mjp2b2lkIHVucmVnaXN0ZXJfcGZuX2FkZHJlc3Nfc3BhY2Uoc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjQzLXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjMxOT1zdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzg0LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjM4NTppbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzODYte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNjI4PXN0cnVjdCBtZW1vcnlfZmFpbHVyZV9jcHUge1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjM0LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjYzNTpzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IG1lbW9yeV9mYWlsdXJlX2NwdSwgbWVtb3J5X2ZhaWx1cmVfY3B1KTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MzYtXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NTItICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjUzOnZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NTQte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzEzPWNvcmVfaW5pdGNhbGwobWVtb3J5X2ZhaWx1cmVfaW5pdCk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MzQtICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzM1OmludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzM2LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjg0OD1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk2NS0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI5NjY6aW50IHNvZnRfb2ZmbGluZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTY3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTA6MTkuOTc1ODg2OTQ3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1NzQ4MTM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IFBvaXNvbmluZyBUZWNobmlxdWVzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMgbWVtb3J5IHBvaXNvbmluZyBzdHVmZi4gTG9va3MgbGlrZSBgbWVtb3J5X2ZhaWx1cmVgLCBgdW5wb2lzb25fbWVtb3J5YCwgYW5kIGBzb2Z0X29mZmxpbmVfcGFnZWAgYXJlIHRoZSBvYnZpb3VzIHBsYWNlcyB0byBzdGFydCBkaWdnaW5nLiBHb29kIGVudHJ5IHBvaW50cywgZm9yIHN1cmUuIEFoLCBhbmQgaGVyZSBpdCBpczogYG1hZHZpc2VgIHdpdGggYE1BRFZfSFdQT0lTT05gIGlzIHRoZSBtYWluIG1ldGhvZCB0byB0cmlnZ2VyIHRoaXMgZnJvbSB1c2Vyc3BhY2UuIE5vdywgd2FpdCBhIHNlY29uZC4uLiBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGdldHMgY2FsbGVkIGZyb20gYG1hZHZpc2VfZG9fYmVoYXZpb3JgIHdoZW4gdGhlIGBtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yYCBpcyBlaXRoZXIgYE1BRFZfSFdQT0lTT05gIG9yIGBNQURWX1NPRlRfT0ZGTElORWAuIFRoYXQncyB0aGUgY29ubmVjdGlvbiBJIHdhcyBsb29raW5nIGZvci4gUmlnaHQsIGxldCdzIGhlYWQgb3ZlciB0byBgbW0vbWFkdmlzZS5jYCBhbmQgY2hlY2sgb3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgTUFEVl9IV1BPSVNPTmAuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgc2hvdWxkIGJlIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE5NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDoyMy45MzMzNzEzMDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjMwMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1BRFZfSFdQT0lTT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0OTQtXFx0c3dpdGNoIChtYWR2X2JlaGF2aW9yLVxcdTAwM2ViZWhhdmlvcikge1xcbm1tL21hZHZpc2UuYzoxNDk1OlxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmMtMTQ5Ni1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbi0tXFxubW0vbWFkdmlzZS5jPTE1MTg9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU1MS1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbm1tL21hZHZpc2UuYzoxNTUyOlxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmMtMTU1My0jZW5kaWZcXG4tLVxcbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE5NDMtICogIE1BRFZfS0VFUE9ORk9SSyAtIHVuZG8gdGhlIGVmZmVjdCBvZiBNQURWX1dJUEVPTkZPUktcXG5tbS9tYWR2aXNlLmM6MTk0NDogKiAgTUFEVl9IV1BPSVNPTiAtIHRyaWdnZXIgbWVtb3J5IGVycm9yIGhhbmRsZXIgYXMgaWYgdGhlIGdpdmVuIG1lbW9yeSByYW5nZVxcbm1tL21hZHZpc2UuYy0xOTQ1LSAqXFx0XFx0d2VyZSBjb3JydXB0ZWQgYnkgdW5yZWNvdmVyYWJsZSBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTA6MjMuOTc5NjE3ODY4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMzgyMzExMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IEVycm9yIEluamVjdGlvbioqXG5cbk9rYXksIHNvIHRoZSBgbWFkdmlzZWAgd2l0aCBgTUFEVl9IV1BPSVNPTmAgcm91dGUgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgYXBwcm9hY2ggZm9yIHRyaWdnZXJpbmcgdGhpcyBtZW1vcnkgZXJyb3IgY29uZGl0aW9uLiBUaGF0J3MgdGhlIGVzdGFibGlzaGVkIG1ldGhvZC4gTm93LCB0aGUgdHJpY2sgaXMgcGlucG9pbnRpbmcgdGhlICpleGFjdCogZm9jdXMgc3ltYm9scyBmb3Igc3l6a2FsbGVyIHRvIHRhcmdldC5cblxuSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgYG1lbW9yeV9mYWlsdXJlYCwgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCAod2hpY2gsIGltcG9ydGFudGx5LCBjYWxscyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgKSwgb3IgZXZlbiBqdXN0IGZvY3VzaW5nIG9uIGBtZW1vcnlfZmFpbHVyZWAgZGlyZWN0bHkgYWxvbmdzaWRlIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gLiBJIHRob3VnaHQgbWF5YmUgZnV6emluZyBtaWdodCBieXBhc3Mgc3RhdGljIGlubGluaW5nLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgaXMgYWN0dWFsbHkgYW4gYWRkcmVzcyBzcGFjZSBvcGVyYXRpb24sIHNvIGl0ICpjYW4ndCogYmUgaW5saW5lZC4gQnV0IHdhaXQsIGl0J3Mgc3RhdGljISBUaGF0IG1pZ2h0IGJlIHByb2JsZW1hdGljIGZvciBzeXprYWxsZXIgaWYgaXQgZG9lc24ndCBoYXZlIGEgc3BlY2lmaWMsIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBJdCBpcyBhc3NpZ25lZCB0byBhIHN0cnVjdCwgd2hpY2ggbWVhbnMgaXRzIGFkZHJlc3MgaXMgZGVmaW5pdGVseSB0YWtlbiBhbmQgbm90IGlubGluZWQsIHdoaWNoIGdpdmVzIHVzIGEgdmFsaWQgc3ltYm9sIVxuXG5Ib3dldmVyLCB0aGUgaW5zdHJ1Y3Rpb25zIGNsZWFybHkgc2F5IHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuIFNvLCB0aGF0IHNldHRsZXMgaXQ7IGBtZW1vcnlfZmFpbHVyZWAgaXMgYSBnb29kIGNhbmRpZGF0ZSwgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LlxuXG5JJ20gbm93IHRoaW5raW5nIGFib3V0IGB0cnVuY2F0ZV9lcnJvcl9mb2xpb2AuIEl0J3Mgc3RhdGljLCBidXQgaXQncyBjYWxsZWQgZnJvbSBgbWVfcGFnZWNhY2hlX2NsZWFuYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSB0aGUgYHBhZ2VfYWN0aW9uYCBhcnJheS4gVGhpcyBpcyBhbiBpbnRlcmVzdGluZyBjb25uZWN0aW9uLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGBwYWdlX2FjdGlvbmAgYXJyYXkgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIHRvIHNlZSBpZiB0aGlzIGlzIGEgdmlhYmxlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTA6MzAuMTE3ODUyNzI3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU5MjY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX2FjdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9MTI4MD1zdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjk4LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTI5OTpzdGF0aWMgaW50IHBhZ2VfYWN0aW9uKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnAsXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzAwLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNjg0PXN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE3MDMtXFx0XFx0XFx0XFx0YnJlYWs7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNzA0OlxcdHJldHVybiBwYWdlX2FjdGlvbihwcywgcCwgcGZuKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE3MDUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDozMC4xNjc0NTAzODZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzODg3NjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQ29uZmlnIE9wdGlvbiBEaXZlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgYmVhcmluZ3MuIEJlZm9yZSBkaXZpbmcgaW50byB0aGUgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGNvZGUsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBSaWdodCwgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udHJvbHMgdGhlIGJlaGF2aW9yIEknbSBpbnRlcmVzdGVkIGluLCBiYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCBpcyBtb3N0IGxpa2VseSBgTUVNT1JZX0ZBSUxVUkVgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBzZXQgY29ycmVjdGx5IGFuZCBmaWd1cmUgb3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoYXQncyB0aGUgZmlyc3QgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gdG8gcGluIGRvd24gYmVmb3JlIEkgZXZlbiB0aGluayBhYm91dCB0b3VjaGluZyB0aGUgc291cmNlIGNvZGUgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc4MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjMzLjIwNjMyOTU4NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4ODc3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc0Nz1jb25maWcgREVGQVVMVF9NTUFQX01JTl9BRERSXFxuLS1cXG5tbS9LY29uZmlnLTc2NS1cXG5tbS9LY29uZmlnOjc2Njpjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzY3LVxcdGJvb2xcXG5tbS9LY29uZmlnLTc2OC1cXG5tbS9LY29uZmlnOjc2OTpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc3MC1cXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWc6NzcxOlxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzcyLVxcdGJvb2wgXFxcIkVuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTc4MD1jb25maWcgSFdQT0lTT05fSU5KRUNUXFxubW0vS2NvbmZpZy03ODEtXFx0dHJpc3RhdGUgXFxcIkhXUG9pc29uIHBhZ2VzIGluamVjdG9yXFxcIlxcbm1tL0tjb25maWc6NzgyOlxcdGRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgXFx1MDAyNlxcdTAwMjYgREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IFBST0NfRlNcXG5tbS9LY29uZmlnLTc4My1cXHRzZWxlY3QgUFJPQ19QQUdFX01PTklUT1JcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTA6MzMuMjU3MjI5NzY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzUzNTQ2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgYSBNZW1vcnkgRmFpbHVyZSBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSd2ZSBnb3QgYSBgTUVNT1JZX0ZBSUxVUkVgIGlzc3VlLCBhbmQgSSBpbW1lZGlhdGVseSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGNvZGUgdGhhdCBoYW5kbGVzIGl0IHJlc2lkZXMuIE9rYXksIEkgcmVjYWxsIHNlZWluZyBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCBtZW50aW9uZWQgc29tZXdoZXJlIHJlY2VudGx5IOKAkyB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBOb3csIHdoZXJlIHdhcyB0aGF0IGZ1bmN0aW9uIGRlZmluZWQgYWdhaW4/IEFoLCB5ZXMsIGl0J3MgaW4gYG1tL3NobWVtLmNgLiBCdXQgaXMgdGhhdCBmaWxlIGFsd2F5cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWw/IEl0IHdvdWxkIGJlIHRlcnJpYmxlIGlmIHdlIGVuZGVkIHVwIG5lZWRpbmcgc29tZXRoaW5nIHRoYXQgd2FzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3V0LiBMZXQgbWUgc2VlLCBgQ09ORklHX1NITUVNYCBpcyB1c3VhbGx5IGVuYWJsZWQgaW4gbW9zdCBjb25maWd1cmF0aW9ucywgc28gY2hhbmNlcyBhcmUsIHllcywgYHNobWVtLmNgIGlzIGdvaW5nIHRvIGJlIHByZXNlbnQuIE5vdywgYSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCBpdHNlbGYgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCdzIHdyYXBwZWQgaW4gYW4gYCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGJsb2NrLiBUaGlzIGlzIGNyaXRpY2FsLCBzaW5jZSBpZiBpdCdzIG5vdCwgd2UnbGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMgdG8gc2VlIGlmIHRoZSByZXF1aXJlZCBjb2RlIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDozNy4zOTI1ODc1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMTM2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NobWVtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2htZW0uYz01MTMwPXN0YXRpYyB2b2lkIF9faW5pdCBzaG1lbV9kZXN0cm95X2lub2RlY2FjaGUodm9pZClcXG4tLVxcbm1tL3NobWVtLmMtNTEzNS0vKiBLZWVwIHRoZSBwYWdlIGluIHBhZ2UgY2FjaGUgaW5zdGVhZCBvZiB0cnVuY2F0aW5nIGl0ICovXFxubW0vc2htZW0uYzo1MTM2OnN0YXRpYyBpbnQgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbm1tL3NobWVtLmMtNTEzNy1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc2htZW0uYz01MTQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHNobWVtX2FvcHMgPSB7XFxuLS1cXG5tbS9zaG1lbS5jLTUxNTAtI2VuZGlmXFxubW0vc2htZW0uYzo1MTUxOlxcdC5lcnJvcl9yZW1vdmVfZm9saW8gPSBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW8sXFxubW0vc2htZW0uYy01MTUyLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjM3LjQzODkwODk0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MDc5NDUxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBGYWlsdXJlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uIGlzIGhhbmRsZWQsIGFuZCBpdCBzZWVtcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBpc24ndCBkaXJlY3RseSB0aWVkIHRvIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gVGhhdCdzIG5vdCB0aGUgdHJpZ2dlciwgYnV0IHJhdGhlciwgYE1FTU9SWV9GQUlMVVJFYCBpcyB0aGUgcmVhbCBkZXBlbmRlbmN5LiBJdCBhcHBlYXJzIGBNRU1PUllfRkFJTFVSRWAgZW5hYmxlcyB0aGUgd2hvbGUgbWVjaGFuaXNtIGFuZCBpcyByZXF1aXJlZCB0byBwcm9wZXJseSB1c2UgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgLiBUaGlzIGlzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5JIHNob3VsZCB2ZXJpZnkgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGluZGlyZWN0bHkgcmVsYXRlIHRvIHRoaXMgc2NlbmFyaW8uIFRoZSBgSFdQT0lTT05fSU5KRUNUYCBjb25maWcgbWlnaHQgc2VlbSByZWxldmFudCBhdCBmaXJzdCBnbGFuY2UsIGJ1dCBpdCBhcHBlYXJzIHRoYXQgdGhlIGBtYWR2aXNlYCBjYWxsIHdpdGggYE1BRFZfSFdQT0lTT05gIGZ1bmN0aW9ucyBjb3JyZWN0bHkgd2hlbiBgTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQsIHdpdGhvdXQgZXhwbGljaXRseSBuZWVkaW5nIGBIV1BPSVNPTl9JTkpFQ1RgLiBTbywgYE1FTU9SWV9GQUlMVVJFYCBpcyB0aGUgcHJpbWFyeSBvbmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGBtbS9tYWR2aXNlLmNgIGZpbGUgYWdhaW4gdG8gY29uZmlybSBob3cgYE1BRFZfSFdQT0lTT05gIGlzIGhhbmRsZWQuIEl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzc5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjQyLjA0Njg1NzA4M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMDEwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFEVl9IV1BPSVNPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTE0OTI9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ5NC1cXHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yKSB7XFxubW0vbWFkdmlzZS5jOjE0OTU6XFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbm1tL21hZHZpc2UuYy0xNDk2LVxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxOD1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTUxLVxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxubW0vbWFkdmlzZS5jOjE1NTI6XFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbm1tL21hZHZpc2UuYy0xNTUzLSNlbmRpZlxcbi0tXFxubW0vbWFkdmlzZS5jPTE4ODc9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTk0My0gKiAgTUFEVl9LRUVQT05GT1JLIC0gdW5kbyB0aGUgZWZmZWN0IG9mIE1BRFZfV0lQRU9ORk9SS1xcbm1tL21hZHZpc2UuYzoxOTQ0OiAqICBNQURWX0hXUE9JU09OIC0gdHJpZ2dlciBtZW1vcnkgZXJyb3IgaGFuZGxlciBhcyBpZiB0aGUgZ2l2ZW4gbWVtb3J5IHJhbmdlXFxubW0vbWFkdmlzZS5jLTE5NDUtICpcXHRcXHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDo0Mi4wOTQwNzA4NjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4OTc3ODUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgbWFkdmlzZV9iZWhhdmlvcl92YWxpZGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBtYWR2aXNlX2JlaGF2aW9yX3ZhbGlkYCwgYW5kIHRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0J3MgYWxsIGNvbmRpdGlvbmFsIG9uIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gVGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBsb2dpYyByZXNpZGVzLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBiZWhhdmlvciB2YWxpZGF0aW9uIGlzIHNvbWVob3cgbW9kaWZpZWQsIG9yIHBvdGVudGlhbGx5IGV2ZW4gYnlwYXNzZWQsIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIGNvbmZpZ3VyZWQgdG8gc2ltdWxhdGUgb3IgaGFuZGxlIG1lbW9yeSBmYWlsdXJlcy5cIiBNeSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlIHZhbGlkaXR5IGNoZWNrcyBtaWdodCBiZSByZWxheGVkLCBwZXJoYXBzIGFsbG93aW5nIGNlcnRhaW4gYG1hZHZpc2VgIGhpbnRzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgcmVqZWN0ZWQgdG8gcGFzcyB0aHJvdWdoLCBvciBtYXliZSBldmVuIGltcGxlbWVudGluZyBtb3JlIGFnZ3Jlc3NpdmUgZXJyb3IgaGFuZGxpbmcgdG8gdGVzdCB0aGUgZmFpbHVyZSBtZWNoYW5pc21zLiBJdCBjb3VsZCBhbHNvIGludm9sdmUgYWxsb3dpbmcgY2FsbHMgaW4gY29udGV4dHMgd2hlcmUgaXQgd291bGQgbm9ybWFsbHkgYmUgZm9yYmlkZGVuLiBJJ2xsIG5lZWQgdG8gbG9vayBkZWVwZXIgaW50byB0aGUgY29kZSBicmFuY2hlcyB3aXRoaW4gdGhhdCBtYWNybyB0byBmdWxseSBncmFzcCB0aGUgbW9kaWZpY2F0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGdvYWwgaXMgdG8gbWFrZSB0aGUgc3lzdGVtIG1vcmUgcm9idXN0IHdoZW4gdW5kZXIgZHVyZXNzLiBUaGlzIHdvdWxkIGJlIHR5cGljYWwgZm9yIHRlc3RpbmcgZmFpbHVyZSBtb2RlcyBpbiBhIGNvbnRyb2xsZWQgbWFubmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUyMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjQ1LjY4Mzg1NTM5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwOTgxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01FTU9SWV9GQUlMVVJFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21hZHZpc2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MTMzOD1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0NDItXFxubW0vbWFkdmlzZS5jOjE0NDM6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbm1tL21hZHZpc2UuYy0xNDQ0LS8qXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxMD1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTE0LVxcbm1tL21hZHZpc2UuYzoxNTE1OiNlbmRpZlxcdC8qIENPTkZJR19NRU1PUllfRkFJTFVSRSAqL1xcbm1tL21hZHZpc2UuYy0xNTE2LVxcbi0tXFxubW0vbWFkdmlzZS5jPTE1MTg9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU0OS1cXHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxcbm1tL21hZHZpc2UuYzoxNTUwOiNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG5tbS9tYWR2aXNlLmMtMTU1MS1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDo0NS43MzI5NjM0MzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ4MjU1NzgyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgRmFpbHVyZSBQYXRjaCoqXG5cbkFscmlnaHQsIHllcCwgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZGVmaW5pdGVseSBhIGtleSBjb25maWd1cmF0aW9uIGhlcmUuIFRoaXMgcGF0Y2ggaXMgbWFraW5nIGEgcHJldHR5IGZvY3VzZWQgYnV0IGltcG9ydGFudCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gcmVzcG9uZHMgdG8gbWVtb3J5IGZhaWx1cmVzIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHNoYXJlZCBtZW1vcnkgKHNobWVtKSBhbmQgdG1wZnMgc3Vic3lzdGVtcy5cblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCBhbHRlcnMgdGhlIHJldHVybiB2YWx1ZSBvZiBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCB0byBgTUZfREVMQVlFRGAgaW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyAwLiBUaGF0J3MgYSBjcml0aWNhbCBhZGp1c3RtZW50LCBhbmQgaXQgY2FzY2FkZXMgYmVjYXVzZSBgdHJ1bmNhdGVfZXJyb3JfZm9saW9gIGlzIGFsc28gbW9kaWZpZWQgdG8gcHJvcGVybHkgaGFuZGxlIHRoaXMgbmV3IGBNRl9ERUxBWUVEYCByZXR1cm4uIEZ1bmN0aW9uYWxseSwgdGhpcyBpbXBhY3RzIGhvdyBtZW1vcnkgZmFpbHVyZXMgYXJlIGhhbmRsZWQgZm9yIHRob3NlIHNobWVtL3RtcGZzIHBhZ2VzLiBJdCdzIG5vdCBhIHN1cGVyZmljaWFsIGZpeDsgaXQncyBhIGRpcmVjdCBpbnRlcnZlbnRpb24gaW50byB0aGUgd2F5IHRoZSBzeXN0ZW0gZGVhbHMgd2l0aCB0aGVzZSBlcnJvcnMuXG5cbldlIGNhbiB0cmlnZ2VyIHRoaXMgY2hhbmdlIHZpYSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb24gYSBzaG1lbSBtYXBwaW5nLCB3aGljaCBpcyBhIGZhaXJseSBzdGFuZGFyZCB3YXkgdG8gdGVzdCBtZW1vcnkgY29ycnVwdGlvbiBzY2VuYXJpb3MuIEFuZCBpdCdzIGdvb2QgdG8gc2VlIHRoZSBzZWxmdGVzdCBpcyBhbHNvIGJlaW5nIHVwZGF0ZWTigJRgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY2Agd2lsbCBub3cgaW5jbHVkZSB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBUaGF0J3MgYSBnb29kIHNpZ24gdGhhdCB0aGV5J3JlIHRoaW5raW5nIGFib3V0IHRoZSB0ZXN0IGNvdmVyYWdlLlxuXG5NeSBhcHByb2FjaCB3aWxsIGJlIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAgZ2l2ZW4gdGhpcyBtb2RpZmljYXRpb24gaW4gY29yZSBiZWhhdmlvci4gVGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgY2xlYXJseSBgbWVtb3J5X2ZhaWx1cmVgIGZvciBwcmVjaXNpb24uIEFuZCBvZiBjb3Vyc2UsIEkgd2lsbCBlbmFibGUgYE1FTU9SWV9GQUlMVVJFYCBpbiB0aGUgY29uZmlndXJhdGlvbi4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgbWVjaGFuaXNtLCBhbmQgaXQncyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIGEgY29udHJvbGxlZCB3YXksIG1ha2luZyBpdCBwcmltZSB0ZXJyaXRvcnkgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDg0LCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDo1Mi4yMTU1MjM4NTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjEwOTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfZmFpbHVyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBmb3Igc2htZW0gcGFnZXMgYnkgcmV0dXJuaW5nIE1GX0RFTEFZRUQgaW5zdGVhZCBvZiAwIGluIHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpbywgYW5kIHVwZGF0ZXMgdHJ1bmNhdGVfZXJyb3JfZm9saW8gdG8gaGFuZGxlIHRoaXMgbmV3IHJldHVybiB2YWx1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBpcyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgb24gc2htZW0gbWFwcGluZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfZmFpbHVyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBmb3Igc2htZW0gcGFnZXMgYnkgcmV0dXJuaW5nIE1GX0RFTEFZRUQgaW5zdGVhZCBvZiAwIGluIHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpbywgYW5kIHVwZGF0ZXMgdHJ1bmNhdGVfZXJyb3JfZm9saW8gdG8gaGFuZGxlIHRoaXMgbmV3IHJldHVybiB2YWx1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBpcyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgb24gc2htZW0gbWFwcGluZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjUyLjI5NzYzOTk1OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NDcyOTY3NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDo1Mi4yOTgxOTQyMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTY0NjczNzMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIChoYXJkd2FyZSBwb2lzb24pIGhhbmRsaW5nIGxvZ2ljIGZvciBzaG1lbSBwYWdlcywgY2hhbmdpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCB0byBgTUZfREVMQVlFRGAgYW5kIHVwZGF0aW5nIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocyBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgdG8gcHJvcGVybHkgaGFuZGxlIHRoaXMgc3RhdGUuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBmb3IgaGFyZHdhcmUgZXJyb3IgcmVjb3ZlcnkgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzMyYTczNjM5NGRhOWE2ZWQ1YWZjZjM3MGVhNmViM2U3ZGEzZjAzZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDE5OjUwOjAwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IGFhZjE0NjA4YjMwZTIuLmM3YTAwYzdiZTM2OGUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtODQ3LDI0ICs4NDcsMjUgQEAgc3RhdGljIGludCBraWxsX2FjY2Vzc2luZ19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gfVxuIFxuIC8qXG4tICogTUZfSUdOT1JFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uZWQnZWQuXG4rICogTUZfSUdOT1JFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJ2VkLlxuICAqIEJ1dCBpdCBjb3VsZCBub3QgZG8gbW9yZSB0byBpc29sYXRlIHRoZSBwYWdlIGZyb20gYmVpbmcgYWNjZXNzZWQgYWdhaW4sXG4gICogbm9yIGRvZXMgaXQga2lsbCB0aGUgcHJvY2Vzcy4gVGhpcyBpcyBleHRyZW1lbHkgcmFyZSBhbmQgb25lIG9mIHRoZVxuICAqIHBvdGVudGlhbCBjYXVzZXMgaXMgdGhhdCB0aGUgcGFnZSBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkIGR1ZSB0b1xuICAqIHVuZGVybHlpbmcgcmFjZSBjb25kaXRpb24uIFRoaXMgaXMgdGhlIG1vc3Qgc2V2ZXJlIG91dGNvbWVzLlxuICAqXG4tICogTUZfRkFJTEVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCdlZC5cbisgKiBNRl9GQUlMRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbidlZC5cbiAgKiBJdCBzaG91bGQgaGF2ZSBraWxsZWQgdGhlIHByb2Nlc3MsIGJ1dCBpdCBjYW4ndCBpc29sYXRlIHRoZSBwYWdlLFxuICAqIGR1ZSB0byBjb25kaXRpb25zIHN1Y2ggYXMgZXh0cmEgcGluLCB1bm1hcCBmYWlsdXJlLCBldGMuIEFjY2Vzc2luZ1xuICAqIHRoZSBwYWdlIGFnYWluIG1heSB0cmlnZ2VyIGFub3RoZXIgTUNFIGFuZCB0aGUgcHJvY2VzcyB3aWxsIGJlIGtpbGxlZFxuICAqIGJ5IHRoZSBtLWYoKSBoYW5kbGVyIGltbWVkaWF0ZWx5LlxuICAqXG4tICogTUZfREVMQVlFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uZWQnZWQuXG4tICogVGhlIHBhZ2UgaXMgdW5tYXBwZWQsIGFuZCBpcyByZW1vdmVkIGZyb20gdGhlIExSVSBvciBmaWxlIG1hcHBpbmcuXG4tICogQW4gYXR0ZW1wdCB0byBhY2Nlc3MgdGhlIHBhZ2UgYWdhaW4gd2lsbCB0cmlnZ2VyIHBhZ2UgZmF1bHQgYW5kIHRoZVxuLSAqIFBGIGhhbmRsZXIgd2lsbCBraWxsIHRoZSBwcm9jZXNzLlxuKyAqIE1GX0RFTEFZRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbidlZC5cbisgKiBJdCBtZWFucyB0aGUgcGFnZSB3YXMgdW5tYXBwZWQgYW5kIHBhcnRpYWxseSBpc29sYXRlZCAoZS5nLiByZW1vdmVkIGZyb21cbisgKiBmaWxlIG1hcHBpbmcgb3IgdGhlIExSVSkgYnV0IGZ1bGwgY2xlYW51cCBpcyBkZWZlcnJlZCAoZS5nLiB0aGUgbWV0YWRhdGFcbisgKiBmb3IgdGhlIG1lbW9yeSwgYXMgaW4gc3RydWN0IHBhZ2UvZm9saW8sIGlzIHN0aWxsIHJlZmVyZW5jZWQpLiBBbnlcbisgKiBmdXJ0aGVyIGFjY2VzcyB0byB0aGUgcGFnZSB3aWxsIHJlc3VsdCBpbiB0aGUgcHJvY2VzcyBiZWluZyBraWxsZWQuXG4gICpcbi0gKiBNRl9SRUNPVkVSRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbmVkJ2VkLlxuKyAqIE1GX1JFQ09WRVJFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJ2VkLlxuICAqIFRoZSBwYWdlIGhhcyBiZWVuIGNvbXBsZXRlbHkgaXNvbGF0ZWQsIHRoYXQgaXMsIHVubWFwcGVkLCB0YWtlbiBvdXQgb2ZcbiAgKiB0aGUgYnVkZHkgc3lzdGVtLCBvciBob2xlLXB1bmNoZWQgb3V0IG9mIHRoZSBmaWxlIG1hcHBpbmcuXG4gICovXG5AQCAtOTM4LDEwICs5MzksMTIgQEAgc3RhdGljIGludCB0cnVuY2F0ZV9lcnJvcl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdGlmIChtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWVycm9yX3JlbW92ZV9mb2xpbykge1xuIFx0XHRpbnQgZXJyID0gbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VlcnJvcl9yZW1vdmVfZm9saW8obWFwcGluZywgZm9saW8pO1xuIFxuLVx0XHRpZiAoZXJyICE9IDApXG4rXHRcdGlmIChlcnIgPT0gTUZfREVMQVlFRClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXHRcdGVsc2UgaWYgKGVyciAhPSAwKVxuIFx0XHRcdHByX2luZm8oXCIlI2x4OiBGYWlsZWQgdG8gcHVuY2ggcGFnZTogJWRcXG5cIiwgcGZuLCBlcnIpO1xuIFx0XHRlbHNlIGlmICghZmlsZW1hcF9yZWxlYXNlX2ZvbGlvKGZvbGlvLCBHRlBfTk9JTykpXG4tXHRcdFx0cHJfaW5mbyhcIiUjbHg6IGZhaWxlZCB0byByZWxlYXNlIGJ1ZmZlcnNcXG5cIiwgcGZuKTtcbitcdFx0XHRwcl9pbmZvKFwiJSNseDogRmFpbGVkIHRvIHJlbGVhc2UgYnVmZmVyc1xcblwiLCBwZm4pO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmV0ID0gTUZfUkVDT1ZFUkVEO1xuIFx0fSBlbHNlIHtcbkBAIC0xMDM2LDE4ICsxMDM5LDE0IEBAIHN0YXRpYyBpbnQgbWVfcGFnZWNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIFRoZSBzaG1lbSBwYWdlIGlzIGtlcHQgaW4gcGFnZSBjYWNoZSBpbnN0ZWFkIG9mIHRydW5jYXRpbmdcbi1cdCAqIHNvIGlzIGV4cGVjdGVkIHRvIGhhdmUgYW4gZXh0cmEgcmVmY291bnQgYWZ0ZXIgZXJyb3ItaGFuZGxpbmcuXG4tXHQgKi9cbi1cdGV4dHJhX3BpbnMgPSBzaG1lbV9tYXBwaW5nKG1hcHBpbmcpO1xuLVxuIFx0LypcbiBcdCAqIFRydW5jYXRpb24gaXMgYSBiaXQgdHJpY2t5LiBFbmFibGUgaXQgcGVyIGZpbGUgc3lzdGVtIGZvciBub3cuXG4gXHQgKlxuIFx0ICogT3BlbjogdG8gdGFrZSBpX3J3c2VtIG9yIG5vdCBmb3IgdGhpcz8gUmlnaHQgbm93IHdlIGRvbid0LlxuIFx0ICovXG4gXHRyZXQgPSB0cnVuY2F0ZV9lcnJvcl9mb2xpbyhmb2xpbywgcGFnZV90b19wZm4ocCksIG1hcHBpbmcpO1xuK1xuK1x0ZXh0cmFfcGlucyA9IHJldCA9PSBNRl9ERUxBWUVEO1xuIFx0aWYgKGhhc19leHRyYV9yZWZjb3VudChwcywgcCwgZXh0cmFfcGlucykpXG4gXHRcdHJldCA9IE1GX0ZBSUxFRDtcbiBcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNzc0ZjRiMThmZjVjNi4uZDZmOTQ3ODZlNzA5ZSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC01MTM2LDcgKzUxMzYsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2htZW1fZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpXG4gc3RhdGljIGludCBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIE1GX0RFTEFZRUQ7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHNobWVtX2FvcHMgPSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDFhNWEzMmUyMmNjZTIuLjViMjZmMGM0NDY2NDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtMjAsNiArMjAsMTAgQEBcbiBcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gXG4rI2lmbmRlZiBmYWxsdGhyb3VnaFxuKyMgZGVmaW5lIGZhbGx0aHJvdWdoIF9fYXR0cmlidXRlX18oKF9fZmFsbHRocm91Z2hfXykpXG4rI2VuZGlmXG4rXG4gZW51bSBpbmplY3RfdHlwZSB7XG4gXHRNQURWX0hBUkQsXG4gXHRNQURWX1NPRlQsXG5AQCAtMjksOSArMzMsMTQgQEAgZW51bSByZXN1bHRfdHlwZSB7XG4gXHRNQURWX0hBUkRfQU5PTixcbiBcdE1BRFZfSEFSRF9DTEVBTl9QQUdFQ0FDSEUsXG4gXHRNQURWX0hBUkRfRElSVFlfUEFHRUNBQ0hFLFxuK1x0TUFEVl9IQVJEX0NMRUFOX1NITUVNLFxuK1x0TUFEVl9IQVJEX0RJUlRZX1NITUVNLFxuIFx0TUFEVl9TT0ZUX0FOT04sXG4gXHRNQURWX1NPRlRfQ0xFQU5fUEFHRUNBQ0hFLFxuIFx0TUFEVl9TT0ZUX0RJUlRZX1BBR0VDQUNIRSxcbitcdE1BRFZfU09GVF9DTEVBTl9TSE1FTSxcbitcdE1BRFZfU09GVF9ESVJUWV9TSE1FTSxcbitcdFJFQURfRVJST1IsXG4gfTtcbiBcbiBzdGF0aWMgam1wX2J1ZiBzaWduYWxfam1wX2J1ZjtcbkBAIC0xNTcsMTcgKzE2NiwyMiBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZVxuIFx0Y2FzZSBNQURWX0hBUkRfQ0xFQU5fUEFHRUNBQ0hFOlxuIFx0Y2FzZSBNQURWX1NPRlRfQ0xFQU5fUEFHRUNBQ0hFOlxuIFx0Y2FzZSBNQURWX1NPRlRfRElSVFlfUEFHRUNBQ0hFOlxuLVx0XHQvKiBJdCBpcyBub3QgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIFNJR0JVUyBzaWduYWwuICovXG4tXHRcdEFTU0VSVF9FUShzZXRqbXAsIDApO1xuLVxuK1x0Y2FzZSBNQURWX1NPRlRfRElSVFlfU0hNRU06XG4gXHRcdC8qIFRoZSBwYWdlIGNvbnRlbnQgc2hvdWxkIHJlbWFpbiB1bmNoYW5nZWQuICovXG4gXHRcdEFTU0VSVF9UUlVFKGNoZWNrX21lbW9yeSh2YWRkciwgc2VsZi1cdTAwM2VwYWdlX3NpemUpKTtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIE1BRFZfSEFSRF9DTEVBTl9TSE1FTTpcbitcdGNhc2UgTUFEVl9TT0ZUX0NMRUFOX1NITUVNOlxuK1x0XHQvKiBJdCBpcyBub3QgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIFNJR0JVUyBzaWduYWwuICovXG4rXHRcdEFTU0VSVF9FUShzZXRqbXAsIDApO1xuIFxuIFx0XHQvKiBUaGUgYmFja2luZyBwZm4gb2YgYWRkciBzaG91bGQgaGF2ZSBjaGFuZ2VkLiAqL1xuIFx0XHRBU1NFUlRfTkUocGFnZW1hcF9nZXRfcGZuKHNlbGYtXHUwMDNlcGFnZW1hcF9mZCwgdmFkZHIpLCBzZWxmLVx1MDAzZXBmbik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBNQURWX0hBUkRfQU5PTjpcbiBcdGNhc2UgTUFEVl9IQVJEX0RJUlRZX1BBR0VDQUNIRTpcbitcdGNhc2UgTUFEVl9IQVJEX0RJUlRZX1NITUVNOlxuK1x0Y2FzZSBSRUFEX0VSUk9SOlxuIFx0XHQvKiBUaGUgU0lHQlVTIHNpZ25hbCBzaG91bGQgaGF2ZSBiZWVuIHJlY2VpdmVkLiAqL1xuIFx0XHRBU1NFUlRfRVEoc2V0am1wLCAxKTtcbiBcbkBAIC0yNjMsNiArMjc3LDIwIEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9maWxlKGNvbnN0IGNoYXIgKmZuYW1lLCB1bnNpZ25lZCBsb25nIHNpemUpXG4gXHRyZXR1cm4gZmQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcHJlcGFyZV9zaG1lbShjb25zdCBjaGFyICpmbmFtZSwgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdGludCBmZDtcbitcbitcdGZkID0gbWVtZmRfY3JlYXRlKGZuYW1lLCAwKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1x0aWYgKGZ0cnVuY2F0ZShmZCwgc2l6ZSkgXHUwMDNjIDApIHtcbitcdFx0Y2xvc2UoZmQpO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXHRyZXR1cm4gZmQ7XG4rfVxuK1xuIC8qIEJvcnJvd2VkIGZyb20gbW0vZ3VwX2xvbmd0ZXJtLmMuICovXG4gc3RhdGljIGludCBnZXRfZnNfdHlwZShpbnQgZmQpXG4ge1xuQEAgLTM1NSw0ICszODMsODggQEAgVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBkaXJ0eV9wYWdlY2FjaGUpXG4gXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbiB9XG4gXG4rVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBkaXJ0eV9zaG1lbSlcbit7XG4rXHRpbnQgZmQ7XG4rXHRjaGFyICphZGRyO1xuK1x0aW50IHJldDtcbitcbitcdGZkID0gcHJlcGFyZV9zaG1lbShcInNobWVtLWZpbGVcIiwgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJmYWlsZWQgdG8gb3BlbiB0ZXN0IHNobWVtLWZpbGUuXFxuXCIpO1xuK1xuK1x0YWRkciA9IG1tYXAoMCwgc2VsZi1cdTAwM2VwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdCAgICBNQVBfU0hBUkVELCBmZCwgMCk7XG4rXHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0U0tJUChyZXR1cm4sIFwibW1hcCBmYWlsZWQsIG5vdCBlbm91Z2ggbWVtb3J5LlxcblwiKTtcbitcdH1cbitcdG1lbXNldChhZGRyLCAweGNlLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4rXG4rXHRwcmVwYXJlKF9tZXRhZGF0YSwgc2VsZiwgYWRkcik7XG4rXG4rXHRyZXQgPSBzaWdzZXRqbXAoc2lnbmFsX2ptcF9idWYsIDEpO1xuK1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2ICFzZWxmLVx1MDAzZWluamVjdGlvbl9hdHRlbXB0ZWQpIHtcbitcdFx0c2VsZi1cdTAwM2VpbmplY3Rpb25fYXR0ZW1wdGVkID0gdHJ1ZTtcbitcdFx0QVNTRVJUX0VRKHZhcmlhbnQtXHUwMDNlaW5qZWN0KHNlbGYsIGFkZHIpLCAwKTtcbitcdH1cbitcbitcdGlmICh2YXJpYW50LVx1MDAzZXR5cGUgPT0gTUFEVl9IQVJEKSB7XG4rXHRcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9IQVJEX0RJUlRZX1NITUVNLCByZXQpO1xuK1x0XHRyZXQgPSBzaWdzZXRqbXAoc2lnbmFsX2ptcF9idWYsIDEpO1xuK1x0XHRpZiAocmV0ID09IDApXG4rXHRcdFx0Rk9SQ0VfUkVBRCgqYWRkcik7XG4rXHRcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgUkVBRF9FUlJPUiwgcmV0KTtcbitcdH0gZWxzZSB7XG4rXHRcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9TT0ZUX0RJUlRZX1NITUVNLCByZXQpO1xuK1x0fVxuK1xuK1x0QVNTRVJUX0VRKG11bm1hcChhZGRyLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSksIDApO1xuK1xuK1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4rfVxuK1xuK1RFU1RfRihtZW1vcnlfZmFpbHVyZSwgY2xlYW5fc2htZW0pXG4re1xuK1x0aW50IGZkO1xuK1x0Y2hhciAqYWRkcjtcbitcdGludCByZXQ7XG4rXG4rXHRmZCA9IHByZXBhcmVfc2htZW0oXCJzaG1lbS1maWxlXCIsIHNlbGYtXHUwMDNlcGFnZV9zaXplKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0U0tJUChyZXR1cm4sIFwiZmFpbGVkIHRvIG9wZW4gdGVzdCBzaG1lbS1maWxlLlxcblwiKTtcbitcbitcdGFkZHIgPSBtbWFwKDAsIHNlbGYtXHUwMDNlcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHQgICAgTUFQX1NIQVJFRCwgZmQsIDApO1xuK1x0aWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkge1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdFNLSVAocmV0dXJuLCBcIm1tYXAgZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeS5cXG5cIik7XG4rXHR9XG4rXHRGT1JDRV9SRUFEKCphZGRyKTtcbitcbitcdHByZXBhcmUoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTtcbitcbitcdHJldCA9IHNpZ3NldGptcChzaWduYWxfam1wX2J1ZiwgMSk7XG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIXNlbGYtXHUwMDNlaW5qZWN0aW9uX2F0dGVtcHRlZCkge1xuK1x0XHRzZWxmLVx1MDAzZWluamVjdGlvbl9hdHRlbXB0ZWQgPSB0cnVlO1xuK1x0XHRBU1NFUlRfRVEodmFyaWFudC1cdTAwM2VpbmplY3Qoc2VsZiwgYWRkciksIDApO1xuK1x0fVxuK1xuK1x0aWYgKHZhcmlhbnQtXHUwMDNldHlwZSA9PSBNQURWX0hBUkQpIHtcbitcdFx0Y2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBNQURWX0hBUkRfQ0xFQU5fU0hNRU0sIHJldCk7XG4rXHRcdHJldCA9IHNpZ3NldGptcChzaWduYWxfam1wX2J1ZiwgMSk7XG4rXHRcdGlmIChyZXQgPT0gMClcbitcdFx0XHRGT1JDRV9SRUFEKCphZGRyKTtcbitcdFx0Y2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBSRUFEX0VSUk9SLCByZXQpO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogVGVzdCB0aGUgYWRkcmVzcyBhY2Nlc3NhYmlsaXR5IHdpdGhvdXQgY2hlY2tfbWVtb3J5KCkuICovXG4rXHRcdEZPUkNFX1JFQUQoKmFkZHIpO1xuK1x0XHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfU09GVF9DTEVBTl9TSE1FTSwgcmV0KTtcbitcdH1cbitcbitcdEFTU0VSVF9FUShtdW5tYXAoYWRkciwgc2VsZi1cdTAwM2VwYWdlX3NpemUpLCAwKTtcbitcbitcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuK31cbitcbiBURVNUX0hBUk5FU1NfTUFJTlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTA6NTIuMjk4MTk1Mzc5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjQ2NzEwNzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IFNobWVtIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEl0J3MgZm9jdXNlZCBvbiBpbXByb3ZpbmcgdGhlIGtlcm5lbCdzIGhhbmRsaW5nIG9mIG1lbW9yeSBmYWlsdXJlcyDigJMgc3BlY2lmaWNhbGx5LCBoYXJkd2FyZS1kZXRlY3RlZCBlcnJvcnMgd2l0aGluIHNobWVtIHBhZ2VzLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCBpbiBgbW0vc2htZW0uY2AuIEluc3RlYWQgb2YgcmV0dXJuaW5nIDAsIGl0IG5vdyByZXR1cm5zIGBNRl9ERUxBWUVEYC4gVGhpcyBzaWduYWxzIHRvIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocyBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgKGB0cnVuY2F0ZV9lcnJvcl9mb2xpb2AgYW5kIGBtZV9wYWdlY2FjaGVfY2xlYW5gKSB0aGF0IHRoZSBmb2xpbyByZW1vdmFsIGlzIGRlZmVycmVkLiBUaGUgcGF0Y2ggdGhlbiBhZGp1c3RzIHRoZSBsb2dpYyBpbiBgdHJ1bmNhdGVfZXJyb3JfZm9saW9gIGFuZCBgbWVfcGFnZWNhY2hlX2NsZWFuYCB0byBhY2NvbW1vZGF0ZSB0aGUgYE1GX0RFTEFZRURgIHJldHVybiB2YWx1ZSwgY2hhbmdpbmcgc29tZSBjb250cm9sIGZsb3cuICBXZSBhbHNvIHNlZSBuZXcgc2VsZnRlc3RzIGFkZGVkIGZvciB0aGlzIGJlaGF2aW9yLlxuXG5Ob3csIGxldCdzIGFwcGx5IG15IGludGVybmFsIEtNU0FOIGNoZWNrbGlzdDpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6KiogTm9wZS4gTm90aGluZyBoZXJlIGludHJvZHVjZXMgbmV3IHN0cnVjdHVyZXMgb3IgbW9kaWZpZXMgZXhpc3Rpbmcgb25lcyBpbiBhIHdheSB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGlzIGlzIGFsbCBpbnRlcm5hbCBrZXJuZWwgZXJyb3IgaGFuZGxpbmcuXG5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBkZXBlbmRlbnQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uIFdoaWxlIHdlIGFyZSBtb2RpZnlpbmcgY29udHJvbCBmbG93IGJhc2VkIG9uIGBNRl9ERUxBWUVEYCwgdGhpcyBpcyBhICpkZWZpbmVkKiB2YWx1ZSwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUsIHdlIGFyZSBub3QgaW50cm9kdWNpbmcgbmV3IHdheXMgdG8gbWFrZSB0aGUga2VybmVsIHJlYWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9ubHkgY29udHJvbCBob3cgdG8gaGFuZGxlIGFuIGVycm9yIHRoYXQgaXMgYWxyZWFkeSBiZWluZyBoYW5kbGVkLlxuXG4zLiAgKipBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzOioqIE5vLiBUaGlzIGlzIG5vdCBhYm91dCBhbGxvY2F0aW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMuIEl0J3MgYWJvdXQgaG93IHdlIGhhbmRsZSBlcnJvcnMgb24gKmV4aXN0aW5nKiBzaG1lbSBwYWdlcy5cblxuNC4gICoqQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM6KiogQWdhaW4sIG5vLiBUaGUgY2hhbmdlcyByZWZpbmUgdGhlIGxvZ2ljIGZvciBob3cgd2UgaGFuZGxlIGV4aXN0aW5nIHNobWVtIHBhZ2VzIGVuY291bnRlcmluZyBoYXJkd2FyZSBlcnJvcnMuIE5vIG5ldyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBpcyBlbmFibGVkLlxuXG5UaGVyZWZvcmUsIGFmdGVyIGEgY2FyZWZ1bCByZXZpZXcsIHRoZSBwYXRjaCBkb2VzIG5vdCBtZWV0IGFueSBvZiBteSBLTVNBTiBjcml0ZXJpYS4gTm8gS01TQU4gaXMgbmVlZGVkLiBJJ20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIGFkZGluZyBteSByZWFzb25pbmcgdG8gdGhlIHJlY29yZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5MSwiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MTowMy45NDQ5MTEwNjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSAoaGFyZHdhcmUgcG9pc29uKSBoYW5kbGluZyBsb2dpYyBmb3Igc2htZW0gcGFnZXMsIGNoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgdG8gYE1GX0RFTEFZRURgIGFuZCB1cGRhdGluZyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIHRvIHByb3Blcmx5IGhhbmRsZSB0aGlzIHN0YXRlLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgZm9yIGhhcmR3YXJlIGVycm9yIHJlY292ZXJ5IGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSAoaGFyZHdhcmUgcG9pc29uKSBoYW5kbGluZyBsb2dpYyBmb3Igc2htZW0gcGFnZXMsIGNoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgdG8gYE1GX0RFTEFZRURgIGFuZCB1cGRhdGluZyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIHRvIHByb3Blcmx5IGhhbmRsZSB0aGlzIHN0YXRlLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgZm9yIGhhcmR3YXJlIGVycm9yIHJlY292ZXJ5IGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7b4js[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-23 19:48:46 +0000 UTC FinishedAt: 2026-08-23 19:51:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "08745c62350126bc31b09548137be87e2866f628", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "08745c62350126bc31b09548137be87e2866f628", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE" ], "series_id": "bc82cdb1-19ba-49ee-8477-2ce7b83dc394" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memory_failure" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgKGhhcmR3YXJlIHBvaXNvbikgaGFuZGxpbmcgbG9naWMgZm9yIHNobWVtIHBhZ2VzLCBjaGFuZ2luZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gIHRvIGBNRl9ERUxBWUVEYCBhbmQgdXBkYXRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBwcm9wZXJseSBoYW5kbGUgdGhpcyBzdGF0ZS4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGZvciBoYXJkd2FyZSBlcnJvciByZWNvdmVyeSBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGZvciBzaG1lbSBwYWdlcyBieSByZXR1cm5pbmcgTUZfREVMQVlFRCBpbnN0ZWFkIG9mIDAgaW4gc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvLCBhbmQgdXBkYXRlcyB0cnVuY2F0ZV9lcnJvcl9mb2xpbyB0byBoYW5kbGUgdGhpcyBuZXcgcmV0dXJuIHZhbHVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX0hXUE9JU09OKSBvbiBzaG1lbSBtYXBwaW5ncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMzMmE3MzYzOTRkYTlhNmVkNWFmY2YzNzBlYTZlYjNlN2RhM2YwM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxOTo1MDowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYWFmMTQ2MDhiMzBlMi4uYzdhMDBjN2JlMzY4ZSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC04NDcsMjQgJiM0Mzs4NDcsMjUgQEAgc3RhdGljIGludCBraWxsX2FjY2Vzc2luZ19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gfVxuIFxuIC8qXG4tICogTUZfSUdOT1JFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uZWQmIzM5O2VkLlxuJiM0MzsgKiBNRl9JR05PUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb24mIzM5O2VkLlxuICAqIEJ1dCBpdCBjb3VsZCBub3QgZG8gbW9yZSB0byBpc29sYXRlIHRoZSBwYWdlIGZyb20gYmVpbmcgYWNjZXNzZWQgYWdhaW4sXG4gICogbm9yIGRvZXMgaXQga2lsbCB0aGUgcHJvY2Vzcy4gVGhpcyBpcyBleHRyZW1lbHkgcmFyZSBhbmQgb25lIG9mIHRoZVxuICAqIHBvdGVudGlhbCBjYXVzZXMgaXMgdGhhdCB0aGUgcGFnZSBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkIGR1ZSB0b1xuICAqIHVuZGVybHlpbmcgcmFjZSBjb25kaXRpb24uIFRoaXMgaXMgdGhlIG1vc3Qgc2V2ZXJlIG91dGNvbWVzLlxuICAqXG4tICogTUZfRkFJTEVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCYjMzk7ZWQuXG4mIzQzOyAqIE1GX0ZBSUxFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJiMzOTtlZC5cbiAgKiBJdCBzaG91bGQgaGF2ZSBraWxsZWQgdGhlIHByb2Nlc3MsIGJ1dCBpdCBjYW4mIzM5O3QgaXNvbGF0ZSB0aGUgcGFnZSxcbiAgKiBkdWUgdG8gY29uZGl0aW9ucyBzdWNoIGFzIGV4dHJhIHBpbiwgdW5tYXAgZmFpbHVyZSwgZXRjLiBBY2Nlc3NpbmdcbiAgKiB0aGUgcGFnZSBhZ2FpbiBtYXkgdHJpZ2dlciBhbm90aGVyIE1DRSBhbmQgdGhlIHByb2Nlc3Mgd2lsbCBiZSBraWxsZWRcbiAgKiBieSB0aGUgbS1mKCkgaGFuZGxlciBpbW1lZGlhdGVseS5cbiAgKlxuLSAqIE1GX0RFTEFZRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbmVkJiMzOTtlZC5cbi0gKiBUaGUgcGFnZSBpcyB1bm1hcHBlZCwgYW5kIGlzIHJlbW92ZWQgZnJvbSB0aGUgTFJVIG9yIGZpbGUgbWFwcGluZy5cbi0gKiBBbiBhdHRlbXB0IHRvIGFjY2VzcyB0aGUgcGFnZSBhZ2FpbiB3aWxsIHRyaWdnZXIgcGFnZSBmYXVsdCBhbmQgdGhlXG4tICogUEYgaGFuZGxlciB3aWxsIGtpbGwgdGhlIHByb2Nlc3MuXG4mIzQzOyAqIE1GX0RFTEFZRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbiYjMzk7ZWQuXG4mIzQzOyAqIEl0IG1lYW5zIHRoZSBwYWdlIHdhcyB1bm1hcHBlZCBhbmQgcGFydGlhbGx5IGlzb2xhdGVkIChlLmcuIHJlbW92ZWQgZnJvbVxuJiM0MzsgKiBmaWxlIG1hcHBpbmcgb3IgdGhlIExSVSkgYnV0IGZ1bGwgY2xlYW51cCBpcyBkZWZlcnJlZCAoZS5nLiB0aGUgbWV0YWRhdGFcbiYjNDM7ICogZm9yIHRoZSBtZW1vcnksIGFzIGluIHN0cnVjdCBwYWdlL2ZvbGlvLCBpcyBzdGlsbCByZWZlcmVuY2VkKS4gQW55XG4mIzQzOyAqIGZ1cnRoZXIgYWNjZXNzIHRvIHRoZSBwYWdlIHdpbGwgcmVzdWx0IGluIHRoZSBwcm9jZXNzIGJlaW5nIGtpbGxlZC5cbiAgKlxuLSAqIE1GX1JFQ09WRVJFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uZWQmIzM5O2VkLlxuJiM0MzsgKiBNRl9SRUNPVkVSRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbiYjMzk7ZWQuXG4gICogVGhlIHBhZ2UgaGFzIGJlZW4gY29tcGxldGVseSBpc29sYXRlZCwgdGhhdCBpcywgdW5tYXBwZWQsIHRha2VuIG91dCBvZlxuICAqIHRoZSBidWRkeSBzeXN0ZW0sIG9yIGhvbGUtcHVuY2hlZCBvdXQgb2YgdGhlIGZpbGUgbWFwcGluZy5cbiAgKi9cbkBAIC05MzgsMTAgJiM0Mzs5MzksMTIgQEAgc3RhdGljIGludCB0cnVuY2F0ZV9lcnJvcl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdGlmIChtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWVycm9yX3JlbW92ZV9mb2xpbykge1xuIFx0XHRpbnQgZXJyID0gbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VlcnJvcl9yZW1vdmVfZm9saW8obWFwcGluZywgZm9saW8pO1xuIFxuLVx0XHRpZiAoZXJyICE9IDApXG4mIzQzO1x0XHRpZiAoZXJyID09IE1GX0RFTEFZRUQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHRcdGVsc2UgaWYgKGVyciAhPSAwKVxuIFx0XHRcdHByX2luZm8oXCYjMzQ7JSNseDogRmFpbGVkIHRvIHB1bmNoIHBhZ2U6ICVkXFxuXCYjMzQ7LCBwZm4sIGVycik7XG4gXHRcdGVsc2UgaWYgKCFmaWxlbWFwX3JlbGVhc2VfZm9saW8oZm9saW8sIEdGUF9OT0lPKSlcbi1cdFx0XHRwcl9pbmZvKFwmIzM0OyUjbHg6IGZhaWxlZCB0byByZWxlYXNlIGJ1ZmZlcnNcXG5cJiMzNDssIHBmbik7XG4mIzQzO1x0XHRcdHByX2luZm8oXCYjMzQ7JSNseDogRmFpbGVkIHRvIHJlbGVhc2UgYnVmZmVyc1xcblwmIzM0OywgcGZuKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHJldCA9IE1GX1JFQ09WRVJFRDtcbiBcdH0gZWxzZSB7XG5AQCAtMTAzNiwxOCAmIzQzOzEwMzksMTQgQEAgc3RhdGljIGludCBtZV9wYWdlY2FjaGVfY2xlYW4oc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogVGhlIHNobWVtIHBhZ2UgaXMga2VwdCBpbiBwYWdlIGNhY2hlIGluc3RlYWQgb2YgdHJ1bmNhdGluZ1xuLVx0ICogc28gaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhbiBleHRyYSByZWZjb3VudCBhZnRlciBlcnJvci1oYW5kbGluZy5cbi1cdCAqL1xuLVx0ZXh0cmFfcGlucyA9IHNobWVtX21hcHBpbmcobWFwcGluZyk7XG4tXG4gXHQvKlxuIFx0ICogVHJ1bmNhdGlvbiBpcyBhIGJpdCB0cmlja3kuIEVuYWJsZSBpdCBwZXIgZmlsZSBzeXN0ZW0gZm9yIG5vdy5cbiBcdCAqXG4gXHQgKiBPcGVuOiB0byB0YWtlIGlfcndzZW0gb3Igbm90IGZvciB0aGlzPyBSaWdodCBub3cgd2UgZG9uJiMzOTt0LlxuIFx0ICovXG4gXHRyZXQgPSB0cnVuY2F0ZV9lcnJvcl9mb2xpbyhmb2xpbywgcGFnZV90b19wZm4ocCksIG1hcHBpbmcpO1xuJiM0MztcbiYjNDM7XHRleHRyYV9waW5zID0gcmV0ID09IE1GX0RFTEFZRUQ7XG4gXHRpZiAoaGFzX2V4dHJhX3JlZmNvdW50KHBzLCBwLCBleHRyYV9waW5zKSlcbiBcdFx0cmV0ID0gTUZfRkFJTEVEO1xuIFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA3NzRmNGIxOGZmNWM2Li5kNmY5NDc4NmU3MDllIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTUxMzYsNyAmIzQzOzUxMzYsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2htZW1fZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpXG4gc3RhdGljIGludCBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBNRl9ERUxBWUVEO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBzaG1lbV9hb3BzID0ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCAxYTVhMzJlMjJjY2UyLi41YjI2ZjBjNDQ2NjQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTIwLDYgJiM0MzsyMCwxMCBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuIFxuJiM0MzsjaWZuZGVmIGZhbGx0aHJvdWdoXG4mIzQzOyMgZGVmaW5lIGZhbGx0aHJvdWdoIF9fYXR0cmlidXRlX18oKF9fZmFsbHRocm91Z2hfXykpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiBlbnVtIGluamVjdF90eXBlIHtcbiBcdE1BRFZfSEFSRCxcbiBcdE1BRFZfU09GVCxcbkBAIC0yOSw5ICYjNDM7MzMsMTQgQEAgZW51bSByZXN1bHRfdHlwZSB7XG4gXHRNQURWX0hBUkRfQU5PTixcbiBcdE1BRFZfSEFSRF9DTEVBTl9QQUdFQ0FDSEUsXG4gXHRNQURWX0hBUkRfRElSVFlfUEFHRUNBQ0hFLFxuJiM0MztcdE1BRFZfSEFSRF9DTEVBTl9TSE1FTSxcbiYjNDM7XHRNQURWX0hBUkRfRElSVFlfU0hNRU0sXG4gXHRNQURWX1NPRlRfQU5PTixcbiBcdE1BRFZfU09GVF9DTEVBTl9QQUdFQ0FDSEUsXG4gXHRNQURWX1NPRlRfRElSVFlfUEFHRUNBQ0hFLFxuJiM0MztcdE1BRFZfU09GVF9DTEVBTl9TSE1FTSxcbiYjNDM7XHRNQURWX1NPRlRfRElSVFlfU0hNRU0sXG4mIzQzO1x0UkVBRF9FUlJPUixcbiB9O1xuIFxuIHN0YXRpYyBqbXBfYnVmIHNpZ25hbF9qbXBfYnVmO1xuQEAgLTE1NywxNyAmIzQzOzE2NiwyMiBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZVxuIFx0Y2FzZSBNQURWX0hBUkRfQ0xFQU5fUEFHRUNBQ0hFOlxuIFx0Y2FzZSBNQURWX1NPRlRfQ0xFQU5fUEFHRUNBQ0hFOlxuIFx0Y2FzZSBNQURWX1NPRlRfRElSVFlfUEFHRUNBQ0hFOlxuLVx0XHQvKiBJdCBpcyBub3QgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIFNJR0JVUyBzaWduYWwuICovXG4tXHRcdEFTU0VSVF9FUShzZXRqbXAsIDApO1xuLVxuJiM0MztcdGNhc2UgTUFEVl9TT0ZUX0RJUlRZX1NITUVNOlxuIFx0XHQvKiBUaGUgcGFnZSBjb250ZW50IHNob3VsZCByZW1haW4gdW5jaGFuZ2VkLiAqL1xuIFx0XHRBU1NFUlRfVFJVRShjaGVja19tZW1vcnkodmFkZHIsIHNlbGYtXHUwMDNlcGFnZV9zaXplKSk7XG4mIzQzO1x0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRjYXNlIE1BRFZfSEFSRF9DTEVBTl9TSE1FTTpcbiYjNDM7XHRjYXNlIE1BRFZfU09GVF9DTEVBTl9TSE1FTTpcbiYjNDM7XHRcdC8qIEl0IGlzIG5vdCBleHBlY3RlZCB0byByZWNlaXZlIGEgU0lHQlVTIHNpZ25hbC4gKi9cbiYjNDM7XHRcdEFTU0VSVF9FUShzZXRqbXAsIDApO1xuIFxuIFx0XHQvKiBUaGUgYmFja2luZyBwZm4gb2YgYWRkciBzaG91bGQgaGF2ZSBjaGFuZ2VkLiAqL1xuIFx0XHRBU1NFUlRfTkUocGFnZW1hcF9nZXRfcGZuKHNlbGYtXHUwMDNlcGFnZW1hcF9mZCwgdmFkZHIpLCBzZWxmLVx1MDAzZXBmbik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBNQURWX0hBUkRfQU5PTjpcbiBcdGNhc2UgTUFEVl9IQVJEX0RJUlRZX1BBR0VDQUNIRTpcbiYjNDM7XHRjYXNlIE1BRFZfSEFSRF9ESVJUWV9TSE1FTTpcbiYjNDM7XHRjYXNlIFJFQURfRVJST1I6XG4gXHRcdC8qIFRoZSBTSUdCVVMgc2lnbmFsIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQuICovXG4gXHRcdEFTU0VSVF9FUShzZXRqbXAsIDEpO1xuIFxuQEAgLTI2Myw2ICYjNDM7Mjc3LDIwIEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9maWxlKGNvbnN0IGNoYXIgKmZuYW1lLCB1bnNpZ25lZCBsb25nIHNpemUpXG4gXHRyZXR1cm4gZmQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHByZXBhcmVfc2htZW0oY29uc3QgY2hhciAqZm5hbWUsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBtZW1mZF9jcmVhdGUoZm5hbWUsIDApO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAoZnRydW5jYXRlKGZkLCBzaXplKSBcdTAwM2MgMCkge1xuJiM0MztcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gZmQ7XG4mIzQzO31cbiYjNDM7XG4gLyogQm9ycm93ZWQgZnJvbSBtbS9ndXBfbG9uZ3Rlcm0uYy4gKi9cbiBzdGF0aWMgaW50IGdldF9mc190eXBlKGludCBmZClcbiB7XG5AQCAtMzU1LDQgJiM0MzszODMsODggQEAgVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBkaXJ0eV9wYWdlY2FjaGUpXG4gXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbiB9XG4gXG4mIzQzO1RFU1RfRihtZW1vcnlfZmFpbHVyZSwgZGlydHlfc2htZW0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0Y2hhciAqYWRkcjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRmZCA9IHByZXBhcmVfc2htZW0oXCYjMzQ7c2htZW0tZmlsZVwmIzM0Oywgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtmYWlsZWQgdG8gb3BlbiB0ZXN0IHNobWVtLWZpbGUuXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YWRkciA9IG1tYXAoMCwgc2VsZi1cdTAwM2VwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICAgTUFQX1NIQVJFRCwgZmQsIDApO1xuJiM0MztcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDttbWFwIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkuXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1x0bWVtc2V0KGFkZHIsIDB4Y2UsIHNlbGYtXHUwMDNlcGFnZV9zaXplKTtcbiYjNDM7XG4mIzQzO1x0cHJlcGFyZShfbWV0YWRhdGEsIHNlbGYsIGFkZHIpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBzaWdzZXRqbXAoc2lnbmFsX2ptcF9idWYsIDEpO1xuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhc2VsZi1cdTAwM2VpbmplY3Rpb25fYXR0ZW1wdGVkKSB7XG4mIzQzO1x0XHRzZWxmLVx1MDAzZWluamVjdGlvbl9hdHRlbXB0ZWQgPSB0cnVlO1xuJiM0MztcdFx0QVNTRVJUX0VRKHZhcmlhbnQtXHUwMDNlaW5qZWN0KHNlbGYsIGFkZHIpLCAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh2YXJpYW50LVx1MDAzZXR5cGUgPT0gTUFEVl9IQVJEKSB7XG4mIzQzO1x0XHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfSEFSRF9ESVJUWV9TSE1FTSwgcmV0KTtcbiYjNDM7XHRcdHJldCA9IHNpZ3NldGptcChzaWduYWxfam1wX2J1ZiwgMSk7XG4mIzQzO1x0XHRpZiAocmV0ID09IDApXG4mIzQzO1x0XHRcdEZPUkNFX1JFQUQoKmFkZHIpO1xuJiM0MztcdFx0Y2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBSRUFEX0VSUk9SLCByZXQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfU09GVF9ESVJUWV9TSE1FTSwgcmV0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShtdW5tYXAoYWRkciwgc2VsZi1cdTAwM2VwYWdlX3NpemUpLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihtZW1vcnlfZmFpbHVyZSwgY2xlYW5fc2htZW0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0Y2hhciAqYWRkcjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRmZCA9IHByZXBhcmVfc2htZW0oXCYjMzQ7c2htZW0tZmlsZVwmIzM0Oywgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtmYWlsZWQgdG8gb3BlbiB0ZXN0IHNobWVtLWZpbGUuXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YWRkciA9IG1tYXAoMCwgc2VsZi1cdTAwM2VwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICAgTUFQX1NIQVJFRCwgZmQsIDApO1xuJiM0MztcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDttbWFwIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkuXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1x0Rk9SQ0VfUkVBRCgqYWRkcik7XG4mIzQzO1xuJiM0MztcdHByZXBhcmUoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTtcbiYjNDM7XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIXNlbGYtXHUwMDNlaW5qZWN0aW9uX2F0dGVtcHRlZCkge1xuJiM0MztcdFx0c2VsZi1cdTAwM2VpbmplY3Rpb25fYXR0ZW1wdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdEFTU0VSVF9FUSh2YXJpYW50LVx1MDAzZWluamVjdChzZWxmLCBhZGRyKSwgMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodmFyaWFudC1cdTAwM2V0eXBlID09IE1BRFZfSEFSRCkge1xuJiM0MztcdFx0Y2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBNQURWX0hBUkRfQ0xFQU5fU0hNRU0sIHJldCk7XG4mIzQzO1x0XHRyZXQgPSBzaWdzZXRqbXAoc2lnbmFsX2ptcF9idWYsIDEpO1xuJiM0MztcdFx0aWYgKHJldCA9PSAwKVxuJiM0MztcdFx0XHRGT1JDRV9SRUFEKCphZGRyKTtcbiYjNDM7XHRcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgUkVBRF9FUlJPUiwgcmV0KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogVGVzdCB0aGUgYWRkcmVzcyBhY2Nlc3NhYmlsaXR5IHdpdGhvdXQgY2hlY2tfbWVtb3J5KCkuICovXG4mIzQzO1x0XHRGT1JDRV9SRUFEKCphZGRyKTtcbiYjNDM7XHRcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9TT0ZUX0NMRUFOX1NITUVNLCByZXQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKG11bm1hcChhZGRyLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSksIDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBURVNUX0hBUk5FU1NfTUFJTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBmb3Igc2htZW0gcGFnZXMgYnkgcmV0dXJuaW5nIE1GX0RFTEFZRUQgaW5zdGVhZCBvZiAwIGluIHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpbywgYW5kIHVwZGF0ZXMgdHJ1bmNhdGVfZXJyb3JfZm9saW8gdG8gaGFuZGxlIHRoaXMgbmV3IHJldHVybiB2YWx1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBpcyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgb24gc2htZW0gbWFwcGluZ3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMzJhNzM2Mzk0ZGE5YTZlZDVhZmNmMzcwZWE2ZWIzZTdkYTNmMDNlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMTk6NTA6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCBhYWYxNDYwOGIzMGUyLi5jN2EwMGM3YmUzNjhlIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTg0NywyNCAmIzQzOzg0NywyNSBAQCBzdGF0aWMgaW50IGtpbGxfYWNjZXNzaW5nX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBsb25nIHBmbiwKIH0KIAogLyoKLSAqIE1GX0lHTk9SRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbmVkJiMzOTtlZC4KJiM0MzsgKiBNRl9JR05PUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb24mIzM5O2VkLgogICogQnV0IGl0IGNvdWxkIG5vdCBkbyBtb3JlIHRvIGlzb2xhdGUgdGhlIHBhZ2UgZnJvbSBiZWluZyBhY2Nlc3NlZCBhZ2FpbiwKICAqIG5vciBkb2VzIGl0IGtpbGwgdGhlIHByb2Nlc3MuIFRoaXMgaXMgZXh0cmVtZWx5IHJhcmUgYW5kIG9uZSBvZiB0aGUKICAqIHBvdGVudGlhbCBjYXVzZXMgaXMgdGhhdCB0aGUgcGFnZSBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkIGR1ZSB0bwogICogdW5kZXJseWluZyByYWNlIGNvbmRpdGlvbi4gVGhpcyBpcyB0aGUgbW9zdCBzZXZlcmUgb3V0Y29tZXMuCiAgKgotICogTUZfRkFJTEVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCYjMzk7ZWQuCiYjNDM7ICogTUZfRkFJTEVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb24mIzM5O2VkLgogICogSXQgc2hvdWxkIGhhdmUga2lsbGVkIHRoZSBwcm9jZXNzLCBidXQgaXQgY2FuJiMzOTt0IGlzb2xhdGUgdGhlIHBhZ2UsCiAgKiBkdWUgdG8gY29uZGl0aW9ucyBzdWNoIGFzIGV4dHJhIHBpbiwgdW5tYXAgZmFpbHVyZSwgZXRjLiBBY2Nlc3NpbmcKICAqIHRoZSBwYWdlIGFnYWluIG1heSB0cmlnZ2VyIGFub3RoZXIgTUNFIGFuZCB0aGUgcHJvY2VzcyB3aWxsIGJlIGtpbGxlZAogICogYnkgdGhlIG0tZigpIGhhbmRsZXIgaW1tZWRpYXRlbHkuCiAgKgotICogTUZfREVMQVlFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uZWQmIzM5O2VkLgotICogVGhlIHBhZ2UgaXMgdW5tYXBwZWQsIGFuZCBpcyByZW1vdmVkIGZyb20gdGhlIExSVSBvciBmaWxlIG1hcHBpbmcuCi0gKiBBbiBhdHRlbXB0IHRvIGFjY2VzcyB0aGUgcGFnZSBhZ2FpbiB3aWxsIHRyaWdnZXIgcGFnZSBmYXVsdCBhbmQgdGhlCi0gKiBQRiBoYW5kbGVyIHdpbGwga2lsbCB0aGUgcHJvY2Vzcy4KJiM0MzsgKiBNRl9ERUxBWUVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb24mIzM5O2VkLgomIzQzOyAqIEl0IG1lYW5zIHRoZSBwYWdlIHdhcyB1bm1hcHBlZCBhbmQgcGFydGlhbGx5IGlzb2xhdGVkIChlLmcuIHJlbW92ZWQgZnJvbQomIzQzOyAqIGZpbGUgbWFwcGluZyBvciB0aGUgTFJVKSBidXQgZnVsbCBjbGVhbnVwIGlzIGRlZmVycmVkIChlLmcuIHRoZSBtZXRhZGF0YQomIzQzOyAqIGZvciB0aGUgbWVtb3J5LCBhcyBpbiBzdHJ1Y3QgcGFnZS9mb2xpbywgaXMgc3RpbGwgcmVmZXJlbmNlZCkuIEFueQomIzQzOyAqIGZ1cnRoZXIgYWNjZXNzIHRvIHRoZSBwYWdlIHdpbGwgcmVzdWx0IGluIHRoZSBwcm9jZXNzIGJlaW5nIGtpbGxlZC4KICAqCi0gKiBNRl9SRUNPVkVSRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbmVkJiMzOTtlZC4KJiM0MzsgKiBNRl9SRUNPVkVSRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbiYjMzk7ZWQuCiAgKiBUaGUgcGFnZSBoYXMgYmVlbiBjb21wbGV0ZWx5IGlzb2xhdGVkLCB0aGF0IGlzLCB1bm1hcHBlZCwgdGFrZW4gb3V0IG9mCiAgKiB0aGUgYnVkZHkgc3lzdGVtLCBvciBob2xlLXB1bmNoZWQgb3V0IG9mIHRoZSBmaWxlIG1hcHBpbmcuCiAgKi8KQEAgLTkzOCwxMCAmIzQzOzkzOSwxMiBAQCBzdGF0aWMgaW50IHRydW5jYXRlX2Vycm9yX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgcGZuLAogCWlmIChtYXBwaW5nLSZndDthX29wcy0mZ3Q7ZXJyb3JfcmVtb3ZlX2ZvbGlvKSB7CiAJCWludCBlcnIgPSBtYXBwaW5nLSZndDthX29wcy0mZ3Q7ZXJyb3JfcmVtb3ZlX2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTsKIAotCQlpZiAoZXJyICE9IDApCiYjNDM7CQlpZiAoZXJyID09IE1GX0RFTEFZRUQpCiYjNDM7CQkJcmV0ID0gZXJyOwomIzQzOwkJZWxzZSBpZiAoZXJyICE9IDApCiAJCQlwcl9pbmZvKCYjMzQ7JSNseDogRmFpbGVkIHRvIHB1bmNoIHBhZ2U6ICVkXG4mIzM0OywgcGZuLCBlcnIpOwogCQllbHNlIGlmICghZmlsZW1hcF9yZWxlYXNlX2ZvbGlvKGZvbGlvLCBHRlBfTk9JTykpCi0JCQlwcl9pbmZvKCYjMzQ7JSNseDogZmFpbGVkIHRvIHJlbGVhc2UgYnVmZmVyc1xuJiMzNDssIHBmbik7CiYjNDM7CQkJcHJfaW5mbygmIzM0OyUjbHg6IEZhaWxlZCB0byByZWxlYXNlIGJ1ZmZlcnNcbiYjMzQ7LCBwZm4pOwogCQllbHNlCiAJCQlyZXQgPSBNRl9SRUNPVkVSRUQ7CiAJfSBlbHNlIHsKQEAgLTEwMzYsMTggJiM0MzsxMDM5LDE0IEBAIHN0YXRpYyBpbnQgbWVfcGFnZWNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApCiAJCWdvdG8gb3V0OwogCX0KIAotCS8qCi0JICogVGhlIHNobWVtIHBhZ2UgaXMga2VwdCBpbiBwYWdlIGNhY2hlIGluc3RlYWQgb2YgdHJ1bmNhdGluZwotCSAqIHNvIGlzIGV4cGVjdGVkIHRvIGhhdmUgYW4gZXh0cmEgcmVmY291bnQgYWZ0ZXIgZXJyb3ItaGFuZGxpbmcuCi0JICovCi0JZXh0cmFfcGlucyA9IHNobWVtX21hcHBpbmcobWFwcGluZyk7Ci0KIAkvKgogCSAqIFRydW5jYXRpb24gaXMgYSBiaXQgdHJpY2t5LiBFbmFibGUgaXQgcGVyIGZpbGUgc3lzdGVtIGZvciBub3cuCiAJICoKIAkgKiBPcGVuOiB0byB0YWtlIGlfcndzZW0gb3Igbm90IGZvciB0aGlzPyBSaWdodCBub3cgd2UgZG9uJiMzOTt0LgogCSAqLwogCXJldCA9IHRydW5jYXRlX2Vycm9yX2ZvbGlvKGZvbGlvLCBwYWdlX3RvX3BmbihwKSwgbWFwcGluZyk7CiYjNDM7CiYjNDM7CWV4dHJhX3BpbnMgPSByZXQgPT0gTUZfREVMQVlFRDsKIAlpZiAoaGFzX2V4dHJhX3JlZmNvdW50KHBzLCBwLCBleHRyYV9waW5zKSkKIAkJcmV0ID0gTUZfRkFJTEVEOwogCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA3NzRmNGIxOGZmNWM2Li5kNmY5NDc4NmU3MDllIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTUxMzYsNyAmIzQzOzUxMzYsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2htZW1fZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCiBzdGF0aWMgaW50IHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkgICBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gTUZfREVMQVlFRDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc2htZW1fYW9wcyA9IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IDFhNWEzMmUyMmNjZTIuLjViMjZmMGM0NDY2NDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtMjAsNiAmIzQzOzIwLDEwIEBACiAKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKIAomIzQzOyNpZm5kZWYgZmFsbHRocm91Z2gKJiM0MzsjIGRlZmluZSBmYWxsdGhyb3VnaCBfX2F0dHJpYnV0ZV9fKChfX2ZhbGx0aHJvdWdoX18pKQomIzQzOyNlbmRpZgomIzQzOwogZW51bSBpbmplY3RfdHlwZSB7CiAJTUFEVl9IQVJELAogCU1BRFZfU09GVCwKQEAgLTI5LDkgJiM0MzszMywxNCBAQCBlbnVtIHJlc3VsdF90eXBlIHsKIAlNQURWX0hBUkRfQU5PTiwKIAlNQURWX0hBUkRfQ0xFQU5fUEFHRUNBQ0hFLAogCU1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEUsCiYjNDM7CU1BRFZfSEFSRF9DTEVBTl9TSE1FTSwKJiM0MzsJTUFEVl9IQVJEX0RJUlRZX1NITUVNLAogCU1BRFZfU09GVF9BTk9OLAogCU1BRFZfU09GVF9DTEVBTl9QQUdFQ0FDSEUsCiAJTUFEVl9TT0ZUX0RJUlRZX1BBR0VDQUNIRSwKJiM0MzsJTUFEVl9TT0ZUX0NMRUFOX1NITUVNLAomIzQzOwlNQURWX1NPRlRfRElSVFlfU0hNRU0sCiYjNDM7CVJFQURfRVJST1IsCiB9OwogCiBzdGF0aWMgam1wX2J1ZiBzaWduYWxfam1wX2J1ZjsKQEAgLTE1NywxNyAmIzQzOzE2NiwyMiBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZQogCWNhc2UgTUFEVl9IQVJEX0NMRUFOX1BBR0VDQUNIRToKIAljYXNlIE1BRFZfU09GVF9DTEVBTl9QQUdFQ0FDSEU6CiAJY2FzZSBNQURWX1NPRlRfRElSVFlfUEFHRUNBQ0hFOgotCQkvKiBJdCBpcyBub3QgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIFNJR0JVUyBzaWduYWwuICovCi0JCUFTU0VSVF9FUShzZXRqbXAsIDApOwotCiYjNDM7CWNhc2UgTUFEVl9TT0ZUX0RJUlRZX1NITUVNOgogCQkvKiBUaGUgcGFnZSBjb250ZW50IHNob3VsZCByZW1haW4gdW5jaGFuZ2VkLiAqLwogCQlBU1NFUlRfVFJVRShjaGVja19tZW1vcnkodmFkZHIsIHNlbGYtJmd0O3BhZ2Vfc2l6ZSkpOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgTUFEVl9IQVJEX0NMRUFOX1NITUVNOgomIzQzOwljYXNlIE1BRFZfU09GVF9DTEVBTl9TSE1FTToKJiM0MzsJCS8qIEl0IGlzIG5vdCBleHBlY3RlZCB0byByZWNlaXZlIGEgU0lHQlVTIHNpZ25hbC4gKi8KJiM0MzsJCUFTU0VSVF9FUShzZXRqbXAsIDApOwogCiAJCS8qIFRoZSBiYWNraW5nIHBmbiBvZiBhZGRyIHNob3VsZCBoYXZlIGNoYW5nZWQuICovCiAJCUFTU0VSVF9ORShwYWdlbWFwX2dldF9wZm4oc2VsZi0mZ3Q7cGFnZW1hcF9mZCwgdmFkZHIpLCBzZWxmLSZndDtwZm4pOwogCQlicmVhazsKIAljYXNlIE1BRFZfSEFSRF9BTk9OOgogCWNhc2UgTUFEVl9IQVJEX0RJUlRZX1BBR0VDQUNIRToKJiM0MzsJY2FzZSBNQURWX0hBUkRfRElSVFlfU0hNRU06CiYjNDM7CWNhc2UgUkVBRF9FUlJPUjoKIAkJLyogVGhlIFNJR0JVUyBzaWduYWwgc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZC4gKi8KIAkJQVNTRVJUX0VRKHNldGptcCwgMSk7CiAKQEAgLTI2Myw2ICYjNDM7Mjc3LDIwIEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9maWxlKGNvbnN0IGNoYXIgKmZuYW1lLCB1bnNpZ25lZCBsb25nIHNpemUpCiAJcmV0dXJuIGZkOwogfQogCiYjNDM7c3RhdGljIGludCBwcmVwYXJlX3NobWVtKGNvbnN0IGNoYXIgKmZuYW1lLCB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CWZkID0gbWVtZmRfY3JlYXRlKGZuYW1lLCAwKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKGZ0cnVuY2F0ZShmZCwgc2l6ZSkgJmx0OyAwKSB7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGZkOwomIzQzO30KJiM0MzsKIC8qIEJvcnJvd2VkIGZyb20gbW0vZ3VwX2xvbmd0ZXJtLmMuICovCiBzdGF0aWMgaW50IGdldF9mc190eXBlKGludCBmZCkKIHsKQEAgLTM1NSw0ICYjNDM7MzgzLDg4IEBAIFRFU1RfRihtZW1vcnlfZmFpbHVyZSwgZGlydHlfcGFnZWNhY2hlKQogCUFTU0VSVF9FUShjbG9zZShmZCksIDApOwogfQogCiYjNDM7VEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBkaXJ0eV9zaG1lbSkKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJY2hhciAqYWRkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZmQgPSBwcmVwYXJlX3NobWVtKCYjMzQ7c2htZW0tZmlsZSYjMzQ7LCBzZWxmLSZndDtwYWdlX3NpemUpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7ZmFpbGVkIHRvIG9wZW4gdGVzdCBzaG1lbS1maWxlLlxuJiMzNDspOwomIzQzOwomIzQzOwlhZGRyID0gbW1hcCgwLCBzZWxmLSZndDtwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICAgTUFQX1NIQVJFRCwgZmQsIDApOwomIzQzOwlpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDttbWFwIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkuXG4mIzM0Oyk7CiYjNDM7CX0KJiM0MzsJbWVtc2V0KGFkZHIsIDB4Y2UsIHNlbGYtJmd0O3BhZ2Vfc2l6ZSk7CiYjNDM7CiYjNDM7CXByZXBhcmUoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTsKJiM0MzsKJiM0MzsJcmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTsKJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyAhc2VsZi0mZ3Q7aW5qZWN0aW9uX2F0dGVtcHRlZCkgewomIzQzOwkJc2VsZi0mZ3Q7aW5qZWN0aW9uX2F0dGVtcHRlZCA9IHRydWU7CiYjNDM7CQlBU1NFUlRfRVEodmFyaWFudC0mZ3Q7aW5qZWN0KHNlbGYsIGFkZHIpLCAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmFyaWFudC0mZ3Q7dHlwZSA9PSBNQURWX0hBUkQpIHsKJiM0MzsJCWNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9IQVJEX0RJUlRZX1NITUVNLCByZXQpOwomIzQzOwkJcmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTsKJiM0MzsJCWlmIChyZXQgPT0gMCkKJiM0MzsJCQlGT1JDRV9SRUFEKCphZGRyKTsKJiM0MzsJCWNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgUkVBRF9FUlJPUiwgcmV0KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9TT0ZUX0RJUlRZX1NITUVNLCByZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShtdW5tYXAoYWRkciwgc2VsZi0mZ3Q7cGFnZV9zaXplKSwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShjbG9zZShmZCksIDApOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGNsZWFuX3NobWVtKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwljaGFyICphZGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlmZCA9IHByZXBhcmVfc2htZW0oJiMzNDtzaG1lbS1maWxlJiMzNDssIHNlbGYtJmd0O3BhZ2Vfc2l6ZSk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtmYWlsZWQgdG8gb3BlbiB0ZXN0IHNobWVtLWZpbGUuXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWFkZHIgPSBtbWFwKDAsIHNlbGYtJmd0O3BhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJCSAgICBNQVBfU0hBUkVELCBmZCwgMCk7CiYjNDM7CWlmIChhZGRyID09IE1BUF9GQUlMRUQpIHsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O21tYXAgZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeS5cbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwlGT1JDRV9SRUFEKCphZGRyKTsKJiM0MzsKJiM0MzsJcHJlcGFyZShfbWV0YWRhdGEsIHNlbGYsIGFkZHIpOwomIzQzOwomIzQzOwlyZXQgPSBzaWdzZXRqbXAoc2lnbmFsX2ptcF9idWYsIDEpOwomIzQzOwlpZiAoIXJldCAmYW1wOyZhbXA7ICFzZWxmLSZndDtpbmplY3Rpb25fYXR0ZW1wdGVkKSB7CiYjNDM7CQlzZWxmLSZndDtpbmplY3Rpb25fYXR0ZW1wdGVkID0gdHJ1ZTsKJiM0MzsJCUFTU0VSVF9FUSh2YXJpYW50LSZndDtpbmplY3Qoc2VsZiwgYWRkciksIDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDt0eXBlID09IE1BRFZfSEFSRCkgewomIzQzOwkJY2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBNQURWX0hBUkRfQ0xFQU5fU0hNRU0sIHJldCk7CiYjNDM7CQlyZXQgPSBzaWdzZXRqbXAoc2lnbmFsX2ptcF9idWYsIDEpOwomIzQzOwkJaWYgKHJldCA9PSAwKQomIzQzOwkJCUZPUkNFX1JFQUQoKmFkZHIpOwomIzQzOwkJY2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBSRUFEX0VSUk9SLCByZXQpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogVGVzdCB0aGUgYWRkcmVzcyBhY2Nlc3NhYmlsaXR5IHdpdGhvdXQgY2hlY2tfbWVtb3J5KCkuICovCiYjNDM7CQlGT1JDRV9SRUFEKCphZGRyKTsKJiM0MzsJCWNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9TT0ZUX0NMRUFOX1NITUVNLCByZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShtdW5tYXAoYWRkciwgc2VsZi0mZ3Q7cGFnZV9zaXplKSwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShjbG9zZShmZCksIDApOwomIzQzO30KJiM0MzsKIFRFU1RfSEFSTkVTU19NQUlOCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4OTQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIFJlbGF0ZWQgdG8gTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBzb21lIGNyaXRpY2FsIGNvZGU6IGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgYG1tL3NobWVtLmNgLCBhbmQgYSBzZWxmdGVzdCBmaWxlLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdDsgYW55dGhpbmcgZGVhbGluZyB3aXRoIG1lbW9yeSBmYWlsdXJlcyBpcyBzZW5zaXRpdmUuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IHRoZSBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCBmdW5jdGlvbiBpbiBgbW0vc2htZW0uY2AgcmVwb3J0cyBpdHMgb3V0Y29tZS4gSW5zdGVhZCBvZiByZXR1cm5pbmcgMCAoc3VjY2Vzcywgb3IgYXQgbGVhc3Qgbm8gaW1tZWRpYXRlIGVycm9yKSwgaXQmIzM5O3Mgbm93IHJldHVybmluZyBgTUZfREVMQVlFRGAuIFRoaXMgc2VlbXMgbGlrZSBhIHNpZ25hbCB0aGF0IHRoZSByZW1vdmFsIGlzbiYjMzk7dCAqaW1tZWRpYXRlbHkqIGNvbXBsZXRlLCBwZXJoYXBzIGR1ZSB0byBzb21lIGRlZmVycmVkIGFjdGlvbi4KClRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGB0cnVuY2F0ZV9lcnJvcl9mb2xpb2AgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIG5lZWRzIHRvICpoYW5kbGUqIHRoaXMgYE1GX0RFTEFZRURgIHJldHVybiB2YWx1ZS4gU3BlY2lmaWNhbGx5LCB0aGVyZSYjMzk7cyBsb2dpYyBhZGRlZCB0byBjaGVjayBmb3IgdGhhdCByZXR1cm4gY29kZSBhbmQgYWN0IGFjY29yZGluZ2x5LiBUaGVuLCB3ZSBoYXZlIGFuIHVwZGF0ZSB0byBgbWVfcGFnZWNhY2hlX2NsZWFuYCB0byBkZWFsIHdpdGggYHJldCA9PSBNRl9ERUxBWUVEYCBmb3IgYGV4dHJhX3BpbnNgLgoKTGV0JiMzOTtzIGRpZyBpbi4gYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgaXMgYW4gYWRkcmVzcyBzcGFjZSBvcGVyYXRpb24sIHNvIHRoaXMgbG9va3MgbGlrZSBrZXJuZWwgbG9naWMuIE1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBNQURWX0hXUE9JU09OIGFuZCBoYXJkd2FyZSBNQ0VzIGFyZSBrZXkgdHJpZ2dlcmluZyBtZWNoYW5pc21zLgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AuIE9rYXksIHRoZSBjb2RlIGp1c3QgcmV0dXJucyBgTUZfREVMQVlFRGAuIFN0cmFpZ2h0Zm9yd2FyZC4gVGhpcyB0cmlnZ2VycyB0aGUgbmV3IGBNRl9ERUxBWUVEYCBoYW5kbGluZyBpbiBgdHJ1bmNhdGVfZXJyb3JfZm9saW9gLiBUaGUgY29kZSBjaGVja3MgaWYgYG1hcHBpbmctJmd0O2Ffb3BzLSZndDtlcnJvcl9yZW1vdmVfZm9saW9gIGlzIGRlZmluZWQsIGNhbGxzIGl0LCBhbmQgdGhlbiBoYW5kbGVzIHRoZSByZXR1cm4gdmFsdWUgKGluY2x1ZGluZyBgTUZfREVMQVlFRGApLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBkZWZlcnJpbmcgdGhlIGFjdHVhbCBwYWdlIHJlbW92YWwgaW4gYHNobWVtYC4KCmBtZV9wYWdlY2FjaGVfY2xlYW5gIGlzIHdoZXJlIHRoaW5ncyBhcmUgc3RhcnRpbmcgdG8gZ2V0IGludGVyZXN0aW5nLiBUaGUgY29kZSBjYWxscyBgdHJ1bmNhdGVfZXJyb3JfZm9saW9gLCBhbmQgdGhlbiBjaGVja3MgZm9yIGByZXQgPT0gTUZfREVMQVlFRGAuIElmIGl0IGdldHMgYSBkZWxheWVkIHJldHVybiwgaXQgc2V0cyBgZXh0cmFfcGlucyA9IHRydWVgLiBTbyB3ZSYjMzk7cmUgZXNzZW50aWFsbHkgc2F5aW5nLCAmIzM0O0hleSwgd2UmIzM5O3JlIG5vdCBkb25lIHdpdGggdGhpcyBwYWdlIHlldDsga2VlcCBpdCBwaW5uZWQuJiMzNDsKClRoaXMgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgbWVfcGFnZWNhY2hlX2NsZWFuYCwgYHRydW5jYXRlX2Vycm9yX2ZvbGlvYCwgYW5kIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gLgoKTm93LCB3YWl0IGEgc2Vjb25kLi4uIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gIGlzICpzdGF0aWMqLiBCdXQgaXQmIzM5O3MgYW4gQVBJIGVudHJ5cG9pbnQgZm9yIGBlcnJvcl9yZW1vdmVfZm9saW9gLiBPa2F5LCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgc2htZW1fYW9wcy5lcnJvcl9yZW1vdmVfZm9saW9gLiBGaW5lLgoKTGV0JiMzOTtzIGp1c3QgY29uZmlybSBgdHJ1bmNhdGVfZXJyb3JfZm9saW9gIGlzIGFsc28gc3RhdGljLiBZdXAsIGl0IGlzLiBBbmQgYG1lX3BhZ2VjYWNoZV9jbGVhbmAgdG9vLiBBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMuCgpBbHJpZ2h0LCBJIG5lZWQgdG8gY2hlY2sgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFnYWluLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBoZXJlLiBUaGUgbWFpbiBvbmUgaXMgYG1lbW9yeV9mYWlsdXJlYC4gT2theSwgbGV0JiMzOTtzIHNlYXJjaCBmb3IgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IG1lbW9yeV9mYWlsdXJlXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTIzMTk9c3RhdGljIGludCBtZW1vcnlfZmFpbHVyZV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzODQtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzODU6aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzODYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipDb25zaWRlcmluZyBNZW1vcnkgTWFuYWdlbWVudCBTdHJhdGVnaWVzKioKCk9rYXksIHNvIGBtZW1vcnlfZmFpbHVyZWAgaXNuJiMzOTt0IGEgc3RhdGljIGNvbmNlcHQsIHRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUuIE5vdyBJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IGFsdGVybmF0aXZlcyBvciByZWxhdGVkIGlkZWFzIGFuZCBob3cgdGhleSBwbGF5IGludG8gdGhpcy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBtaWdodCBiZSByZWxldmFudC4gSXMgaXQgYSBwb3RlbnRpYWwgc29sdXRpb24/IERvZXMgaXQgcHJvdmlkZSBhIGNvbXBsZW1lbnRhcnkgYXBwcm9hY2g/IE9yIGNvdWxkIGl0IGJlIGEgcG90ZW50aWFsIGNvdW50ZXItaW5kaWNhdGlvbj8gSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggaG93IHRoZXNlIHR3byBjb25jZXB0cyBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2luamVjdF9lcnJvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MTMzOD1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDQ2LSAqL1xubW0vbWFkdmlzZS5jOjE0NDc6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbm1tL21hZHZpc2UuYy0xNDQ4LXtcbi0tXG5tbS9tYWR2aXNlLmM9MTQ5Mj1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTUwNC1cbm1tL21hZHZpc2UuYzoxNTA1OnN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG5tbS9tYWR2aXNlLmMtMTUwNi17XG4tLVxubW0vbWFkdmlzZS5jPTE4ODc9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXG4tLVxubW0vbWFkdmlzZS5jLTE4OTYtXHRcdHJhbmdlLVx1MDAzZWVuZCA9IHN0YXJ0ICYjNDM7IGxlbl9pbjtcbm1tL21hZHZpc2UuYzoxODk3Olx0XHRyZXR1cm4gbWFkdmlzZV9pbmplY3RfZXJyb3IobWFkdl9iZWhhdmlvcik7XG5tbS9tYWR2aXNlLmMtMTg5OC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjU3CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBGdW5jdGlvbnMgaW4gTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKUmlnaHQsIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgc3RhdGljLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkLiBOb3csIGxldCYjMzk7cyBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGhhbmdpbmcgYXJvdW5kIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIG90aGVyLCBwZXJoYXBzIG1vcmUgZ2xvYmFsbHkgYWNjZXNzaWJsZSwgdG9vbHMgaW4gdGhhdCBmaWxlIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gZXJyb3IgaW5qZWN0aW9uLCBvciBtb3JlIGdlbmVyYWxseSwgbWVtb3J5IGZhdWx0IGhhbmRsaW5nLiBEaWdnaW5nIGludG8gdGhpcyBmaWxlIGlzIG9mdGVuIGtleSB0byBkZWJ1Z2dpbmcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBhbmQgZmluZGluZyByZXVzYWJsZSwgbm9uLXN0YXRpYyBmdW5jdGlvbmFsaXR5IGNvdWxkIHByb3ZpZGUgdmFsdWFibGUgaW5zaWdodHMgb3IgYnVpbGRpbmcgYmxvY2tzIGZvciBteSBvd24gd29yay4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHNpbWlsYXIgY29kZSBzdHJ1Y3R1cmVzIG9mdGVuIGV4aXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgc29tZSB0aGF0IG1pZ2h0IGJlIG9mIHVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl8wLTldJiM0MzsgW2EtekEtWl8wLTldJiM0MztcXCguKlxcKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz04Mj1zdGF0aWMgYm9vbCBod19tZW1vcnlfZmFpbHVyZSBfX3JlYWRfbW9zdGx5O1xubW0vbWVtb3J5LWZhaWx1cmUuYy04My1cbm1tL21lbW9yeS1mYWlsdXJlLmM6ODQ6c3RhdGljIERFRklORV9NVVRFWChtZl9tdXRleCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTg1LVxubW0vbWVtb3J5LWZhaWx1cmUuYzo4Njp2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXG5tbS9tZW1vcnktZmFpbHVyZS5jLTg3LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTkxLVxubW0vbWVtb3J5LWZhaWx1cmUuYzo5Mjp2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtOTMte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTA0PXN0YXRpYyBzc2l6ZV90IF9uYW1lIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXHRcdFx0XFxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMS19XHRcdFx0XHRcdFx0XHRcdFxcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjExMjpzdGF0aWMgREVWSUNFX0FUVFJfUk8oX25hbWUpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMy1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE3Mz1zdGF0aWMgc3RydWN0IHJiX3Jvb3RfY2FjaGVkIHBmbl9zcGFjZV9pdHJlZSA9IFJCX1JPT1RfQ0FDSEVEO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzQtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE3NTpzdGF0aWMgREVGSU5FX01VVEVYKHBmbl9zcGFjZV9sb2NrKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTc2LVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjIzPXN0YXRpYyBod3BvaXNvbl9maWx0ZXJfZnVuY190IF9fcmN1ICpod3BvaXNvbl9maWx0ZXJfZnVuYyBfX3JlYWRfbW9zdGx5O1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjQtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIyNTp2b2lkIGh3cG9pc29uX2ZpbHRlcl9yZWdpc3Rlcihod3BvaXNvbl9maWx0ZXJfZnVuY190ICpmaWx0ZXIpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyNi17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMjk9RVhQT1JUX1NZTUJPTF9HUEwoaHdwb2lzb25fZmlsdGVyX3JlZ2lzdGVyKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjMwLVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMzE6dm9pZCBod3BvaXNvbl9maWx0ZXJfdW5yZWdpc3Rlcih2b2lkKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzIte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjg2PXN0YXRpYyBpbnQga2lsbF9wcm9jKHN0cnVjdCB0b19raWxsICp0aywgdW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTMxNi0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MzE3OnZvaWQgc2hha2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMzE4LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTEzMTU9c3RhdGljIGlubGluZSBib29sIFBhZ2VIV1BvaXNvblRha2VuT2ZmKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTMxOS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTMyMDp2b2lkIFNldFBhZ2VIV1BvaXNvblRha2VuT2ZmKHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzIxLXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMjQtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzMjU6dm9pZCBDbGVhclBhZ2VIV1BvaXNvblRha2VuT2ZmKHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzI2LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE1NDk9c3RhdGljIGludCBnZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE1NjYtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE1Njc6aW50IHVubWFwX3BvaXNvbmVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIG11c3Rfa2lsbClcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTU2OC17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODc1PXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfbGlzdF9oZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODc5LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxODgwOmJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4ODEte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTk4Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDAxLVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMDAyOnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDAzLXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIyMTI9c3RhdGljIHZvaWQga2lsbF9wcm9jc19ub3coc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjIzLVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMjI0OmludCByZWdpc3Rlcl9wZm5fYWRkcmVzc19zcGFjZShzdHJ1Y3QgcGZuX2FkZHJlc3Nfc3BhY2UgKnBmbl9zcGFjZSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjIyNS17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMjQwPUVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX3Bmbl9hZGRyZXNzX3NwYWNlKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjI0MS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjI0Mjp2b2lkIHVucmVnaXN0ZXJfcGZuX2FkZHJlc3Nfc3BhY2Uoc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyNDMte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjMxOT1zdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM4NC0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjM4NTppbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM4Ni17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNjI4PXN0cnVjdCBtZW1vcnlfZmFpbHVyZV9jcHUge1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYzNC1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjYzNTpzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IG1lbW9yeV9mYWlsdXJlX2NwdSwgbWVtb3J5X2ZhaWx1cmVfY3B1KTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYzNi1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NTItICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2NTM6dm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjU0LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3MTM9Y29yZV9pbml0Y2FsbChtZW1vcnlfZmFpbHVyZV9pbml0KTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MzQtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3MzU6aW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjczNi17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yODQ4PXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk2NS0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjk2NjppbnQgc29mdF9vZmZsaW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk2Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE5NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IFBvaXNvbmluZyBUZWNobmlxdWVzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcyBtZW1vcnkgcG9pc29uaW5nIHN0dWZmLiBMb29rcyBsaWtlIGBtZW1vcnlfZmFpbHVyZWAsIGB1bnBvaXNvbl9tZW1vcnlgLCBhbmQgYHNvZnRfb2ZmbGluZV9wYWdlYCBhcmUgdGhlIG9idmlvdXMgcGxhY2VzIHRvIHN0YXJ0IGRpZ2dpbmcuIEdvb2QgZW50cnkgcG9pbnRzLCBmb3Igc3VyZS4gQWgsIGFuZCBoZXJlIGl0IGlzOiBgbWFkdmlzZWAgd2l0aCBgTUFEVl9IV1BPSVNPTmAgaXMgdGhlIG1haW4gbWV0aG9kIHRvIHRyaWdnZXIgdGhpcyBmcm9tIHVzZXJzcGFjZS4gTm93LCB3YWl0IGEgc2Vjb25kLi4uIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgZ2V0cyBjYWxsZWQgZnJvbSBgbWFkdmlzZV9kb19iZWhhdmlvcmAgd2hlbiB0aGUgYG1hZHZfYmVoYXZpb3ItJmd0O2JlaGF2aW9yYCBpcyBlaXRoZXIgYE1BRFZfSFdQT0lTT05gIG9yIGBNQURWX1NPRlRfT0ZGTElORWAuIFRoYXQmIzM5O3MgdGhlIGNvbm5lY3Rpb24gSSB3YXMgbG9va2luZyBmb3IuIFJpZ2h0LCBsZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBtbS9tYWR2aXNlLmNgIGFuZCBjaGVjayBvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBNQURWX0hXUE9JU09OYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgc2hvdWxkIGJlIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFEVl9IV1BPSVNPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MTQ5Mj1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTQ5NC1cdHN3aXRjaCAobWFkdl9iZWhhdmlvci1cdTAwM2ViZWhhdmlvcikge1xubW0vbWFkdmlzZS5jOjE0OTU6XHRjYXNlIE1BRFZfSFdQT0lTT046XG5tbS9tYWR2aXNlLmMtMTQ5Ni1cdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG4tLVxubW0vbWFkdmlzZS5jPTE1MTg9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE1NTEtXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxubW0vbWFkdmlzZS5jOjE1NTI6XHRjYXNlIE1BRFZfSFdQT0lTT046XG5tbS9tYWR2aXNlLmMtMTU1My0jZW5kaWZcbi0tXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTk0My0gKiAgTUFEVl9LRUVQT05GT1JLIC0gdW5kbyB0aGUgZWZmZWN0IG9mIE1BRFZfV0lQRU9ORk9SS1xubW0vbWFkdmlzZS5jOjE5NDQ6ICogIE1BRFZfSFdQT0lTT04gLSB0cmlnZ2VyIG1lbW9yeSBlcnJvciBoYW5kbGVyIGFzIGlmIHRoZSBnaXZlbiBtZW1vcnkgcmFuZ2Vcbm1tL21hZHZpc2UuYy0xOTQ1LSAqXHRcdHdlcmUgY29ycnVwdGVkIGJ5IHVucmVjb3ZlcmFibGUgaGFyZHdhcmUgbWVtb3J5IGZhaWx1cmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MDAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IEVycm9yIEluamVjdGlvbioqCgpPa2F5LCBzbyB0aGUgYG1hZHZpc2VgIHdpdGggYE1BRFZfSFdQT0lTT05gIHJvdXRlIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoIGZvciB0cmlnZ2VyaW5nIHRoaXMgbWVtb3J5IGVycm9yIGNvbmRpdGlvbi4gVGhhdCYjMzk7cyB0aGUgZXN0YWJsaXNoZWQgbWV0aG9kLiBOb3csIHRoZSB0cmljayBpcyBwaW5wb2ludGluZyB0aGUgKmV4YWN0KiBmb2N1cyBzeW1ib2xzIGZvciBzeXprYWxsZXIgdG8gdGFyZ2V0LgoKSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgYG1lbW9yeV9mYWlsdXJlYCwgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCAod2hpY2gsIGltcG9ydGFudGx5LCBjYWxscyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgKSwgb3IgZXZlbiBqdXN0IGZvY3VzaW5nIG9uIGBtZW1vcnlfZmFpbHVyZWAgZGlyZWN0bHkgYWxvbmdzaWRlIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gLiBJIHRob3VnaHQgbWF5YmUgZnV6emluZyBtaWdodCBieXBhc3Mgc3RhdGljIGlubGluaW5nLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgaXMgYWN0dWFsbHkgYW4gYWRkcmVzcyBzcGFjZSBvcGVyYXRpb24sIHNvIGl0ICpjYW4mIzM5O3QqIGJlIGlubGluZWQuIEJ1dCB3YWl0LCBpdCYjMzk7cyBzdGF0aWMhIFRoYXQgbWlnaHQgYmUgcHJvYmxlbWF0aWMgZm9yIHN5emthbGxlciBpZiBpdCBkb2VzbiYjMzk7dCBoYXZlIGEgc3BlY2lmaWMsIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBJdCBpcyBhc3NpZ25lZCB0byBhIHN0cnVjdCwgd2hpY2ggbWVhbnMgaXRzIGFkZHJlc3MgaXMgZGVmaW5pdGVseSB0YWtlbiBhbmQgbm90IGlubGluZWQsIHdoaWNoIGdpdmVzIHVzIGEgdmFsaWQgc3ltYm9sIQoKSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyBjbGVhcmx5IHNheSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLiBTbywgdGhhdCBzZXR0bGVzIGl0OyBgbWVtb3J5X2ZhaWx1cmVgIGlzIGEgZ29vZCBjYW5kaWRhdGUsIGEgZ29vZCBwbGFjZSB0byBzdGFydC4KCkkmIzM5O20gbm93IHRoaW5raW5nIGFib3V0IGB0cnVuY2F0ZV9lcnJvcl9mb2xpb2AuIEl0JiMzOTtzIHN0YXRpYywgYnV0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBtZV9wYWdlY2FjaGVfY2xlYW5gLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIHRoZSBgcGFnZV9hY3Rpb25gIGFycmF5LiBUaGlzIGlzIGFuIGludGVyZXN0aW5nIGNvbm5lY3Rpb24uIEkgbmVlZCB0byBjaGVjayB0aGUgYHBhZ2VfYWN0aW9uYCBhcnJheSBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgdG8gc2VlIGlmIHRoaXMgaXMgYSB2aWFibGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV9hY3Rpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9MTI4MD1zdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTI5OC1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTI5OTpzdGF0aWMgaW50IHBhZ2VfYWN0aW9uKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnAsXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMDAtXHRcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNjg0PXN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzAzLVx0XHRcdFx0YnJlYWs7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjE3MDQ6XHRyZXR1cm4gcGFnZV9hY3Rpb24ocHMsIHAsIHBmbik7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTE3MDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc4MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkNvbmZpZyBPcHRpb24gRGl2ZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBiZWFyaW5ncy4gQmVmb3JlIGRpdmluZyBpbnRvIHRoZSBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgY29kZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFJpZ2h0LCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBjb250cm9scyB0aGUgYmVoYXZpb3IgSSYjMzk7bSBpbnRlcmVzdGVkIGluLCBiYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCBpcyBtb3N0IGxpa2VseSBgTUVNT1JZX0ZBSUxVUkVgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBzZXQgY29ycmVjdGx5IGFuZCBmaWd1cmUgb3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uIHRvIHBpbiBkb3duIGJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgdG91Y2hpbmcgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzQ3PWNvbmZpZyBERUZBVUxUX01NQVBfTUlOX0FERFJcbi0tXG5tbS9LY29uZmlnLTc2NS1cbm1tL0tjb25maWc6NzY2OmNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG5tbS9LY29uZmlnLTc2Ny1cdGJvb2xcbm1tL0tjb25maWctNzY4LVxubW0vS2NvbmZpZzo3Njk6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG5tbS9LY29uZmlnLTc3MC1cdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnOjc3MTpcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NzItXHRib29sIFwmIzM0O0VuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTc4MD1jb25maWcgSFdQT0lTT05fSU5KRUNUXG5tbS9LY29uZmlnLTc4MS1cdHRyaXN0YXRlIFwmIzM0O0hXUG9pc29uIHBhZ2VzIGluamVjdG9yXCYjMzQ7XG5tbS9LY29uZmlnOjc4MjpcdGRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgXHUwMDI2XHUwMDI2IERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgUFJPQ19GU1xubW0vS2NvbmZpZy03ODMtXHRzZWxlY3QgUFJPQ19QQUdFX01PTklUT1JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIGEgTWVtb3J5IEZhaWx1cmUgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTt2ZSBnb3QgYSBgTUVNT1JZX0ZBSUxVUkVgIGlzc3VlLCBhbmQgSSBpbW1lZGlhdGVseSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGNvZGUgdGhhdCBoYW5kbGVzIGl0IHJlc2lkZXMuIE9rYXksIEkgcmVjYWxsIHNlZWluZyBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCBtZW50aW9uZWQgc29tZXdoZXJlIHJlY2VudGx5IOKAkyB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBOb3csIHdoZXJlIHdhcyB0aGF0IGZ1bmN0aW9uIGRlZmluZWQgYWdhaW4/IEFoLCB5ZXMsIGl0JiMzOTtzIGluIGBtbS9zaG1lbS5jYC4gQnV0IGlzIHRoYXQgZmlsZSBhbHdheXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsPyBJdCB3b3VsZCBiZSB0ZXJyaWJsZSBpZiB3ZSBlbmRlZCB1cCBuZWVkaW5nIHNvbWV0aGluZyB0aGF0IHdhcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG91dC4gTGV0IG1lIHNlZSwgYENPTkZJR19TSE1FTWAgaXMgdXN1YWxseSBlbmFibGVkIGluIG1vc3QgY29uZmlndXJhdGlvbnMsIHNvIGNoYW5jZXMgYXJlLCB5ZXMsIGBzaG1lbS5jYCBpcyBnb2luZyB0byBiZSBwcmVzZW50LiBOb3csIGEga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgaXRzZWxmIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgaXQmIzM5O3Mgd3JhcHBlZCBpbiBhbiBgI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRWAgYmxvY2suIFRoaXMgaXMgY3JpdGljYWwsIHNpbmNlIGlmIGl0JiMzOTtzIG5vdCwgd2UmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHRvIHNlZSBpZiB0aGUgcmVxdWlyZWQgY29kZSBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX2Vycm9yX3JlbW92ZV9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NobWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz01MTMwPXN0YXRpYyB2b2lkIF9faW5pdCBzaG1lbV9kZXN0cm95X2lub2RlY2FjaGUodm9pZClcbi0tXG5tbS9zaG1lbS5jLTUxMzUtLyogS2VlcCB0aGUgcGFnZSBpbiBwYWdlIGNhY2hlIGluc3RlYWQgb2YgdHJ1bmNhdGluZyBpdCAqL1xubW0vc2htZW0uYzo1MTM2OnN0YXRpYyBpbnQgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxubW0vc2htZW0uYy01MTM3LVx0XHRcdFx0ICAgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zaG1lbS5jPTUxNDI9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc2htZW1fYW9wcyA9IHtcbi0tXG5tbS9zaG1lbS5jLTUxNTAtI2VuZGlmXG5tbS9zaG1lbS5jOjUxNTE6XHQuZXJyb3JfcmVtb3ZlX2ZvbGlvID0gc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvLFxubW0vc2htZW0uYy01MTUyLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzc5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgRmFpbHVyZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uIGlzIGhhbmRsZWQsIGFuZCBpdCBzZWVtcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBpc24mIzM5O3QgZGlyZWN0bHkgdGllZCB0byBgI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRWAuIFRoYXQmIzM5O3Mgbm90IHRoZSB0cmlnZ2VyLCBidXQgcmF0aGVyLCBgTUVNT1JZX0ZBSUxVUkVgIGlzIHRoZSByZWFsIGRlcGVuZGVuY3kuIEl0IGFwcGVhcnMgYE1FTU9SWV9GQUlMVVJFYCBlbmFibGVzIHRoZSB3aG9sZSBtZWNoYW5pc20gYW5kIGlzIHJlcXVpcmVkIHRvIHByb3Blcmx5IHVzZSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuIFRoaXMgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24uCgpJIHNob3VsZCB2ZXJpZnkgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGluZGlyZWN0bHkgcmVsYXRlIHRvIHRoaXMgc2NlbmFyaW8uIFRoZSBgSFdQT0lTT05fSU5KRUNUYCBjb25maWcgbWlnaHQgc2VlbSByZWxldmFudCBhdCBmaXJzdCBnbGFuY2UsIGJ1dCBpdCBhcHBlYXJzIHRoYXQgdGhlIGBtYWR2aXNlYCBjYWxsIHdpdGggYE1BRFZfSFdQT0lTT05gIGZ1bmN0aW9ucyBjb3JyZWN0bHkgd2hlbiBgTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQsIHdpdGhvdXQgZXhwbGljaXRseSBuZWVkaW5nIGBIV1BPSVNPTl9JTkpFQ1RgLiBTbywgYE1FTU9SWV9GQUlMVVJFYCBpcyB0aGUgcHJpbWFyeSBvbmUuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgYG1tL21hZHZpc2UuY2AgZmlsZSBhZ2FpbiB0byBjb25maXJtIGhvdyBgTUFEVl9IV1BPSVNPTmAgaXMgaGFuZGxlZC4gSXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01BRFZfSFdQT0lTT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTE0OTI9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE0OTQtXHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXHUwMDNlYmVoYXZpb3IpIHtcbm1tL21hZHZpc2UuYzoxNDk1Olx0Y2FzZSBNQURWX0hXUE9JU09OOlxubW0vbWFkdmlzZS5jLTE0OTYtXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxuLS1cbm1tL21hZHZpc2UuYz0xNTE4PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTUxLVx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbm1tL21hZHZpc2UuYzoxNTUyOlx0Y2FzZSBNQURWX0hXUE9JU09OOlxubW0vbWFkdmlzZS5jLTE1NTMtI2VuZGlmXG4tLVxubW0vbWFkdmlzZS5jPTE4ODc9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXG4tLVxubW0vbWFkdmlzZS5jLTE5NDMtICogIE1BRFZfS0VFUE9ORk9SSyAtIHVuZG8gdGhlIGVmZmVjdCBvZiBNQURWX1dJUEVPTkZPUktcbm1tL21hZHZpc2UuYzoxOTQ0OiAqICBNQURWX0hXUE9JU09OIC0gdHJpZ2dlciBtZW1vcnkgZXJyb3IgaGFuZGxlciBhcyBpZiB0aGUgZ2l2ZW4gbWVtb3J5IHJhbmdlXG5tbS9tYWR2aXNlLmMtMTk0NS0gKlx0XHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUyMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYG1hZHZpc2VfYmVoYXZpb3JfdmFsaWRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBtYWR2aXNlX2JlaGF2aW9yX3ZhbGlkYCwgYW5kIHRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0JiMzOTtzIGFsbCBjb25kaXRpb25hbCBvbiBgI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGxvZ2ljIHJlc2lkZXMuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsICYjMzQ7VGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBiZWhhdmlvciB2YWxpZGF0aW9uIGlzIHNvbWVob3cgbW9kaWZpZWQsIG9yIHBvdGVudGlhbGx5IGV2ZW4gYnlwYXNzZWQsIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSBjb25maWd1cmVkIHRvIHNpbXVsYXRlIG9yIGhhbmRsZSBtZW1vcnkgZmFpbHVyZXMuJiMzNDsgTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSB2YWxpZGl0eSBjaGVja3MgbWlnaHQgYmUgcmVsYXhlZCwgcGVyaGFwcyBhbGxvd2luZyBjZXJ0YWluIGBtYWR2aXNlYCBoaW50cyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIHJlamVjdGVkIHRvIHBhc3MgdGhyb3VnaCwgb3IgbWF5YmUgZXZlbiBpbXBsZW1lbnRpbmcgbW9yZSBhZ2dyZXNzaXZlIGVycm9yIGhhbmRsaW5nIHRvIHRlc3QgdGhlIGZhaWx1cmUgbWVjaGFuaXNtcy4gSXQgY291bGQgYWxzbyBpbnZvbHZlIGFsbG93aW5nIGNhbGxzIGluIGNvbnRleHRzIHdoZXJlIGl0IHdvdWxkIG5vcm1hbGx5IGJlIGZvcmJpZGRlbi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGRlZXBlciBpbnRvIHRoZSBjb2RlIGJyYW5jaGVzIHdpdGhpbiB0aGF0IG1hY3JvIHRvIGZ1bGx5IGdyYXNwIHRoZSBtb2RpZmljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgZ29hbCBpcyB0byBtYWtlIHRoZSBzeXN0ZW0gbW9yZSByb2J1c3Qgd2hlbiB1bmRlciBkdXJlc3MuIFRoaXMgd291bGQgYmUgdHlwaWNhbCBmb3IgdGVzdGluZyBmYWlsdXJlIG1vZGVzIGluIGEgY29udHJvbGxlZCBtYW5uZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MTMzOD1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDQyLVxubW0vbWFkdmlzZS5jOjE0NDM6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxubW0vbWFkdmlzZS5jLTE0NDQtLypcbi0tXG5tbS9tYWR2aXNlLmM9MTUxMD1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTUxNC1cbm1tL21hZHZpc2UuYzoxNTE1OiNlbmRpZlx0LyogQ09ORklHX01FTU9SWV9GQUlMVVJFICovXG5tbS9tYWR2aXNlLmMtMTUxNi1cbi0tXG5tbS9tYWR2aXNlLmM9MTUxOD1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTU0OS1cdGNhc2UgTUFEVl9HVUFSRF9SRU1PVkU6XG5tbS9tYWR2aXNlLmM6MTU1MDojaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5tbS9tYWR2aXNlLmMtMTU1MS1cdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDg0CgkJCQkJCQlvdXRwdXQ6IDExNAoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgRmFpbHVyZSBQYXRjaCoqCgpBbHJpZ2h0LCB5ZXAsIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGRlZmluaXRlbHkgYSBrZXkgY29uZmlndXJhdGlvbiBoZXJlLiBUaGlzIHBhdGNoIGlzIG1ha2luZyBhIHByZXR0eSBmb2N1c2VkIGJ1dCBpbXBvcnRhbnQgY2hhbmdlIGRlZXAgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSByZXNwb25kcyB0byBtZW1vcnkgZmFpbHVyZXMgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgc2hhcmVkIG1lbW9yeSAoc2htZW0pIGFuZCB0bXBmcyBzdWJzeXN0ZW1zLgoKRXNzZW50aWFsbHksIHRoZSBwYXRjaCBhbHRlcnMgdGhlIHJldHVybiB2YWx1ZSBvZiBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCB0byBgTUZfREVMQVlFRGAgaW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyAwLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgYWRqdXN0bWVudCwgYW5kIGl0IGNhc2NhZGVzIGJlY2F1c2UgYHRydW5jYXRlX2Vycm9yX2ZvbGlvYCBpcyBhbHNvIG1vZGlmaWVkIHRvIHByb3Blcmx5IGhhbmRsZSB0aGlzIG5ldyBgTUZfREVMQVlFRGAgcmV0dXJuLiBGdW5jdGlvbmFsbHksIHRoaXMgaW1wYWN0cyBob3cgbWVtb3J5IGZhaWx1cmVzIGFyZSBoYW5kbGVkIGZvciB0aG9zZSBzaG1lbS90bXBmcyBwYWdlcy4gSXQmIzM5O3Mgbm90IGEgc3VwZXJmaWNpYWwgZml4OyBpdCYjMzk7cyBhIGRpcmVjdCBpbnRlcnZlbnRpb24gaW50byB0aGUgd2F5IHRoZSBzeXN0ZW0gZGVhbHMgd2l0aCB0aGVzZSBlcnJvcnMuCgpXZSBjYW4gdHJpZ2dlciB0aGlzIGNoYW5nZSB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9uIGEgc2htZW0gbWFwcGluZywgd2hpY2ggaXMgYSBmYWlybHkgc3RhbmRhcmQgd2F5IHRvIHRlc3QgbWVtb3J5IGNvcnJ1cHRpb24gc2NlbmFyaW9zLiBBbmQgaXQmIzM5O3MgZ29vZCB0byBzZWUgdGhlIHNlbGZ0ZXN0IGlzIGFsc28gYmVpbmcgdXBkYXRlZOKAlGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jYCB3aWxsIG5vdyBpbmNsdWRlIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ24gdGhhdCB0aGV5JiMzOTtyZSB0aGlua2luZyBhYm91dCB0aGUgdGVzdCBjb3ZlcmFnZS4KCk15IGFwcHJvYWNoIHdpbGwgYmUgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYCBnaXZlbiB0aGlzIG1vZGlmaWNhdGlvbiBpbiBjb3JlIGJlaGF2aW9yLiBUaGUgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBjbGVhcmx5IGBtZW1vcnlfZmFpbHVyZWAgZm9yIHByZWNpc2lvbi4gQW5kIG9mIGNvdXJzZSwgSSB3aWxsIGVuYWJsZSBgTUVNT1JZX0ZBSUxVUkVgIGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiB0aGlzIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBtZWNoYW5pc20sIGFuZCBpdCYjMzk7cyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIGEgY29udHJvbGxlZCB3YXksIG1ha2luZyBpdCBwcmltZSB0ZXJyaXRvcnkgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBmb3Igc2htZW0gcGFnZXMgYnkgcmV0dXJuaW5nIE1GX0RFTEFZRUQgaW5zdGVhZCBvZiAwIGluIHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpbywgYW5kIHVwZGF0ZXMgdHJ1bmNhdGVfZXJyb3JfZm9saW8gdG8gaGFuZGxlIHRoaXMgbmV3IHJldHVybiB2YWx1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBpcyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgb24gc2htZW0gbWFwcGluZ3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGZvciBzaG1lbSBwYWdlcyBieSByZXR1cm5pbmcgTUZfREVMQVlFRCBpbnN0ZWFkIG9mIDAgaW4gc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvLCBhbmQgdXBkYXRlcyB0cnVuY2F0ZV9lcnJvcl9mb2xpbyB0byBoYW5kbGUgdGhpcyBuZXcgcmV0dXJuIHZhbHVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX0hXUE9JU09OKSBvbiBzaG1lbSBtYXBwaW5ncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgKGhhcmR3YXJlIHBvaXNvbikgaGFuZGxpbmcgbG9naWMgZm9yIHNobWVtIHBhZ2VzLCBjaGFuZ2luZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gIHRvIGBNRl9ERUxBWUVEYCBhbmQgdXBkYXRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBwcm9wZXJseSBoYW5kbGUgdGhpcyBzdGF0ZS4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGZvciBoYXJkd2FyZSBlcnJvciByZWNvdmVyeSBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzMyYTczNjM5NGRhOWE2ZWQ1YWZjZjM3MGVhNmViM2U3ZGEzZjAzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDE5OjUwOjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggYWFmMTQ2MDhiMzBlMi4uYzdhMDBjN2JlMzY4ZSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC04NDcsMjQgJiM0Mzs4NDcsMjUgQEAgc3RhdGljIGludCBraWxsX2FjY2Vzc2luZ19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgbG9uZyBwZm4sCiB9CiAKIC8qCi0gKiBNRl9JR05PUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCYjMzk7ZWQuCiYjNDM7ICogTUZfSUdOT1JFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJiMzOTtlZC4KICAqIEJ1dCBpdCBjb3VsZCBub3QgZG8gbW9yZSB0byBpc29sYXRlIHRoZSBwYWdlIGZyb20gYmVpbmcgYWNjZXNzZWQgYWdhaW4sCiAgKiBub3IgZG9lcyBpdCBraWxsIHRoZSBwcm9jZXNzLiBUaGlzIGlzIGV4dHJlbWVseSByYXJlIGFuZCBvbmUgb2YgdGhlCiAgKiBwb3RlbnRpYWwgY2F1c2VzIGlzIHRoYXQgdGhlIHBhZ2Ugc3RhdGUgaGFzIGJlZW4gY2hhbmdlZCBkdWUgdG8KICAqIHVuZGVybHlpbmcgcmFjZSBjb25kaXRpb24uIFRoaXMgaXMgdGhlIG1vc3Qgc2V2ZXJlIG91dGNvbWVzLgogICoKLSAqIE1GX0ZBSUxFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uZWQmIzM5O2VkLgomIzQzOyAqIE1GX0ZBSUxFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJiMzOTtlZC4KICAqIEl0IHNob3VsZCBoYXZlIGtpbGxlZCB0aGUgcHJvY2VzcywgYnV0IGl0IGNhbiYjMzk7dCBpc29sYXRlIHRoZSBwYWdlLAogICogZHVlIHRvIGNvbmRpdGlvbnMgc3VjaCBhcyBleHRyYSBwaW4sIHVubWFwIGZhaWx1cmUsIGV0Yy4gQWNjZXNzaW5nCiAgKiB0aGUgcGFnZSBhZ2FpbiBtYXkgdHJpZ2dlciBhbm90aGVyIE1DRSBhbmQgdGhlIHByb2Nlc3Mgd2lsbCBiZSBraWxsZWQKICAqIGJ5IHRoZSBtLWYoKSBoYW5kbGVyIGltbWVkaWF0ZWx5LgogICoKLSAqIE1GX0RFTEFZRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbmVkJiMzOTtlZC4KLSAqIFRoZSBwYWdlIGlzIHVubWFwcGVkLCBhbmQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBMUlUgb3IgZmlsZSBtYXBwaW5nLgotICogQW4gYXR0ZW1wdCB0byBhY2Nlc3MgdGhlIHBhZ2UgYWdhaW4gd2lsbCB0cmlnZ2VyIHBhZ2UgZmF1bHQgYW5kIHRoZQotICogUEYgaGFuZGxlciB3aWxsIGtpbGwgdGhlIHByb2Nlc3MuCiYjNDM7ICogTUZfREVMQVlFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJiMzOTtlZC4KJiM0MzsgKiBJdCBtZWFucyB0aGUgcGFnZSB3YXMgdW5tYXBwZWQgYW5kIHBhcnRpYWxseSBpc29sYXRlZCAoZS5nLiByZW1vdmVkIGZyb20KJiM0MzsgKiBmaWxlIG1hcHBpbmcgb3IgdGhlIExSVSkgYnV0IGZ1bGwgY2xlYW51cCBpcyBkZWZlcnJlZCAoZS5nLiB0aGUgbWV0YWRhdGEKJiM0MzsgKiBmb3IgdGhlIG1lbW9yeSwgYXMgaW4gc3RydWN0IHBhZ2UvZm9saW8sIGlzIHN0aWxsIHJlZmVyZW5jZWQpLiBBbnkKJiM0MzsgKiBmdXJ0aGVyIGFjY2VzcyB0byB0aGUgcGFnZSB3aWxsIHJlc3VsdCBpbiB0aGUgcHJvY2VzcyBiZWluZyBraWxsZWQuCiAgKgotICogTUZfUkVDT1ZFUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCYjMzk7ZWQuCiYjNDM7ICogTUZfUkVDT1ZFUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb24mIzM5O2VkLgogICogVGhlIHBhZ2UgaGFzIGJlZW4gY29tcGxldGVseSBpc29sYXRlZCwgdGhhdCBpcywgdW5tYXBwZWQsIHRha2VuIG91dCBvZgogICogdGhlIGJ1ZGR5IHN5c3RlbSwgb3IgaG9sZS1wdW5jaGVkIG91dCBvZiB0aGUgZmlsZSBtYXBwaW5nLgogICovCkBAIC05MzgsMTAgJiM0Mzs5MzksMTIgQEAgc3RhdGljIGludCB0cnVuY2F0ZV9lcnJvcl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIHBmbiwKIAlpZiAobWFwcGluZy0mZ3Q7YV9vcHMtJmd0O2Vycm9yX3JlbW92ZV9mb2xpbykgewogCQlpbnQgZXJyID0gbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O2Vycm9yX3JlbW92ZV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7CiAKLQkJaWYgKGVyciAhPSAwKQomIzQzOwkJaWYgKGVyciA9PSBNRl9ERUxBWUVEKQomIzQzOwkJCXJldCA9IGVycjsKJiM0MzsJCWVsc2UgaWYgKGVyciAhPSAwKQogCQkJcHJfaW5mbygmIzM0OyUjbHg6IEZhaWxlZCB0byBwdW5jaCBwYWdlOiAlZFxuJiMzNDssIHBmbiwgZXJyKTsKIAkJZWxzZSBpZiAoIWZpbGVtYXBfcmVsZWFzZV9mb2xpbyhmb2xpbywgR0ZQX05PSU8pKQotCQkJcHJfaW5mbygmIzM0OyUjbHg6IGZhaWxlZCB0byByZWxlYXNlIGJ1ZmZlcnNcbiYjMzQ7LCBwZm4pOwomIzQzOwkJCXByX2luZm8oJiMzNDslI2x4OiBGYWlsZWQgdG8gcmVsZWFzZSBidWZmZXJzXG4mIzM0OywgcGZuKTsKIAkJZWxzZQogCQkJcmV0ID0gTUZfUkVDT1ZFUkVEOwogCX0gZWxzZSB7CkBAIC0xMDM2LDE4ICYjNDM7MTAzOSwxNCBAQCBzdGF0aWMgaW50IG1lX3BhZ2VjYWNoZV9jbGVhbihzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKQogCQlnb3RvIG91dDsKIAl9CiAKLQkvKgotCSAqIFRoZSBzaG1lbSBwYWdlIGlzIGtlcHQgaW4gcGFnZSBjYWNoZSBpbnN0ZWFkIG9mIHRydW5jYXRpbmcKLQkgKiBzbyBpcyBleHBlY3RlZCB0byBoYXZlIGFuIGV4dHJhIHJlZmNvdW50IGFmdGVyIGVycm9yLWhhbmRsaW5nLgotCSAqLwotCWV4dHJhX3BpbnMgPSBzaG1lbV9tYXBwaW5nKG1hcHBpbmcpOwotCiAJLyoKIAkgKiBUcnVuY2F0aW9uIGlzIGEgYml0IHRyaWNreS4gRW5hYmxlIGl0IHBlciBmaWxlIHN5c3RlbSBmb3Igbm93LgogCSAqCiAJICogT3BlbjogdG8gdGFrZSBpX3J3c2VtIG9yIG5vdCBmb3IgdGhpcz8gUmlnaHQgbm93IHdlIGRvbiYjMzk7dC4KIAkgKi8KIAlyZXQgPSB0cnVuY2F0ZV9lcnJvcl9mb2xpbyhmb2xpbywgcGFnZV90b19wZm4ocCksIG1hcHBpbmcpOwomIzQzOwomIzQzOwlleHRyYV9waW5zID0gcmV0ID09IE1GX0RFTEFZRUQ7CiAJaWYgKGhhc19leHRyYV9yZWZjb3VudChwcywgcCwgZXh0cmFfcGlucykpCiAJCXJldCA9IE1GX0ZBSUxFRDsKIApkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggNzc0ZjRiMThmZjVjNi4uZDZmOTQ3ODZlNzA5ZSAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC01MTM2LDcgJiM0Mzs1MTM2LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHNobWVtX2Rlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKQogc3RhdGljIGludCBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJICAgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIE1GX0RFTEFZRUQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHNobWVtX2FvcHMgPSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCAxYTVhMzJlMjJjY2UyLi41YjI2ZjBjNDQ2NjQ0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTIwLDYgJiM0MzsyMCwxMCBAQAogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAKJiM0MzsjaWZuZGVmIGZhbGx0aHJvdWdoCiYjNDM7IyBkZWZpbmUgZmFsbHRocm91Z2ggX19hdHRyaWJ1dGVfXygoX19mYWxsdGhyb3VnaF9fKSkKJiM0MzsjZW5kaWYKJiM0MzsKIGVudW0gaW5qZWN0X3R5cGUgewogCU1BRFZfSEFSRCwKIAlNQURWX1NPRlQsCkBAIC0yOSw5ICYjNDM7MzMsMTQgQEAgZW51bSByZXN1bHRfdHlwZSB7CiAJTUFEVl9IQVJEX0FOT04sCiAJTUFEVl9IQVJEX0NMRUFOX1BBR0VDQUNIRSwKIAlNQURWX0hBUkRfRElSVFlfUEFHRUNBQ0hFLAomIzQzOwlNQURWX0hBUkRfQ0xFQU5fU0hNRU0sCiYjNDM7CU1BRFZfSEFSRF9ESVJUWV9TSE1FTSwKIAlNQURWX1NPRlRfQU5PTiwKIAlNQURWX1NPRlRfQ0xFQU5fUEFHRUNBQ0hFLAogCU1BRFZfU09GVF9ESVJUWV9QQUdFQ0FDSEUsCiYjNDM7CU1BRFZfU09GVF9DTEVBTl9TSE1FTSwKJiM0MzsJTUFEVl9TT0ZUX0RJUlRZX1NITUVNLAomIzQzOwlSRUFEX0VSUk9SLAogfTsKIAogc3RhdGljIGptcF9idWYgc2lnbmFsX2ptcF9idWY7CkBAIC0xNTcsMTcgJiM0MzsxNjYsMjIgQEAgc3RhdGljIHZvaWQgY2hlY2soc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBGSVhUVVJFX0RBVEEobWVtb3J5X2ZhaWx1cmUKIAljYXNlIE1BRFZfSEFSRF9DTEVBTl9QQUdFQ0FDSEU6CiAJY2FzZSBNQURWX1NPRlRfQ0xFQU5fUEFHRUNBQ0hFOgogCWNhc2UgTUFEVl9TT0ZUX0RJUlRZX1BBR0VDQUNIRToKLQkJLyogSXQgaXMgbm90IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBTSUdCVVMgc2lnbmFsLiAqLwotCQlBU1NFUlRfRVEoc2V0am1wLCAwKTsKLQomIzQzOwljYXNlIE1BRFZfU09GVF9ESVJUWV9TSE1FTToKIAkJLyogVGhlIHBhZ2UgY29udGVudCBzaG91bGQgcmVtYWluIHVuY2hhbmdlZC4gKi8KIAkJQVNTRVJUX1RSVUUoY2hlY2tfbWVtb3J5KHZhZGRyLCBzZWxmLSZndDtwYWdlX3NpemUpKTsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwljYXNlIE1BRFZfSEFSRF9DTEVBTl9TSE1FTToKJiM0MzsJY2FzZSBNQURWX1NPRlRfQ0xFQU5fU0hNRU06CiYjNDM7CQkvKiBJdCBpcyBub3QgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIFNJR0JVUyBzaWduYWwuICovCiYjNDM7CQlBU1NFUlRfRVEoc2V0am1wLCAwKTsKIAogCQkvKiBUaGUgYmFja2luZyBwZm4gb2YgYWRkciBzaG91bGQgaGF2ZSBjaGFuZ2VkLiAqLwogCQlBU1NFUlRfTkUocGFnZW1hcF9nZXRfcGZuKHNlbGYtJmd0O3BhZ2VtYXBfZmQsIHZhZGRyKSwgc2VsZi0mZ3Q7cGZuKTsKIAkJYnJlYWs7CiAJY2FzZSBNQURWX0hBUkRfQU5PTjoKIAljYXNlIE1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEU6CiYjNDM7CWNhc2UgTUFEVl9IQVJEX0RJUlRZX1NITUVNOgomIzQzOwljYXNlIFJFQURfRVJST1I6CiAJCS8qIFRoZSBTSUdCVVMgc2lnbmFsIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQuICovCiAJCUFTU0VSVF9FUShzZXRqbXAsIDEpOwogCkBAIC0yNjMsNiAmIzQzOzI3NywyMCBAQCBzdGF0aWMgaW50IHByZXBhcmVfZmlsZShjb25zdCBjaGFyICpmbmFtZSwgdW5zaWduZWQgbG9uZyBzaXplKQogCXJldHVybiBmZDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgcHJlcGFyZV9zaG1lbShjb25zdCBjaGFyICpmbmFtZSwgdW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlmZCA9IG1lbWZkX2NyZWF0ZShmbmFtZSwgMCk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CWlmIChmdHJ1bmNhdGUoZmQsIHNpemUpICZsdDsgMCkgewomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CXJldHVybiBmZDsKJiM0Mzt9CiYjNDM7CiAvKiBCb3Jyb3dlZCBmcm9tIG1tL2d1cF9sb25ndGVybS5jLiAqLwogc3RhdGljIGludCBnZXRfZnNfdHlwZShpbnQgZmQpCiB7CkBAIC0zNTUsNCAmIzQzOzM4Myw4OCBAQCBURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGRpcnR5X3BhZ2VjYWNoZSkKIAlBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTsKIH0KIAomIzQzO1RFU1RfRihtZW1vcnlfZmFpbHVyZSwgZGlydHlfc2htZW0pCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CWNoYXIgKmFkZHI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWZkID0gcHJlcGFyZV9zaG1lbSgmIzM0O3NobWVtLWZpbGUmIzM0Oywgc2VsZi0mZ3Q7cGFnZV9zaXplKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O2ZhaWxlZCB0byBvcGVuIHRlc3Qgc2htZW0tZmlsZS5cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJYWRkciA9IG1tYXAoMCwgc2VsZi0mZ3Q7cGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJICAgIE1BUF9TSEFSRUQsIGZkLCAwKTsKJiM0MzsJaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkgewomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bW1hcCBmYWlsZWQsIG5vdCBlbm91Z2ggbWVtb3J5LlxuJiMzNDspOwomIzQzOwl9CiYjNDM7CW1lbXNldChhZGRyLCAweGNlLCBzZWxmLSZndDtwYWdlX3NpemUpOwomIzQzOwomIzQzOwlwcmVwYXJlKF9tZXRhZGF0YSwgc2VsZiwgYWRkcik7CiYjNDM7CiYjNDM7CXJldCA9IHNpZ3NldGptcChzaWduYWxfam1wX2J1ZiwgMSk7CiYjNDM7CWlmICghcmV0ICZhbXA7JmFtcDsgIXNlbGYtJmd0O2luamVjdGlvbl9hdHRlbXB0ZWQpIHsKJiM0MzsJCXNlbGYtJmd0O2luamVjdGlvbl9hdHRlbXB0ZWQgPSB0cnVlOwomIzQzOwkJQVNTRVJUX0VRKHZhcmlhbnQtJmd0O2luamVjdChzZWxmLCBhZGRyKSwgMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZhcmlhbnQtJmd0O3R5cGUgPT0gTUFEVl9IQVJEKSB7CiYjNDM7CQljaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfSEFSRF9ESVJUWV9TSE1FTSwgcmV0KTsKJiM0MzsJCXJldCA9IHNpZ3NldGptcChzaWduYWxfam1wX2J1ZiwgMSk7CiYjNDM7CQlpZiAocmV0ID09IDApCiYjNDM7CQkJRk9SQ0VfUkVBRCgqYWRkcik7CiYjNDM7CQljaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIFJFQURfRVJST1IsIHJldCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQljaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfU09GVF9ESVJUWV9TSE1FTSwgcmV0KTsKJiM0MzsJfQomIzQzOwomIzQzOwlBU1NFUlRfRVEobXVubWFwKGFkZHIsIHNlbGYtJmd0O3BhZ2Vfc2l6ZSksIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBjbGVhbl9zaG1lbSkKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJY2hhciAqYWRkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZmQgPSBwcmVwYXJlX3NobWVtKCYjMzQ7c2htZW0tZmlsZSYjMzQ7LCBzZWxmLSZndDtwYWdlX3NpemUpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7ZmFpbGVkIHRvIG9wZW4gdGVzdCBzaG1lbS1maWxlLlxuJiMzNDspOwomIzQzOwomIzQzOwlhZGRyID0gbW1hcCgwLCBzZWxmLSZndDtwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICAgTUFQX1NIQVJFRCwgZmQsIDApOwomIzQzOwlpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDttbWFwIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkuXG4mIzM0Oyk7CiYjNDM7CX0KJiM0MzsJRk9SQ0VfUkVBRCgqYWRkcik7CiYjNDM7CiYjNDM7CXByZXBhcmUoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTsKJiM0MzsKJiM0MzsJcmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTsKJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyAhc2VsZi0mZ3Q7aW5qZWN0aW9uX2F0dGVtcHRlZCkgewomIzQzOwkJc2VsZi0mZ3Q7aW5qZWN0aW9uX2F0dGVtcHRlZCA9IHRydWU7CiYjNDM7CQlBU1NFUlRfRVEodmFyaWFudC0mZ3Q7aW5qZWN0KHNlbGYsIGFkZHIpLCAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmFyaWFudC0mZ3Q7dHlwZSA9PSBNQURWX0hBUkQpIHsKJiM0MzsJCWNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9IQVJEX0NMRUFOX1NITUVNLCByZXQpOwomIzQzOwkJcmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTsKJiM0MzsJCWlmIChyZXQgPT0gMCkKJiM0MzsJCQlGT1JDRV9SRUFEKCphZGRyKTsKJiM0MzsJCWNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgUkVBRF9FUlJPUiwgcmV0KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIFRlc3QgdGhlIGFkZHJlc3MgYWNjZXNzYWJpbGl0eSB3aXRob3V0IGNoZWNrX21lbW9yeSgpLiAqLwomIzQzOwkJRk9SQ0VfUkVBRCgqYWRkcik7CiYjNDM7CQljaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfU09GVF9DTEVBTl9TSE1FTSwgcmV0KTsKJiM0MzsJfQomIzQzOwomIzQzOwlBU1NFUlRfRVEobXVubWFwKGFkZHIsIHNlbGYtJmd0O3BhZ2Vfc2l6ZSksIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTsKJiM0Mzt9CiYjNDM7CiBURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5MQoJCQkJCQkJb3V0cHV0OiAxNDcKCQkJCQkJCXRob3VnaHRzOiA5MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbjogU2htZW0gTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQmIzM5O3MgZm9jdXNlZCBvbiBpbXByb3ZpbmcgdGhlIGtlcm5lbCYjMzk7cyBoYW5kbGluZyBvZiBtZW1vcnkgZmFpbHVyZXMg4oCTIHNwZWNpZmljYWxseSwgaGFyZHdhcmUtZGV0ZWN0ZWQgZXJyb3JzIHdpdGhpbiBzaG1lbSBwYWdlcy4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gIGluIGBtbS9zaG1lbS5jYC4gSW5zdGVhZCBvZiByZXR1cm5pbmcgMCwgaXQgbm93IHJldHVybnMgYE1GX0RFTEFZRURgLiBUaGlzIHNpZ25hbHMgdG8gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCAoYHRydW5jYXRlX2Vycm9yX2ZvbGlvYCBhbmQgYG1lX3BhZ2VjYWNoZV9jbGVhbmApIHRoYXQgdGhlIGZvbGlvIHJlbW92YWwgaXMgZGVmZXJyZWQuIFRoZSBwYXRjaCB0aGVuIGFkanVzdHMgdGhlIGxvZ2ljIGluIGB0cnVuY2F0ZV9lcnJvcl9mb2xpb2AgYW5kIGBtZV9wYWdlY2FjaGVfY2xlYW5gIHRvIGFjY29tbW9kYXRlIHRoZSBgTUZfREVMQVlFRGAgcmV0dXJuIHZhbHVlLCBjaGFuZ2luZyBzb21lIGNvbnRyb2wgZmxvdy4gIFdlIGFsc28gc2VlIG5ldyBzZWxmdGVzdHMgYWRkZWQgZm9yIHRoaXMgYmVoYXZpb3IuCgpOb3csIGxldCYjMzk7cyBhcHBseSBteSBpbnRlcm5hbCBLTVNBTiBjaGVja2xpc3Q6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZToqKiBOb3BlLiBOb3RoaW5nIGhlcmUgaW50cm9kdWNlcyBuZXcgc3RydWN0dXJlcyBvciBtb2RpZmllcyBleGlzdGluZyBvbmVzIGluIGEgd2F5IHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoaXMgaXMgYWxsIGludGVybmFsIGtlcm5lbCBlcnJvciBoYW5kbGluZy4KCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBkZXBlbmRlbnQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uIFdoaWxlIHdlIGFyZSBtb2RpZnlpbmcgY29udHJvbCBmbG93IGJhc2VkIG9uIGBNRl9ERUxBWUVEYCwgdGhpcyBpcyBhICpkZWZpbmVkKiB2YWx1ZSwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUsIHdlIGFyZSBub3QgaW50cm9kdWNpbmcgbmV3IHdheXMgdG8gbWFrZSB0aGUga2VybmVsIHJlYWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9ubHkgY29udHJvbCBob3cgdG8gaGFuZGxlIGFuIGVycm9yIHRoYXQgaXMgYWxyZWFkeSBiZWluZyBoYW5kbGVkLgoKMy4gICoqQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlczoqKiBOby4gVGhpcyBpcyBub3QgYWJvdXQgYWxsb2NhdGluZyBuZXcgZGF0YSBzdHJ1Y3R1cmVzLiBJdCYjMzk7cyBhYm91dCBob3cgd2UgaGFuZGxlIGVycm9ycyBvbiAqZXhpc3RpbmcqIHNobWVtIHBhZ2VzLgoKNC4gICoqQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM6KiogQWdhaW4sIG5vLiBUaGUgY2hhbmdlcyByZWZpbmUgdGhlIGxvZ2ljIGZvciBob3cgd2UgaGFuZGxlIGV4aXN0aW5nIHNobWVtIHBhZ2VzIGVuY291bnRlcmluZyBoYXJkd2FyZSBlcnJvcnMuIE5vIG5ldyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBpcyBlbmFibGVkLgoKVGhlcmVmb3JlLCBhZnRlciBhIGNhcmVmdWwgcmV2aWV3LCB0aGUgcGF0Y2ggZG9lcyBub3QgbWVldCBhbnkgb2YgbXkgS01TQU4gY3JpdGVyaWEuIE5vIEtNU0FOIGlzIG5lZWRlZC4gSSYjMzk7bSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgYWRkaW5nIG15IHJlYXNvbmluZyB0byB0aGUgcmVjb3JkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgKGhhcmR3YXJlIHBvaXNvbikgaGFuZGxpbmcgbG9naWMgZm9yIHNobWVtIHBhZ2VzLCBjaGFuZ2luZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gIHRvIGBNRl9ERUxBWUVEYCBhbmQgdXBkYXRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBwcm9wZXJseSBoYW5kbGUgdGhpcyBzdGF0ZS4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGZvciBoYXJkd2FyZSBlcnJvciByZWNvdmVyeSBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSAoaGFyZHdhcmUgcG9pc29uKSBoYW5kbGluZyBsb2dpYyBmb3Igc2htZW0gcGFnZXMsIGNoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgdG8gYE1GX0RFTEFZRURgIGFuZCB1cGRhdGluZyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIHRvIHByb3Blcmx5IGhhbmRsZSB0aGlzIHN0YXRlLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgZm9yIGhhcmR3YXJlIGVycm9yIHJlY292ZXJ5IGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDowMS40MDY4NzMyMDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjUzODA3NDQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgKGhhcmR3YXJlIHBvaXNvbikgaGFuZGxpbmcgbG9naWMgZm9yIHNobWVtIHBhZ2VzLCBjaGFuZ2luZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gIHRvIGBNRl9ERUxBWUVEYCBhbmQgdXBkYXRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBwcm9wZXJseSBoYW5kbGUgdGhpcyBzdGF0ZS4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGZvciBoYXJkd2FyZSBlcnJvciByZWNvdmVyeSBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgZm9yIHNobWVtIHBhZ2VzIGJ5IHJldHVybmluZyBNRl9ERUxBWUVEIGluc3RlYWQgb2YgMCBpbiBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW8sIGFuZCB1cGRhdGVzIHRydW5jYXRlX2Vycm9yX2ZvbGlvIHRvIGhhbmRsZSB0aGlzIG5ldyByZXR1cm4gdmFsdWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIG9uIHNobWVtIG1hcHBpbmdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDowMS40MDY4Nzk0NTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTU1MTE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMzMmE3MzYzOTRkYTlhNmVkNWFmY2YzNzBlYTZlYjNlN2RhM2YwM2VcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMjMgMTk6NTA6MDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5pbmRleCBhYWYxNDYwOGIzMGUyLi5jN2EwMGM3YmUzNjhlIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuQEAgLTg0NywyNCArODQ3LDI1IEBAIHN0YXRpYyBpbnQga2lsbF9hY2Nlc3NpbmdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbiB9XFxuIFxcbiAvKlxcbi0gKiBNRl9JR05PUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCdlZC5cXG4rICogTUZfSUdOT1JFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJ2VkLlxcbiAgKiBCdXQgaXQgY291bGQgbm90IGRvIG1vcmUgdG8gaXNvbGF0ZSB0aGUgcGFnZSBmcm9tIGJlaW5nIGFjY2Vzc2VkIGFnYWluLFxcbiAgKiBub3IgZG9lcyBpdCBraWxsIHRoZSBwcm9jZXNzLiBUaGlzIGlzIGV4dHJlbWVseSByYXJlIGFuZCBvbmUgb2YgdGhlXFxuICAqIHBvdGVudGlhbCBjYXVzZXMgaXMgdGhhdCB0aGUgcGFnZSBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkIGR1ZSB0b1xcbiAgKiB1bmRlcmx5aW5nIHJhY2UgY29uZGl0aW9uLiBUaGlzIGlzIHRoZSBtb3N0IHNldmVyZSBvdXRjb21lcy5cXG4gICpcXG4tICogTUZfRkFJTEVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCdlZC5cXG4rICogTUZfRkFJTEVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb24nZWQuXFxuICAqIEl0IHNob3VsZCBoYXZlIGtpbGxlZCB0aGUgcHJvY2VzcywgYnV0IGl0IGNhbid0IGlzb2xhdGUgdGhlIHBhZ2UsXFxuICAqIGR1ZSB0byBjb25kaXRpb25zIHN1Y2ggYXMgZXh0cmEgcGluLCB1bm1hcCBmYWlsdXJlLCBldGMuIEFjY2Vzc2luZ1xcbiAgKiB0aGUgcGFnZSBhZ2FpbiBtYXkgdHJpZ2dlciBhbm90aGVyIE1DRSBhbmQgdGhlIHByb2Nlc3Mgd2lsbCBiZSBraWxsZWRcXG4gICogYnkgdGhlIG0tZigpIGhhbmRsZXIgaW1tZWRpYXRlbHkuXFxuICAqXFxuLSAqIE1GX0RFTEFZRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbmVkJ2VkLlxcbi0gKiBUaGUgcGFnZSBpcyB1bm1hcHBlZCwgYW5kIGlzIHJlbW92ZWQgZnJvbSB0aGUgTFJVIG9yIGZpbGUgbWFwcGluZy5cXG4tICogQW4gYXR0ZW1wdCB0byBhY2Nlc3MgdGhlIHBhZ2UgYWdhaW4gd2lsbCB0cmlnZ2VyIHBhZ2UgZmF1bHQgYW5kIHRoZVxcbi0gKiBQRiBoYW5kbGVyIHdpbGwga2lsbCB0aGUgcHJvY2Vzcy5cXG4rICogTUZfREVMQVlFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJ2VkLlxcbisgKiBJdCBtZWFucyB0aGUgcGFnZSB3YXMgdW5tYXBwZWQgYW5kIHBhcnRpYWxseSBpc29sYXRlZCAoZS5nLiByZW1vdmVkIGZyb21cXG4rICogZmlsZSBtYXBwaW5nIG9yIHRoZSBMUlUpIGJ1dCBmdWxsIGNsZWFudXAgaXMgZGVmZXJyZWQgKGUuZy4gdGhlIG1ldGFkYXRhXFxuKyAqIGZvciB0aGUgbWVtb3J5LCBhcyBpbiBzdHJ1Y3QgcGFnZS9mb2xpbywgaXMgc3RpbGwgcmVmZXJlbmNlZCkuIEFueVxcbisgKiBmdXJ0aGVyIGFjY2VzcyB0byB0aGUgcGFnZSB3aWxsIHJlc3VsdCBpbiB0aGUgcHJvY2VzcyBiZWluZyBraWxsZWQuXFxuICAqXFxuLSAqIE1GX1JFQ09WRVJFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uZWQnZWQuXFxuKyAqIE1GX1JFQ09WRVJFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJ2VkLlxcbiAgKiBUaGUgcGFnZSBoYXMgYmVlbiBjb21wbGV0ZWx5IGlzb2xhdGVkLCB0aGF0IGlzLCB1bm1hcHBlZCwgdGFrZW4gb3V0IG9mXFxuICAqIHRoZSBidWRkeSBzeXN0ZW0sIG9yIGhvbGUtcHVuY2hlZCBvdXQgb2YgdGhlIGZpbGUgbWFwcGluZy5cXG4gICovXFxuQEAgLTkzOCwxMCArOTM5LDEyIEBAIHN0YXRpYyBpbnQgdHJ1bmNhdGVfZXJyb3JfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdGlmIChtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZXJyb3JfcmVtb3ZlX2ZvbGlvKSB7XFxuIFxcdFxcdGludCBlcnIgPSBtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZXJyb3JfcmVtb3ZlX2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcXG4gXFxuLVxcdFxcdGlmIChlcnIgIT0gMClcXG4rXFx0XFx0aWYgKGVyciA9PSBNRl9ERUxBWUVEKVxcbitcXHRcXHRcXHRyZXQgPSBlcnI7XFxuK1xcdFxcdGVsc2UgaWYgKGVyciAhPSAwKVxcbiBcXHRcXHRcXHRwcl9pbmZvKFxcXCIlI2x4OiBGYWlsZWQgdG8gcHVuY2ggcGFnZTogJWRcXFxcblxcXCIsIHBmbiwgZXJyKTtcXG4gXFx0XFx0ZWxzZSBpZiAoIWZpbGVtYXBfcmVsZWFzZV9mb2xpbyhmb2xpbywgR0ZQX05PSU8pKVxcbi1cXHRcXHRcXHRwcl9pbmZvKFxcXCIlI2x4OiBmYWlsZWQgdG8gcmVsZWFzZSBidWZmZXJzXFxcXG5cXFwiLCBwZm4pO1xcbitcXHRcXHRcXHRwcl9pbmZvKFxcXCIlI2x4OiBGYWlsZWQgdG8gcmVsZWFzZSBidWZmZXJzXFxcXG5cXFwiLCBwZm4pO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJldCA9IE1GX1JFQ09WRVJFRDtcXG4gXFx0fSBlbHNlIHtcXG5AQCAtMTAzNiwxOCArMTAzOSwxNCBAQCBzdGF0aWMgaW50IG1lX3BhZ2VjYWNoZV9jbGVhbihzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0LypcXG4tXFx0ICogVGhlIHNobWVtIHBhZ2UgaXMga2VwdCBpbiBwYWdlIGNhY2hlIGluc3RlYWQgb2YgdHJ1bmNhdGluZ1xcbi1cXHQgKiBzbyBpcyBleHBlY3RlZCB0byBoYXZlIGFuIGV4dHJhIHJlZmNvdW50IGFmdGVyIGVycm9yLWhhbmRsaW5nLlxcbi1cXHQgKi9cXG4tXFx0ZXh0cmFfcGlucyA9IHNobWVtX21hcHBpbmcobWFwcGluZyk7XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBUcnVuY2F0aW9uIGlzIGEgYml0IHRyaWNreS4gRW5hYmxlIGl0IHBlciBmaWxlIHN5c3RlbSBmb3Igbm93LlxcbiBcXHQgKlxcbiBcXHQgKiBPcGVuOiB0byB0YWtlIGlfcndzZW0gb3Igbm90IGZvciB0aGlzPyBSaWdodCBub3cgd2UgZG9uJ3QuXFxuIFxcdCAqL1xcbiBcXHRyZXQgPSB0cnVuY2F0ZV9lcnJvcl9mb2xpbyhmb2xpbywgcGFnZV90b19wZm4ocCksIG1hcHBpbmcpO1xcbitcXG4rXFx0ZXh0cmFfcGlucyA9IHJldCA9PSBNRl9ERUxBWUVEO1xcbiBcXHRpZiAoaGFzX2V4dHJhX3JlZmNvdW50KHBzLCBwLCBleHRyYV9waW5zKSlcXG4gXFx0XFx0cmV0ID0gTUZfRkFJTEVEO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcXG5pbmRleCA3NzRmNGIxOGZmNWM2Li5kNmY5NDc4NmU3MDllIDEwMDY0NFxcbi0tLSBhL21tL3NobWVtLmNcXG4rKysgYi9tbS9zaG1lbS5jXFxuQEAgLTUxMzYsNyArNTEzNiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzaG1lbV9kZXN0cm95X2lub2RlY2FjaGUodm9pZClcXG4gc3RhdGljIGludCBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBNRl9ERUxBWUVEO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBzaG1lbV9hb3BzID0ge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IDFhNWEzMmUyMmNjZTIuLjViMjZmMGM0NDY2NDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcXG5AQCAtMjAsNiArMjAsMTAgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuIFxcbisjaWZuZGVmIGZhbGx0aHJvdWdoXFxuKyMgZGVmaW5lIGZhbGx0aHJvdWdoIF9fYXR0cmlidXRlX18oKF9fZmFsbHRocm91Z2hfXykpXFxuKyNlbmRpZlxcbitcXG4gZW51bSBpbmplY3RfdHlwZSB7XFxuIFxcdE1BRFZfSEFSRCxcXG4gXFx0TUFEVl9TT0ZULFxcbkBAIC0yOSw5ICszMywxNCBAQCBlbnVtIHJlc3VsdF90eXBlIHtcXG4gXFx0TUFEVl9IQVJEX0FOT04sXFxuIFxcdE1BRFZfSEFSRF9DTEVBTl9QQUdFQ0FDSEUsXFxuIFxcdE1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEUsXFxuK1xcdE1BRFZfSEFSRF9DTEVBTl9TSE1FTSxcXG4rXFx0TUFEVl9IQVJEX0RJUlRZX1NITUVNLFxcbiBcXHRNQURWX1NPRlRfQU5PTixcXG4gXFx0TUFEVl9TT0ZUX0NMRUFOX1BBR0VDQUNIRSxcXG4gXFx0TUFEVl9TT0ZUX0RJUlRZX1BBR0VDQUNIRSxcXG4rXFx0TUFEVl9TT0ZUX0NMRUFOX1NITUVNLFxcbitcXHRNQURWX1NPRlRfRElSVFlfU0hNRU0sXFxuK1xcdFJFQURfRVJST1IsXFxuIH07XFxuIFxcbiBzdGF0aWMgam1wX2J1ZiBzaWduYWxfam1wX2J1ZjtcXG5AQCAtMTU3LDE3ICsxNjYsMjIgQEAgc3RhdGljIHZvaWQgY2hlY2soc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBGSVhUVVJFX0RBVEEobWVtb3J5X2ZhaWx1cmVcXG4gXFx0Y2FzZSBNQURWX0hBUkRfQ0xFQU5fUEFHRUNBQ0hFOlxcbiBcXHRjYXNlIE1BRFZfU09GVF9DTEVBTl9QQUdFQ0FDSEU6XFxuIFxcdGNhc2UgTUFEVl9TT0ZUX0RJUlRZX1BBR0VDQUNIRTpcXG4tXFx0XFx0LyogSXQgaXMgbm90IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBTSUdCVVMgc2lnbmFsLiAqL1xcbi1cXHRcXHRBU1NFUlRfRVEoc2V0am1wLCAwKTtcXG4tXFxuK1xcdGNhc2UgTUFEVl9TT0ZUX0RJUlRZX1NITUVNOlxcbiBcXHRcXHQvKiBUaGUgcGFnZSBjb250ZW50IHNob3VsZCByZW1haW4gdW5jaGFuZ2VkLiAqL1xcbiBcXHRcXHRBU1NFUlRfVFJVRShjaGVja19tZW1vcnkodmFkZHIsIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSkpO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBNQURWX0hBUkRfQ0xFQU5fU0hNRU06XFxuK1xcdGNhc2UgTUFEVl9TT0ZUX0NMRUFOX1NITUVNOlxcbitcXHRcXHQvKiBJdCBpcyBub3QgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIFNJR0JVUyBzaWduYWwuICovXFxuK1xcdFxcdEFTU0VSVF9FUShzZXRqbXAsIDApO1xcbiBcXG4gXFx0XFx0LyogVGhlIGJhY2tpbmcgcGZuIG9mIGFkZHIgc2hvdWxkIGhhdmUgY2hhbmdlZC4gKi9cXG4gXFx0XFx0QVNTRVJUX05FKHBhZ2VtYXBfZ2V0X3BmbihzZWxmLVxcdTAwM2VwYWdlbWFwX2ZkLCB2YWRkciksIHNlbGYtXFx1MDAzZXBmbik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE1BRFZfSEFSRF9BTk9OOlxcbiBcXHRjYXNlIE1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEU6XFxuK1xcdGNhc2UgTUFEVl9IQVJEX0RJUlRZX1NITUVNOlxcbitcXHRjYXNlIFJFQURfRVJST1I6XFxuIFxcdFxcdC8qIFRoZSBTSUdCVVMgc2lnbmFsIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQuICovXFxuIFxcdFxcdEFTU0VSVF9FUShzZXRqbXAsIDEpO1xcbiBcXG5AQCAtMjYzLDYgKzI3NywyMCBAQCBzdGF0aWMgaW50IHByZXBhcmVfZmlsZShjb25zdCBjaGFyICpmbmFtZSwgdW5zaWduZWQgbG9uZyBzaXplKVxcbiBcXHRyZXR1cm4gZmQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcHJlcGFyZV9zaG1lbShjb25zdCBjaGFyICpmbmFtZSwgdW5zaWduZWQgbG9uZyBzaXplKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gbWVtZmRfY3JlYXRlKGZuYW1lLCAwKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRpZiAoZnRydW5jYXRlKGZkLCBzaXplKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGZkO1xcbit9XFxuK1xcbiAvKiBCb3Jyb3dlZCBmcm9tIG1tL2d1cF9sb25ndGVybS5jLiAqL1xcbiBzdGF0aWMgaW50IGdldF9mc190eXBlKGludCBmZClcXG4ge1xcbkBAIC0zNTUsNCArMzgzLDg4IEBAIFRFU1RfRihtZW1vcnlfZmFpbHVyZSwgZGlydHlfcGFnZWNhY2hlKVxcbiBcXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcXG4gfVxcbiBcXG4rVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBkaXJ0eV9zaG1lbSlcXG4re1xcbitcXHRpbnQgZmQ7XFxuK1xcdGNoYXIgKmFkZHI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRmZCA9IHByZXBhcmVfc2htZW0oXFxcInNobWVtLWZpbGVcXFwiLCBzZWxmLVxcdTAwM2VwYWdlX3NpemUpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcImZhaWxlZCB0byBvcGVuIHRlc3Qgc2htZW0tZmlsZS5cXFxcblxcXCIpO1xcbitcXG4rXFx0YWRkciA9IG1tYXAoMCwgc2VsZi1cXHUwMDNlcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHQgICAgTUFQX1NIQVJFRCwgZmQsIDApO1xcbitcXHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7XFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJtbWFwIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkuXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXHRtZW1zZXQoYWRkciwgMHhjZSwgc2VsZi1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFxuK1xcdHByZXBhcmUoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTtcXG4rXFxuK1xcdHJldCA9IHNpZ3NldGptcChzaWduYWxfam1wX2J1ZiwgMSk7XFxuK1xcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2ICFzZWxmLVxcdTAwM2VpbmplY3Rpb25fYXR0ZW1wdGVkKSB7XFxuK1xcdFxcdHNlbGYtXFx1MDAzZWluamVjdGlvbl9hdHRlbXB0ZWQgPSB0cnVlO1xcbitcXHRcXHRBU1NFUlRfRVEodmFyaWFudC1cXHUwMDNlaW5qZWN0KHNlbGYsIGFkZHIpLCAwKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZhcmlhbnQtXFx1MDAzZXR5cGUgPT0gTUFEVl9IQVJEKSB7XFxuK1xcdFxcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9IQVJEX0RJUlRZX1NITUVNLCByZXQpO1xcbitcXHRcXHRyZXQgPSBzaWdzZXRqbXAoc2lnbmFsX2ptcF9idWYsIDEpO1xcbitcXHRcXHRpZiAocmV0ID09IDApXFxuK1xcdFxcdFxcdEZPUkNFX1JFQUQoKmFkZHIpO1xcbitcXHRcXHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIFJFQURfRVJST1IsIHJldCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9TT0ZUX0RJUlRZX1NITUVNLCByZXQpO1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRVEobXVubWFwKGFkZHIsIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSksIDApO1xcbitcXG4rXFx0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XFxuK31cXG4rXFxuK1RFU1RfRihtZW1vcnlfZmFpbHVyZSwgY2xlYW5fc2htZW0pXFxuK3tcXG4rXFx0aW50IGZkO1xcbitcXHRjaGFyICphZGRyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZmQgPSBwcmVwYXJlX3NobWVtKFxcXCJzaG1lbS1maWxlXFxcIiwgc2VsZi1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJmYWlsZWQgdG8gb3BlbiB0ZXN0IHNobWVtLWZpbGUuXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGFkZHIgPSBtbWFwKDAsIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0ICAgIE1BUF9TSEFSRUQsIGZkLCAwKTtcXG4rXFx0aWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkge1xcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwibW1hcCBmYWlsZWQsIG5vdCBlbm91Z2ggbWVtb3J5LlxcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFx0Rk9SQ0VfUkVBRCgqYWRkcik7XFxuK1xcbitcXHRwcmVwYXJlKF9tZXRhZGF0YSwgc2VsZiwgYWRkcik7XFxuK1xcbitcXHRyZXQgPSBzaWdzZXRqbXAoc2lnbmFsX2ptcF9idWYsIDEpO1xcbitcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhc2VsZi1cXHUwMDNlaW5qZWN0aW9uX2F0dGVtcHRlZCkge1xcbitcXHRcXHRzZWxmLVxcdTAwM2VpbmplY3Rpb25fYXR0ZW1wdGVkID0gdHJ1ZTtcXG4rXFx0XFx0QVNTRVJUX0VRKHZhcmlhbnQtXFx1MDAzZWluamVjdChzZWxmLCBhZGRyKSwgMCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2YXJpYW50LVxcdTAwM2V0eXBlID09IE1BRFZfSEFSRCkge1xcbitcXHRcXHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfSEFSRF9DTEVBTl9TSE1FTSwgcmV0KTtcXG4rXFx0XFx0cmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTtcXG4rXFx0XFx0aWYgKHJldCA9PSAwKVxcbitcXHRcXHRcXHRGT1JDRV9SRUFEKCphZGRyKTtcXG4rXFx0XFx0Y2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBSRUFEX0VSUk9SLCByZXQpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBUZXN0IHRoZSBhZGRyZXNzIGFjY2Vzc2FiaWxpdHkgd2l0aG91dCBjaGVja19tZW1vcnkoKS4gKi9cXG4rXFx0XFx0Rk9SQ0VfUkVBRCgqYWRkcik7XFxuK1xcdFxcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9TT0ZUX0NMRUFOX1NITUVNLCByZXQpO1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRVEobXVubWFwKGFkZHIsIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSksIDApO1xcbitcXG4rXFx0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XFxuK31cXG4rXFxuIFRFU1RfSEFSTkVTU19NQUlOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjAxLjg3MzIxNjAzOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUwNDI0NDIwMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X2ZhaWx1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgZm9yIHNobWVtIHBhZ2VzIGJ5IHJldHVybmluZyBNRl9ERUxBWUVEIGluc3RlYWQgb2YgMCBpbiBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW8sIGFuZCB1cGRhdGVzIHRydW5jYXRlX2Vycm9yX2ZvbGlvIHRvIGhhbmRsZSB0aGlzIG5ldyByZXR1cm4gdmFsdWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIG9uIHNobWVtIG1hcHBpbmdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMzJhNzM2Mzk0ZGE5YTZlZDVhZmNmMzcwZWE2ZWIzZTdkYTNmMDNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMTk6NTA6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYWFmMTQ2MDhiMzBlMi4uYzdhMDBjN2JlMzY4ZSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC04NDcsMjQgKzg0NywyNSBAQCBzdGF0aWMgaW50IGtpbGxfYWNjZXNzaW5nX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBsb25nIHBmbixcbiB9XG4gXG4gLypcbi0gKiBNRl9JR05PUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCdlZC5cbisgKiBNRl9JR05PUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb24nZWQuXG4gICogQnV0IGl0IGNvdWxkIG5vdCBkbyBtb3JlIHRvIGlzb2xhdGUgdGhlIHBhZ2UgZnJvbSBiZWluZyBhY2Nlc3NlZCBhZ2FpbixcbiAgKiBub3IgZG9lcyBpdCBraWxsIHRoZSBwcm9jZXNzLiBUaGlzIGlzIGV4dHJlbWVseSByYXJlIGFuZCBvbmUgb2YgdGhlXG4gICogcG90ZW50aWFsIGNhdXNlcyBpcyB0aGF0IHRoZSBwYWdlIHN0YXRlIGhhcyBiZWVuIGNoYW5nZWQgZHVlIHRvXG4gICogdW5kZXJseWluZyByYWNlIGNvbmRpdGlvbi4gVGhpcyBpcyB0aGUgbW9zdCBzZXZlcmUgb3V0Y29tZXMuXG4gICpcbi0gKiBNRl9GQUlMRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbmVkJ2VkLlxuKyAqIE1GX0ZBSUxFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJ2VkLlxuICAqIEl0IHNob3VsZCBoYXZlIGtpbGxlZCB0aGUgcHJvY2VzcywgYnV0IGl0IGNhbid0IGlzb2xhdGUgdGhlIHBhZ2UsXG4gICogZHVlIHRvIGNvbmRpdGlvbnMgc3VjaCBhcyBleHRyYSBwaW4sIHVubWFwIGZhaWx1cmUsIGV0Yy4gQWNjZXNzaW5nXG4gICogdGhlIHBhZ2UgYWdhaW4gbWF5IHRyaWdnZXIgYW5vdGhlciBNQ0UgYW5kIHRoZSBwcm9jZXNzIHdpbGwgYmUga2lsbGVkXG4gICogYnkgdGhlIG0tZigpIGhhbmRsZXIgaW1tZWRpYXRlbHkuXG4gICpcbi0gKiBNRl9ERUxBWUVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCdlZC5cbi0gKiBUaGUgcGFnZSBpcyB1bm1hcHBlZCwgYW5kIGlzIHJlbW92ZWQgZnJvbSB0aGUgTFJVIG9yIGZpbGUgbWFwcGluZy5cbi0gKiBBbiBhdHRlbXB0IHRvIGFjY2VzcyB0aGUgcGFnZSBhZ2FpbiB3aWxsIHRyaWdnZXIgcGFnZSBmYXVsdCBhbmQgdGhlXG4tICogUEYgaGFuZGxlciB3aWxsIGtpbGwgdGhlIHByb2Nlc3MuXG4rICogTUZfREVMQVlFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJ2VkLlxuKyAqIEl0IG1lYW5zIHRoZSBwYWdlIHdhcyB1bm1hcHBlZCBhbmQgcGFydGlhbGx5IGlzb2xhdGVkIChlLmcuIHJlbW92ZWQgZnJvbVxuKyAqIGZpbGUgbWFwcGluZyBvciB0aGUgTFJVKSBidXQgZnVsbCBjbGVhbnVwIGlzIGRlZmVycmVkIChlLmcuIHRoZSBtZXRhZGF0YVxuKyAqIGZvciB0aGUgbWVtb3J5LCBhcyBpbiBzdHJ1Y3QgcGFnZS9mb2xpbywgaXMgc3RpbGwgcmVmZXJlbmNlZCkuIEFueVxuKyAqIGZ1cnRoZXIgYWNjZXNzIHRvIHRoZSBwYWdlIHdpbGwgcmVzdWx0IGluIHRoZSBwcm9jZXNzIGJlaW5nIGtpbGxlZC5cbiAgKlxuLSAqIE1GX1JFQ09WRVJFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uZWQnZWQuXG4rICogTUZfUkVDT1ZFUkVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb24nZWQuXG4gICogVGhlIHBhZ2UgaGFzIGJlZW4gY29tcGxldGVseSBpc29sYXRlZCwgdGhhdCBpcywgdW5tYXBwZWQsIHRha2VuIG91dCBvZlxuICAqIHRoZSBidWRkeSBzeXN0ZW0sIG9yIGhvbGUtcHVuY2hlZCBvdXQgb2YgdGhlIGZpbGUgbWFwcGluZy5cbiAgKi9cbkBAIC05MzgsMTAgKzkzOSwxMiBAQCBzdGF0aWMgaW50IHRydW5jYXRlX2Vycm9yX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0aWYgKG1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZXJyb3JfcmVtb3ZlX2ZvbGlvKSB7XG4gXHRcdGludCBlcnIgPSBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWVycm9yX3JlbW92ZV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4gXG4tXHRcdGlmIChlcnIgIT0gMClcbitcdFx0aWYgKGVyciA9PSBNRl9ERUxBWUVEKVxuK1x0XHRcdHJldCA9IGVycjtcbitcdFx0ZWxzZSBpZiAoZXJyICE9IDApXG4gXHRcdFx0cHJfaW5mbyhcIiUjbHg6IEZhaWxlZCB0byBwdW5jaCBwYWdlOiAlZFxcblwiLCBwZm4sIGVycik7XG4gXHRcdGVsc2UgaWYgKCFmaWxlbWFwX3JlbGVhc2VfZm9saW8oZm9saW8sIEdGUF9OT0lPKSlcbi1cdFx0XHRwcl9pbmZvKFwiJSNseDogZmFpbGVkIHRvIHJlbGVhc2UgYnVmZmVyc1xcblwiLCBwZm4pO1xuK1x0XHRcdHByX2luZm8oXCIlI2x4OiBGYWlsZWQgdG8gcmVsZWFzZSBidWZmZXJzXFxuXCIsIHBmbik7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXQgPSBNRl9SRUNPVkVSRUQ7XG4gXHR9IGVsc2Uge1xuQEAgLTEwMzYsMTggKzEwMzksMTQgQEAgc3RhdGljIGludCBtZV9wYWdlY2FjaGVfY2xlYW4oc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogVGhlIHNobWVtIHBhZ2UgaXMga2VwdCBpbiBwYWdlIGNhY2hlIGluc3RlYWQgb2YgdHJ1bmNhdGluZ1xuLVx0ICogc28gaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhbiBleHRyYSByZWZjb3VudCBhZnRlciBlcnJvci1oYW5kbGluZy5cbi1cdCAqL1xuLVx0ZXh0cmFfcGlucyA9IHNobWVtX21hcHBpbmcobWFwcGluZyk7XG4tXG4gXHQvKlxuIFx0ICogVHJ1bmNhdGlvbiBpcyBhIGJpdCB0cmlja3kuIEVuYWJsZSBpdCBwZXIgZmlsZSBzeXN0ZW0gZm9yIG5vdy5cbiBcdCAqXG4gXHQgKiBPcGVuOiB0byB0YWtlIGlfcndzZW0gb3Igbm90IGZvciB0aGlzPyBSaWdodCBub3cgd2UgZG9uJ3QuXG4gXHQgKi9cbiBcdHJldCA9IHRydW5jYXRlX2Vycm9yX2ZvbGlvKGZvbGlvLCBwYWdlX3RvX3BmbihwKSwgbWFwcGluZyk7XG4rXG4rXHRleHRyYV9waW5zID0gcmV0ID09IE1GX0RFTEFZRUQ7XG4gXHRpZiAoaGFzX2V4dHJhX3JlZmNvdW50KHBzLCBwLCBleHRyYV9waW5zKSlcbiBcdFx0cmV0ID0gTUZfRkFJTEVEO1xuIFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA3NzRmNGIxOGZmNWM2Li5kNmY5NDc4NmU3MDllIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTUxMzYsNyArNTEzNiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzaG1lbV9kZXN0cm95X2lub2RlY2FjaGUodm9pZClcbiBzdGF0aWMgaW50IHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRcdCAgIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gTUZfREVMQVlFRDtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc2htZW1fYW9wcyA9IHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggMWE1YTMyZTIyY2NlMi4uNWIyNmYwYzQ0NjY0NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0yMCw2ICsyMCwxMCBAQFxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiBcbisjaWZuZGVmIGZhbGx0aHJvdWdoXG4rIyBkZWZpbmUgZmFsbHRocm91Z2ggX19hdHRyaWJ1dGVfXygoX19mYWxsdGhyb3VnaF9fKSlcbisjZW5kaWZcbitcbiBlbnVtIGluamVjdF90eXBlIHtcbiBcdE1BRFZfSEFSRCxcbiBcdE1BRFZfU09GVCxcbkBAIC0yOSw5ICszMywxNCBAQCBlbnVtIHJlc3VsdF90eXBlIHtcbiBcdE1BRFZfSEFSRF9BTk9OLFxuIFx0TUFEVl9IQVJEX0NMRUFOX1BBR0VDQUNIRSxcbiBcdE1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEUsXG4rXHRNQURWX0hBUkRfQ0xFQU5fU0hNRU0sXG4rXHRNQURWX0hBUkRfRElSVFlfU0hNRU0sXG4gXHRNQURWX1NPRlRfQU5PTixcbiBcdE1BRFZfU09GVF9DTEVBTl9QQUdFQ0FDSEUsXG4gXHRNQURWX1NPRlRfRElSVFlfUEFHRUNBQ0hFLFxuK1x0TUFEVl9TT0ZUX0NMRUFOX1NITUVNLFxuK1x0TUFEVl9TT0ZUX0RJUlRZX1NITUVNLFxuK1x0UkVBRF9FUlJPUixcbiB9O1xuIFxuIHN0YXRpYyBqbXBfYnVmIHNpZ25hbF9qbXBfYnVmO1xuQEAgLTE1NywxNyArMTY2LDIyIEBAIHN0YXRpYyB2b2lkIGNoZWNrKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgRklYVFVSRV9EQVRBKG1lbW9yeV9mYWlsdXJlXG4gXHRjYXNlIE1BRFZfSEFSRF9DTEVBTl9QQUdFQ0FDSEU6XG4gXHRjYXNlIE1BRFZfU09GVF9DTEVBTl9QQUdFQ0FDSEU6XG4gXHRjYXNlIE1BRFZfU09GVF9ESVJUWV9QQUdFQ0FDSEU6XG4tXHRcdC8qIEl0IGlzIG5vdCBleHBlY3RlZCB0byByZWNlaXZlIGEgU0lHQlVTIHNpZ25hbC4gKi9cbi1cdFx0QVNTRVJUX0VRKHNldGptcCwgMCk7XG4tXG4rXHRjYXNlIE1BRFZfU09GVF9ESVJUWV9TSE1FTTpcbiBcdFx0LyogVGhlIHBhZ2UgY29udGVudCBzaG91bGQgcmVtYWluIHVuY2hhbmdlZC4gKi9cbiBcdFx0QVNTRVJUX1RSVUUoY2hlY2tfbWVtb3J5KHZhZGRyLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSkpO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgTUFEVl9IQVJEX0NMRUFOX1NITUVNOlxuK1x0Y2FzZSBNQURWX1NPRlRfQ0xFQU5fU0hNRU06XG4rXHRcdC8qIEl0IGlzIG5vdCBleHBlY3RlZCB0byByZWNlaXZlIGEgU0lHQlVTIHNpZ25hbC4gKi9cbitcdFx0QVNTRVJUX0VRKHNldGptcCwgMCk7XG4gXG4gXHRcdC8qIFRoZSBiYWNraW5nIHBmbiBvZiBhZGRyIHNob3VsZCBoYXZlIGNoYW5nZWQuICovXG4gXHRcdEFTU0VSVF9ORShwYWdlbWFwX2dldF9wZm4oc2VsZi1cdTAwM2VwYWdlbWFwX2ZkLCB2YWRkciksIHNlbGYtXHUwMDNlcGZuKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE1BRFZfSEFSRF9BTk9OOlxuIFx0Y2FzZSBNQURWX0hBUkRfRElSVFlfUEFHRUNBQ0hFOlxuK1x0Y2FzZSBNQURWX0hBUkRfRElSVFlfU0hNRU06XG4rXHRjYXNlIFJFQURfRVJST1I6XG4gXHRcdC8qIFRoZSBTSUdCVVMgc2lnbmFsIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQuICovXG4gXHRcdEFTU0VSVF9FUShzZXRqbXAsIDEpO1xuIFxuQEAgLTI2Myw2ICsyNzcsMjAgQEAgc3RhdGljIGludCBwcmVwYXJlX2ZpbGUoY29uc3QgY2hhciAqZm5hbWUsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiBcdHJldHVybiBmZDtcbiB9XG4gXG4rc3RhdGljIGludCBwcmVwYXJlX3NobWVtKGNvbnN0IGNoYXIgKmZuYW1lLCB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0aW50IGZkO1xuK1xuK1x0ZmQgPSBtZW1mZF9jcmVhdGUoZm5hbWUsIDApO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAoZnRydW5jYXRlKGZkLCBzaXplKSBcdTAwM2MgMCkge1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcdHJldHVybiBmZDtcbit9XG4rXG4gLyogQm9ycm93ZWQgZnJvbSBtbS9ndXBfbG9uZ3Rlcm0uYy4gKi9cbiBzdGF0aWMgaW50IGdldF9mc190eXBlKGludCBmZClcbiB7XG5AQCAtMzU1LDQgKzM4Myw4OCBAQCBURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGRpcnR5X3BhZ2VjYWNoZSlcbiBcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuIH1cbiBcbitURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGRpcnR5X3NobWVtKVxuK3tcbitcdGludCBmZDtcbitcdGNoYXIgKmFkZHI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZmQgPSBwcmVwYXJlX3NobWVtKFwic2htZW0tZmlsZVwiLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdFNLSVAocmV0dXJuLCBcImZhaWxlZCB0byBvcGVuIHRlc3Qgc2htZW0tZmlsZS5cXG5cIik7XG4rXG4rXHRhZGRyID0gbW1hcCgwLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgIE1BUF9TSEFSRUQsIGZkLCAwKTtcbitcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHtcbitcdFx0Y2xvc2UoZmQpO1xuK1x0XHRTS0lQKHJldHVybiwgXCJtbWFwIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkuXFxuXCIpO1xuK1x0fVxuK1x0bWVtc2V0KGFkZHIsIDB4Y2UsIHNlbGYtXHUwMDNlcGFnZV9zaXplKTtcbitcbitcdHByZXBhcmUoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTtcbitcbitcdHJldCA9IHNpZ3NldGptcChzaWduYWxfam1wX2J1ZiwgMSk7XG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIXNlbGYtXHUwMDNlaW5qZWN0aW9uX2F0dGVtcHRlZCkge1xuK1x0XHRzZWxmLVx1MDAzZWluamVjdGlvbl9hdHRlbXB0ZWQgPSB0cnVlO1xuK1x0XHRBU1NFUlRfRVEodmFyaWFudC1cdTAwM2VpbmplY3Qoc2VsZiwgYWRkciksIDApO1xuK1x0fVxuK1xuK1x0aWYgKHZhcmlhbnQtXHUwMDNldHlwZSA9PSBNQURWX0hBUkQpIHtcbitcdFx0Y2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBNQURWX0hBUkRfRElSVFlfU0hNRU0sIHJldCk7XG4rXHRcdHJldCA9IHNpZ3NldGptcChzaWduYWxfam1wX2J1ZiwgMSk7XG4rXHRcdGlmIChyZXQgPT0gMClcbitcdFx0XHRGT1JDRV9SRUFEKCphZGRyKTtcbitcdFx0Y2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBSRUFEX0VSUk9SLCByZXQpO1xuK1x0fSBlbHNlIHtcbitcdFx0Y2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBNQURWX1NPRlRfRElSVFlfU0hNRU0sIHJldCk7XG4rXHR9XG4rXG4rXHRBU1NFUlRfRVEobXVubWFwKGFkZHIsIHNlbGYtXHUwMDNlcGFnZV9zaXplKSwgMCk7XG4rXG4rXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbit9XG4rXG4rVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBjbGVhbl9zaG1lbSlcbit7XG4rXHRpbnQgZmQ7XG4rXHRjaGFyICphZGRyO1xuK1x0aW50IHJldDtcbitcbitcdGZkID0gcHJlcGFyZV9zaG1lbShcInNobWVtLWZpbGVcIiwgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJmYWlsZWQgdG8gb3BlbiB0ZXN0IHNobWVtLWZpbGUuXFxuXCIpO1xuK1xuK1x0YWRkciA9IG1tYXAoMCwgc2VsZi1cdTAwM2VwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdCAgICBNQVBfU0hBUkVELCBmZCwgMCk7XG4rXHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0U0tJUChyZXR1cm4sIFwibW1hcCBmYWlsZWQsIG5vdCBlbm91Z2ggbWVtb3J5LlxcblwiKTtcbitcdH1cbitcdEZPUkNFX1JFQUQoKmFkZHIpO1xuK1xuK1x0cHJlcGFyZShfbWV0YWRhdGEsIHNlbGYsIGFkZHIpO1xuK1xuK1x0cmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTtcbitcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhc2VsZi1cdTAwM2VpbmplY3Rpb25fYXR0ZW1wdGVkKSB7XG4rXHRcdHNlbGYtXHUwMDNlaW5qZWN0aW9uX2F0dGVtcHRlZCA9IHRydWU7XG4rXHRcdEFTU0VSVF9FUSh2YXJpYW50LVx1MDAzZWluamVjdChzZWxmLCBhZGRyKSwgMCk7XG4rXHR9XG4rXG4rXHRpZiAodmFyaWFudC1cdTAwM2V0eXBlID09IE1BRFZfSEFSRCkge1xuK1x0XHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfSEFSRF9DTEVBTl9TSE1FTSwgcmV0KTtcbitcdFx0cmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTtcbitcdFx0aWYgKHJldCA9PSAwKVxuK1x0XHRcdEZPUkNFX1JFQUQoKmFkZHIpO1xuK1x0XHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIFJFQURfRVJST1IsIHJldCk7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBUZXN0IHRoZSBhZGRyZXNzIGFjY2Vzc2FiaWxpdHkgd2l0aG91dCBjaGVja19tZW1vcnkoKS4gKi9cbitcdFx0Rk9SQ0VfUkVBRCgqYWRkcik7XG4rXHRcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9TT0ZUX0NMRUFOX1NITUVNLCByZXQpO1xuK1x0fVxuK1xuK1x0QVNTRVJUX0VRKG11bm1hcChhZGRyLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSksIDApO1xuK1xuK1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4rfVxuK1xuIFRFU1RfSEFSTkVTU19NQUlOXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDowMS44NzMyMTc0MDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTc3OTk1MzY0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBSZWxhdGVkIHRvIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgc29tZSBjcml0aWNhbCBjb2RlOiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGBtbS9zaG1lbS5jYCwgYW5kIGEgc2VsZnRlc3QgZmlsZS4gVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3Q7IGFueXRoaW5nIGRlYWxpbmcgd2l0aCBtZW1vcnkgZmFpbHVyZXMgaXMgc2Vuc2l0aXZlLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IHRoZSBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCBmdW5jdGlvbiBpbiBgbW0vc2htZW0uY2AgcmVwb3J0cyBpdHMgb3V0Y29tZS4gSW5zdGVhZCBvZiByZXR1cm5pbmcgMCAoc3VjY2Vzcywgb3IgYXQgbGVhc3Qgbm8gaW1tZWRpYXRlIGVycm9yKSwgaXQncyBub3cgcmV0dXJuaW5nIGBNRl9ERUxBWUVEYC4gVGhpcyBzZWVtcyBsaWtlIGEgc2lnbmFsIHRoYXQgdGhlIHJlbW92YWwgaXNuJ3QgKmltbWVkaWF0ZWx5KiBjb21wbGV0ZSwgcGVyaGFwcyBkdWUgdG8gc29tZSBkZWZlcnJlZCBhY3Rpb24uXG5cblRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGB0cnVuY2F0ZV9lcnJvcl9mb2xpb2AgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIG5lZWRzIHRvICpoYW5kbGUqIHRoaXMgYE1GX0RFTEFZRURgIHJldHVybiB2YWx1ZS4gU3BlY2lmaWNhbGx5LCB0aGVyZSdzIGxvZ2ljIGFkZGVkIHRvIGNoZWNrIGZvciB0aGF0IHJldHVybiBjb2RlIGFuZCBhY3QgYWNjb3JkaW5nbHkuIFRoZW4sIHdlIGhhdmUgYW4gdXBkYXRlIHRvIGBtZV9wYWdlY2FjaGVfY2xlYW5gIHRvIGRlYWwgd2l0aCBgcmV0ID09IE1GX0RFTEFZRURgIGZvciBgZXh0cmFfcGluc2AuXG5cbkxldCdzIGRpZyBpbi4gYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgaXMgYW4gYWRkcmVzcyBzcGFjZSBvcGVyYXRpb24sIHNvIHRoaXMgbG9va3MgbGlrZSBrZXJuZWwgbG9naWMuIE1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBNQURWX0hXUE9JU09OIGFuZCBoYXJkd2FyZSBNQ0VzIGFyZSBrZXkgdHJpZ2dlcmluZyBtZWNoYW5pc21zLlxuXG5JIG5lZWQgdG8gY29uZmlybSB3aGF0J3MgaGFwcGVuaW5nIGluIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gLiBPa2F5LCB0aGUgY29kZSBqdXN0IHJldHVybnMgYE1GX0RFTEFZRURgLiBTdHJhaWdodGZvcndhcmQuIFRoaXMgdHJpZ2dlcnMgdGhlIG5ldyBgTUZfREVMQVlFRGAgaGFuZGxpbmcgaW4gYHRydW5jYXRlX2Vycm9yX2ZvbGlvYC4gVGhlIGNvZGUgY2hlY2tzIGlmIGBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWVycm9yX3JlbW92ZV9mb2xpb2AgaXMgZGVmaW5lZCwgY2FsbHMgaXQsIGFuZCB0aGVuIGhhbmRsZXMgdGhlIHJldHVybiB2YWx1ZSAoaW5jbHVkaW5nIGBNRl9ERUxBWUVEYCkuIEl0IHNlZW1zIGxpa2Ugd2UncmUgZGVmZXJyaW5nIHRoZSBhY3R1YWwgcGFnZSByZW1vdmFsIGluIGBzaG1lbWAuXG5cbmBtZV9wYWdlY2FjaGVfY2xlYW5gIGlzIHdoZXJlIHRoaW5ncyBhcmUgc3RhcnRpbmcgdG8gZ2V0IGludGVyZXN0aW5nLiBUaGUgY29kZSBjYWxscyBgdHJ1bmNhdGVfZXJyb3JfZm9saW9gLCBhbmQgdGhlbiBjaGVja3MgZm9yIGByZXQgPT0gTUZfREVMQVlFRGAuIElmIGl0IGdldHMgYSBkZWxheWVkIHJldHVybiwgaXQgc2V0cyBgZXh0cmFfcGlucyA9IHRydWVgLiBTbyB3ZSdyZSBlc3NlbnRpYWxseSBzYXlpbmcsIFwiSGV5LCB3ZSdyZSBub3QgZG9uZSB3aXRoIHRoaXMgcGFnZSB5ZXQ7IGtlZXAgaXQgcGlubmVkLlwiXG5cblRoaXMgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgbWVfcGFnZWNhY2hlX2NsZWFuYCwgYHRydW5jYXRlX2Vycm9yX2ZvbGlvYCwgYW5kIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gLlxuXG5Ob3csIHdhaXQgYSBzZWNvbmQuLi4gYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgaXMgKnN0YXRpYyouIEJ1dCBpdCdzIGFuIEFQSSBlbnRyeXBvaW50IGZvciBgZXJyb3JfcmVtb3ZlX2ZvbGlvYC4gT2theSwgaXQncyBhc3NpZ25lZCB0byBgc2htZW1fYW9wcy5lcnJvcl9yZW1vdmVfZm9saW9gLiBGaW5lLlxuXG5MZXQncyBqdXN0IGNvbmZpcm0gYHRydW5jYXRlX2Vycm9yX2ZvbGlvYCBpcyBhbHNvIHN0YXRpYy4gWXVwLCBpdCBpcy4gQW5kIGBtZV9wYWdlY2FjaGVfY2xlYW5gIHRvby4gQWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gY2hlY2sgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFnYWluLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBoZXJlLiBUaGUgbWFpbiBvbmUgaXMgYG1lbW9yeV9mYWlsdXJlYC4gT2theSwgbGV0J3Mgc2VhcmNoIGZvciB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODk0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjEzLjY1MzE3NDY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MDIxODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgbWVtb3J5X2ZhaWx1cmVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9MjMxOT1zdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzg0LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjM4NTppbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzODYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDoxMy43MTcyMDE2NTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODA2NDE1MzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkNvbnNpZGVyaW5nIE1lbW9yeSBNYW5hZ2VtZW50IFN0cmF0ZWdpZXMqKlxuXG5Pa2F5LCBzbyBgbWVtb3J5X2ZhaWx1cmVgIGlzbid0IGEgc3RhdGljIGNvbmNlcHQsIHRoYXQncyB0aGUgZmlyc3QgdGhpbmcgdG8gbm90ZS4gTm93IEknbSBzdGFydGluZyB0byB0aGluayBhYm91dCBhbHRlcm5hdGl2ZXMgb3IgcmVsYXRlZCBpZGVhcyBhbmQgaG93IHRoZXkgcGxheSBpbnRvIHRoaXMuIEknbSB3b25kZXJpbmcgaWYgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBtaWdodCBiZSByZWxldmFudC4gSXMgaXQgYSBwb3RlbnRpYWwgc29sdXRpb24/IERvZXMgaXQgcHJvdmlkZSBhIGNvbXBsZW1lbnRhcnkgYXBwcm9hY2g/IE9yIGNvdWxkIGl0IGJlIGEgcG90ZW50aWFsIGNvdW50ZXItaW5kaWNhdGlvbj8gSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggaG93IHRoZXNlIHR3byBjb25jZXB0cyBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc2NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjE2LjUyMzYxOTM2MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDI5NDI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2luamVjdF9lcnJvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTEzMzg9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNDQ2LSAqL1xcbm1tL21hZHZpc2UuYzoxNDQ3OnN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTE0NDgte1xcbi0tXFxubW0vbWFkdmlzZS5jPTE0OTI9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTUwNC1cXG5tbS9tYWR2aXNlLmM6MTUwNTpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbm1tL21hZHZpc2UuYy0xNTA2LXtcXG4tLVxcbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE4OTYtXFx0XFx0cmFuZ2UtXFx1MDAzZWVuZCA9IHN0YXJ0ICsgbGVuX2luO1xcbm1tL21hZHZpc2UuYzoxODk3OlxcdFxcdHJldHVybiBtYWR2aXNlX2luamVjdF9lcnJvcihtYWR2X2JlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmMtMTg5OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjE2LjYxNzkxOTI5MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTA0MTU4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBGdW5jdGlvbnMgaW4gTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKlxuXG5SaWdodCwgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIE5vdywgbGV0J3Mgc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBoYW5naW5nIGFyb3VuZCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBvdGhlciwgcGVyaGFwcyBtb3JlIGdsb2JhbGx5IGFjY2Vzc2libGUsIHRvb2xzIGluIHRoYXQgZmlsZSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIGVycm9yIGluamVjdGlvbiwgb3IgbW9yZSBnZW5lcmFsbHksIG1lbW9yeSBmYXVsdCBoYW5kbGluZy4gRGlnZ2luZyBpbnRvIHRoaXMgZmlsZSBpcyBvZnRlbiBrZXkgdG8gZGVidWdnaW5nIG1lbW9yeS1yZWxhdGVkIGlzc3VlcywgYW5kIGZpbmRpbmcgcmV1c2FibGUsIG5vbi1zdGF0aWMgZnVuY3Rpb25hbGl0eSBjb3VsZCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHRzIG9yIGJ1aWxkaW5nIGJsb2NrcyBmb3IgbXkgb3duIHdvcmsuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBzaW1pbGFyIGNvZGUgc3RydWN0dXJlcyBvZnRlbiBleGlzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIHNvbWUgdGhhdCBtaWdodCBiZSBvZiB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNTcsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDoxOS45MjgzMzc4NjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1NDQyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfMC05XSsgW2EtekEtWl8wLTldK1xcXFwoLipcXFxcKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9ODI9c3RhdGljIGJvb2wgaHdfbWVtb3J5X2ZhaWx1cmUgX19yZWFkX21vc3RseTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTgzLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6ODQ6c3RhdGljIERFRklORV9NVVRFWChtZl9tdXRleCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy04NS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjg2OnZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbilcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTg3LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtOTEtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzo5Mjp2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTkzLXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTA0PXN0YXRpYyBzc2l6ZV90IF9uYW1lIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFx0XFx0XFx0XFxcXFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMTEtfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjExMjpzdGF0aWMgREVWSUNFX0FUVFJfUk8oX25hbWUpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMTMtXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE3Mz1zdGF0aWMgc3RydWN0IHJiX3Jvb3RfY2FjaGVkIHBmbl9zcGFjZV9pdHJlZSA9IFJCX1JPT1RfQ0FDSEVEO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTc0LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTc1OnN0YXRpYyBERUZJTkVfTVVURVgocGZuX3NwYWNlX2xvY2spO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTc2LVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMjM9c3RhdGljIGh3cG9pc29uX2ZpbHRlcl9mdW5jX3QgX19yY3UgKmh3cG9pc29uX2ZpbHRlcl9mdW5jIF9fcmVhZF9tb3N0bHk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjQtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMjU6dm9pZCBod3BvaXNvbl9maWx0ZXJfcmVnaXN0ZXIoaHdwb2lzb25fZmlsdGVyX2Z1bmNfdCAqZmlsdGVyKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjI2LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjI5PUVYUE9SVF9TWU1CT0xfR1BMKGh3cG9pc29uX2ZpbHRlcl9yZWdpc3Rlcik7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzAtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMzE6dm9pZCBod3BvaXNvbl9maWx0ZXJfdW5yZWdpc3Rlcih2b2lkKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjMyLXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjg2PXN0YXRpYyBpbnQga2lsbF9wcm9jKHN0cnVjdCB0b19raWxsICp0aywgdW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMzE2LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MzE3OnZvaWQgc2hha2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTMxOC17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTEzMTU9c3RhdGljIGlubGluZSBib29sIFBhZ2VIV1BvaXNvblRha2VuT2ZmKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzE5LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTMyMDp2b2lkIFNldFBhZ2VIV1BvaXNvblRha2VuT2ZmKHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTMyMS17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMjQtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMzI1OnZvaWQgQ2xlYXJQYWdlSFdQb2lzb25UYWtlbk9mZihzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMjYte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNTQ5PXN0YXRpYyBpbnQgZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE1NjYtICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNTY3OmludCB1bm1hcF9wb2lzb25lZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBtdXN0X2tpbGwpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNTY4LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTg3NT1zdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2xpc3RfaGVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODc5LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg4MDpib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg4MS17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE5ODM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDAxLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjAwMjp2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwMDMte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMjEyPXN0YXRpYyB2b2lkIGtpbGxfcHJvY3Nfbm93KHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjIzLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjIyNDppbnQgcmVnaXN0ZXJfcGZuX2FkZHJlc3Nfc3BhY2Uoc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjI1LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjI0MD1FWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9wZm5fYWRkcmVzc19zcGFjZSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjQxLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjI0Mjp2b2lkIHVucmVnaXN0ZXJfcGZuX2FkZHJlc3Nfc3BhY2Uoc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjQzLXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjMxOT1zdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzg0LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjM4NTppbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzODYte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNjI4PXN0cnVjdCBtZW1vcnlfZmFpbHVyZV9jcHUge1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjM0LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjYzNTpzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IG1lbW9yeV9mYWlsdXJlX2NwdSwgbWVtb3J5X2ZhaWx1cmVfY3B1KTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MzYtXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NTItICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjUzOnZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NTQte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzEzPWNvcmVfaW5pdGNhbGwobWVtb3J5X2ZhaWx1cmVfaW5pdCk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MzQtICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzM1OmludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzM2LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjg0OD1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk2NS0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI5NjY6aW50IHNvZnRfb2ZmbGluZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTY3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTA6MTkuOTc1ODg2OTQ3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1NzQ4MTM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IFBvaXNvbmluZyBUZWNobmlxdWVzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMgbWVtb3J5IHBvaXNvbmluZyBzdHVmZi4gTG9va3MgbGlrZSBgbWVtb3J5X2ZhaWx1cmVgLCBgdW5wb2lzb25fbWVtb3J5YCwgYW5kIGBzb2Z0X29mZmxpbmVfcGFnZWAgYXJlIHRoZSBvYnZpb3VzIHBsYWNlcyB0byBzdGFydCBkaWdnaW5nLiBHb29kIGVudHJ5IHBvaW50cywgZm9yIHN1cmUuIEFoLCBhbmQgaGVyZSBpdCBpczogYG1hZHZpc2VgIHdpdGggYE1BRFZfSFdQT0lTT05gIGlzIHRoZSBtYWluIG1ldGhvZCB0byB0cmlnZ2VyIHRoaXMgZnJvbSB1c2Vyc3BhY2UuIE5vdywgd2FpdCBhIHNlY29uZC4uLiBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGdldHMgY2FsbGVkIGZyb20gYG1hZHZpc2VfZG9fYmVoYXZpb3JgIHdoZW4gdGhlIGBtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yYCBpcyBlaXRoZXIgYE1BRFZfSFdQT0lTT05gIG9yIGBNQURWX1NPRlRfT0ZGTElORWAuIFRoYXQncyB0aGUgY29ubmVjdGlvbiBJIHdhcyBsb29raW5nIGZvci4gUmlnaHQsIGxldCdzIGhlYWQgb3ZlciB0byBgbW0vbWFkdmlzZS5jYCBhbmQgY2hlY2sgb3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgTUFEVl9IV1BPSVNPTmAuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgc2hvdWxkIGJlIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE5NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDoyMy45MzMzNzEzMDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjMwMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1BRFZfSFdQT0lTT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0OTQtXFx0c3dpdGNoIChtYWR2X2JlaGF2aW9yLVxcdTAwM2ViZWhhdmlvcikge1xcbm1tL21hZHZpc2UuYzoxNDk1OlxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmMtMTQ5Ni1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbi0tXFxubW0vbWFkdmlzZS5jPTE1MTg9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU1MS1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbm1tL21hZHZpc2UuYzoxNTUyOlxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmMtMTU1My0jZW5kaWZcXG4tLVxcbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE5NDMtICogIE1BRFZfS0VFUE9ORk9SSyAtIHVuZG8gdGhlIGVmZmVjdCBvZiBNQURWX1dJUEVPTkZPUktcXG5tbS9tYWR2aXNlLmM6MTk0NDogKiAgTUFEVl9IV1BPSVNPTiAtIHRyaWdnZXIgbWVtb3J5IGVycm9yIGhhbmRsZXIgYXMgaWYgdGhlIGdpdmVuIG1lbW9yeSByYW5nZVxcbm1tL21hZHZpc2UuYy0xOTQ1LSAqXFx0XFx0d2VyZSBjb3JydXB0ZWQgYnkgdW5yZWNvdmVyYWJsZSBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTA6MjMuOTc5NjE3ODY4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMzgyMzExMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IEVycm9yIEluamVjdGlvbioqXG5cbk9rYXksIHNvIHRoZSBgbWFkdmlzZWAgd2l0aCBgTUFEVl9IV1BPSVNPTmAgcm91dGUgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgYXBwcm9hY2ggZm9yIHRyaWdnZXJpbmcgdGhpcyBtZW1vcnkgZXJyb3IgY29uZGl0aW9uLiBUaGF0J3MgdGhlIGVzdGFibGlzaGVkIG1ldGhvZC4gTm93LCB0aGUgdHJpY2sgaXMgcGlucG9pbnRpbmcgdGhlICpleGFjdCogZm9jdXMgc3ltYm9scyBmb3Igc3l6a2FsbGVyIHRvIHRhcmdldC5cblxuSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgYG1lbW9yeV9mYWlsdXJlYCwgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCAod2hpY2gsIGltcG9ydGFudGx5LCBjYWxscyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgKSwgb3IgZXZlbiBqdXN0IGZvY3VzaW5nIG9uIGBtZW1vcnlfZmFpbHVyZWAgZGlyZWN0bHkgYWxvbmdzaWRlIGBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW9gLiBJIHRob3VnaHQgbWF5YmUgZnV6emluZyBtaWdodCBieXBhc3Mgc3RhdGljIGlubGluaW5nLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgaXMgYWN0dWFsbHkgYW4gYWRkcmVzcyBzcGFjZSBvcGVyYXRpb24sIHNvIGl0ICpjYW4ndCogYmUgaW5saW5lZC4gQnV0IHdhaXQsIGl0J3Mgc3RhdGljISBUaGF0IG1pZ2h0IGJlIHByb2JsZW1hdGljIGZvciBzeXprYWxsZXIgaWYgaXQgZG9lc24ndCBoYXZlIGEgc3BlY2lmaWMsIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBJdCBpcyBhc3NpZ25lZCB0byBhIHN0cnVjdCwgd2hpY2ggbWVhbnMgaXRzIGFkZHJlc3MgaXMgZGVmaW5pdGVseSB0YWtlbiBhbmQgbm90IGlubGluZWQsIHdoaWNoIGdpdmVzIHVzIGEgdmFsaWQgc3ltYm9sIVxuXG5Ib3dldmVyLCB0aGUgaW5zdHJ1Y3Rpb25zIGNsZWFybHkgc2F5IHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuIFNvLCB0aGF0IHNldHRsZXMgaXQ7IGBtZW1vcnlfZmFpbHVyZWAgaXMgYSBnb29kIGNhbmRpZGF0ZSwgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LlxuXG5JJ20gbm93IHRoaW5raW5nIGFib3V0IGB0cnVuY2F0ZV9lcnJvcl9mb2xpb2AuIEl0J3Mgc3RhdGljLCBidXQgaXQncyBjYWxsZWQgZnJvbSBgbWVfcGFnZWNhY2hlX2NsZWFuYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSB0aGUgYHBhZ2VfYWN0aW9uYCBhcnJheS4gVGhpcyBpcyBhbiBpbnRlcmVzdGluZyBjb25uZWN0aW9uLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGBwYWdlX2FjdGlvbmAgYXJyYXkgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIHRvIHNlZSBpZiB0aGlzIGlzIGEgdmlhYmxlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTA6MzAuMTE3ODUyNzI3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU5MjY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX2FjdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9MTI4MD1zdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjk4LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTI5OTpzdGF0aWMgaW50IHBhZ2VfYWN0aW9uKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnAsXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzAwLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNjg0PXN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE3MDMtXFx0XFx0XFx0XFx0YnJlYWs7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNzA0OlxcdHJldHVybiBwYWdlX2FjdGlvbihwcywgcCwgcGZuKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE3MDUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDozMC4xNjc0NTAzODZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzODg3NjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQ29uZmlnIE9wdGlvbiBEaXZlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgYmVhcmluZ3MuIEJlZm9yZSBkaXZpbmcgaW50byB0aGUgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGNvZGUsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBSaWdodCwgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udHJvbHMgdGhlIGJlaGF2aW9yIEknbSBpbnRlcmVzdGVkIGluLCBiYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCBpcyBtb3N0IGxpa2VseSBgTUVNT1JZX0ZBSUxVUkVgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBzZXQgY29ycmVjdGx5IGFuZCBmaWd1cmUgb3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoYXQncyB0aGUgZmlyc3QgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gdG8gcGluIGRvd24gYmVmb3JlIEkgZXZlbiB0aGluayBhYm91dCB0b3VjaGluZyB0aGUgc291cmNlIGNvZGUgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc4MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjMzLjIwNjMyOTU4NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4ODc3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc0Nz1jb25maWcgREVGQVVMVF9NTUFQX01JTl9BRERSXFxuLS1cXG5tbS9LY29uZmlnLTc2NS1cXG5tbS9LY29uZmlnOjc2Njpjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzY3LVxcdGJvb2xcXG5tbS9LY29uZmlnLTc2OC1cXG5tbS9LY29uZmlnOjc2OTpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc3MC1cXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWc6NzcxOlxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzcyLVxcdGJvb2wgXFxcIkVuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTc4MD1jb25maWcgSFdQT0lTT05fSU5KRUNUXFxubW0vS2NvbmZpZy03ODEtXFx0dHJpc3RhdGUgXFxcIkhXUG9pc29uIHBhZ2VzIGluamVjdG9yXFxcIlxcbm1tL0tjb25maWc6NzgyOlxcdGRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgXFx1MDAyNlxcdTAwMjYgREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IFBST0NfRlNcXG5tbS9LY29uZmlnLTc4My1cXHRzZWxlY3QgUFJPQ19QQUdFX01PTklUT1JcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTA6MzMuMjU3MjI5NzY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzUzNTQ2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgYSBNZW1vcnkgRmFpbHVyZSBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSd2ZSBnb3QgYSBgTUVNT1JZX0ZBSUxVUkVgIGlzc3VlLCBhbmQgSSBpbW1lZGlhdGVseSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGNvZGUgdGhhdCBoYW5kbGVzIGl0IHJlc2lkZXMuIE9rYXksIEkgcmVjYWxsIHNlZWluZyBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCBtZW50aW9uZWQgc29tZXdoZXJlIHJlY2VudGx5IOKAkyB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBOb3csIHdoZXJlIHdhcyB0aGF0IGZ1bmN0aW9uIGRlZmluZWQgYWdhaW4/IEFoLCB5ZXMsIGl0J3MgaW4gYG1tL3NobWVtLmNgLiBCdXQgaXMgdGhhdCBmaWxlIGFsd2F5cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWw/IEl0IHdvdWxkIGJlIHRlcnJpYmxlIGlmIHdlIGVuZGVkIHVwIG5lZWRpbmcgc29tZXRoaW5nIHRoYXQgd2FzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3V0LiBMZXQgbWUgc2VlLCBgQ09ORklHX1NITUVNYCBpcyB1c3VhbGx5IGVuYWJsZWQgaW4gbW9zdCBjb25maWd1cmF0aW9ucywgc28gY2hhbmNlcyBhcmUsIHllcywgYHNobWVtLmNgIGlzIGdvaW5nIHRvIGJlIHByZXNlbnQuIE5vdywgYSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCBpdHNlbGYgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCdzIHdyYXBwZWQgaW4gYW4gYCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGJsb2NrLiBUaGlzIGlzIGNyaXRpY2FsLCBzaW5jZSBpZiBpdCdzIG5vdCwgd2UnbGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMgdG8gc2VlIGlmIHRoZSByZXF1aXJlZCBjb2RlIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDozNy4zOTI1ODc1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMTM2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NobWVtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2htZW0uYz01MTMwPXN0YXRpYyB2b2lkIF9faW5pdCBzaG1lbV9kZXN0cm95X2lub2RlY2FjaGUodm9pZClcXG4tLVxcbm1tL3NobWVtLmMtNTEzNS0vKiBLZWVwIHRoZSBwYWdlIGluIHBhZ2UgY2FjaGUgaW5zdGVhZCBvZiB0cnVuY2F0aW5nIGl0ICovXFxubW0vc2htZW0uYzo1MTM2OnN0YXRpYyBpbnQgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbm1tL3NobWVtLmMtNTEzNy1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc2htZW0uYz01MTQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHNobWVtX2FvcHMgPSB7XFxuLS1cXG5tbS9zaG1lbS5jLTUxNTAtI2VuZGlmXFxubW0vc2htZW0uYzo1MTUxOlxcdC5lcnJvcl9yZW1vdmVfZm9saW8gPSBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW8sXFxubW0vc2htZW0uYy01MTUyLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjM3LjQzODkwODk0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MDc5NDUxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBGYWlsdXJlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uIGlzIGhhbmRsZWQsIGFuZCBpdCBzZWVtcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBpc24ndCBkaXJlY3RseSB0aWVkIHRvIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gVGhhdCdzIG5vdCB0aGUgdHJpZ2dlciwgYnV0IHJhdGhlciwgYE1FTU9SWV9GQUlMVVJFYCBpcyB0aGUgcmVhbCBkZXBlbmRlbmN5LiBJdCBhcHBlYXJzIGBNRU1PUllfRkFJTFVSRWAgZW5hYmxlcyB0aGUgd2hvbGUgbWVjaGFuaXNtIGFuZCBpcyByZXF1aXJlZCB0byBwcm9wZXJseSB1c2UgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgLiBUaGlzIGlzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5JIHNob3VsZCB2ZXJpZnkgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGluZGlyZWN0bHkgcmVsYXRlIHRvIHRoaXMgc2NlbmFyaW8uIFRoZSBgSFdQT0lTT05fSU5KRUNUYCBjb25maWcgbWlnaHQgc2VlbSByZWxldmFudCBhdCBmaXJzdCBnbGFuY2UsIGJ1dCBpdCBhcHBlYXJzIHRoYXQgdGhlIGBtYWR2aXNlYCBjYWxsIHdpdGggYE1BRFZfSFdQT0lTT05gIGZ1bmN0aW9ucyBjb3JyZWN0bHkgd2hlbiBgTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQsIHdpdGhvdXQgZXhwbGljaXRseSBuZWVkaW5nIGBIV1BPSVNPTl9JTkpFQ1RgLiBTbywgYE1FTU9SWV9GQUlMVVJFYCBpcyB0aGUgcHJpbWFyeSBvbmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGBtbS9tYWR2aXNlLmNgIGZpbGUgYWdhaW4gdG8gY29uZmlybSBob3cgYE1BRFZfSFdQT0lTT05gIGlzIGhhbmRsZWQuIEl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzc5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjQyLjA0Njg1NzA4M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMDEwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFEVl9IV1BPSVNPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTE0OTI9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ5NC1cXHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yKSB7XFxubW0vbWFkdmlzZS5jOjE0OTU6XFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbm1tL21hZHZpc2UuYy0xNDk2LVxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxOD1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTUxLVxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxubW0vbWFkdmlzZS5jOjE1NTI6XFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbm1tL21hZHZpc2UuYy0xNTUzLSNlbmRpZlxcbi0tXFxubW0vbWFkdmlzZS5jPTE4ODc9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTk0My0gKiAgTUFEVl9LRUVQT05GT1JLIC0gdW5kbyB0aGUgZWZmZWN0IG9mIE1BRFZfV0lQRU9ORk9SS1xcbm1tL21hZHZpc2UuYzoxOTQ0OiAqICBNQURWX0hXUE9JU09OIC0gdHJpZ2dlciBtZW1vcnkgZXJyb3IgaGFuZGxlciBhcyBpZiB0aGUgZ2l2ZW4gbWVtb3J5IHJhbmdlXFxubW0vbWFkdmlzZS5jLTE5NDUtICpcXHRcXHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDo0Mi4wOTQwNzA4NjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4OTc3ODUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgbWFkdmlzZV9iZWhhdmlvcl92YWxpZGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBtYWR2aXNlX2JlaGF2aW9yX3ZhbGlkYCwgYW5kIHRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0J3MgYWxsIGNvbmRpdGlvbmFsIG9uIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gVGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBsb2dpYyByZXNpZGVzLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBiZWhhdmlvciB2YWxpZGF0aW9uIGlzIHNvbWVob3cgbW9kaWZpZWQsIG9yIHBvdGVudGlhbGx5IGV2ZW4gYnlwYXNzZWQsIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIGNvbmZpZ3VyZWQgdG8gc2ltdWxhdGUgb3IgaGFuZGxlIG1lbW9yeSBmYWlsdXJlcy5cIiBNeSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlIHZhbGlkaXR5IGNoZWNrcyBtaWdodCBiZSByZWxheGVkLCBwZXJoYXBzIGFsbG93aW5nIGNlcnRhaW4gYG1hZHZpc2VgIGhpbnRzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgcmVqZWN0ZWQgdG8gcGFzcyB0aHJvdWdoLCBvciBtYXliZSBldmVuIGltcGxlbWVudGluZyBtb3JlIGFnZ3Jlc3NpdmUgZXJyb3IgaGFuZGxpbmcgdG8gdGVzdCB0aGUgZmFpbHVyZSBtZWNoYW5pc21zLiBJdCBjb3VsZCBhbHNvIGludm9sdmUgYWxsb3dpbmcgY2FsbHMgaW4gY29udGV4dHMgd2hlcmUgaXQgd291bGQgbm9ybWFsbHkgYmUgZm9yYmlkZGVuLiBJJ2xsIG5lZWQgdG8gbG9vayBkZWVwZXIgaW50byB0aGUgY29kZSBicmFuY2hlcyB3aXRoaW4gdGhhdCBtYWNybyB0byBmdWxseSBncmFzcCB0aGUgbW9kaWZpY2F0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGdvYWwgaXMgdG8gbWFrZSB0aGUgc3lzdGVtIG1vcmUgcm9idXN0IHdoZW4gdW5kZXIgZHVyZXNzLiBUaGlzIHdvdWxkIGJlIHR5cGljYWwgZm9yIHRlc3RpbmcgZmFpbHVyZSBtb2RlcyBpbiBhIGNvbnRyb2xsZWQgbWFubmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUyMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjQ1LjY4Mzg1NTM5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwOTgxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01FTU9SWV9GQUlMVVJFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21hZHZpc2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MTMzOD1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0NDItXFxubW0vbWFkdmlzZS5jOjE0NDM6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbm1tL21hZHZpc2UuYy0xNDQ0LS8qXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxMD1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTE0LVxcbm1tL21hZHZpc2UuYzoxNTE1OiNlbmRpZlxcdC8qIENPTkZJR19NRU1PUllfRkFJTFVSRSAqL1xcbm1tL21hZHZpc2UuYy0xNTE2LVxcbi0tXFxubW0vbWFkdmlzZS5jPTE1MTg9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU0OS1cXHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxcbm1tL21hZHZpc2UuYzoxNTUwOiNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG5tbS9tYWR2aXNlLmMtMTU1MS1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDo0NS43MzI5NjM0MzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ4MjU1NzgyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgRmFpbHVyZSBQYXRjaCoqXG5cbkFscmlnaHQsIHllcCwgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZGVmaW5pdGVseSBhIGtleSBjb25maWd1cmF0aW9uIGhlcmUuIFRoaXMgcGF0Y2ggaXMgbWFraW5nIGEgcHJldHR5IGZvY3VzZWQgYnV0IGltcG9ydGFudCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gcmVzcG9uZHMgdG8gbWVtb3J5IGZhaWx1cmVzIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHNoYXJlZCBtZW1vcnkgKHNobWVtKSBhbmQgdG1wZnMgc3Vic3lzdGVtcy5cblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCBhbHRlcnMgdGhlIHJldHVybiB2YWx1ZSBvZiBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCB0byBgTUZfREVMQVlFRGAgaW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyAwLiBUaGF0J3MgYSBjcml0aWNhbCBhZGp1c3RtZW50LCBhbmQgaXQgY2FzY2FkZXMgYmVjYXVzZSBgdHJ1bmNhdGVfZXJyb3JfZm9saW9gIGlzIGFsc28gbW9kaWZpZWQgdG8gcHJvcGVybHkgaGFuZGxlIHRoaXMgbmV3IGBNRl9ERUxBWUVEYCByZXR1cm4uIEZ1bmN0aW9uYWxseSwgdGhpcyBpbXBhY3RzIGhvdyBtZW1vcnkgZmFpbHVyZXMgYXJlIGhhbmRsZWQgZm9yIHRob3NlIHNobWVtL3RtcGZzIHBhZ2VzLiBJdCdzIG5vdCBhIHN1cGVyZmljaWFsIGZpeDsgaXQncyBhIGRpcmVjdCBpbnRlcnZlbnRpb24gaW50byB0aGUgd2F5IHRoZSBzeXN0ZW0gZGVhbHMgd2l0aCB0aGVzZSBlcnJvcnMuXG5cbldlIGNhbiB0cmlnZ2VyIHRoaXMgY2hhbmdlIHZpYSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb24gYSBzaG1lbSBtYXBwaW5nLCB3aGljaCBpcyBhIGZhaXJseSBzdGFuZGFyZCB3YXkgdG8gdGVzdCBtZW1vcnkgY29ycnVwdGlvbiBzY2VuYXJpb3MuIEFuZCBpdCdzIGdvb2QgdG8gc2VlIHRoZSBzZWxmdGVzdCBpcyBhbHNvIGJlaW5nIHVwZGF0ZWTigJRgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY2Agd2lsbCBub3cgaW5jbHVkZSB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBUaGF0J3MgYSBnb29kIHNpZ24gdGhhdCB0aGV5J3JlIHRoaW5raW5nIGFib3V0IHRoZSB0ZXN0IGNvdmVyYWdlLlxuXG5NeSBhcHByb2FjaCB3aWxsIGJlIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAgZ2l2ZW4gdGhpcyBtb2RpZmljYXRpb24gaW4gY29yZSBiZWhhdmlvci4gVGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgY2xlYXJseSBgbWVtb3J5X2ZhaWx1cmVgIGZvciBwcmVjaXNpb24uIEFuZCBvZiBjb3Vyc2UsIEkgd2lsbCBlbmFibGUgYE1FTU9SWV9GQUlMVVJFYCBpbiB0aGUgY29uZmlndXJhdGlvbi4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgbWVjaGFuaXNtLCBhbmQgaXQncyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIGEgY29udHJvbGxlZCB3YXksIG1ha2luZyBpdCBwcmltZSB0ZXJyaXRvcnkgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDg0LCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDo1Mi4yMTU1MjM4NTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjEwOTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfZmFpbHVyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBmb3Igc2htZW0gcGFnZXMgYnkgcmV0dXJuaW5nIE1GX0RFTEFZRUQgaW5zdGVhZCBvZiAwIGluIHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpbywgYW5kIHVwZGF0ZXMgdHJ1bmNhdGVfZXJyb3JfZm9saW8gdG8gaGFuZGxlIHRoaXMgbmV3IHJldHVybiB2YWx1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBpcyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgb24gc2htZW0gbWFwcGluZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfZmFpbHVyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBmb3Igc2htZW0gcGFnZXMgYnkgcmV0dXJuaW5nIE1GX0RFTEFZRUQgaW5zdGVhZCBvZiAwIGluIHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpbywgYW5kIHVwZGF0ZXMgdHJ1bmNhdGVfZXJyb3JfZm9saW8gdG8gaGFuZGxlIHRoaXMgbmV3IHJldHVybiB2YWx1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBpcyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgb24gc2htZW0gbWFwcGluZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjUwOjUyLjI5NzYzOTk1OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NDcyOTY3NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MDo1Mi4yOTgxOTQyMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTY0NjczNzMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIChoYXJkd2FyZSBwb2lzb24pIGhhbmRsaW5nIGxvZ2ljIGZvciBzaG1lbSBwYWdlcywgY2hhbmdpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCB0byBgTUZfREVMQVlFRGAgYW5kIHVwZGF0aW5nIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocyBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgdG8gcHJvcGVybHkgaGFuZGxlIHRoaXMgc3RhdGUuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBmb3IgaGFyZHdhcmUgZXJyb3IgcmVjb3ZlcnkgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzMyYTczNjM5NGRhOWE2ZWQ1YWZjZjM3MGVhNmViM2U3ZGEzZjAzZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDE5OjUwOjAwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IGFhZjE0NjA4YjMwZTIuLmM3YTAwYzdiZTM2OGUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtODQ3LDI0ICs4NDcsMjUgQEAgc3RhdGljIGludCBraWxsX2FjY2Vzc2luZ19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gfVxuIFxuIC8qXG4tICogTUZfSUdOT1JFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uZWQnZWQuXG4rICogTUZfSUdOT1JFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJ2VkLlxuICAqIEJ1dCBpdCBjb3VsZCBub3QgZG8gbW9yZSB0byBpc29sYXRlIHRoZSBwYWdlIGZyb20gYmVpbmcgYWNjZXNzZWQgYWdhaW4sXG4gICogbm9yIGRvZXMgaXQga2lsbCB0aGUgcHJvY2Vzcy4gVGhpcyBpcyBleHRyZW1lbHkgcmFyZSBhbmQgb25lIG9mIHRoZVxuICAqIHBvdGVudGlhbCBjYXVzZXMgaXMgdGhhdCB0aGUgcGFnZSBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkIGR1ZSB0b1xuICAqIHVuZGVybHlpbmcgcmFjZSBjb25kaXRpb24uIFRoaXMgaXMgdGhlIG1vc3Qgc2V2ZXJlIG91dGNvbWVzLlxuICAqXG4tICogTUZfRkFJTEVEIC0gVGhlIG0tZigpIGhhbmRsZXIgbWFya3MgdGhlIHBhZ2UgYXMgUEdfaHdwb2lzb25lZCdlZC5cbisgKiBNRl9GQUlMRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbidlZC5cbiAgKiBJdCBzaG91bGQgaGF2ZSBraWxsZWQgdGhlIHByb2Nlc3MsIGJ1dCBpdCBjYW4ndCBpc29sYXRlIHRoZSBwYWdlLFxuICAqIGR1ZSB0byBjb25kaXRpb25zIHN1Y2ggYXMgZXh0cmEgcGluLCB1bm1hcCBmYWlsdXJlLCBldGMuIEFjY2Vzc2luZ1xuICAqIHRoZSBwYWdlIGFnYWluIG1heSB0cmlnZ2VyIGFub3RoZXIgTUNFIGFuZCB0aGUgcHJvY2VzcyB3aWxsIGJlIGtpbGxlZFxuICAqIGJ5IHRoZSBtLWYoKSBoYW5kbGVyIGltbWVkaWF0ZWx5LlxuICAqXG4tICogTUZfREVMQVlFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uZWQnZWQuXG4tICogVGhlIHBhZ2UgaXMgdW5tYXBwZWQsIGFuZCBpcyByZW1vdmVkIGZyb20gdGhlIExSVSBvciBmaWxlIG1hcHBpbmcuXG4tICogQW4gYXR0ZW1wdCB0byBhY2Nlc3MgdGhlIHBhZ2UgYWdhaW4gd2lsbCB0cmlnZ2VyIHBhZ2UgZmF1bHQgYW5kIHRoZVxuLSAqIFBGIGhhbmRsZXIgd2lsbCBraWxsIHRoZSBwcm9jZXNzLlxuKyAqIE1GX0RFTEFZRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbidlZC5cbisgKiBJdCBtZWFucyB0aGUgcGFnZSB3YXMgdW5tYXBwZWQgYW5kIHBhcnRpYWxseSBpc29sYXRlZCAoZS5nLiByZW1vdmVkIGZyb21cbisgKiBmaWxlIG1hcHBpbmcgb3IgdGhlIExSVSkgYnV0IGZ1bGwgY2xlYW51cCBpcyBkZWZlcnJlZCAoZS5nLiB0aGUgbWV0YWRhdGFcbisgKiBmb3IgdGhlIG1lbW9yeSwgYXMgaW4gc3RydWN0IHBhZ2UvZm9saW8sIGlzIHN0aWxsIHJlZmVyZW5jZWQpLiBBbnlcbisgKiBmdXJ0aGVyIGFjY2VzcyB0byB0aGUgcGFnZSB3aWxsIHJlc3VsdCBpbiB0aGUgcHJvY2VzcyBiZWluZyBraWxsZWQuXG4gICpcbi0gKiBNRl9SRUNPVkVSRUQgLSBUaGUgbS1mKCkgaGFuZGxlciBtYXJrcyB0aGUgcGFnZSBhcyBQR19od3BvaXNvbmVkJ2VkLlxuKyAqIE1GX1JFQ09WRVJFRCAtIFRoZSBtLWYoKSBoYW5kbGVyIG1hcmtzIHRoZSBwYWdlIGFzIFBHX2h3cG9pc29uJ2VkLlxuICAqIFRoZSBwYWdlIGhhcyBiZWVuIGNvbXBsZXRlbHkgaXNvbGF0ZWQsIHRoYXQgaXMsIHVubWFwcGVkLCB0YWtlbiBvdXQgb2ZcbiAgKiB0aGUgYnVkZHkgc3lzdGVtLCBvciBob2xlLXB1bmNoZWQgb3V0IG9mIHRoZSBmaWxlIG1hcHBpbmcuXG4gICovXG5AQCAtOTM4LDEwICs5MzksMTIgQEAgc3RhdGljIGludCB0cnVuY2F0ZV9lcnJvcl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdGlmIChtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWVycm9yX3JlbW92ZV9mb2xpbykge1xuIFx0XHRpbnQgZXJyID0gbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VlcnJvcl9yZW1vdmVfZm9saW8obWFwcGluZywgZm9saW8pO1xuIFxuLVx0XHRpZiAoZXJyICE9IDApXG4rXHRcdGlmIChlcnIgPT0gTUZfREVMQVlFRClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXHRcdGVsc2UgaWYgKGVyciAhPSAwKVxuIFx0XHRcdHByX2luZm8oXCIlI2x4OiBGYWlsZWQgdG8gcHVuY2ggcGFnZTogJWRcXG5cIiwgcGZuLCBlcnIpO1xuIFx0XHRlbHNlIGlmICghZmlsZW1hcF9yZWxlYXNlX2ZvbGlvKGZvbGlvLCBHRlBfTk9JTykpXG4tXHRcdFx0cHJfaW5mbyhcIiUjbHg6IGZhaWxlZCB0byByZWxlYXNlIGJ1ZmZlcnNcXG5cIiwgcGZuKTtcbitcdFx0XHRwcl9pbmZvKFwiJSNseDogRmFpbGVkIHRvIHJlbGVhc2UgYnVmZmVyc1xcblwiLCBwZm4pO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmV0ID0gTUZfUkVDT1ZFUkVEO1xuIFx0fSBlbHNlIHtcbkBAIC0xMDM2LDE4ICsxMDM5LDE0IEBAIHN0YXRpYyBpbnQgbWVfcGFnZWNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIFRoZSBzaG1lbSBwYWdlIGlzIGtlcHQgaW4gcGFnZSBjYWNoZSBpbnN0ZWFkIG9mIHRydW5jYXRpbmdcbi1cdCAqIHNvIGlzIGV4cGVjdGVkIHRvIGhhdmUgYW4gZXh0cmEgcmVmY291bnQgYWZ0ZXIgZXJyb3ItaGFuZGxpbmcuXG4tXHQgKi9cbi1cdGV4dHJhX3BpbnMgPSBzaG1lbV9tYXBwaW5nKG1hcHBpbmcpO1xuLVxuIFx0LypcbiBcdCAqIFRydW5jYXRpb24gaXMgYSBiaXQgdHJpY2t5LiBFbmFibGUgaXQgcGVyIGZpbGUgc3lzdGVtIGZvciBub3cuXG4gXHQgKlxuIFx0ICogT3BlbjogdG8gdGFrZSBpX3J3c2VtIG9yIG5vdCBmb3IgdGhpcz8gUmlnaHQgbm93IHdlIGRvbid0LlxuIFx0ICovXG4gXHRyZXQgPSB0cnVuY2F0ZV9lcnJvcl9mb2xpbyhmb2xpbywgcGFnZV90b19wZm4ocCksIG1hcHBpbmcpO1xuK1xuK1x0ZXh0cmFfcGlucyA9IHJldCA9PSBNRl9ERUxBWUVEO1xuIFx0aWYgKGhhc19leHRyYV9yZWZjb3VudChwcywgcCwgZXh0cmFfcGlucykpXG4gXHRcdHJldCA9IE1GX0ZBSUxFRDtcbiBcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNzc0ZjRiMThmZjVjNi4uZDZmOTQ3ODZlNzA5ZSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC01MTM2LDcgKzUxMzYsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2htZW1fZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpXG4gc3RhdGljIGludCBzaG1lbV9lcnJvcl9yZW1vdmVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIE1GX0RFTEFZRUQ7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHNobWVtX2FvcHMgPSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDFhNWEzMmUyMmNjZTIuLjViMjZmMGM0NDY2NDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtMjAsNiArMjAsMTAgQEBcbiBcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gXG4rI2lmbmRlZiBmYWxsdGhyb3VnaFxuKyMgZGVmaW5lIGZhbGx0aHJvdWdoIF9fYXR0cmlidXRlX18oKF9fZmFsbHRocm91Z2hfXykpXG4rI2VuZGlmXG4rXG4gZW51bSBpbmplY3RfdHlwZSB7XG4gXHRNQURWX0hBUkQsXG4gXHRNQURWX1NPRlQsXG5AQCAtMjksOSArMzMsMTQgQEAgZW51bSByZXN1bHRfdHlwZSB7XG4gXHRNQURWX0hBUkRfQU5PTixcbiBcdE1BRFZfSEFSRF9DTEVBTl9QQUdFQ0FDSEUsXG4gXHRNQURWX0hBUkRfRElSVFlfUEFHRUNBQ0hFLFxuK1x0TUFEVl9IQVJEX0NMRUFOX1NITUVNLFxuK1x0TUFEVl9IQVJEX0RJUlRZX1NITUVNLFxuIFx0TUFEVl9TT0ZUX0FOT04sXG4gXHRNQURWX1NPRlRfQ0xFQU5fUEFHRUNBQ0hFLFxuIFx0TUFEVl9TT0ZUX0RJUlRZX1BBR0VDQUNIRSxcbitcdE1BRFZfU09GVF9DTEVBTl9TSE1FTSxcbitcdE1BRFZfU09GVF9ESVJUWV9TSE1FTSxcbitcdFJFQURfRVJST1IsXG4gfTtcbiBcbiBzdGF0aWMgam1wX2J1ZiBzaWduYWxfam1wX2J1ZjtcbkBAIC0xNTcsMTcgKzE2NiwyMiBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZVxuIFx0Y2FzZSBNQURWX0hBUkRfQ0xFQU5fUEFHRUNBQ0hFOlxuIFx0Y2FzZSBNQURWX1NPRlRfQ0xFQU5fUEFHRUNBQ0hFOlxuIFx0Y2FzZSBNQURWX1NPRlRfRElSVFlfUEFHRUNBQ0hFOlxuLVx0XHQvKiBJdCBpcyBub3QgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIFNJR0JVUyBzaWduYWwuICovXG4tXHRcdEFTU0VSVF9FUShzZXRqbXAsIDApO1xuLVxuK1x0Y2FzZSBNQURWX1NPRlRfRElSVFlfU0hNRU06XG4gXHRcdC8qIFRoZSBwYWdlIGNvbnRlbnQgc2hvdWxkIHJlbWFpbiB1bmNoYW5nZWQuICovXG4gXHRcdEFTU0VSVF9UUlVFKGNoZWNrX21lbW9yeSh2YWRkciwgc2VsZi1cdTAwM2VwYWdlX3NpemUpKTtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIE1BRFZfSEFSRF9DTEVBTl9TSE1FTTpcbitcdGNhc2UgTUFEVl9TT0ZUX0NMRUFOX1NITUVNOlxuK1x0XHQvKiBJdCBpcyBub3QgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIFNJR0JVUyBzaWduYWwuICovXG4rXHRcdEFTU0VSVF9FUShzZXRqbXAsIDApO1xuIFxuIFx0XHQvKiBUaGUgYmFja2luZyBwZm4gb2YgYWRkciBzaG91bGQgaGF2ZSBjaGFuZ2VkLiAqL1xuIFx0XHRBU1NFUlRfTkUocGFnZW1hcF9nZXRfcGZuKHNlbGYtXHUwMDNlcGFnZW1hcF9mZCwgdmFkZHIpLCBzZWxmLVx1MDAzZXBmbik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBNQURWX0hBUkRfQU5PTjpcbiBcdGNhc2UgTUFEVl9IQVJEX0RJUlRZX1BBR0VDQUNIRTpcbitcdGNhc2UgTUFEVl9IQVJEX0RJUlRZX1NITUVNOlxuK1x0Y2FzZSBSRUFEX0VSUk9SOlxuIFx0XHQvKiBUaGUgU0lHQlVTIHNpZ25hbCBzaG91bGQgaGF2ZSBiZWVuIHJlY2VpdmVkLiAqL1xuIFx0XHRBU1NFUlRfRVEoc2V0am1wLCAxKTtcbiBcbkBAIC0yNjMsNiArMjc3LDIwIEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9maWxlKGNvbnN0IGNoYXIgKmZuYW1lLCB1bnNpZ25lZCBsb25nIHNpemUpXG4gXHRyZXR1cm4gZmQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcHJlcGFyZV9zaG1lbShjb25zdCBjaGFyICpmbmFtZSwgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdGludCBmZDtcbitcbitcdGZkID0gbWVtZmRfY3JlYXRlKGZuYW1lLCAwKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1x0aWYgKGZ0cnVuY2F0ZShmZCwgc2l6ZSkgXHUwMDNjIDApIHtcbitcdFx0Y2xvc2UoZmQpO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXHRyZXR1cm4gZmQ7XG4rfVxuK1xuIC8qIEJvcnJvd2VkIGZyb20gbW0vZ3VwX2xvbmd0ZXJtLmMuICovXG4gc3RhdGljIGludCBnZXRfZnNfdHlwZShpbnQgZmQpXG4ge1xuQEAgLTM1NSw0ICszODMsODggQEAgVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBkaXJ0eV9wYWdlY2FjaGUpXG4gXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbiB9XG4gXG4rVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBkaXJ0eV9zaG1lbSlcbit7XG4rXHRpbnQgZmQ7XG4rXHRjaGFyICphZGRyO1xuK1x0aW50IHJldDtcbitcbitcdGZkID0gcHJlcGFyZV9zaG1lbShcInNobWVtLWZpbGVcIiwgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJmYWlsZWQgdG8gb3BlbiB0ZXN0IHNobWVtLWZpbGUuXFxuXCIpO1xuK1xuK1x0YWRkciA9IG1tYXAoMCwgc2VsZi1cdTAwM2VwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdCAgICBNQVBfU0hBUkVELCBmZCwgMCk7XG4rXHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0U0tJUChyZXR1cm4sIFwibW1hcCBmYWlsZWQsIG5vdCBlbm91Z2ggbWVtb3J5LlxcblwiKTtcbitcdH1cbitcdG1lbXNldChhZGRyLCAweGNlLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4rXG4rXHRwcmVwYXJlKF9tZXRhZGF0YSwgc2VsZiwgYWRkcik7XG4rXG4rXHRyZXQgPSBzaWdzZXRqbXAoc2lnbmFsX2ptcF9idWYsIDEpO1xuK1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2ICFzZWxmLVx1MDAzZWluamVjdGlvbl9hdHRlbXB0ZWQpIHtcbitcdFx0c2VsZi1cdTAwM2VpbmplY3Rpb25fYXR0ZW1wdGVkID0gdHJ1ZTtcbitcdFx0QVNTRVJUX0VRKHZhcmlhbnQtXHUwMDNlaW5qZWN0KHNlbGYsIGFkZHIpLCAwKTtcbitcdH1cbitcbitcdGlmICh2YXJpYW50LVx1MDAzZXR5cGUgPT0gTUFEVl9IQVJEKSB7XG4rXHRcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9IQVJEX0RJUlRZX1NITUVNLCByZXQpO1xuK1x0XHRyZXQgPSBzaWdzZXRqbXAoc2lnbmFsX2ptcF9idWYsIDEpO1xuK1x0XHRpZiAocmV0ID09IDApXG4rXHRcdFx0Rk9SQ0VfUkVBRCgqYWRkcik7XG4rXHRcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgUkVBRF9FUlJPUiwgcmV0KTtcbitcdH0gZWxzZSB7XG4rXHRcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9TT0ZUX0RJUlRZX1NITUVNLCByZXQpO1xuK1x0fVxuK1xuK1x0QVNTRVJUX0VRKG11bm1hcChhZGRyLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSksIDApO1xuK1xuK1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4rfVxuK1xuK1RFU1RfRihtZW1vcnlfZmFpbHVyZSwgY2xlYW5fc2htZW0pXG4re1xuK1x0aW50IGZkO1xuK1x0Y2hhciAqYWRkcjtcbitcdGludCByZXQ7XG4rXG4rXHRmZCA9IHByZXBhcmVfc2htZW0oXCJzaG1lbS1maWxlXCIsIHNlbGYtXHUwMDNlcGFnZV9zaXplKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0U0tJUChyZXR1cm4sIFwiZmFpbGVkIHRvIG9wZW4gdGVzdCBzaG1lbS1maWxlLlxcblwiKTtcbitcbitcdGFkZHIgPSBtbWFwKDAsIHNlbGYtXHUwMDNlcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHQgICAgTUFQX1NIQVJFRCwgZmQsIDApO1xuK1x0aWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkge1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdFNLSVAocmV0dXJuLCBcIm1tYXAgZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeS5cXG5cIik7XG4rXHR9XG4rXHRGT1JDRV9SRUFEKCphZGRyKTtcbitcbitcdHByZXBhcmUoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTtcbitcbitcdHJldCA9IHNpZ3NldGptcChzaWduYWxfam1wX2J1ZiwgMSk7XG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIXNlbGYtXHUwMDNlaW5qZWN0aW9uX2F0dGVtcHRlZCkge1xuK1x0XHRzZWxmLVx1MDAzZWluamVjdGlvbl9hdHRlbXB0ZWQgPSB0cnVlO1xuK1x0XHRBU1NFUlRfRVEodmFyaWFudC1cdTAwM2VpbmplY3Qoc2VsZiwgYWRkciksIDApO1xuK1x0fVxuK1xuK1x0aWYgKHZhcmlhbnQtXHUwMDNldHlwZSA9PSBNQURWX0hBUkQpIHtcbitcdFx0Y2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBNQURWX0hBUkRfQ0xFQU5fU0hNRU0sIHJldCk7XG4rXHRcdHJldCA9IHNpZ3NldGptcChzaWduYWxfam1wX2J1ZiwgMSk7XG4rXHRcdGlmIChyZXQgPT0gMClcbitcdFx0XHRGT1JDRV9SRUFEKCphZGRyKTtcbitcdFx0Y2hlY2soX21ldGFkYXRhLCBzZWxmLCBhZGRyLCBSRUFEX0VSUk9SLCByZXQpO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogVGVzdCB0aGUgYWRkcmVzcyBhY2Nlc3NhYmlsaXR5IHdpdGhvdXQgY2hlY2tfbWVtb3J5KCkuICovXG4rXHRcdEZPUkNFX1JFQUQoKmFkZHIpO1xuK1x0XHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfU09GVF9DTEVBTl9TSE1FTSwgcmV0KTtcbitcdH1cbitcbitcdEFTU0VSVF9FUShtdW5tYXAoYWRkciwgc2VsZi1cdTAwM2VwYWdlX3NpemUpLCAwKTtcbitcbitcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuK31cbitcbiBURVNUX0hBUk5FU1NfTUFJTlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTA6NTIuMjk4MTk1Mzc5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjQ2NzEwNzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IFNobWVtIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEl0J3MgZm9jdXNlZCBvbiBpbXByb3ZpbmcgdGhlIGtlcm5lbCdzIGhhbmRsaW5nIG9mIG1lbW9yeSBmYWlsdXJlcyDigJMgc3BlY2lmaWNhbGx5LCBoYXJkd2FyZS1kZXRlY3RlZCBlcnJvcnMgd2l0aGluIHNobWVtIHBhZ2VzLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgc2htZW1fZXJyb3JfcmVtb3ZlX2ZvbGlvYCBpbiBgbW0vc2htZW0uY2AuIEluc3RlYWQgb2YgcmV0dXJuaW5nIDAsIGl0IG5vdyByZXR1cm5zIGBNRl9ERUxBWUVEYC4gVGhpcyBzaWduYWxzIHRvIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocyBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgKGB0cnVuY2F0ZV9lcnJvcl9mb2xpb2AgYW5kIGBtZV9wYWdlY2FjaGVfY2xlYW5gKSB0aGF0IHRoZSBmb2xpbyByZW1vdmFsIGlzIGRlZmVycmVkLiBUaGUgcGF0Y2ggdGhlbiBhZGp1c3RzIHRoZSBsb2dpYyBpbiBgdHJ1bmNhdGVfZXJyb3JfZm9saW9gIGFuZCBgbWVfcGFnZWNhY2hlX2NsZWFuYCB0byBhY2NvbW1vZGF0ZSB0aGUgYE1GX0RFTEFZRURgIHJldHVybiB2YWx1ZSwgY2hhbmdpbmcgc29tZSBjb250cm9sIGZsb3cuICBXZSBhbHNvIHNlZSBuZXcgc2VsZnRlc3RzIGFkZGVkIGZvciB0aGlzIGJlaGF2aW9yLlxuXG5Ob3csIGxldCdzIGFwcGx5IG15IGludGVybmFsIEtNU0FOIGNoZWNrbGlzdDpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6KiogTm9wZS4gTm90aGluZyBoZXJlIGludHJvZHVjZXMgbmV3IHN0cnVjdHVyZXMgb3IgbW9kaWZpZXMgZXhpc3Rpbmcgb25lcyBpbiBhIHdheSB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGlzIGlzIGFsbCBpbnRlcm5hbCBrZXJuZWwgZXJyb3IgaGFuZGxpbmcuXG5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBkZXBlbmRlbnQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uIFdoaWxlIHdlIGFyZSBtb2RpZnlpbmcgY29udHJvbCBmbG93IGJhc2VkIG9uIGBNRl9ERUxBWUVEYCwgdGhpcyBpcyBhICpkZWZpbmVkKiB2YWx1ZSwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUsIHdlIGFyZSBub3QgaW50cm9kdWNpbmcgbmV3IHdheXMgdG8gbWFrZSB0aGUga2VybmVsIHJlYWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9ubHkgY29udHJvbCBob3cgdG8gaGFuZGxlIGFuIGVycm9yIHRoYXQgaXMgYWxyZWFkeSBiZWluZyBoYW5kbGVkLlxuXG4zLiAgKipBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzOioqIE5vLiBUaGlzIGlzIG5vdCBhYm91dCBhbGxvY2F0aW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMuIEl0J3MgYWJvdXQgaG93IHdlIGhhbmRsZSBlcnJvcnMgb24gKmV4aXN0aW5nKiBzaG1lbSBwYWdlcy5cblxuNC4gICoqQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM6KiogQWdhaW4sIG5vLiBUaGUgY2hhbmdlcyByZWZpbmUgdGhlIGxvZ2ljIGZvciBob3cgd2UgaGFuZGxlIGV4aXN0aW5nIHNobWVtIHBhZ2VzIGVuY291bnRlcmluZyBoYXJkd2FyZSBlcnJvcnMuIE5vIG5ldyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBpcyBlbmFibGVkLlxuXG5UaGVyZWZvcmUsIGFmdGVyIGEgY2FyZWZ1bCByZXZpZXcsIHRoZSBwYXRjaCBkb2VzIG5vdCBtZWV0IGFueSBvZiBteSBLTVNBTiBjcml0ZXJpYS4gTm8gS01TQU4gaXMgbmVlZGVkLiBJJ20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIGFkZGluZyBteSByZWFzb25pbmcgdG8gdGhlIHJlY29yZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5MSwiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1MTowMy45NDQ5MTEwNjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSAoaGFyZHdhcmUgcG9pc29uKSBoYW5kbGluZyBsb2dpYyBmb3Igc2htZW0gcGFnZXMsIGNoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgdG8gYE1GX0RFTEFZRURgIGFuZCB1cGRhdGluZyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIHRvIHByb3Blcmx5IGhhbmRsZSB0aGlzIHN0YXRlLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgZm9yIGhhcmR3YXJlIGVycm9yIHJlY292ZXJ5IGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSAoaGFyZHdhcmUgcG9pc29uKSBoYW5kbGluZyBsb2dpYyBmb3Igc2htZW0gcGFnZXMsIGNoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgYHNobWVtX2Vycm9yX3JlbW92ZV9mb2xpb2AgdG8gYE1GX0RFTEFZRURgIGFuZCB1cGRhdGluZyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIHRvIHByb3Blcmx5IGhhbmRsZSB0aGlzIHN0YXRlLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgZm9yIGhhcmR3YXJlIGVycm9yIHJlY292ZXJ5IGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7b4js[1] Phase: Succeeded StartedAt: 2026-08-23 19:51:15 +0000 UTC FinishedAt: 2026-08-23 19:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-23 19:51:15 +0000 UTC FinishedAt: 2026-08-23 19:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2] Phase: Succeeded StartedAt: 2026-08-23 19:51:15 +0000 UTC FinishedAt: 2026-08-23 23:33:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-23 19:51:15 +0000 UTC FinishedAt: 2026-08-23 23:33:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-23 19:51:15 +0000 UTC FinishedAt: 2026-08-23 19:51:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-23 19:51:15 +0000 UTC FinishedAt: 2026-08-23 19:51:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-convert-artifact-1891028453/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-23 19:51:25 +0000 UTC FinishedAt: 2026-08-23 20:09:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-23 19:51:25 +0000 UTC FinishedAt: 2026-08-23 20:09:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*07344fc3-75a9-40a9-801a-837502e77bb7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-convert-artifact-1891028453/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "af420ca1-0426-4168-8044-18a8fb2359d1", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-build-action-2671364619/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-23 19:51:25 +0000 UTC FinishedAt: 2026-08-23 20:09:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*07344fc3-75a9-40a9-801a-837502e77bb7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-convert-artifact-1891028453/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "af420ca1-0426-4168-8044-18a8fb2359d1", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-build-action-2671364619/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-23 20:09:19 +0000 UTC FinishedAt: 2026-08-23 20:09:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-23 20:09:19 +0000 UTC FinishedAt: 2026-08-23 20:09:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-23 20:09:19 +0000 UTC FinishedAt: 2026-08-23 20:09:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-23 20:09:19 +0000 UTC FinishedAt: 2026-08-23 20:09:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-convert-artifact-1006545344/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-23 20:09:29 +0000 UTC FinishedAt: 2026-08-23 20:11:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-23 20:09:29 +0000 UTC FinishedAt: 2026-08-23 20:11:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*af420ca1-0426-4168-8044-18a8fb2359d1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-build-action-2671364619/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-23 20:11:33 +0000 UTC FinishedAt: 2026-08-23 20:11:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-23 20:11:33 +0000 UTC FinishedAt: 2026-08-23 20:11:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-23 20:11:33 +0000 UTC FinishedAt: 2026-08-23 20:28:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-23 20:11:33 +0000 UTC FinishedAt: 2026-08-23 20:28:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*07344fc3-75a9-40a9-801a-837502e77bb7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-convert-artifact-1006545344/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a16caf93-6c9a-415f-904a-3491127159d2", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-build-action-2325354364/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-23 20:11:33 +0000 UTC FinishedAt: 2026-08-23 20:28:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*07344fc3-75a9-40a9-801a-837502e77bb7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-convert-artifact-1006545344/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a16caf93-6c9a-415f-904a-3491127159d2", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-build-action-2325354364/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-23 20:28:36 +0000 UTC FinishedAt: 2026-08-23 20:28:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-23 20:28:36 +0000 UTC FinishedAt: 2026-08-23 20:28:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-23 20:28:36 +0000 UTC FinishedAt: 2026-08-23 20:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-23 20:28:36 +0000 UTC FinishedAt: 2026-08-23 20:30:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a16caf93-6c9a-415f-904a-3491127159d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-build-action-2325354364/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-23 20:30:40 +0000 UTC FinishedAt: 2026-08-23 23:33:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-23 20:30:40 +0000 UTC FinishedAt: 2026-08-23 23:33:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*af420ca1-0426-4168-8044-18a8fb2359d1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a16caf93-6c9a-415f-904a-3491127159d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-build-action-2671364619/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-build-action-2325354364/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-23 20:30:40 +0000 UTC FinishedAt: 2026-08-23 20:30:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-23 20:30:40 +0000 UTC FinishedAt: 2026-08-23 20:30:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-convert-artifact-51095065/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-23 20:30:40 +0000 UTC FinishedAt: 2026-08-23 20:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-23 20:30:40 +0000 UTC FinishedAt: 2026-08-23 20:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-23 20:30:40 +0000 UTC FinishedAt: 2026-08-23 20:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-23 20:30:50 +0000 UTC FinishedAt: 2026-08-23 23:33:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4js[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"bc82cdb1-19ba-49ee-8477-2ce7b83dc394","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-23 20:30:50 +0000 UTC FinishedAt: 2026-08-23 23:33:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*af420ca1-0426-4168-8044-18a8fb2359d1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a16caf93-6c9a-415f-904a-3491127159d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-build-action-2671364619/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-build-action-2325354364/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7b4js/series-workflow7b4js-convert-artifact-51095065/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}