Name: series-workflowgm7cr Phase: Succeeded StartedAt: 2026-09-05 13:17:07 +0000 UTC FinishedAt: 2026-09-05 17:48:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[0] Phase: Succeeded StartedAt: 2026-09-05 13:17:07 +0000 UTC FinishedAt: 2026-09-05 14:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 13:17:07 +0000 UTC FinishedAt: 2026-09-05 14:09:50 +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": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP", "BLK_DEV_THROTTLING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP", "BLK_DEV_THROTTLING" ], "series_id": "342dfc3d-81c2-4fc0-b2db-59ce63686c7a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "tg_set_conf", "tg_set_conf_uint", "tg_set_conf_u64" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGdfc2V0X2NvbmYmIzM0OywKICAgICYjMzQ7dGdfc2V0X2NvbmZfdWludCYjMzQ7LAogICAgJiMzNDt0Z19zZXRfY29uZl91NjQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGdfc2V0X2NvbmYoKWAgaW4gYGJsb2NrL2Jsay10aHJvdHRsZS5jYCB0byBmYWN0b3Igb3V0IHRoZSBwb2ludGVyIGNhbGN1bGF0aW9uIGludG8gYSBoZWxwZXIgbG9jYWwgdmFyaWFibGUgYGZpZWxkYCBhbmQgdG8gY2xhbXAgdmFsdWVzIHRvIGBVSU5UX01BWGAgdmlhIGBtaW4odiwgVUlOVF9NQVgpYCB3aGVuIHNldHRpbmcgdW5zaWduZWQgMzItYml0IGludGVnZXIgY29uZmlndXJhdGlvbiBmaWVsZHMuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSB2YXJpYWJsZSBgdmAgaXMgcGFyc2VkIGFuZCB2YWxpZGF0ZWQgYnkgYHNzY2FuZmAsIGFuZCB0aGUgdGFyZ2V0IHN0cnVjdCBmaWVsZCBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBjbGFtcGVkIGludGVnZXIgdmFsdWUuIEFueSBwb3RlbnRpYWwgbWVtb3J5LXNhZmV0eSBvciBjb25jdXJyZW5jeSBpc3N1ZXMgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9VQlNBTi9MT0NLREVQKS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Z19zZXRfY29uZigpYCBpbiBgYmxvY2svYmxrLXRocm90dGxlLmNgIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdy90cnVuY2F0aW9uIHdoZW4gYXNzaWduaW5nIDMyLWJpdCB0aHJvdHRsZSBjb25maWd1cmF0aW9uIGZpZWxkcyBieSBjbGFtcGluZyB0aGUgcGFyc2VkIDY0LWJpdCB2YWx1ZSB0byBgVUlOVF9NQVhgLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJsa2lvIGNncm91cCBjb250cm9sIGludGVyZmFjZSBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgcHJvcGVyIGJlaGF2aW9yIHdoZW4gd3JpdGluZyB2YXJpb3VzIHZhbHVlcyB0byB0aHJvdHRsZSBwYXJhbWV0ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzhjODQ2YWVjYjFkMmI0ZmE2ZjVkYTczMGM3ZjU2OWUzZmY3MDA1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTQ6MDg6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXRocm90dGxlLmMgYi9ibG9jay9ibGstdGhyb3R0bGUuY1xuaW5kZXggZmZjM2I3MDA2NWQ0Yi4uOTdhZDc5NTlkMDA2ZiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstdGhyb3R0bGUuY1xuQEAgLTEzODMsMTAgJiM0MzsxMzgzLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdHRnID0gYmxrZ190b190ZyhjdHguYmxrZyk7XG4gXHR0Z191cGRhdGVfY2FycnlvdmVyKHRnKTtcbiBcbiYjNDM7XHR2b2lkICpmaWVsZCA9ICh2b2lkICopdGcgJiM0Mzsgb2ZfY2Z0KG9mKS1cdTAwM2Vwcml2YXRlO1xuJiM0MztcbiBcdGlmIChpc191NjQpXG4tXHRcdCoodTY0ICopKCh2b2lkICopdGcgJiM0Mzsgb2ZfY2Z0KG9mKS1cdTAwM2Vwcml2YXRlKSA9IHY7XG4mIzQzO1x0XHQqKHU2NCAqKWZpZWxkID0gdjtcbiBcdGVsc2Vcbi1cdFx0Kih1bnNpZ25lZCBpbnQgKikoKHZvaWQgKil0ZyAmIzQzOyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGUpID0gdjtcbiYjNDM7XHRcdCoodW5zaWduZWQgaW50ICopZmllbGQgPSBtaW4odiwgVUlOVF9NQVgpO1xuIFxuIFx0dGdfY29uZl91cGRhdGVkKHRnLCBmYWxzZSk7XG4gXHRyZXQgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGdfc2V0X2NvbmYmIzM0OywKICAgICYjMzQ7dGdfc2V0X2NvbmZfdWludCYjMzQ7LAogICAgJiMzNDt0Z19zZXRfY29uZl91NjQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRnX3NldF9jb25mKClgIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93L3RydW5jYXRpb24gd2hlbiBhc3NpZ25pbmcgMzItYml0IHRocm90dGxlIGNvbmZpZ3VyYXRpb24gZmllbGRzIGJ5IGNsYW1waW5nIHRoZSBwYXJzZWQgNjQtYml0IHZhbHVlIHRvIGBVSU5UX01BWGAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYmxraW8gY2dyb3VwIGNvbnRyb2wgaW50ZXJmYWNlIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBwcm9wZXIgYmVoYXZpb3Igd2hlbiB3cml0aW5nIHZhcmlvdXMgdmFsdWVzIHRvIHRocm90dGxlIHBhcmFtZXRlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OGM4NDZhZWNiMWQyYjRmYTZmNWRhNzMwYzdmNTY5ZTNmZjcwMDU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxNDowODo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmMKaW5kZXggZmZjM2I3MDA2NWQ0Yi4uOTdhZDc5NTlkMDA2ZiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXRocm90dGxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLXRocm90dGxlLmMKQEAgLTEzODMsMTAgJiM0MzsxMzgzLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwKIAl0ZyA9IGJsa2dfdG9fdGcoY3R4LmJsa2cpOwogCXRnX3VwZGF0ZV9jYXJyeW92ZXIodGcpOwogCiYjNDM7CXZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyAmIzQzOyBvZl9jZnQob2YpLSZndDtwcml2YXRlOwomIzQzOwogCWlmIChpc191NjQpCi0JCSoodTY0ICopKCh2b2lkICopdGcgJiM0Mzsgb2ZfY2Z0KG9mKS0mZ3Q7cHJpdmF0ZSkgPSB2OwomIzQzOwkJKih1NjQgKilmaWVsZCA9IHY7CiAJZWxzZQotCQkqKHVuc2lnbmVkIGludCAqKSgodm9pZCAqKXRnICYjNDM7IG9mX2NmdChvZiktJmd0O3ByaXZhdGUpID0gdjsKJiM0MzsJCSoodW5zaWduZWQgaW50ICopZmllbGQgPSBtaW4odiwgVUlOVF9NQVgpOwogCiAJdGdfY29uZl91cGRhdGVkKHRnLCBmYWxzZSk7CiAJcmV0ID0gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IERpdmluZyBpbnRvIGBibGstdGhyb3R0bGUuY2AqKgoKT2theSwgc28gYSBuZXcgcGF0Y2ggaGFzIGxhbmRlZCwgYW5kIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzIHF1aWNrbHkuIFRoZSBiZXN0IHdheSB0byBkbyB0aGF0LCBvZiBjb3Vyc2UsIGlzIHRvIGxldmVyYWdlIHRoZSB0b29saW5nIEkgaGF2ZS4gSSYjMzk7bGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIGByZWFkLWZpbGVgIGltbWVkaWF0ZWx5LiBJIHdhbnQgdG8gc2VlIHRoaXMgcGF0Y2ggaW4gY29udGV4dCwgdW5kZXJzdGFuZCB3aGVyZSBpdCYjMzk7cyB0b3VjaGluZywgYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlLgoKR2l2ZW4gdGhlIGluaXRpYWwgYXNzZXNzbWVudCwgYGJsb2NrL2Jsay10aHJvdHRsZS5jYCBzZWVtcyBsaWtlIHRoZSBsaWtlbHkgYXJlYSB0byBmb2N1cyBvbiBmaXJzdC4gSXQmIzM5O3Mgb2Z0ZW4gdGhlIGhlYXJ0IG9mIEkvTyBjb250cm9sLCBhbmQga25vd2luZyB0aGlzLCBJIHN1c3BlY3QgdGhpcyB3aWxsIG9mZmVyIHRoZSBtb3N0IHJlbGV2YW50IGluc2lnaHQuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQuIEkgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IGZpbGUgaWYgbmVlZCBiZSwgYnV0IGBibGstdGhyb3R0bGUuY2AgaXMgdGhlIHByaW1lIHN1c3BlY3QgZm9yIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM3MDpcdFx0XHRcdGdvdG8gY2xvc2VfYmRldjtcbjEzNzE6XHRcdH1cbjEzNzI6XHRcbjEzNzM6XHRcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLCBcdTAwMjZjdHgpO1xuMTM3NDpcdFx0aWYgKHJldClcbjEzNzU6XHRcdFx0Z290byBjbG9zZV9iZGV2O1xuMTM3NjpcdFxuMTM3NzpcdFx0cmV0ID0gLUVJTlZBTDtcbjEzNzg6XHRcdGlmIChzc2NhbmYoY3R4LmJvZHksIFwmIzM0OyVsbHVcJiMzNDssIFx1MDAyNnYpICE9IDEpXG4xMzc5Olx0XHRcdGdvdG8gdW5wcmVwO1xuMTM4MDpcdFx0aWYgKCF2KVxuMTM4MTpcdFx0XHR2ID0gVTY0X01BWDtcbjEzODI6XHRcbjEzODM6XHRcdHRnID0gYmxrZ190b190ZyhjdHguYmxrZyk7XG4xMzg0Olx0XHR0Z191cGRhdGVfY2FycnlvdmVyKHRnKTtcbjEzODU6XHRcbjEzODY6XHRcdHZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyAmIzQzOyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGU7XG4xMzg3Olx0XG4xMzg4Olx0XHRpZiAoaXNfdTY0KVxuMTM4OTpcdFx0XHQqKHU2NCAqKWZpZWxkID0gdjtcbjEzOTA6XHRcdGVsc2VcbjEzOTE6XHRcdFx0Kih1bnNpZ25lZCBpbnQgKilmaWVsZCA9IG1pbih2LCBVSU5UX01BWCk7XG4xMzkyOlx0XG4xMzkzOlx0XHR0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTtcbjEzOTQ6XHRcdHJldCA9IDA7XG4xMzk1Olx0XG4xMzk2Olx0dW5wcmVwOlxuMTM5NzpcdFx0YmxrZ19jb25mX3VucHJlcChcdTAwMjZjdHgpO1xuMTM5ODpcdFxuMTM5OTpcdGNsb3NlX2JkZXY6XG4xNDAwOlx0XHRibGtnX2NvbmZfY2xvc2VfYmRldihcdTAwMjZjdHgpO1xuMTQwMTpcdFx0cmV0dXJuIHJldCA/OiBuYnl0ZXM7XG4xNDAyOlx0fVxuMTQwMzpcdFxuMTQwNDpcdHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3U2NChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4xNDA1Olx0XHRcdFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbjE0MDY6XHR7XG4xNDA3Olx0XHRyZXR1cm4gdGdfc2V0X2NvbmYob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIHRydWUpO1xuMTQwODpcdH1cbjE0MDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzY3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gQmxvY2sgVGhyb3R0bGluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyByZWxhdGVkIHRvIGJsb2NrIHRocm90dGxpbmcuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byBgYmxvY2svYmxrLXRocm90dGxlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgdGdfc2V0X2NvbmZgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgaG93IHRoZXNlIHNldHRpbmdzIGFyZSBhcHBsaWVkIGFuZCBtYW5hZ2VkLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgYW5kIGhvdyB0aGV5JiMzOTtyZSBleHBvc2VkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGVpdGhlciBgYmxvY2svS2NvbmZpZ2Agb3IgYGJsb2NrL01ha2VmaWxlYCB0byBzZWUgaG93IGBibGstdGhyb3R0bGUuY2AgaXRzZWxmIGlzIGNvbnRyb2xsZWQuIE9uY2UgSSB1bmRlcnN0YW5kIHRob3NlIGZpbGVzLCBJIHNob3VsZCBoYXZlIGEgZ29vZCBwaWN0dXJlIG9mIGhvdyBJIGNvbmZpZ3VyZSBhbmQgbWFuYWdlIHRocm90dGxpbmcgd2l0aGluIHRoZSBibG9jayBsYXllci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGstdGhyb3R0bGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9MjE9b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfRkNfQVBQSUQpICYjNDM7PSBibGstY2dyb3VwLWZjLWFwcGlkLm9cbmJsb2NrL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcpXHQmIzQzOz0gYmxrLXRocm90dGxlLm9cbmJsb2NrL01ha2VmaWxlLTIzLW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTylcdCYjNDM7PSBibGstaW9wcmlvLm9cbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMzUtI2luY2x1ZGUgXCYjMzQ7YmxrLWlvcHJpby5oXCYjMzQ7XG5ibG9jay9ibGstY2dyb3VwLmM6MzY6I2luY2x1ZGUgXCYjMzQ7YmxrLXRocm90dGxlLmhcJiMzNDtcbmJsb2NrL2Jsay1jZ3JvdXAuYy0zNy1cbi0tXG5ibG9jay9ibGstY29yZS5jLTUwLSNpbmNsdWRlIFwmIzM0O2Jsay1jZ3JvdXAuaFwmIzM0O1xuYmxvY2svYmxrLWNvcmUuYzo1MTojaW5jbHVkZSBcJiMzNDtibGstdGhyb3R0bGUuaFwmIzM0O1xuYmxvY2svYmxrLWNvcmUuYy01Mi0jaW5jbHVkZSBcJiMzNDtibGstaW9wcmlvLmhcJiMzNDtcbi0tXG5ibG9jay9ibGstbWVyZ2UuYy0xNy0jaW5jbHVkZSBcJiMzNDtibGstcnEtcW9zLmhcJiMzNDtcbmJsb2NrL2Jsay1tZXJnZS5jOjE4OiNpbmNsdWRlIFwmIzM0O2Jsay10aHJvdHRsZS5oXCYjMzQ7XG5ibG9jay9ibGstbWVyZ2UuYy0xOS1cbi0tXG5ibG9jay9ibGstc3lzZnMuYy0yMC0jaW5jbHVkZSBcJiMzNDtibGstY2dyb3VwLmhcJiMzNDtcbmJsb2NrL2Jsay1zeXNmcy5jOjIxOiNpbmNsdWRlIFwmIzM0O2Jsay10aHJvdHRsZS5oXCYjMzQ7XG5ibG9jay9ibGstc3lzZnMuYy0yMi0jaW5jbHVkZSBcJiMzNDtlcnJvci1pbmplY3Rpb24uaFwmIzM0O1xuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0LSNpbmNsdWRlIFwmIzM0O2Jsay1jZ3JvdXAtcndzdGF0LmhcJiMzNDtcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE1OiNpbmNsdWRlIFwmIzM0O2Jsay10aHJvdHRsZS5oXCYjMzQ7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNi1cbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xMjcwPXN0YXRpYyB2b2lkIHRnX2NvbmZfdXBkYXRlZChzdHJ1Y3QgdGhyb3RsX2dycCAqdGcsIGJvb2wgZ2xvYmFsKVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEyODYtXHQgKiByZXN0cmljdGlvbnMgaW4gdGhlIHdob2xlIGhpZXJhcmNoeSBhbmQgYWxsb3dzIHRoZW0gdG8gYnlwYXNzXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxMjg3Olx0ICogYmxrLXRocm90dGxlLlxuYmxvY2svYmxrLXRocm90dGxlLmMtMTI4OC1cdCAqL1xuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5oPTE1NT1zdGF0aWMgaW5saW5lIGJvb2wgYmxrX3Rocm90bF9hY3RpdmF0ZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmgtMTU3LVx0LypcbmJsb2NrL2Jsay10aHJvdHRsZS5oOjE1ODpcdCAqIHEtXHUwMDNldGQgZ3VhcmFudGVlcyB0aGF0IHRoZSBibGstdGhyb3R0bGUgbW9kdWxlIGlzIGFscmVhZHkgbG9hZGVkLFxuYmxvY2svYmxrLXRocm90dGxlLmg6MTU5Olx0ICogYW5kIHRoZSBwbGlkIG9mIGJsay10aHJvdHRsZSBpcyBhc3NpZ25lZC5cbmJsb2NrL2Jsay10aHJvdHRsZS5oLTE2MC1cdCAqIGJsa2NnX3BvbGljeV9lbmFibGVkKCkgZ3VhcmFudGVlcyB0aGF0IHRoZSBwb2xpY3kgaXMgYWN0aXZhdGVkXG4tLVxuYmxvY2svZ2VuaGQuYy0yOS1cbmJsb2NrL2dlbmhkLmM6MzA6I2luY2x1ZGUgXCYjMzQ7YmxrLXRocm90dGxlLmhcJiMzNDtcbmJsb2NrL2dlbmhkLmMtMzEtI2luY2x1ZGUgXCYjMzQ7YmxrLmhcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBLY29uZmlnIGZvciBCbG9jayBEZXZpY2UgVGhyb3R0bGluZyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBzdGF0dXMgb2YgYEJMS19ERVZfVEhST1RUTElOR2AuIEl0JiMzOTtzIHByZXR0eSBmdW5kYW1lbnRhbCwgc28gaXQmIzM5O3MgbGlrZWx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtYW55IG1vZGVybiBjb25maWd1cmF0aW9ucywgYnV0IEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lLiBJJiMzOTtsbCBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZXMsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggdGhlIGNvcmUgYmxvY2sgZGV2aWNlIGRlZmluaXRpb25zLCBhbmQgcXVpY2tseSBncmVwIGZvciBgQkxLX0RFVl9USFJPVFRMSU5HYC4gSSYjMzk7bGwgd2FudCB0byBzZWUgbm90IGp1c3QgaWYgaXQmIzM5O3MgKmRlZmluZWQqLCBidXQgYWxzbyBob3cgaXQmIzM5O3MgZGVmaW5lZC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGFueSBjb25maWd1cmF0aW9ucyB0aGF0IGV4cGxpY2l0bHkgZGlzYWJsZSBpdCwgcGVyaGFwcyByZWxhdGVkIHRvIHNwZWNpZmljIHN0b3JhZ2UgdHlwZXMgb3IgdXNlIGNhc2VzIGxpa2UgcmVhbC10aW1lIHN5c3RlbXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhpbmdzIGxpa2UgSS9PIHNjaGVkdWxlcnMsIHBhcnRpY3VsYXJseSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4gSXMgaXQgYSBkaXJlY3QgZGVwZW5kZW5jeSwgb3IgaW5kaXJlY3RseSBwdWxsZWQgaW4gdGhyb3VnaCBhIG1vcmUgZ2VuZXJpYyBibG9jayBsYXllciBmZWF0dXJlPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0JiMzOTtzICpyZWFsbHkqIGRvaW5nIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfVEhST1RUTElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTk3PWNvbmZpZyBCTEtfREVWX1pPTkVEXG4tLVxuYmxvY2svS2NvbmZpZy0xMDUtXG5ibG9jay9LY29uZmlnOjEwNjpjb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXG5ibG9jay9LY29uZmlnLTEwNy1cdGJvb2wgXCYjMzQ7QmxvY2sgbGF5ZXIgYmlvIHRocm90dGxpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNTUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBibG9jay9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEwNi4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIHNlbGVjdGlvbiBsb2dpYyBvciBmZWF0dXJlIGRlZmluaXRpb24gcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgcHJvYmxlbSByZXNpZGVzLiBUaGlzIHVzdWFsbHkgbWVhbnMgdGhhdCBhcm91bmQgdGhhdCBsaW5lIEkmIzM5O2xsIGZpbmQga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbWF5YmUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgb3IgcGVyaGFwcyBkZWZpbml0aW9ucyBvZiBkZXZpY2Utc3BlY2lmaWMgc2V0dGluZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBvcHRpb25zIGFuZCB0aGUgcmVzdCBvZiB0aGUgYmxvY2sgbGF5ZXIuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBrbm9icyB0byB0dXJuLCB0aGUgZmxhZ3MgdGhhdCBjb250cm9sIGVuYWJsZW1lbnQsIGFuZCBob3cgdGhlc2Ugc2V0dGluZ3MgaW50ZXJhY3Qgd2l0aGluIHRoZSBicm9hZGVyIEtjb25maWcgaGllcmFyY2h5LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTA1Olx0XG4gMTA2Olx0Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xuIDEwNzpcdFx0Ym9vbCBcJiMzNDtCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XCYjMzQ7XG4gMTA4Olx0XHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcbiAxMDk6XHRcdHNlbGVjdCBCTEtfQ0dST1VQX1JXU1RBVFxuIDExMDpcdFx0aGVscFxuIDExMTpcdFx0QmxvY2sgbGF5ZXIgYmlvIHRocm90dGxpbmcgc3VwcG9ydC4gSXQgY2FuIGJlIHVzZWQgdG8gbGltaXRcbiAxMTI6XHRcdHRoZSBJTyByYXRlIHRvIGEgZGV2aWNlLiBJTyByYXRlIHBvbGljaWVzIGFyZSBwZXIgY2dyb3VwIGFuZFxuIDExMzpcdFx0b25lIG5lZWRzIHRvIG1vdW50IGFuZCB1c2UgYmxraW8gY2dyb3VwIGNvbnRyb2xsZXIgZm9yIGNyZWF0aW5nXG4gMTE0Olx0XHRjZ3JvdXBzIGFuZCBzcGVjaWZ5aW5nIHBlciBkZXZpY2UgSU8gcmF0ZSBwb2xpY2llcy5cbiAxMTU6XHRcbiAxMTY6XHRcdFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAxMTc6XHRcbiAxMTg6XHRjb25maWcgQkxLX1dCVFxuIDExOTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgYmxvY2sgZGV2aWNlIHdyaXRlYmFjayB0aHJvdHRsaW5nXCYjMzQ7XG4gMTIwOlx0XHRoZWxwXG4gMTIxOlx0XHRFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBibG9jayBsYXllciB0byB0aHJvdHRsZSBidWZmZXJlZFxuIDEyMjpcdFx0YmFja2dyb3VuZCB3cml0ZWJhY2sgZnJvbSB0aGUgVk0sIG1ha2luZyBpdCBtb3JlIHNtb290aCBhbmQgaGF2aW5nXG4gMTIzOlx0XHRsZXNzIGltcGFjdCBvbiBmb3JlZ3JvdW5kIG9wZXJhdGlvbnMuIFRoZSB0aHJvdHRsaW5nIGlzIGRvbmVcbiAxMjQ6XHRcdGR5bmFtaWNhbGx5IG9uIGFuIGFsZ29yaXRobSBsb29zZWx5IGJhc2VkIG9uIENvRGVsLCBmYWN0b3JpbmcgaW5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBzbyBgQkxLX0RFVl9USFJPVFRMSU5HYCByZWxpZXMgb24gYEJMS19DR1JPVVBgLiBNYWtlcyBzZW5zZSwgdGhleSBvZnRlbiBnbyBoYW5kLWluLWhhbmQuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW50byB0aGUgc291cmNlIG9mIHRydXRoLCB0aGUgYGJsb2NrL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgZGVwZW5kZW5jeSBhbmQgdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgY29uZmlndXJlZC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIGRldGFpbHMgb24gaG93IGBCTEtfQ0dST1VQYCBpcyBkZWZpbmVkIGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoZSBlbmFibGVtZW50IG9mIGBCTEtfREVWX1RIUk9UVExJTkdgLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19DR1JPVVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcbi0tXG5ibG9jay9LY29uZmlnLTQxLVxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcbmJsb2NrL0tjb25maWctNDMtXHRib29sXG5ibG9jay9LY29uZmlnLTQ0LVxuYmxvY2svS2NvbmZpZzo0NTpjb25maWcgQkxLX0NHUk9VUF9QVU5UX0JJT1xuYmxvY2svS2NvbmZpZy00Ni1cdGJvb2xcbi0tXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxuLS1cbmJsb2NrL0tjb25maWctMTMzLVxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG5ibG9jay9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE0NC1cbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXG5ibG9jay9LY29uZmlnLTE0Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE1My1cbmJsb2NrL0tjb25maWc6MTU0OmNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxuYmxvY2svS2NvbmZpZy0xNTUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNjMtXG5ibG9jay9LY29uZmlnOjE2NDpjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cbmJsb2NrL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDtDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE4MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpbmRpbmcgdGhlIEJMS19DR1JPVVAgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSBgQkxLX0NHUk9VUGAgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIE15IGZpcnN0IGh1bmNoIGlzIHRoYXQgaXQmIzM5O2xsIGJlIGluIGEgS2NvbmZpZyBmaWxlLCBwcm9iYWJseSBzb21ld2hlcmUgdW5kZXIgYGluaXQvYCBzaW5jZSB0aGF0JiMzOTtzIGEgY29tbW9uIHBsYWNlIGZvciBjb3JlIGZlYXR1cmUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgaW4gYGluaXQvS2NvbmZpZ2AgZmlyc3QsIHRoZW4gSSYjMzk7bGwgYnJvYWRlbiB0aGUgc2VhcmNoIGlmIHRoYXQgZG9lc24mIzM5O3QgcGFuIG91dC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MsIGJ1dCBuZWNlc3NhcnkgYmVmb3JlIEkgY2FuIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfQ0dST1VQXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTExMDg9Y29uZmlnIE1FTUNHX1YxXG4tLVxuaW5pdC9LY29uZmlnLTExMjQtXG5pbml0L0tjb25maWc6MTEyNTpjb25maWcgQkxLX0NHUk9VUFxuaW5pdC9LY29uZmlnLTExMjYtXHRib29sIFwmIzM0O0lPIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQyNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgdGdfc2V0X2NvbmZgLCB0aGUga2V5IGNoYW5nZSBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gV2UmIzM5O3ZlIHJlcGxhY2VkIHRoZSBkaXJlY3QgYXNzaWdubWVudCB0byB0aGUgdGFyZ2V0IGZpZWxkIHdpdGggYSBtb3JlIGNhdXRpb3VzIGFwcHJvYWNoLiBJbml0aWFsbHksIHRoZSBjb2RlIGhhZCBhIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQ6IGBpZiAoaXNfdTY0KWAgd2UmIzM5O2QgY2FzdCB0aGUgcHJpdmF0ZSBmaWVsZCBhbmQgd3JpdGUgYHZgIGFzIGlzOyBvdGhlcndpc2Ugd2UgY2FzdCBhcyBgdW5zaWduZWQgaW50YCBhbmQgc2ltcGx5IGFzc2lnbmVkIGB2YC4KCldhaXQgYSBtaW51dGUsIGB2YCBpcyBhbiBgdW5zaWduZWQgbG9uZyBsb25nYCDigJMgYSBgdTY0YC4gU28sIHdoZW4gYGlzX3U2NGAgaXMgKmZhbHNlKiwgYW5kIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBmdW5jdGlvbiBsaWtlIGB0Z19zZXRfY29uZl91aW50YCwgdGhlIHByZXZpb3VzIGFwcHJvYWNoIHdvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gYSBzdHJhaWdodCB0cnVuY2F0aW9uIG9mIGB2YCB0byBgdW5zaWduZWQgaW50YC4gTm93IHRoZSBsb2dpYyBpcyBgbWluKHYsIFVJTlRfTUFYKWAuIFRoYXQgZmVlbHMgYSBiaXQuLi4gdW5yZWZpbmVkLCBkb2VzbiYjMzk7dCBpdD8gTXkgaW5zdGluY3QgaXMgdG8gdXNlIHNvbWV0aGluZyBsaWtlIGBtaW5fdGAgb3IgZXhwbGljaXRseSBjYXN0IGBVSU5UX01BWGAgdG8gYHU2NGAgZm9yIGEgbW9yZSBleHBsaWNpdCB0eXBlIHNhZmV0eS4KCkhvbGQgb24sIEkgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBtaW4odiwgVUlOVF9NQVgpYCBpcyBlZmZlY3RpdmVseSBjYXBwaW5nIGB2YCBhdCB0aGUgdmFsdWUgb2YgYFVJTlRfTUFYYCEgU28sIGlmIHNvbWVvbmUsIGludGVudGlvbmFsbHkgb3IgdW5pbnRlbnRpb25hbGx5LCB0cmllcyB0byBzZXQgYSB0aHJvdHRsZSBsaW1pdCAobGlrZSBgbWF4X2lvcHNgIG9yIGBtYXhfYnBzYCB0aGF0JiMzOTtzIG1hbmFnZWQgYnkgYHRnX3NldF9jb25mX3VpbnRgIG9yIGFueSBvdGhlciBmdW5jdGlvbiB0aGF0IGNhbGxzIGB0Z19zZXRfY29uZmAgd2l0aCBgaXNfdTY0YCBiZWluZyBmYWxzZSkgdG8gYSB2YWx1ZSBsYXJnZXIgdGhhbiB3aGF0IGBVSU5UX01BWGAgYWxsb3dzLCB0aGUgY29kZSBubyBsb25nZXIganVzdCBvdmVyZmxvd3Mgb3IgdHJ1bmNhdGVzIHRoZSB2YWx1ZSAocG90ZW50aWFsbHkgbGVhZGluZyB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGxpa2UgZXh0cmVtZWx5IGxvdyBsaW1pdHMgb3IgZXZlbiB6ZXJvKS4gSW5zdGVhZCwgaXQgY2xhbXBzIHRoZSB2YWx1ZSB0byB0aGUgbWF4aW11bSBwZXJtaXNzaWJsZSBgdW5zaWduZWQgaW50YCEgVGhpcyBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgYSBjcml0aWNhbCBzYWZldHkgbWVhc3VyZS4gQmVmb3JlIGl0IGNvdWxkIGVhc2lseSBsZWFkIHRvIGEgc2lnbmlmaWNhbnQgdnVsbmVyYWJpbGl0eSEKCk5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGB0Z19zZXRfY29uZmAgdG8gYXNzZXNzIHRoZSBicm9hZGVyIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGdfc2V0X2NvbmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXRocm90dGxlLmM9MTMxOD1zdGF0aWMgaW50IGJsa190aHJvdGxfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzUxLVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTM1MjpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzUzLVx0XHRcdCAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZiwgYm9vbCBpc191NjQpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwMy1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MDQ6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdTY0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDUtXHRcdFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDYte1xuYmxvY2svYmxrLXRocm90dGxlLmM6MTQwNzpcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgdHJ1ZSk7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDA4LX1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDktXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDEwOnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3VpbnQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxMS1cdFx0XHRcdGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTIte1xuYmxvY2svYmxrLXRocm90dGxlLmM6MTQxMzpcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgZmFsc2UpO1xuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxNC19XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTQ0Mj1zdGF0aWMgc3RydWN0IGNmdHlwZSB0aHJvdGxfbGVnYWN5X2ZpbGVzW10gPSB7XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ0Ni1cdFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91NjQsXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDQ3Olx0XHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDQ4LVx0fSxcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDUyLVx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NTM6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTQtXHR9LFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTgtXHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NTk6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDYwLVx0fSxcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDY0LVx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3VpbnQsXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDY1Olx0XHQud3JpdGUgPSB0Z19zZXRfY29uZl91aW50LFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2Ni1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgRXZhbHVhdGlvbjogYmxrLXRocm90dGxlLmMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYHRnX3NldF9jb25mYCBsb29rcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIGV4cG9zZWQgdGhyb3VnaCBjZ3JvdXAgZmlsZSB3cml0ZXMg4oCTIGBibGtpby50aHJvdHRsZS5yZWFkX2lvcHNfZGV2aWNlYCwgdGhhdCBzb3J0IG9mIHRoaW5nLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgbGlrZSBRRU1VIG9yIEdDRSwgd2hpY2ggaXMgYSBtYWpvciBwb2ludCBpbiBpdHMgZmF2b3IuCgpUaGUgcmVhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyBgV29ydGhGdXp6aW5nPXRydWVgPyBUaW1lIGZvciBhIHF1aWNrIGd1aWRlbGluZXMgY2hlY2suIFRoZSBjb3JlIHN1YnN5c3RlbXMgbGlzdCBzZWVtcyByZWxldmFudC4gTWVtb3J5IG1hbmFnZW1lbnQsIGxvY2tpbmcsIEJQRiwgc2NoZWR1bGVyLi4uIGFsbCBnb29kIGNhbmRpZGF0ZXMuIEJsb2NrIGxheWVyIHRvbywgb2YgY291cnNlLCBhbmQgdGhpcyBpcyBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gYmxvY2sgSS9PIHRocm90dGxpbmcuIFJlZmFjdG9yaW5ncyBhbmQgY29kZSBjbGVhbnVwcyBhbHNvIGFwcGx5IGlmIHRoZXJlJiMzOTtzIHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgYWJzdHJhY3Rpb25zIG9yIGFsZ29yaXRobSBmbG93cy4KClNvLCB0aGUgZm9jdXMgc3ltYm9scy4gYHRnX3NldF9jb25mYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYW5kIGl0IGNhbGxzLCBvciBpcyBjYWxsZWQgYnksIGB0Z19zZXRfY29uZl91aW50YCBhbmQgYHRnX3NldF9jb25mX3U2NGAuIFRoZXkmIzM5O3JlIGFsbCBzdGF0aWMsIHNvIHRoZXkmIzM5O3JlIHByb2JhYmx5IGlubGluZWQuIFNvIEkmIzM5O2xsIGluY2x1ZGUgYWxsIHRocmVlIC0gYHRnX3NldF9jb25mYCwgYHRnX3NldF9jb25mX3VpbnRgLCBhbmQgYHRnX3NldF9jb25mX3U2NGAuIEdvdHRhIGJlIHRob3JvdWdoLgoKTm93LCBqdXN0IHRvIGJlIGNlcnRhaW4sIEkgc2hvdWxkIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBibGstdGhyb3R0bGUuY2AgZm9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBsaW5lcyAxNDEwLTE0NzAgaW4gdGhhdCBmaWxlIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIGluIHRoaXMgYXJlYSBJIHNob3VsZCBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQxMDpcdHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3VpbnQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuMTQxMTpcdFx0XHRcdFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuMTQxMjpcdHtcbjE0MTM6XHRcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgZmFsc2UpO1xuMTQxNDpcdH1cbjE0MTU6XHRcbjE0MTY6XHRzdGF0aWMgaW50IHRnX3ByaW50X3J3c3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuMTQxNzpcdHtcbjE0MTg6XHRcdGJsa2NnX3ByaW50X2Jsa2dzKHNmLCBjc3NfdG9fYmxrY2coc2VxX2NzcyhzZikpLFxuMTQxOTpcdFx0XHRcdCAgYmxrZ19wcmZpbGxfcndzdGF0LCBcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLFxuMTQyMDpcdFx0XHRcdCAgc2VxX2NmdChzZiktXHUwMDNlcHJpdmF0ZSwgdHJ1ZSk7XG4xNDIxOlx0XHRyZXR1cm4gMDtcbjE0MjI6XHR9XG4xNDIzOlx0XG4xNDI0Olx0c3RhdGljIHU2NCB0Z19wcmZpbGxfcndzdGF0X3JlY3Vyc2l2ZShzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLFxuMTQyNTpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkLCBpbnQgb2ZmKVxuMTQyNjpcdHtcbjE0Mjc6XHRcdHN0cnVjdCBibGtnX3J3c3RhdF9zYW1wbGUgc3VtO1xuMTQyODpcdFxuMTQyOTpcdFx0YmxrZ19yd3N0YXRfcmVjdXJzaXZlX3N1bShwZF90b19ibGtnKHBkKSwgXHUwMDI2YmxrY2dfcG9saWN5X3Rocm90bCwgb2ZmLFxuMTQzMDpcdFx0XHRcdFx0ICBcdTAwMjZzdW0pO1xuMTQzMTpcdFx0cmV0dXJuIF9fYmxrZ19wcmZpbGxfcndzdGF0KHNmLCBwZCwgXHUwMDI2c3VtKTtcbjE0MzI6XHR9XG4xNDMzOlx0XG4xNDM0Olx0c3RhdGljIGludCB0Z19wcmludF9yd3N0YXRfcmVjdXJzaXZlKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4xNDM1Olx0e1xuMTQzNjpcdFx0YmxrY2dfcHJpbnRfYmxrZ3Moc2YsIGNzc190b19ibGtjZyhzZXFfY3NzKHNmKSksXG4xNDM3Olx0XHRcdFx0ICB0Z19wcmZpbGxfcndzdGF0X3JlY3Vyc2l2ZSwgXHUwMDI2YmxrY2dfcG9saWN5X3Rocm90bCxcbjE0Mzg6XHRcdFx0XHQgIHNlcV9jZnQoc2YpLVx1MDAzZXByaXZhdGUsIHRydWUpO1xuMTQzOTpcdFx0cmV0dXJuIDA7XG4xNDQwOlx0fVxuMTQ0MTpcdFxuMTQ0MjpcdHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9sZWdhY3lfZmlsZXNbXSA9IHtcbjE0NDM6XHRcdHtcbjE0NDQ6XHRcdFx0Lm5hbWUgPSBcJiMzNDt0aHJvdHRsZS5yZWFkX2Jwc19kZXZpY2VcJiMzNDssXG4xNDQ1Olx0XHRcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIGJwc1tSRUFEXSksXG4xNDQ2Olx0XHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdTY0LFxuMTQ0NzpcdFx0XHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXG4xNDQ4Olx0XHR9LFxuMTQ0OTpcdFx0e1xuMTQ1MDpcdFx0XHQubmFtZSA9IFwmIzM0O3Rocm90dGxlLndyaXRlX2Jwc19kZXZpY2VcJiMzNDssXG4xNDUxOlx0XHRcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIGJwc1tXUklURV0pLFxuMTQ1MjpcdFx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcbjE0NTM6XHRcdFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdTY0LFxuMTQ1NDpcdFx0fSxcbjE0NTU6XHRcdHtcbjE0NTY6XHRcdFx0Lm5hbWUgPSBcJiMzNDt0aHJvdHRsZS5yZWFkX2lvcHNfZGV2aWNlXCYjMzQ7LFxuMTQ1NzpcdFx0XHQucHJpdmF0ZSA9IG9mZnNldG9mKHN0cnVjdCB0aHJvdGxfZ3JwLCBpb3BzW1JFQURdKSxcbjE0NTg6XHRcdFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91aW50LFxuMTQ1OTpcdFx0XHQud3JpdGUgPSB0Z19zZXRfY29uZl91aW50LFxuMTQ2MDpcdFx0fSxcbjE0NjE6XHRcdHtcbjE0NjI6XHRcdFx0Lm5hbWUgPSBcJiMzNDt0aHJvdHRsZS53cml0ZV9pb3BzX2RldmljZVwmIzM0OyxcbjE0NjM6XHRcdFx0LnByaXZhdGUgPSBvZmZzZXRvZihzdHJ1Y3QgdGhyb3RsX2dycCwgaW9wc1tXUklURV0pLFxuMTQ2NDpcdFx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3VpbnQsXG4xNDY1Olx0XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXG4xNDY2Olx0XHR9LFxuMTQ2NzpcdFx0e1xuMTQ2ODpcdFx0XHQubmFtZSA9IFwmIzM0O3Rocm90dGxlLmlvX3NlcnZpY2VfYnl0ZXNcJiMzNDssXG4xNDY5Olx0XHRcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIHN0YXRfYnl0ZXMpLFxuMTQ3MDpcdFx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9yd3N0YXQsXG4xNDcxOlx0XHR9LFxuMTQ3MjpcdFx0e1xuMTQ3MzpcdFx0XHQubmFtZSA9IFwmIzM0O3Rocm90dGxlLmlvX3NlcnZpY2VfYnl0ZXNfcmVjdXJzaXZlXCYjMzQ7LFxuMTQ3NDpcdFx0XHQucHJpdmF0ZSA9IG9mZnNldG9mKHN0cnVjdCB0aHJvdGxfZ3JwLCBzdGF0X2J5dGVzKSxcbjE0NzU6XHRcdFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfcndzdGF0X3JlY3Vyc2l2ZSxcbjE0NzY6XHRcdH0sXG4xNDc3Olx0XHR7XG4xNDc4Olx0XHRcdC5uYW1lID0gXCYjMzQ7dGhyb3R0bGUuaW9fc2VydmljZWRcJiMzNDssXG4xNDc5Olx0XHRcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIHN0YXRfaW9zKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk2MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGNncm91cCB2MiBUaHJvdHRsaW5nIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0aHJvdHRsaW5nIG1lY2hhbmlzbXMgaW4gY2dyb3VwIHYyIGEgYml0IGJldHRlci4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHNlZSBpZiBpdCYjMzk7cyBsZXZlcmFnaW5nIHRoZSBzYW1lIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgYXMgY2dyb3VwIHYxLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gd29uZGVyaW5nIGlmIGl0IHVzZXMgYHRnX3NldF9jb25mYCBvciBzb21lIG90aGVyIGFuYWxvZ291cyBmdW5jdGlvbiBmb3Igc2V0dGluZyB0aGUgdGhyb3R0bGluZyBjb25maWd1cmF0aW9ucy4gVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4KClRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGJsb2NrIEkvTyB0aHJvdHRsaW5nLCBgYmxvY2svYmxrLXRocm90dGxlLmNgIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBkbyBhIHF1aWNrIHNlYXJjaCB3aXRoaW4gdGhhdCBmaWxlIGZvciAmIzM0O3Rocm90bF9maWxlcyYjMzQ7IOKAkyB0aGF0JiMzOTtzIG9mdGVuIGEgZ29vZCBrZXl3b3JkIHRvIGZpbmQgcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgaW52b2x2ZWQgd2l0aCB0aGUgdGhyb3R0bGUgaW1wbGVtZW50YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gaGFuZGxpbmcuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGxlYWQgbWUgdG8gdGhlIGNvcmUgbG9naWMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Z19zZXRfY29uZnx0aHJvdGxfZmlsZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYz0xMzE4PXN0YXRpYyBpbnQgYmxrX3Rocm90bF9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNTEtXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxMzUyOnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNTMtXHRcdFx0ICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmLCBib29sIGlzX3U2NClcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDAzLVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQwNDpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91NjQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwNS1cdFx0XHQgICAgICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwNi17XG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDA3Olx0cmV0dXJuIHRnX3NldF9jb25mKG9mLCBidWYsIG5ieXRlcywgb2ZmLCB0cnVlKTtcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDgtfVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwOS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MTA6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdWludChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDExLVx0XHRcdFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxMi17XG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDEzOlx0cmV0dXJuIHRnX3NldF9jb25mKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBmYWxzZSk7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDE0LX1cbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNDQyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9sZWdhY3lfZmlsZXNbXSA9IHtcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDQ2LVx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NDc6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NDgtXHR9LFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTItXHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdTY0LFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ1MzpcdFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdTY0LFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1NC1cdH0sXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1OC1cdFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91aW50LFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ1OTpcdFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdWludCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjAtXHR9LFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjQtXHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NjU6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDY2LVx0fSxcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNTQyPXN0YXRpYyBzc2l6ZV90IHRnX3NldF9saW1pdChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTYyMy1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE2MjQ6c3RhdGljIHN0cnVjdCBjZnR5cGUgdGhyb3RsX2ZpbGVzW10gPSB7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNjI1LVx0e1xuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE2Nzc9c3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfdGhyb3RsID0ge1xuYmxvY2svYmxrLXRocm90dGxlLmM6MTY3ODpcdC5kZmxfY2Z0eXBlc1x0XHQ9IHRocm90bF9maWxlcyxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2NzktXHQubGVnYWN5X2NmdHlwZXNcdFx0PSB0aHJvdGxfbGVnYWN5X2ZpbGVzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE4NgoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24gYW5kIFN5bWJvbCBSZXZpZXcqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IEkgbmVlZCB0byB2ZXJpZnkgYSBjb3VwbGUgb2YgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyBhcmUgc2V0IGNvcnJlY3RseS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGNoZWNraW5nIGZvciBgQkxLX0RFVl9USFJPVFRMSU5HYCwgYW5kLCBiZWNhdXNlIGl0JiMzOTtzIGEgZGVwZW5kZW5jeSwgYEJMS19DR1JPVVBgLiBJdOKAmXMgY3J1Y2lhbCB0aGlzIGlzIGNvcnJlY3QgYmVmb3JlIHdlIG1vdmUgb24uCgpOb3csIGxldCYjMzk7cyBwaXZvdCB0byB0aGUgcmVsZXZhbnQgc3ltYm9scy4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgY29yZSBmdW5jdGlvbnMgYXJlIHJlYWR5IHRvIGV4ZWN1dGUgY29ycmVjdGx5LiBNeSBmb2N1cyBoZXJlIGlzIG9uIGB0Z19zZXRfY29uZmAsIGB0Z19zZXRfY29uZl91aW50YCwgYW5kIGB0Z19zZXRfY29uZl91NjRgLiBJIG1pZ2h0IGhhdmUgdG8gcmV2aXNpdCB0aGlzIHNlY3Rpb24gaWYgc29tZXRoaW5nIGlzIG9mZi4KCkp1c3QgdG8gYmUgY2VydGFpbiwgSeKAmWxsIHRha2UgYSBxdWljayBsb29rIHRocm91Z2ggYGJsb2NrL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyBvciBzeW1ib2xzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBBaCwgdGhlcmUgaXQgaXM6IGNvbmZpcm1pbmcgYEJMS19ERVZfVEhST1RUTElOR2AmIzM5O3MgYm9vbGVhbiBkZWNsYXJhdGlvbiwgdGhlIGBkZXBlbmRzIG9uIEJMS19DR1JPVVBgIGFuZCB0aGUgYHNlbGVjdCBCTEtfQ0dST1VQX1JXU1RBVGAuIEV2ZXJ5dGhpbmcgc2VlbXMgY29tcGxldGVseSBjbGVhciBhbmQgZXhhY3RseSBhcyBleHBlY3RlZDsgdGhlIGRlcGVuZGVuY3kgaXMgZXN0YWJsaXNoZWQgY29ycmVjdGx5LgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgbm93LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGdfc2V0X2NvbmYmIzM0OywKICAgICYjMzQ7dGdfc2V0X2NvbmZfdWludCYjMzQ7LAogICAgJiMzNDt0Z19zZXRfY29uZl91NjQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRnX3NldF9jb25mKClgIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93L3RydW5jYXRpb24gd2hlbiBhc3NpZ25pbmcgMzItYml0IHRocm90dGxlIGNvbmZpZ3VyYXRpb24gZmllbGRzIGJ5IGNsYW1waW5nIHRoZSBwYXJzZWQgNjQtYml0IHZhbHVlIHRvIGBVSU5UX01BWGAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYmxraW8gY2dyb3VwIGNvbnRyb2wgaW50ZXJmYWNlIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBwcm9wZXIgYmVoYXZpb3Igd2hlbiB3cml0aW5nIHZhcmlvdXMgdmFsdWVzIHRvIHRocm90dGxlIHBhcmFtZXRlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGdfc2V0X2NvbmYmIzM0OywKICAgICYjMzQ7dGdfc2V0X2NvbmZfdWludCYjMzQ7LAogICAgJiMzNDt0Z19zZXRfY29uZl91NjQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRnX3NldF9jb25mKClgIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93L3RydW5jYXRpb24gd2hlbiBhc3NpZ25pbmcgMzItYml0IHRocm90dGxlIGNvbmZpZ3VyYXRpb24gZmllbGRzIGJ5IGNsYW1waW5nIHRoZSBwYXJzZWQgNjQtYml0IHZhbHVlIHRvIGBVSU5UX01BWGAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYmxraW8gY2dyb3VwIGNvbnRyb2wgaW50ZXJmYWNlIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBwcm9wZXIgYmVoYXZpb3Igd2hlbiB3cml0aW5nIHZhcmlvdXMgdmFsdWVzIHRvIHRocm90dGxlIHBhcmFtZXRlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGdfc2V0X2NvbmYoKWAgaW4gYGJsb2NrL2Jsay10aHJvdHRsZS5jYCB0byBmYWN0b3Igb3V0IHRoZSBwb2ludGVyIGNhbGN1bGF0aW9uIGludG8gYSBoZWxwZXIgbG9jYWwgdmFyaWFibGUgYGZpZWxkYCBhbmQgdG8gY2xhbXAgdmFsdWVzIHRvIGBVSU5UX01BWGAgdmlhIGBtaW4odiwgVUlOVF9NQVgpYCB3aGVuIHNldHRpbmcgdW5zaWduZWQgMzItYml0IGludGVnZXIgY29uZmlndXJhdGlvbiBmaWVsZHMuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSB2YXJpYWJsZSBgdmAgaXMgcGFyc2VkIGFuZCB2YWxpZGF0ZWQgYnkgYHNzY2FuZmAsIGFuZCB0aGUgdGFyZ2V0IHN0cnVjdCBmaWVsZCBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBjbGFtcGVkIGludGVnZXIgdmFsdWUuIEFueSBwb3RlbnRpYWwgbWVtb3J5LXNhZmV0eSBvciBjb25jdXJyZW5jeSBpc3N1ZXMgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9VQlNBTi9MT0NLREVQKS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OGM4NDZhZWNiMWQyYjRmYTZmNWRhNzMwYzdmNTY5ZTNmZjcwMDU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxNDowODo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmMKaW5kZXggZmZjM2I3MDA2NWQ0Yi4uOTdhZDc5NTlkMDA2ZiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXRocm90dGxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLXRocm90dGxlLmMKQEAgLTEzODMsMTAgJiM0MzsxMzgzLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwKIAl0ZyA9IGJsa2dfdG9fdGcoY3R4LmJsa2cpOwogCXRnX3VwZGF0ZV9jYXJyeW92ZXIodGcpOwogCiYjNDM7CXZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyAmIzQzOyBvZl9jZnQob2YpLSZndDtwcml2YXRlOwomIzQzOwogCWlmIChpc191NjQpCi0JCSoodTY0ICopKCh2b2lkICopdGcgJiM0Mzsgb2ZfY2Z0KG9mKS0mZ3Q7cHJpdmF0ZSkgPSB2OwomIzQzOwkJKih1NjQgKilmaWVsZCA9IHY7CiAJZWxzZQotCQkqKHVuc2lnbmVkIGludCAqKSgodm9pZCAqKXRnICYjNDM7IG9mX2NmdChvZiktJmd0O3ByaXZhdGUpID0gdjsKJiM0MzsJCSoodW5zaWduZWQgaW50ICopZmllbGQgPSBtaW4odiwgVUlOVF9NQVgpOwogCiAJdGdfY29uZl91cGRhdGVkKHRnLCBmYWxzZSk7CiAJcmV0ID0gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgYW5hbHlzaXMsIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCBpdDoKCioqQW5hbHl6aW5nIGBibGstdGhyb3R0bGUuY2AgUGF0Y2gqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhdGNoIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gd2hlcmUgYHRnX3NldF9jb25mYCBpcyBiZWluZyB1c2VkLCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDEzODMgaW4gYGJsb2NrL2Jsay10aHJvdHRsZS5jYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IG15IGJlYXJpbmdzIG9uIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZSBmdW5jdGlvbiBjYWxsIGFuZCBoZWxwcyBtZSBncm9rIHRoZSBzdXJyb3VuZGluZyBsb2dpYy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBlZmZlY3Qgb2YgYW55IGNoYW5nZXMgb24gaG93IHRoZSB0aHJvdHRsaW5nIG1lY2hhbmlzbSB3b3Jrcy4gVW5kZXJzdGFuZGluZyB0aGF0IGNhbGwmIzM5O3MgY29udGV4dCBpcyBnb2luZyB0byBiZSBrZXkgdG8gZ3Jhc3BpbmcgdGhpcyBwYXRjaCYjMzk7cyBpbnRlbnRpb24gYW5kIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1MDpcdFxuMTM1MTpcdFxuMTM1MjpcdHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbjEzNTM6XHRcdFx0XHQgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYsIGJvb2wgaXNfdTY0KVxuMTM1NDpcdHtcbjEzNTU6XHRcdHN0cnVjdCBibGtjZyAqYmxrY2cgPSBjc3NfdG9fYmxrY2cob2ZfY3NzKG9mKSk7XG4xMzU2Olx0XHRzdHJ1Y3QgYmxrZ19jb25mX2N0eCBjdHg7XG4xMzU3Olx0XHRzdHJ1Y3QgdGhyb3RsX2dycCAqdGc7XG4xMzU4Olx0XHRpbnQgcmV0O1xuMTM1OTpcdFx0dTY0IHY7XG4xMzYwOlx0XG4xMzYxOlx0XHRibGtnX2NvbmZfaW5pdChcdTAwMjZjdHgsIGJ1Zik7XG4xMzYyOlx0XG4xMzYzOlx0XHRyZXQgPSBibGtnX2NvbmZfb3Blbl9iZGV2KFx1MDAyNmN0eCk7XG4xMzY0Olx0XHRpZiAocmV0KVxuMTM2NTpcdFx0XHRyZXR1cm4gcmV0O1xuMTM2NjpcdFxuMTM2NzpcdFx0aWYgKCFibGtfdGhyb3RsX2FjdGl2YXRlZChjdHguYmRldi1cdTAwM2ViZF9xdWV1ZSkpIHtcbjEzNjg6XHRcdFx0cmV0ID0gYmxrX3Rocm90bF9pbml0KGN0eC5iZGV2LVx1MDAzZWJkX2Rpc2spO1xuMTM2OTpcdFx0XHRpZiAocmV0KVxuMTM3MDpcdFx0XHRcdGdvdG8gY2xvc2VfYmRldjtcbjEzNzE6XHRcdH1cbjEzNzI6XHRcbjEzNzM6XHRcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLCBcdTAwMjZjdHgpO1xuMTM3NDpcdFx0aWYgKHJldClcbjEzNzU6XHRcdFx0Z290byBjbG9zZV9iZGV2O1xuMTM3NjpcdFxuMTM3NzpcdFx0cmV0ID0gLUVJTlZBTDtcbjEzNzg6XHRcdGlmIChzc2NhbmYoY3R4LmJvZHksIFwmIzM0OyVsbHVcJiMzNDssIFx1MDAyNnYpICE9IDEpXG4xMzc5Olx0XHRcdGdvdG8gdW5wcmVwO1xuMTM4MDpcdFx0aWYgKCF2KVxuMTM4MTpcdFx0XHR2ID0gVTY0X01BWDtcbjEzODI6XHRcbjEzODM6XHRcdHRnID0gYmxrZ190b190ZyhjdHguYmxrZyk7XG4xMzg0Olx0XHR0Z191cGRhdGVfY2FycnlvdmVyKHRnKTtcbjEzODU6XHRcbjEzODY6XHRcdHZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyAmIzQzOyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGU7XG4xMzg3Olx0XG4xMzg4Olx0XHRpZiAoaXNfdTY0KVxuMTM4OTpcdFx0XHQqKHU2NCAqKWZpZWxkID0gdjtcbjEzOTA6XHRcdGVsc2VcbjEzOTE6XHRcdFx0Kih1bnNpZ25lZCBpbnQgKilmaWVsZCA9IG1pbih2LCBVSU5UX01BWCk7XG4xMzkyOlx0XG4xMzkzOlx0XHR0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTtcbjEzOTQ6XHRcdHJldCA9IDA7XG4xMzk1Olx0XG4xMzk2Olx0dW5wcmVwOlxuMTM5NzpcdFx0YmxrZ19jb25mX3VucHJlcChcdTAwMjZjdHgpO1xuMTM5ODpcdFxuMTM5OTpcdGNsb3NlX2JkZXY6XG4xNDAwOlx0XHRibGtnX2NvbmZfY2xvc2VfYmRldihcdTAwMjZjdHgpO1xuMTQwMTpcdFx0cmV0dXJuIHJldCA/OiBuYnl0ZXM7XG4xNDAyOlx0fVxuMTQwMzpcdFxuMTQwNDpcdHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3U2NChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4xNDA1Olx0XHRcdFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbjE0MDY6XHR7XG4xNDA3Olx0XHRyZXR1cm4gdGdfc2V0X2NvbmYob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIHRydWUpO1xuMTQwODpcdH1cbjE0MDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgQ2hhbmdlIGluIEJsb2NrIFRocm90dGxlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBkaWZmYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgY2hhbmdpbmcgaG93IHdlIHNldCBjb25maWd1cmF0aW9uIHZhbHVlcyB3aXRoaW4gdGhlIGJsb2NrIEkvTyB0aHJvdHRsZSBncm91cCwgc3BlY2lmaWNhbGx5IGluIGBibGstdGhyb3R0bGUuY2AuIEZpcnN0LCBJIHNlZSB0aGV5JiMzOTt2ZSByZWZhY3RvcmVkIGEgY29tbW9uIGNhbGN1bGF0aW9uIGludG8gYHZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyAmIzQzOyBvZl9jZnQob2YpLSZndDtwcml2YXRlO2AsIHdoaWNoIGlzIGdvb2QuIEl0JiMzOTtzIGEgbmljZSwgY2xlYW4gd2F5IHRvIGdldCB0aGUgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IGZpZWxkIHdpdGhpbiB0aGUgdGhyb3R0bGUgZ3JvdXAmIzM5O3MgZGF0YSBzdHJ1Y3R1cmUuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIHRoZSBoYW5kbGluZyBvZiB0aGUgc2V0IHZhbHVlcy4gUHJldmlvdXNseSwgaWYgdGhlIHZhbHVlIGB2YCB3YXMgYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIsIGl0IHdhcyBzaW1wbHkgYXNzaWduZWQgdG8gdGhlIHRhcmdldCBtZW1vcnkgbG9jYXRpb24gYXMgYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIuIEhvd2V2ZXIsIGlmIHRoZSB2YWx1ZSB3YXNuJiMzOTt0IGEgNjQtYml0IGludGVnZXIsIHRoZXJlIHdhcyBhIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIHRydW5jYXRpb246IGAqKHVuc2lnbmVkIGludCAqKWZpZWxkID0gdjtgLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBsYXJnZSBgdTY0YCB2YWx1ZSBiZWluZyB0cnVuY2F0ZWQgdG8gYW4gYHVuc2lnbmVkIGludGAuIE5vdywgdGhlIGNvZGUgZXhwbGljaXRseSBjbGFtcHMgdGhlIHZhbHVlIHRvIGBVSU5UX01BWGAgd2l0aCBgbWluKHYsIFVJTlRfTUFYKWAgaW4gdGhpcyBjYXNlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoaXMgc2VlbXMgbGlrZSBhIGdvb2Qgc2FmZXR5IGltcHJvdmVtZW50LiYjMzQ7IEl0JiMzOTtzIHByZXZlbnRpbmcgcG90ZW50aWFsIG92ZXJmbG93IG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgc29tZW9uZSBwcm92aWRlcyBhIGxhcmdlIHZhbHVlIGZvciBhIGZpZWxkIHRoYXQmIzM5O3MgbWVhbnQgdG8gYmUgYW4gYHVuc2lnbmVkIGludGAuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcz8gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLiBDb3VsZCB0aGlzIGNyZWF0ZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBsZWFrLCBvciBzb21ldGhpbmcgS01TQU4gd291bGQgZmxhZz8gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgoqICAgKipJbml0aWFsaXphdGlvbjoqKiBgdmAgaXMgcG9wdWxhdGVkIGJ5IGBzc2NhbmZgLCB3aGljaCBzaG91bGQgaGFuZGxlIHRoZSBpbml0aWFsaXphdGlvbi4gYGZpZWxkYCBpcyBjYWxjdWxhdGVkIHVzaW5nIGEgZGVmaW5lZCBvZmZzZXQgaW50byB0aGUgYHRnYCBzdHJ1Y3R1cmUsIHdoaWNoIHNob3VsZCBiZSBmaW5lLiBUaGUgdmFsdWUgYmVpbmcgd3JpdHRlbiBpbnRvIGAqZmllbGRgIGlzIGEgdmFsdWUgZGVyaXZlZCBlaXRoZXIgZnJvbSBgc3NjYW5mYCYjMzk7cyBpbnB1dCBvciBmcm9tIHRydW5jYXRpb24sIHdoaWNoIGlzIHNhZmUuCiogICAqKk1lbW9yeSBSZWFkcyB0byBVc2Vyc3BhY2U6KiogTm8sIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGp1c3Qgd3JpdGluZyBhIHZhbHVlIHRvIGEgc3RydWN0dXJlLiBOb3RoaW5nIGlzIGJlaW5nIHJlYWQgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4KKiAgICoqQnVmZmVyIExlbmd0aHMgYW5kIENvbnRyb2wgRmxvdzoqKiBOby4gSXQmIzM5O3Mgc2ltcGx5IHNldHRpbmcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHdpdGhpbiBhIHRocm90dGxlIGdyb3VwIHN0cnVjdHVyZS4KClRoZSBjaGFuZ2UgbG9va3MgbGlrZSBhIHN0cmljdGx5IGJldHRlciBpbXBsZW1lbnRhdGlvbiBmcm9tIGEgc2FmZXR5IHN0YW5kcG9pbnQuIEkgdGhpbmsgdGhpcyByZWR1Y2VzIHBvdGVudGlhbCBpc3N1ZXMsIG5vdCBpbnRyb2R1Y2UgdGhlbS4gTm93LCBsZXQgbWUgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGFueSBwb3RlbnRpYWwgY2FsbGVycy4gTmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgY3JlYXRlIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBlbHNld2hlcmUgaW4gYGJsay10aHJvdHRsZS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGdfc2V0X2NvbmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYz0xMzE4PXN0YXRpYyBpbnQgYmxrX3Rocm90bF9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNTEtXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxMzUyOnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNTMtXHRcdFx0ICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmLCBib29sIGlzX3U2NClcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDAzLVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQwNDpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91NjQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwNS1cdFx0XHQgICAgICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwNi17XG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDA3Olx0cmV0dXJuIHRnX3NldF9jb25mKG9mLCBidWYsIG5ieXRlcywgb2ZmLCB0cnVlKTtcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDgtfVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwOS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MTA6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdWludChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDExLVx0XHRcdFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxMi17XG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDEzOlx0cmV0dXJuIHRnX3NldF9jb25mKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBmYWxzZSk7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDE0LX1cbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNDQyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9sZWdhY3lfZmlsZXNbXSA9IHtcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDQ2LVx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NDc6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NDgtXHR9LFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTItXHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdTY0LFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ1MzpcdFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdTY0LFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1NC1cdH0sXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1OC1cdFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91aW50LFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ1OTpcdFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdWludCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjAtXHR9LFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjQtXHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NjU6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDY2LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpZ2dpbmcgaW50byBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyB3aXRoIHRoaXMgY29uZmlndXJhdGlvbi4gVGltZSB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGB0Z19jb25mX3VwZGF0ZWRgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgKmhvdyogdGhlc2UgY29uZmlndXJhdGlvbiB2YWx1ZXMsIGFzIHNldCBoZXJlLCBhcmUgYmVpbmcgYWNjZXNzZWQgYW5kIGludGVycHJldGVkIGRvd25zdHJlYW0uIEkgd2FudCB0byBzZWUgaG93IHRoZSBjb2RlIGlzIGFjdHVhbGx5ICp1c2luZyogdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSB0aGF04oCZcyBiZWluZyB1cGRhdGVkIGluIHRoaXMgc2VjdGlvbi4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgcmVhZCBjYWxscywgaG93IHRoZXkgYXJlIHN0cnVjdHVyZWQsIGFuZCB3aGF0IGNvbnRleHQgdGhleSBhcmUgdXNlZCB3aXRoaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIG5vdCBqdXN0ICppZiogdGhleSYjMzk7cmUgcmVhZCwgYnV0IGFsc28gKmhvdyogdGhleSBhcmUgYmVpbmcgaW50ZXJwcmV0ZWQgYW5kIHBvdGVudGlhbGx5IG1hbmlwdWxhdGVkIGR1cmluZyB0aGUgcnVudGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQxMDpcdHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3VpbnQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuMTQxMTpcdFx0XHRcdFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuMTQxMjpcdHtcbjE0MTM6XHRcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgZmFsc2UpO1xuMTQxNDpcdH1cbjE0MTU6XHRcbjE0MTY6XHRzdGF0aWMgaW50IHRnX3ByaW50X3J3c3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuMTQxNzpcdHtcbjE0MTg6XHRcdGJsa2NnX3ByaW50X2Jsa2dzKHNmLCBjc3NfdG9fYmxrY2coc2VxX2NzcyhzZikpLFxuMTQxOTpcdFx0XHRcdCAgYmxrZ19wcmZpbGxfcndzdGF0LCBcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLFxuMTQyMDpcdFx0XHRcdCAgc2VxX2NmdChzZiktXHUwMDNlcHJpdmF0ZSwgdHJ1ZSk7XG4xNDIxOlx0XHRyZXR1cm4gMDtcbjE0MjI6XHR9XG4xNDIzOlx0XG4xNDI0Olx0c3RhdGljIHU2NCB0Z19wcmZpbGxfcndzdGF0X3JlY3Vyc2l2ZShzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLFxuMTQyNTpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkLCBpbnQgb2ZmKVxuMTQyNjpcdHtcbjE0Mjc6XHRcdHN0cnVjdCBibGtnX3J3c3RhdF9zYW1wbGUgc3VtO1xuMTQyODpcdFxuMTQyOTpcdFx0YmxrZ19yd3N0YXRfcmVjdXJzaXZlX3N1bShwZF90b19ibGtnKHBkKSwgXHUwMDI2YmxrY2dfcG9saWN5X3Rocm90bCwgb2ZmLFxuMTQzMDpcdFx0XHRcdFx0ICBcdTAwMjZzdW0pO1xuMTQzMTpcdFx0cmV0dXJuIF9fYmxrZ19wcmZpbGxfcndzdGF0KHNmLCBwZCwgXHUwMDI2c3VtKTtcbjE0MzI6XHR9XG4xNDMzOlx0XG4xNDM0Olx0c3RhdGljIGludCB0Z19wcmludF9yd3N0YXRfcmVjdXJzaXZlKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4xNDM1Olx0e1xuMTQzNjpcdFx0YmxrY2dfcHJpbnRfYmxrZ3Moc2YsIGNzc190b19ibGtjZyhzZXFfY3NzKHNmKSksXG4xNDM3Olx0XHRcdFx0ICB0Z19wcmZpbGxfcndzdGF0X3JlY3Vyc2l2ZSwgXHUwMDI2YmxrY2dfcG9saWN5X3Rocm90bCxcbjE0Mzg6XHRcdFx0XHQgIHNlcV9jZnQoc2YpLVx1MDAzZXByaXZhdGUsIHRydWUpO1xuMTQzOTpcdFx0cmV0dXJuIDA7XG4xNDQwOlx0fVxuMTQ0MTpcdFxuMTQ0MjpcdHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9sZWdhY3lfZmlsZXNbXSA9IHtcbjE0NDM6XHRcdHtcbjE0NDQ6XHRcdFx0Lm5hbWUgPSBcJiMzNDt0aHJvdHRsZS5yZWFkX2Jwc19kZXZpY2VcJiMzNDssXG4xNDQ1Olx0XHRcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIGJwc1tSRUFEXSksXG4xNDQ2Olx0XHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdTY0LFxuMTQ0NzpcdFx0XHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXG4xNDQ4Olx0XHR9LFxuMTQ0OTpcdFx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjM0CgkJCQkJCQlvdXRwdXQ6IDE5MQoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSB0aHJvdGxfZ3JwIENvbmZpZ3VyYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCBgdGdfc2V0X2NvbmZgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBgYnBzYCBvciBgaW9wc2AgdmFsdWVzIHdpdGhpbiBhIGB0aHJvdGxfZ3JwYCBzdHJ1Y3R1cmUuIFRoZXNlIHZhbHVlcywgaW50ZWdlcnMgb3IgYHU2NGAgdmFsdWVzLCBkZWZpbmUgdGhlIGJhbmR3aWR0aCBvciBJT1BTIGxpbWl0cy4gVGhlIGNydWNpYWwgcGFydCBoZXJlIGlzIHRoZSBwYXRjaCYjMzk7cyBjbGFtcGluZyBvZiB0aGUgdmFsdWUgYHZgIHdoZW4gYCFpc191NjRgLiBJdCYjMzk7cyB1c2luZyBgbWluKHYsICh1NjQpVUlOVF9NQVgpYCBiZWZvcmUgYXNzaWduaW5nIHRvIHRoZSBgKih1bnNpZ25lZCBpbnQgKilmaWVsZGAuIFRoaXMgaXMgYSBjcml0aWNhbCBkZWZlbnNpdmUgbWVhc3VyZS4gSXQmIzM5O3MgZGVzaWduZWQgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93IG9yIHRydW5jYXRpb24gaXNzdWVzLCBlc3BlY2lhbGx5IGlmIGEgdmVyeSBsYXJnZSB2YWx1ZSBpcyBiZWluZyBzZXQgd2hlbiBpdCYjMzk7cyBtZWFudCB0byBiZSBhbiB1bnNpZ25lZCBpbnRlZ2VyLgoKVGhlIG1vc3QgaW1wb3J0YW50IHRha2Vhd2F5IGZvciBtZSBpcyB0aGUgYWJzZW5jZSBvZiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnktcmVsYXRlZCBpc3N1ZXMuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucyB3aGVyZSBtZW1vcnkgaXMgbm90IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIHRoZXJlJiMzOTtzIG5vIHBvdGVudGlhbCBmb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIGNydWNpYWxseSwgdGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgcmVseSBvbiB0aGUgc3RhdGUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgZXhjZWxsZW50OyBpdCBzaWduaWZpY2FudGx5IGxvd2VycyB0aGUgcmlzayBwcm9maWxlLgoKQ29uc2lkZXJpbmcgYWxsIHRoaXMsIGl0JiMzOTtzIGNsZWFyOiBgTmVlZHNLTVNBTmAgaXMgdW5lcXVpdm9jYWxseSBgZmFsc2VgLiBUaGUgcGF0Y2ggc2VlbXMgd2VsbC1kZWZlbmRlZCBhZ2FpbnN0IHBvdGVudGlhbCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcHJvYmxlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Z19zZXRfY29uZigpYCBpbiBgYmxvY2svYmxrLXRocm90dGxlLmNgIHRvIGZhY3RvciBvdXQgdGhlIHBvaW50ZXIgY2FsY3VsYXRpb24gaW50byBhIGhlbHBlciBsb2NhbCB2YXJpYWJsZSBgZmllbGRgIGFuZCB0byBjbGFtcCB2YWx1ZXMgdG8gYFVJTlRfTUFYYCB2aWEgYG1pbih2LCBVSU5UX01BWClgIHdoZW4gc2V0dGluZyB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciBjb25maWd1cmF0aW9uIGZpZWxkcy5cblxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5mby1sZWFrcywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50cm9kdWNlZCBvciBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gVGhlIHZhcmlhYmxlIGB2YCBpcyBwYXJzZWQgYW5kIHZhbGlkYXRlZCBieSBgc3NjYW5mYCwgYW5kIHRoZSB0YXJnZXQgc3RydWN0IGZpZWxkIGlzIG92ZXJ3cml0dGVuIHdpdGggdGhlIGNsYW1wZWQgaW50ZWdlciB2YWx1ZS4gQW55IHBvdGVudGlhbCBtZW1vcnktc2FmZXR5IG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOL1VCU0FOL0xPQ0tERVApLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Z19zZXRfY29uZigpYCBpbiBgYmxvY2svYmxrLXRocm90dGxlLmNgIHRvIGZhY3RvciBvdXQgdGhlIHBvaW50ZXIgY2FsY3VsYXRpb24gaW50byBhIGhlbHBlciBsb2NhbCB2YXJpYWJsZSBgZmllbGRgIGFuZCB0byBjbGFtcCB2YWx1ZXMgdG8gYFVJTlRfTUFYYCB2aWEgYG1pbih2LCBVSU5UX01BWClgIHdoZW4gc2V0dGluZyB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciBjb25maWd1cmF0aW9uIGZpZWxkcy5cblxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5mby1sZWFrcywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50cm9kdWNlZCBvciBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gVGhlIHZhcmlhYmxlIGB2YCBpcyBwYXJzZWQgYW5kIHZhbGlkYXRlZCBieSBgc3NjYW5mYCwgYW5kIHRoZSB0YXJnZXQgc3RydWN0IGZpZWxkIGlzIG92ZXJ3cml0dGVuIHdpdGggdGhlIGNsYW1wZWQgaW50ZWdlciB2YWx1ZS4gQW55IHBvdGVudGlhbCBtZW1vcnktc2FmZXR5IG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOL1VCU0FOL0xPQ0tERVApLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6MDg6NDUuOTAwMDA5NzE0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyMzA0OTgyNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0NHUk9VUFwiLFxuICAgIFwiQkxLX0RFVl9USFJPVFRMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGdfc2V0X2NvbmZcIixcbiAgICBcInRnX3NldF9jb25mX3VpbnRcIixcbiAgICBcInRnX3NldF9jb25mX3U2NFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRnX3NldF9jb25mKClgIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AgdG8gZmFjdG9yIG91dCB0aGUgcG9pbnRlciBjYWxjdWxhdGlvbiBpbnRvIGEgaGVscGVyIGxvY2FsIHZhcmlhYmxlIGBmaWVsZGAgYW5kIHRvIGNsYW1wIHZhbHVlcyB0byBgVUlOVF9NQVhgIHZpYSBgbWluKHYsIFVJTlRfTUFYKWAgd2hlbiBzZXR0aW5nIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGNvbmZpZ3VyYXRpb24gZmllbGRzLlxcblxcblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSB2YXJpYWJsZSBgdmAgaXMgcGFyc2VkIGFuZCB2YWxpZGF0ZWQgYnkgYHNzY2FuZmAsIGFuZCB0aGUgdGFyZ2V0IHN0cnVjdCBmaWVsZCBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBjbGFtcGVkIGludGVnZXIgdmFsdWUuIEFueSBwb3RlbnRpYWwgbWVtb3J5LXNhZmV0eSBvciBjb25jdXJyZW5jeSBpc3N1ZXMgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9VQlNBTi9MT0NLREVQKS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRnX3NldF9jb25mKClgIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93L3RydW5jYXRpb24gd2hlbiBhc3NpZ25pbmcgMzItYml0IHRocm90dGxlIGNvbmZpZ3VyYXRpb24gZmllbGRzIGJ5IGNsYW1waW5nIHRoZSBwYXJzZWQgNjQtYml0IHZhbHVlIHRvIGBVSU5UX01BWGAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYmxraW8gY2dyb3VwIGNvbnRyb2wgaW50ZXJmYWNlIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBwcm9wZXIgYmVoYXZpb3Igd2hlbiB3cml0aW5nIHZhcmlvdXMgdmFsdWVzIHRvIHRocm90dGxlIHBhcmFtZXRlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA4OjQ1LjkwMDAyNDUxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MzgxMzc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc4Yzg0NmFlY2IxZDJiNGZhNmY1ZGE3MzBjN2Y1NjllM2ZmNzAwNThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxNDowODo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstdGhyb3R0bGUuYyBiL2Jsb2NrL2Jsay10aHJvdHRsZS5jXFxuaW5kZXggZmZjM2I3MDA2NWQ0Yi4uOTdhZDc5NTlkMDA2ZiAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstdGhyb3R0bGUuY1xcbisrKyBiL2Jsb2NrL2Jsay10aHJvdHRsZS5jXFxuQEAgLTEzODMsMTAgKzEzODMsMTIgQEAgc3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmYoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbiBcXHR0ZyA9IGJsa2dfdG9fdGcoY3R4LmJsa2cpO1xcbiBcXHR0Z191cGRhdGVfY2FycnlvdmVyKHRnKTtcXG4gXFxuK1xcdHZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyArIG9mX2NmdChvZiktXFx1MDAzZXByaXZhdGU7XFxuK1xcbiBcXHRpZiAoaXNfdTY0KVxcbi1cXHRcXHQqKHU2NCAqKSgodm9pZCAqKXRnICsgb2ZfY2Z0KG9mKS1cXHUwMDNlcHJpdmF0ZSkgPSB2O1xcbitcXHRcXHQqKHU2NCAqKWZpZWxkID0gdjtcXG4gXFx0ZWxzZVxcbi1cXHRcXHQqKHVuc2lnbmVkIGludCAqKSgodm9pZCAqKXRnICsgb2ZfY2Z0KG9mKS1cXHUwMDNlcHJpdmF0ZSkgPSB2O1xcbitcXHRcXHQqKHVuc2lnbmVkIGludCAqKWZpZWxkID0gbWluKHYsIFVJTlRfTUFYKTtcXG4gXFxuIFxcdHRnX2NvbmZfdXBkYXRlZCh0ZywgZmFsc2UpO1xcbiBcXHRyZXQgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowODo0Ny40ODQ1NTg0NDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxNDgwNTk4MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkJMS19ERVZfVEhST1RUTElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRnX3NldF9jb25mXCIsXG4gICAgXCJ0Z19zZXRfY29uZl91aW50XCIsXG4gICAgXCJ0Z19zZXRfY29uZl91NjRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdGdfc2V0X2NvbmYoKWAgaW4gYGJsb2NrL2Jsay10aHJvdHRsZS5jYCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cvdHJ1bmNhdGlvbiB3aGVuIGFzc2lnbmluZyAzMi1iaXQgdGhyb3R0bGUgY29uZmlndXJhdGlvbiBmaWVsZHMgYnkgY2xhbXBpbmcgdGhlIHBhcnNlZCA2NC1iaXQgdmFsdWUgdG8gYFVJTlRfTUFYYC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBibGtpbyBjZ3JvdXAgY29udHJvbCBpbnRlcmZhY2UgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIHByb3BlciBiZWhhdmlvciB3aGVuIHdyaXRpbmcgdmFyaW91cyB2YWx1ZXMgdG8gdGhyb3R0bGUgcGFyYW1ldGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OGM4NDZhZWNiMWQyYjRmYTZmNWRhNzMwYzdmNTY5ZTNmZjcwMDU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNDowODo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmNcbmluZGV4IGZmYzNiNzAwNjVkNGIuLjk3YWQ3OTU5ZDAwNmYgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstdGhyb3R0bGUuY1xuKysrIGIvYmxvY2svYmxrLXRocm90dGxlLmNcbkBAIC0xMzgzLDEwICsxMzgzLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdHRnID0gYmxrZ190b190ZyhjdHguYmxrZyk7XG4gXHR0Z191cGRhdGVfY2FycnlvdmVyKHRnKTtcbiBcbitcdHZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyArIG9mX2NmdChvZiktXHUwMDNlcHJpdmF0ZTtcbitcbiBcdGlmIChpc191NjQpXG4tXHRcdCoodTY0ICopKCh2b2lkICopdGcgKyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGUpID0gdjtcbitcdFx0Kih1NjQgKilmaWVsZCA9IHY7XG4gXHRlbHNlXG4tXHRcdCoodW5zaWduZWQgaW50ICopKCh2b2lkICopdGcgKyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGUpID0gdjtcbitcdFx0Kih1bnNpZ25lZCBpbnQgKilmaWVsZCA9IG1pbih2LCBVSU5UX01BWCk7XG4gXG4gXHR0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTtcbiBcdHJldCA9IDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowODo0Ny40ODQ1NTk5NThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzUxMTE2NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IERpdmluZyBpbnRvIGBibGstdGhyb3R0bGUuY2AqKlxuXG5Pa2F5LCBzbyBhIG5ldyBwYXRjaCBoYXMgbGFuZGVkLCBhbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgcXVpY2tseS4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQsIG9mIGNvdXJzZSwgaXMgdG8gbGV2ZXJhZ2UgdGhlIHRvb2xpbmcgSSBoYXZlLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBgcmVhZC1maWxlYCBpbW1lZGlhdGVseS4gSSB3YW50IHRvIHNlZSB0aGlzIHBhdGNoIGluIGNvbnRleHQsIHVuZGVyc3RhbmQgd2hlcmUgaXQncyB0b3VjaGluZywgYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlLlxuXG5HaXZlbiB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50LCBgYmxvY2svYmxrLXRocm90dGxlLmNgIHNlZW1zIGxpa2UgdGhlIGxpa2VseSBhcmVhIHRvIGZvY3VzIG9uIGZpcnN0LiBJdCdzIG9mdGVuIHRoZSBoZWFydCBvZiBJL08gY29udHJvbCwgYW5kIGtub3dpbmcgdGhpcywgSSBzdXNwZWN0IHRoaXMgd2lsbCBvZmZlciB0aGUgbW9zdCByZWxldmFudCBpbnNpZ2h0LiBJJ2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQuIEkgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IGZpbGUgaWYgbmVlZCBiZSwgYnV0IGBibGstdGhyb3R0bGUuY2AgaXMgdGhlIHByaW1lIHN1c3BlY3QgZm9yIGEgZGVlcGVyIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA4OjUyLjgzNTY3OTQ2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstdGhyb3R0bGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzcwOlxcdFxcdFxcdFxcdGdvdG8gY2xvc2VfYmRldjtcXG4xMzcxOlxcdFxcdH1cXG4xMzcyOlxcdFxcbjEzNzM6XFx0XFx0cmV0ID0gYmxrZ19jb25mX3ByZXAoYmxrY2csIFxcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLCBcXHUwMDI2Y3R4KTtcXG4xMzc0OlxcdFxcdGlmIChyZXQpXFxuMTM3NTpcXHRcXHRcXHRnb3RvIGNsb3NlX2JkZXY7XFxuMTM3NjpcXHRcXG4xMzc3OlxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMTM3ODpcXHRcXHRpZiAoc3NjYW5mKGN0eC5ib2R5LCBcXFwiJWxsdVxcXCIsIFxcdTAwMjZ2KSAhPSAxKVxcbjEzNzk6XFx0XFx0XFx0Z290byB1bnByZXA7XFxuMTM4MDpcXHRcXHRpZiAoIXYpXFxuMTM4MTpcXHRcXHRcXHR2ID0gVTY0X01BWDtcXG4xMzgyOlxcdFxcbjEzODM6XFx0XFx0dGcgPSBibGtnX3RvX3RnKGN0eC5ibGtnKTtcXG4xMzg0OlxcdFxcdHRnX3VwZGF0ZV9jYXJyeW92ZXIodGcpO1xcbjEzODU6XFx0XFxuMTM4NjpcXHRcXHR2b2lkICpmaWVsZCA9ICh2b2lkICopdGcgKyBvZl9jZnQob2YpLVxcdTAwM2Vwcml2YXRlO1xcbjEzODc6XFx0XFxuMTM4ODpcXHRcXHRpZiAoaXNfdTY0KVxcbjEzODk6XFx0XFx0XFx0Kih1NjQgKilmaWVsZCA9IHY7XFxuMTM5MDpcXHRcXHRlbHNlXFxuMTM5MTpcXHRcXHRcXHQqKHVuc2lnbmVkIGludCAqKWZpZWxkID0gbWluKHYsIFVJTlRfTUFYKTtcXG4xMzkyOlxcdFxcbjEzOTM6XFx0XFx0dGdfY29uZl91cGRhdGVkKHRnLCBmYWxzZSk7XFxuMTM5NDpcXHRcXHRyZXQgPSAwO1xcbjEzOTU6XFx0XFxuMTM5NjpcXHR1bnByZXA6XFxuMTM5NzpcXHRcXHRibGtnX2NvbmZfdW5wcmVwKFxcdTAwMjZjdHgpO1xcbjEzOTg6XFx0XFxuMTM5OTpcXHRjbG9zZV9iZGV2OlxcbjE0MDA6XFx0XFx0YmxrZ19jb25mX2Nsb3NlX2JkZXYoXFx1MDAyNmN0eCk7XFxuMTQwMTpcXHRcXHRyZXR1cm4gcmV0ID86IG5ieXRlcztcXG4xNDAyOlxcdH1cXG4xNDAzOlxcdFxcbjE0MDQ6XFx0c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdTY0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4xNDA1OlxcdFxcdFxcdFxcdCAgICAgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXFxuMTQwNjpcXHR7XFxuMTQwNzpcXHRcXHRyZXR1cm4gdGdfc2V0X2NvbmYob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIHRydWUpO1xcbjE0MDg6XFx0fVxcbjE0MDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA4OjUyLjgzNTgzNDY0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzA5NjUzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gQmxvY2sgVGhyb3R0bGluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHJlbGF0ZWQgdG8gYmxvY2sgdGhyb3R0bGluZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGBibG9jay9ibGstdGhyb3R0bGUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGB0Z19zZXRfY29uZmAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCBob3cgdGhlc2Ugc2V0dGluZ3MgYXJlIGFwcGxpZWQgYW5kIG1hbmFnZWQuIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBrbm93IHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSdyZSBleHBvc2VkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbGwgbmVlZCB0byBjaGVjayBlaXRoZXIgYGJsb2NrL0tjb25maWdgIG9yIGBibG9jay9NYWtlZmlsZWAgdG8gc2VlIGhvdyBgYmxrLXRocm90dGxlLmNgIGl0c2VsZiBpcyBjb250cm9sbGVkLiBPbmNlIEkgdW5kZXJzdGFuZCB0aG9zZSBmaWxlcywgSSBzaG91bGQgaGF2ZSBhIGdvb2QgcGljdHVyZSBvZiBob3cgSSBjb25maWd1cmUgYW5kIG1hbmFnZSB0aHJvdHRsaW5nIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NjcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA4OjU1LjMwNjgwNDQ5MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDYzOTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGstdGhyb3R0bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0ZDX0FQUElEKSArPSBibGstY2dyb3VwLWZjLWFwcGlkLm9cXG5ibG9jay9NYWtlZmlsZToyMjpvYmotJChDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HKVxcdCs9IGJsay10aHJvdHRsZS5vXFxuYmxvY2svTWFrZWZpbGUtMjMtb2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9QUklPKVxcdCs9IGJsay1pb3ByaW8ub1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTM1LSNpbmNsdWRlIFxcXCJibGstaW9wcmlvLmhcXFwiXFxuYmxvY2svYmxrLWNncm91cC5jOjM2OiNpbmNsdWRlIFxcXCJibGstdGhyb3R0bGUuaFxcXCJcXG5ibG9jay9ibGstY2dyb3VwLmMtMzctXFxuLS1cXG5ibG9jay9ibGstY29yZS5jLTUwLSNpbmNsdWRlIFxcXCJibGstY2dyb3VwLmhcXFwiXFxuYmxvY2svYmxrLWNvcmUuYzo1MTojaW5jbHVkZSBcXFwiYmxrLXRocm90dGxlLmhcXFwiXFxuYmxvY2svYmxrLWNvcmUuYy01Mi0jaW5jbHVkZSBcXFwiYmxrLWlvcHJpby5oXFxcIlxcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtMTctI2luY2x1ZGUgXFxcImJsay1ycS1xb3MuaFxcXCJcXG5ibG9jay9ibGstbWVyZ2UuYzoxODojaW5jbHVkZSBcXFwiYmxrLXRocm90dGxlLmhcXFwiXFxuYmxvY2svYmxrLW1lcmdlLmMtMTktXFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy0yMC0jaW5jbHVkZSBcXFwiYmxrLWNncm91cC5oXFxcIlxcbmJsb2NrL2Jsay1zeXNmcy5jOjIxOiNpbmNsdWRlIFxcXCJibGstdGhyb3R0bGUuaFxcXCJcXG5ibG9jay9ibGstc3lzZnMuYy0yMi0jaW5jbHVkZSBcXFwiZXJyb3ItaW5qZWN0aW9uLmhcXFwiXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNC0jaW5jbHVkZSBcXFwiYmxrLWNncm91cC1yd3N0YXQuaFxcXCJcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNTojaW5jbHVkZSBcXFwiYmxrLXRocm90dGxlLmhcXFwiXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTYtXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xMjcwPXN0YXRpYyB2b2lkIHRnX2NvbmZfdXBkYXRlZChzdHJ1Y3QgdGhyb3RsX2dycCAqdGcsIGJvb2wgZ2xvYmFsKVxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTI4Ni1cXHQgKiByZXN0cmljdGlvbnMgaW4gdGhlIHdob2xlIGhpZXJhcmNoeSBhbmQgYWxsb3dzIHRoZW0gdG8gYnlwYXNzXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTI4NzpcXHQgKiBibGstdGhyb3R0bGUuXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTI4OC1cXHQgKi9cXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5oPTE1NT1zdGF0aWMgaW5saW5lIGJvb2wgYmxrX3Rocm90bF9hY3RpdmF0ZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaC0xNTctXFx0LypcXG5ibG9jay9ibGstdGhyb3R0bGUuaDoxNTg6XFx0ICogcS1cXHUwMDNldGQgZ3VhcmFudGVlcyB0aGF0IHRoZSBibGstdGhyb3R0bGUgbW9kdWxlIGlzIGFscmVhZHkgbG9hZGVkLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5oOjE1OTpcXHQgKiBhbmQgdGhlIHBsaWQgb2YgYmxrLXRocm90dGxlIGlzIGFzc2lnbmVkLlxcbmJsb2NrL2Jsay10aHJvdHRsZS5oLTE2MC1cXHQgKiBibGtjZ19wb2xpY3lfZW5hYmxlZCgpIGd1YXJhbnRlZXMgdGhhdCB0aGUgcG9saWN5IGlzIGFjdGl2YXRlZFxcbi0tXFxuYmxvY2svZ2VuaGQuYy0yOS1cXG5ibG9jay9nZW5oZC5jOjMwOiNpbmNsdWRlIFxcXCJibGstdGhyb3R0bGUuaFxcXCJcXG5ibG9jay9nZW5oZC5jLTMxLSNpbmNsdWRlIFxcXCJibGsuaFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6MDg6NTUuMzg3NDUwNjUxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk3ODIwMjk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBLY29uZmlnIGZvciBCbG9jayBEZXZpY2UgVGhyb3R0bGluZyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHN0YXR1cyBvZiBgQkxLX0RFVl9USFJPVFRMSU5HYC4gSXQncyBwcmV0dHkgZnVuZGFtZW50YWwsIHNvIGl0J3MgbGlrZWx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtYW55IG1vZGVybiBjb25maWd1cmF0aW9ucywgYnV0IEkgY2FuJ3QganVzdCBhc3N1bWUuIEknbGwganVtcCBzdHJhaWdodCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBwcm9iYWJseSBzdGFydGluZyB3aXRoIHRoZSBjb3JlIGJsb2NrIGRldmljZSBkZWZpbml0aW9ucywgYW5kIHF1aWNrbHkgZ3JlcCBmb3IgYEJMS19ERVZfVEhST1RUTElOR2AuIEknbGwgd2FudCB0byBzZWUgbm90IGp1c3QgaWYgaXQncyAqZGVmaW5lZCosIGJ1dCBhbHNvIGhvdyBpdCdzIGRlZmluZWQuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBhbnkgY29uZmlndXJhdGlvbnMgdGhhdCBleHBsaWNpdGx5IGRpc2FibGUgaXQsIHBlcmhhcHMgcmVsYXRlZCB0byBzcGVjaWZpYyBzdG9yYWdlIHR5cGVzIG9yIHVzZSBjYXNlcyBsaWtlIHJlYWwtdGltZSBzeXN0ZW1zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoaW5ncyBsaWtlIEkvTyBzY2hlZHVsZXJzLCBwYXJ0aWN1bGFybHkgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMuIElzIGl0IGEgZGlyZWN0IGRlcGVuZGVuY3ksIG9yIGluZGlyZWN0bHkgcHVsbGVkIGluIHRocm91Z2ggYSBtb3JlIGdlbmVyaWMgYmxvY2sgbGF5ZXIgZmVhdHVyZT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCdzICpyZWFsbHkqIGRvaW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowODo1OC4zNjU2NTY1NzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMDQyODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9OTc9Y29uZmlnIEJMS19ERVZfWk9ORURcXG4tLVxcbmJsb2NrL0tjb25maWctMTA1LVxcbmJsb2NrL0tjb25maWc6MTA2OmNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcXG5ibG9jay9LY29uZmlnLTEwNy1cXHRib29sIFxcXCJCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowODo1OC40Nzc3MDQ4NDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjg1ODMyODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiB0aGUgYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgYmxvY2svS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDYuIEknbSBhc3N1bWluZyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgc2VsZWN0aW9uIGxvZ2ljIG9yIGZlYXR1cmUgZGVmaW5pdGlvbiByZWxldmFudCB0byB0aGUgY3VycmVudCBwcm9ibGVtIHJlc2lkZXMuIFRoaXMgdXN1YWxseSBtZWFucyB0aGF0IGFyb3VuZCB0aGF0IGxpbmUgSSdsbCBmaW5kIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG1heWJlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIG9yIHBlcmhhcHMgZGVmaW5pdGlvbnMgb2YgZGV2aWNlLXNwZWNpZmljIHNldHRpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2Ugb3B0aW9ucyBhbmQgdGhlIHJlc3Qgb2YgdGhlIGJsb2NrIGxheWVyLiBJJ20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBrbm9icyB0byB0dXJuLCB0aGUgZmxhZ3MgdGhhdCBjb250cm9sIGVuYWJsZW1lbnQsIGFuZCBob3cgdGhlc2Ugc2V0dGluZ3MgaW50ZXJhY3Qgd2l0aGluIHRoZSBicm9hZGVyIEtjb25maWcgaGllcmFyY2h5LiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDU1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6MDk6MDAuMTYzNTQxODE0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwNTpcXHRcXG4gMTA2OlxcdGNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcXG4gMTA3OlxcdFxcdGJvb2wgXFxcIkJsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcXFwiXFxuIDEwODpcXHRcXHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcXG4gMTA5OlxcdFxcdHNlbGVjdCBCTEtfQ0dST1VQX1JXU1RBVFxcbiAxMTA6XFx0XFx0aGVscFxcbiAxMTE6XFx0XFx0QmxvY2sgbGF5ZXIgYmlvIHRocm90dGxpbmcgc3VwcG9ydC4gSXQgY2FuIGJlIHVzZWQgdG8gbGltaXRcXG4gMTEyOlxcdFxcdHRoZSBJTyByYXRlIHRvIGEgZGV2aWNlLiBJTyByYXRlIHBvbGljaWVzIGFyZSBwZXIgY2dyb3VwIGFuZFxcbiAxMTM6XFx0XFx0b25lIG5lZWRzIHRvIG1vdW50IGFuZCB1c2UgYmxraW8gY2dyb3VwIGNvbnRyb2xsZXIgZm9yIGNyZWF0aW5nXFxuIDExNDpcXHRcXHRjZ3JvdXBzIGFuZCBzcGVjaWZ5aW5nIHBlciBkZXZpY2UgSU8gcmF0ZSBwb2xpY2llcy5cXG4gMTE1OlxcdFxcbiAxMTY6XFx0XFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiAxMTc6XFx0XFxuIDExODpcXHRjb25maWcgQkxLX1dCVFxcbiAxMTk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSB3cml0ZWJhY2sgdGhyb3R0bGluZ1xcXCJcXG4gMTIwOlxcdFxcdGhlbHBcXG4gMTIxOlxcdFxcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGJsb2NrIGxheWVyIHRvIHRocm90dGxlIGJ1ZmZlcmVkXFxuIDEyMjpcXHRcXHRiYWNrZ3JvdW5kIHdyaXRlYmFjayBmcm9tIHRoZSBWTSwgbWFraW5nIGl0IG1vcmUgc21vb3RoIGFuZCBoYXZpbmdcXG4gMTIzOlxcdFxcdGxlc3MgaW1wYWN0IG9uIGZvcmVncm91bmQgb3BlcmF0aW9ucy4gVGhlIHRocm90dGxpbmcgaXMgZG9uZVxcbiAxMjQ6XFx0XFx0ZHluYW1pY2FsbHkgb24gYW4gYWxnb3JpdGhtIGxvb3NlbHkgYmFzZWQgb24gQ29EZWwsIGZhY3RvcmluZyBpblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowOTowMC4xNjM2NDgzMjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk1MzM4NjI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuQWxyaWdodCwgc28gYEJMS19ERVZfVEhST1RUTElOR2AgcmVsaWVzIG9uIGBCTEtfQ0dST1VQYC4gTWFrZXMgc2Vuc2UsIHRoZXkgb2Z0ZW4gZ28gaGFuZC1pbi1oYW5kLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBvZiB0cnV0aCwgdGhlIGBibG9jay9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGRlcGVuZGVuY3kgYW5kIHVuZGVyc3RhbmQgaG93IGl0J3MgY29uZmlndXJlZC4gVGhhdCdzIHdoZXJlIEknbGwgZ2V0IHRoZSBkZXRhaWxzIG9uIGhvdyBgQkxLX0NHUk9VUGAgaXMgZGVmaW5lZCBhbmQgd2hhdCBvdGhlciBvcHRpb25zIG1pZ2h0IGluZmx1ZW5jZSB0aGUgZW5hYmxlbWVudCBvZiBgQkxLX0RFVl9USFJPVFRMSU5HYC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjAyLjExNzAzOTA1MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU3NjAxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19DR1JPVVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXFxuLS1cXG5ibG9jay9LY29uZmlnLTQxLVxcbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXFxuYmxvY2svS2NvbmZpZy00My1cXHRib29sXFxuYmxvY2svS2NvbmZpZy00NC1cXG5ibG9jay9LY29uZmlnOjQ1OmNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXFxuYmxvY2svS2NvbmZpZy00Ni1cXHRib29sXFxuLS1cXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMzMtXFxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXFxuYmxvY2svS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE0NC1cXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxcbmJsb2NrL0tjb25maWctMTQ2LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNTMtXFxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXFxuYmxvY2svS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE2My1cXG5ibG9jay9LY29uZmlnOjE2NDpjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cXG5ibG9jay9LY29uZmlnLTE2NS1cXHRib29sIFxcXCJDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjAyLjE5MjgwODgzMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTY1OTYyMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpbmRpbmcgdGhlIEJMS19DR1JPVVAgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHdoZXJlIGBCTEtfQ0dST1VQYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gTXkgZmlyc3QgaHVuY2ggaXMgdGhhdCBpdCdsbCBiZSBpbiBhIEtjb25maWcgZmlsZSwgcHJvYmFibHkgc29tZXdoZXJlIHVuZGVyIGBpbml0L2Agc2luY2UgdGhhdCdzIGEgY29tbW9uIHBsYWNlIGZvciBjb3JlIGZlYXR1cmUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgaW4gYGluaXQvS2NvbmZpZ2AgZmlyc3QsIHRoZW4gSSdsbCBicm9hZGVuIHRoZSBzZWFyY2ggaWYgdGhhdCBkb2Vzbid0IHBhbiBvdXQuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MsIGJ1dCBuZWNlc3NhcnkgYmVmb3JlIEkgY2FuIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowOTowMy43NTg3NzQyMDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjIwMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfQ0dST1VQXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTExMDg9Y29uZmlnIE1FTUNHX1YxXFxuLS1cXG5pbml0L0tjb25maWctMTEyNC1cXG5pbml0L0tjb25maWc6MTEyNTpjb25maWcgQkxLX0NHUk9VUFxcbmluaXQvS2NvbmZpZy0xMTI2LVxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjAzLjgxNTQwMjE3NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzA2MTc5ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgdGdfc2V0X2NvbmZgLCB0aGUga2V5IGNoYW5nZSBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gV2UndmUgcmVwbGFjZWQgdGhlIGRpcmVjdCBhc3NpZ25tZW50IHRvIHRoZSB0YXJnZXQgZmllbGQgd2l0aCBhIG1vcmUgY2F1dGlvdXMgYXBwcm9hY2guIEluaXRpYWxseSwgdGhlIGNvZGUgaGFkIGEgY29uZGl0aW9uYWwgYXNzaWdubWVudDogYGlmIChpc191NjQpYCB3ZSdkIGNhc3QgdGhlIHByaXZhdGUgZmllbGQgYW5kIHdyaXRlIGB2YCBhcyBpczsgb3RoZXJ3aXNlIHdlIGNhc3QgYXMgYHVuc2lnbmVkIGludGAgYW5kIHNpbXBseSBhc3NpZ25lZCBgdmAuXG5cbldhaXQgYSBtaW51dGUsIGB2YCBpcyBhbiBgdW5zaWduZWQgbG9uZyBsb25nYCDigJMgYSBgdTY0YC4gU28sIHdoZW4gYGlzX3U2NGAgaXMgKmZhbHNlKiwgYW5kIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uIGxpa2UgYHRnX3NldF9jb25mX3VpbnRgLCB0aGUgcHJldmlvdXMgYXBwcm9hY2ggd291bGQgaGF2ZSByZXN1bHRlZCBpbiBhIHN0cmFpZ2h0IHRydW5jYXRpb24gb2YgYHZgIHRvIGB1bnNpZ25lZCBpbnRgLiBOb3cgdGhlIGxvZ2ljIGlzIGBtaW4odiwgVUlOVF9NQVgpYC4gVGhhdCBmZWVscyBhIGJpdC4uLiB1bnJlZmluZWQsIGRvZXNuJ3QgaXQ/IE15IGluc3RpbmN0IGlzIHRvIHVzZSBzb21ldGhpbmcgbGlrZSBgbWluX3RgIG9yIGV4cGxpY2l0bHkgY2FzdCBgVUlOVF9NQVhgIHRvIGB1NjRgIGZvciBhIG1vcmUgZXhwbGljaXQgdHlwZSBzYWZldHkuXG5cbkhvbGQgb24sIEkgc2VlIHdoYXQncyBoYXBwZW5pbmcuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG1pbih2LCBVSU5UX01BWClgIGlzIGVmZmVjdGl2ZWx5IGNhcHBpbmcgYHZgIGF0IHRoZSB2YWx1ZSBvZiBgVUlOVF9NQVhgISBTbywgaWYgc29tZW9uZSwgaW50ZW50aW9uYWxseSBvciB1bmludGVudGlvbmFsbHksIHRyaWVzIHRvIHNldCBhIHRocm90dGxlIGxpbWl0IChsaWtlIGBtYXhfaW9wc2Agb3IgYG1heF9icHNgIHRoYXQncyBtYW5hZ2VkIGJ5IGB0Z19zZXRfY29uZl91aW50YCBvciBhbnkgb3RoZXIgZnVuY3Rpb24gdGhhdCBjYWxscyBgdGdfc2V0X2NvbmZgIHdpdGggYGlzX3U2NGAgYmVpbmcgZmFsc2UpIHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4gd2hhdCBgVUlOVF9NQVhgIGFsbG93cywgdGhlIGNvZGUgbm8gbG9uZ2VyIGp1c3Qgb3ZlcmZsb3dzIG9yIHRydW5jYXRlcyB0aGUgdmFsdWUgKHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBsaWtlIGV4dHJlbWVseSBsb3cgbGltaXRzIG9yIGV2ZW4gemVybykuIEluc3RlYWQsIGl0IGNsYW1wcyB0aGUgdmFsdWUgdG8gdGhlIG1heGltdW0gcGVybWlzc2libGUgYHVuc2lnbmVkIGludGAhIFRoaXMgbWFrZXMgc2Vuc2UuIEl0J3MgYSBjcml0aWNhbCBzYWZldHkgbWVhc3VyZS4gQmVmb3JlIGl0IGNvdWxkIGVhc2lseSBsZWFkIHRvIGEgc2lnbmlmaWNhbnQgdnVsbmVyYWJpbGl0eSFcblxuTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYHRnX3NldF9jb25mYCB0byBhc3Nlc3MgdGhlIGJyb2FkZXIgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDI1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjEwLjEyMTU4NDc2M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2NDQ2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGdfc2V0X2NvbmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay10aHJvdHRsZS5jPTEzMTg9c3RhdGljIGludCBibGtfdGhyb3RsX2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzUxLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjEzNTI6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmYoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNTMtXFx0XFx0XFx0ICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmLCBib29sIGlzX3U2NClcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDMtXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQwNDpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91NjQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDUtXFx0XFx0XFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDA2LXtcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDA3OlxcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgdHJ1ZSk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwOC19XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwOS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDEwOnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3VpbnQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTEtXFx0XFx0XFx0XFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTIte1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MTM6XFx0cmV0dXJuIHRnX3NldF9jb25mKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBmYWxzZSk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxNC19XFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNDQyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9sZWdhY3lfZmlsZXNbXSA9IHtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NDYtXFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91NjQsXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ0NzpcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ0OC1cXHR9LFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1Mi1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDUzOlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDU0LVxcdH0sXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDU4LVxcdFxcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDU5OlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2MC1cXHR9LFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2NC1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3VpbnQsXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ2NTpcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91aW50LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjYtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6MDk6MTAuMTkxMjM0MzMyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMjczNDUzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgRXZhbHVhdGlvbjogYmxrLXRocm90dGxlLmMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGB0Z19zZXRfY29uZmAgbG9va3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGV4cG9zZWQgdGhyb3VnaCBjZ3JvdXAgZmlsZSB3cml0ZXMg4oCTIGBibGtpby50aHJvdHRsZS5yZWFkX2lvcHNfZGV2aWNlYCwgdGhhdCBzb3J0IG9mIHRoaW5nLiBUaGF0IG1lYW5zIGl0J3MgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBsaWtlIFFFTVUgb3IgR0NFLCB3aGljaCBpcyBhIG1ham9yIHBvaW50IGluIGl0cyBmYXZvci5cblxuVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGlzIHRoaXMgYFdvcnRoRnV6emluZz10cnVlYD8gVGltZSBmb3IgYSBxdWljayBndWlkZWxpbmVzIGNoZWNrLiBUaGUgY29yZSBzdWJzeXN0ZW1zIGxpc3Qgc2VlbXMgcmVsZXZhbnQuIE1lbW9yeSBtYW5hZ2VtZW50LCBsb2NraW5nLCBCUEYsIHNjaGVkdWxlci4uLiBhbGwgZ29vZCBjYW5kaWRhdGVzLiBCbG9jayBsYXllciB0b28sIG9mIGNvdXJzZSwgYW5kIHRoaXMgaXMgZGVmaW5pdGVseSByZWxhdGVkIHRvIGJsb2NrIEkvTyB0aHJvdHRsaW5nLiBSZWZhY3RvcmluZ3MgYW5kIGNvZGUgY2xlYW51cHMgYWxzbyBhcHBseSBpZiB0aGVyZSdzIHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgYWJzdHJhY3Rpb25zIG9yIGFsZ29yaXRobSBmbG93cy5cblxuU28sIHRoZSBmb2N1cyBzeW1ib2xzLiBgdGdfc2V0X2NvbmZgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50LCBhbmQgaXQgY2FsbHMsIG9yIGlzIGNhbGxlZCBieSwgYHRnX3NldF9jb25mX3VpbnRgIGFuZCBgdGdfc2V0X2NvbmZfdTY0YC4gVGhleSdyZSBhbGwgc3RhdGljLCBzbyB0aGV5J3JlIHByb2JhYmx5IGlubGluZWQuIFNvIEknbGwgaW5jbHVkZSBhbGwgdGhyZWUgLSBgdGdfc2V0X2NvbmZgLCBgdGdfc2V0X2NvbmZfdWludGAsIGFuZCBgdGdfc2V0X2NvbmZfdTY0YC4gR290dGEgYmUgdGhvcm91Z2guXG5cbk5vdywganVzdCB0byBiZSBjZXJ0YWluLCBJIHNob3VsZCBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgYmxrLXRocm90dGxlLmNgIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBsaW5lcyAxNDEwLTE0NzAgaW4gdGhhdCBmaWxlIHRvIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2UgaW4gdGhpcyBhcmVhIEkgc2hvdWxkIGJlIGF3YXJlIG9mLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDI1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjEzLjUxODU4Mjc1OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLXRocm90dGxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQxMCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQxMDpcXHRzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91aW50KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4xNDExOlxcdFxcdFxcdFxcdFxcdGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4xNDEyOlxcdHtcXG4xNDEzOlxcdFxcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgZmFsc2UpO1xcbjE0MTQ6XFx0fVxcbjE0MTU6XFx0XFxuMTQxNjpcXHRzdGF0aWMgaW50IHRnX3ByaW50X3J3c3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbjE0MTc6XFx0e1xcbjE0MTg6XFx0XFx0YmxrY2dfcHJpbnRfYmxrZ3Moc2YsIGNzc190b19ibGtjZyhzZXFfY3NzKHNmKSksXFxuMTQxOTpcXHRcXHRcXHRcXHQgIGJsa2dfcHJmaWxsX3J3c3RhdCwgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwsXFxuMTQyMDpcXHRcXHRcXHRcXHQgIHNlcV9jZnQoc2YpLVxcdTAwM2Vwcml2YXRlLCB0cnVlKTtcXG4xNDIxOlxcdFxcdHJldHVybiAwO1xcbjE0MjI6XFx0fVxcbjE0MjM6XFx0XFxuMTQyNDpcXHRzdGF0aWMgdTY0IHRnX3ByZmlsbF9yd3N0YXRfcmVjdXJzaXZlKHN0cnVjdCBzZXFfZmlsZSAqc2YsXFxuMTQyNTpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQsIGludCBvZmYpXFxuMTQyNjpcXHR7XFxuMTQyNzpcXHRcXHRzdHJ1Y3QgYmxrZ19yd3N0YXRfc2FtcGxlIHN1bTtcXG4xNDI4OlxcdFxcbjE0Mjk6XFx0XFx0YmxrZ19yd3N0YXRfcmVjdXJzaXZlX3N1bShwZF90b19ibGtnKHBkKSwgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwsIG9mZixcXG4xNDMwOlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnN1bSk7XFxuMTQzMTpcXHRcXHRyZXR1cm4gX19ibGtnX3ByZmlsbF9yd3N0YXQoc2YsIHBkLCBcXHUwMDI2c3VtKTtcXG4xNDMyOlxcdH1cXG4xNDMzOlxcdFxcbjE0MzQ6XFx0c3RhdGljIGludCB0Z19wcmludF9yd3N0YXRfcmVjdXJzaXZlKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuMTQzNTpcXHR7XFxuMTQzNjpcXHRcXHRibGtjZ19wcmludF9ibGtncyhzZiwgY3NzX3RvX2Jsa2NnKHNlcV9jc3Moc2YpKSxcXG4xNDM3OlxcdFxcdFxcdFxcdCAgdGdfcHJmaWxsX3J3c3RhdF9yZWN1cnNpdmUsIFxcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLFxcbjE0Mzg6XFx0XFx0XFx0XFx0ICBzZXFfY2Z0KHNmKS1cXHUwMDNlcHJpdmF0ZSwgdHJ1ZSk7XFxuMTQzOTpcXHRcXHRyZXR1cm4gMDtcXG4xNDQwOlxcdH1cXG4xNDQxOlxcdFxcbjE0NDI6XFx0c3RhdGljIHN0cnVjdCBjZnR5cGUgdGhyb3RsX2xlZ2FjeV9maWxlc1tdID0ge1xcbjE0NDM6XFx0XFx0e1xcbjE0NDQ6XFx0XFx0XFx0Lm5hbWUgPSBcXFwidGhyb3R0bGUucmVhZF9icHNfZGV2aWNlXFxcIixcXG4xNDQ1OlxcdFxcdFxcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIGJwc1tSRUFEXSksXFxuMTQ0NjpcXHRcXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcXG4xNDQ3OlxcdFxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcXG4xNDQ4OlxcdFxcdH0sXFxuMTQ0OTpcXHRcXHR7XFxuMTQ1MDpcXHRcXHRcXHQubmFtZSA9IFxcXCJ0aHJvdHRsZS53cml0ZV9icHNfZGV2aWNlXFxcIixcXG4xNDUxOlxcdFxcdFxcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIGJwc1tXUklURV0pLFxcbjE0NTI6XFx0XFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91NjQsXFxuMTQ1MzpcXHRcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXFxuMTQ1NDpcXHRcXHR9LFxcbjE0NTU6XFx0XFx0e1xcbjE0NTY6XFx0XFx0XFx0Lm5hbWUgPSBcXFwidGhyb3R0bGUucmVhZF9pb3BzX2RldmljZVxcXCIsXFxuMTQ1NzpcXHRcXHRcXHQucHJpdmF0ZSA9IG9mZnNldG9mKHN0cnVjdCB0aHJvdGxfZ3JwLCBpb3BzW1JFQURdKSxcXG4xNDU4OlxcdFxcdFxcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcXG4xNDU5OlxcdFxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXFxuMTQ2MDpcXHRcXHR9LFxcbjE0NjE6XFx0XFx0e1xcbjE0NjI6XFx0XFx0XFx0Lm5hbWUgPSBcXFwidGhyb3R0bGUud3JpdGVfaW9wc19kZXZpY2VcXFwiLFxcbjE0NjM6XFx0XFx0XFx0LnByaXZhdGUgPSBvZmZzZXRvZihzdHJ1Y3QgdGhyb3RsX2dycCwgaW9wc1tXUklURV0pLFxcbjE0NjQ6XFx0XFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91aW50LFxcbjE0NjU6XFx0XFx0XFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdWludCxcXG4xNDY2OlxcdFxcdH0sXFxuMTQ2NzpcXHRcXHR7XFxuMTQ2ODpcXHRcXHRcXHQubmFtZSA9IFxcXCJ0aHJvdHRsZS5pb19zZXJ2aWNlX2J5dGVzXFxcIixcXG4xNDY5OlxcdFxcdFxcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIHN0YXRfYnl0ZXMpLFxcbjE0NzA6XFx0XFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfcndzdGF0LFxcbjE0NzE6XFx0XFx0fSxcXG4xNDcyOlxcdFxcdHtcXG4xNDczOlxcdFxcdFxcdC5uYW1lID0gXFxcInRocm90dGxlLmlvX3NlcnZpY2VfYnl0ZXNfcmVjdXJzaXZlXFxcIixcXG4xNDc0OlxcdFxcdFxcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIHN0YXRfYnl0ZXMpLFxcbjE0NzU6XFx0XFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfcndzdGF0X3JlY3Vyc2l2ZSxcXG4xNDc2OlxcdFxcdH0sXFxuMTQ3NzpcXHRcXHR7XFxuMTQ3ODpcXHRcXHRcXHQubmFtZSA9IFxcXCJ0aHJvdHRsZS5pb19zZXJ2aWNlZFxcXCIsXFxuMTQ3OTpcXHRcXHRcXHQucHJpdmF0ZSA9IG9mZnNldG9mKHN0cnVjdCB0aHJvdGxfZ3JwLCBzdGF0X2lvcyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjEzLjUxODc2NTQ2OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTgzNzk2OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBjZ3JvdXAgdjIgVGhyb3R0bGluZyBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0aHJvdHRsaW5nIG1lY2hhbmlzbXMgaW4gY2dyb3VwIHYyIGEgYml0IGJldHRlci4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHNlZSBpZiBpdCdzIGxldmVyYWdpbmcgdGhlIHNhbWUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSBhcyBjZ3JvdXAgdjEuIFNwZWNpZmljYWxseSwgSSdtIHdvbmRlcmluZyBpZiBpdCB1c2VzIGB0Z19zZXRfY29uZmAgb3Igc29tZSBvdGhlciBhbmFsb2dvdXMgZnVuY3Rpb24gZm9yIHNldHRpbmcgdGhlIHRocm90dGxpbmcgY29uZmlndXJhdGlvbnMuIFRoYXQncyBteSBzdGFydGluZyBwb2ludC5cblxuVG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcywgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBzb3VyY2UgY29kZS4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIGJsb2NrIEkvTyB0aHJvdHRsaW5nLCBgYmxvY2svYmxrLXRocm90dGxlLmNgIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJJ2xsIGRvIGEgcXVpY2sgc2VhcmNoIHdpdGhpbiB0aGF0IGZpbGUgZm9yIFwidGhyb3RsX2ZpbGVzXCIg4oCTIHRoYXQncyBvZnRlbiBhIGdvb2Qga2V5d29yZCB0byBmaW5kIHJlbGF0ZWQgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGludm9sdmVkIHdpdGggdGhlIHRocm90dGxlIGltcGxlbWVudGF0aW9uIGFuZCBjb25maWd1cmF0aW9uIGhhbmRsaW5nLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBsZWFkIG1lIHRvIHRoZSBjb3JlIGxvZ2ljLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTYyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowOToxNS41MDI1NjU4NTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTEwNzcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Z19zZXRfY29uZnx0aHJvdGxfZmlsZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmxrLXRocm90dGxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLXRocm90dGxlLmM9MTMxOD1zdGF0aWMgaW50IGJsa190aHJvdGxfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNTEtXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTM1MjpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTM1My1cXHRcXHRcXHQgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYsIGJvb2wgaXNfdTY0KVxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwMy1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDA0OnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3U2NChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwNS1cXHRcXHRcXHQgICAgICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDYte1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MDc6XFx0cmV0dXJuIHRnX3NldF9jb25mKG9mLCBidWYsIG5ieXRlcywgb2ZmLCB0cnVlKTtcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDA4LX1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDA5LVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MTA6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdWludChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxMS1cXHRcXHRcXHRcXHRjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxMi17XFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQxMzpcXHRyZXR1cm4gdGdfc2V0X2NvbmYob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIGZhbHNlKTtcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDE0LX1cXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE0NDI9c3RhdGljIHN0cnVjdCBjZnR5cGUgdGhyb3RsX2xlZ2FjeV9maWxlc1tdID0ge1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ0Ni1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDQ3OlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDQ4LVxcdH0sXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDUyLVxcdFxcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdTY0LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NTM6XFx0XFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdTY0LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTQtXFx0fSxcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTgtXFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91aW50LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NTk6XFx0XFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdWludCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDYwLVxcdH0sXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDY0LVxcdFxcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDY1OlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2Ni1cXHR9LFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmM9MTU0Mj1zdGF0aWMgc3NpemVfdCB0Z19zZXRfbGltaXQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTYyMy1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNjI0OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9maWxlc1tdID0ge1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2MjUtXFx0e1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmM9MTY3Nz1zdHJ1Y3QgYmxrY2dfcG9saWN5IGJsa2NnX3BvbGljeV90aHJvdGwgPSB7XFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTY3ODpcXHQuZGZsX2NmdHlwZXNcXHRcXHQ9IHRocm90bF9maWxlcyxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNjc5LVxcdC5sZWdhY3lfY2Z0eXBlc1xcdFxcdD0gdGhyb3RsX2xlZ2FjeV9maWxlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6MDk6MTUuNjczNjc5MTg0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMzY3Mzc4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24gYW5kIFN5bWJvbCBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QgdGhpbmdzIGZpcnN0OiBJIG5lZWQgdG8gdmVyaWZ5IGEgY291cGxlIG9mIGNydWNpYWwgY29uZmlndXJhdGlvbnMgYXJlIHNldCBjb3JyZWN0bHkuIFNwZWNpZmljYWxseSwgSSdtIGNoZWNraW5nIGZvciBgQkxLX0RFVl9USFJPVFRMSU5HYCwgYW5kLCBiZWNhdXNlIGl0J3MgYSBkZXBlbmRlbmN5LCBgQkxLX0NHUk9VUGAuIEl04oCZcyBjcnVjaWFsIHRoaXMgaXMgY29ycmVjdCBiZWZvcmUgd2UgbW92ZSBvbi5cblxuTm93LCBsZXQncyBwaXZvdCB0byB0aGUgcmVsZXZhbnQgc3ltYm9scy4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBhcmUgcmVhZHkgdG8gZXhlY3V0ZSBjb3JyZWN0bHkuIE15IGZvY3VzIGhlcmUgaXMgb24gYHRnX3NldF9jb25mYCwgYHRnX3NldF9jb25mX3VpbnRgLCBhbmQgYHRnX3NldF9jb25mX3U2NGAuIEkgbWlnaHQgaGF2ZSB0byByZXZpc2l0IHRoaXMgc2VjdGlvbiBpZiBzb21ldGhpbmcgaXMgb2ZmLlxuXG5KdXN0IHRvIGJlIGNlcnRhaW4sIEnigJlsbCB0YWtlIGEgcXVpY2sgbG9vayB0aHJvdWdoIGBibG9jay9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3Mgb3Igc3ltYm9scyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gQWgsIHRoZXJlIGl0IGlzOiBjb25maXJtaW5nIGBCTEtfREVWX1RIUk9UVExJTkdgJ3MgYm9vbGVhbiBkZWNsYXJhdGlvbiwgdGhlIGBkZXBlbmRzIG9uIEJMS19DR1JPVVBgIGFuZCB0aGUgYHNlbGVjdCBCTEtfQ0dST1VQX1JXU1RBVGAuIEV2ZXJ5dGhpbmcgc2VlbXMgY29tcGxldGVseSBjbGVhciBhbmQgZXhhY3RseSBhcyBleHBlY3RlZDsgdGhlIGRlcGVuZGVuY3kgaXMgZXN0YWJsaXNoZWQgY29ycmVjdGx5LlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IG5vdy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTg2LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowOToxOC44MTA0MTk4MTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ3MzI0MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkJMS19ERVZfVEhST1RUTElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRnX3NldF9jb25mXCIsXG4gICAgXCJ0Z19zZXRfY29uZl91aW50XCIsXG4gICAgXCJ0Z19zZXRfY29uZl91NjRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdGdfc2V0X2NvbmYoKWAgaW4gYGJsb2NrL2Jsay10aHJvdHRsZS5jYCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cvdHJ1bmNhdGlvbiB3aGVuIGFzc2lnbmluZyAzMi1iaXQgdGhyb3R0bGUgY29uZmlndXJhdGlvbiBmaWVsZHMgYnkgY2xhbXBpbmcgdGhlIHBhcnNlZCA2NC1iaXQgdmFsdWUgdG8gYFVJTlRfTUFYYC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBibGtpbyBjZ3JvdXAgY29udHJvbCBpbnRlcmZhY2UgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIHByb3BlciBiZWhhdmlvciB3aGVuIHdyaXRpbmcgdmFyaW91cyB2YWx1ZXMgdG8gdGhyb3R0bGUgcGFyYW1ldGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCTEtfREVWX1RIUk9UVExJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Z19zZXRfY29uZlwiLFxuICAgIFwidGdfc2V0X2NvbmZfdWludFwiLFxuICAgIFwidGdfc2V0X2NvbmZfdTY0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRnX3NldF9jb25mKClgIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93L3RydW5jYXRpb24gd2hlbiBhc3NpZ25pbmcgMzItYml0IHRocm90dGxlIGNvbmZpZ3VyYXRpb24gZmllbGRzIGJ5IGNsYW1waW5nIHRoZSBwYXJzZWQgNjQtYml0IHZhbHVlIHRvIGBVSU5UX01BWGAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYmxraW8gY2dyb3VwIGNvbnRyb2wgaW50ZXJmYWNlIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBwcm9wZXIgYmVoYXZpb3Igd2hlbiB3cml0aW5nIHZhcmlvdXMgdmFsdWVzIHRvIHRocm90dGxlIHBhcmFtZXRlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjE4Ljk2NTE2MTY5MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNjUzMzMzMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowOToxOC45NjU2MTMyNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5MTY0ODc1NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdGdfc2V0X2NvbmYoKWAgaW4gYGJsb2NrL2Jsay10aHJvdHRsZS5jYCB0byBmYWN0b3Igb3V0IHRoZSBwb2ludGVyIGNhbGN1bGF0aW9uIGludG8gYSBoZWxwZXIgbG9jYWwgdmFyaWFibGUgYGZpZWxkYCBhbmQgdG8gY2xhbXAgdmFsdWVzIHRvIGBVSU5UX01BWGAgdmlhIGBtaW4odiwgVUlOVF9NQVgpYCB3aGVuIHNldHRpbmcgdW5zaWduZWQgMzItYml0IGludGVnZXIgY29uZmlndXJhdGlvbiBmaWVsZHMuXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5mby1sZWFrcywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50cm9kdWNlZCBvciBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gVGhlIHZhcmlhYmxlIGB2YCBpcyBwYXJzZWQgYW5kIHZhbGlkYXRlZCBieSBgc3NjYW5mYCwgYW5kIHRoZSB0YXJnZXQgc3RydWN0IGZpZWxkIGlzIG92ZXJ3cml0dGVuIHdpdGggdGhlIGNsYW1wZWQgaW50ZWdlciB2YWx1ZS4gQW55IHBvdGVudGlhbCBtZW1vcnktc2FmZXR5IG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOL1VCU0FOL0xPQ0tERVApLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OGM4NDZhZWNiMWQyYjRmYTZmNWRhNzMwYzdmNTY5ZTNmZjcwMDU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNDowODo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmNcbmluZGV4IGZmYzNiNzAwNjVkNGIuLjk3YWQ3OTU5ZDAwNmYgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstdGhyb3R0bGUuY1xuKysrIGIvYmxvY2svYmxrLXRocm90dGxlLmNcbkBAIC0xMzgzLDEwICsxMzgzLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdHRnID0gYmxrZ190b190ZyhjdHguYmxrZyk7XG4gXHR0Z191cGRhdGVfY2FycnlvdmVyKHRnKTtcbiBcbitcdHZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyArIG9mX2NmdChvZiktXHUwMDNlcHJpdmF0ZTtcbitcbiBcdGlmIChpc191NjQpXG4tXHRcdCoodTY0ICopKCh2b2lkICopdGcgKyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGUpID0gdjtcbitcdFx0Kih1NjQgKilmaWVsZCA9IHY7XG4gXHRlbHNlXG4tXHRcdCoodW5zaWduZWQgaW50ICopKCh2b2lkICopdGcgKyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGUpID0gdjtcbitcdFx0Kih1bnNpZ25lZCBpbnQgKilmaWVsZCA9IG1pbih2LCBVSU5UX01BWCk7XG4gXG4gXHR0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTtcbiBcdHJldCA9IDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowOToxOC45NjU2MTQ0NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Njk0MTg4MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyBhbmFseXNpcywgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkFuYWx5emluZyBgYmxrLXRocm90dGxlLmNgIFBhdGNoKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhdGNoIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gd2hlcmUgYHRnX3NldF9jb25mYCBpcyBiZWluZyB1c2VkLCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMTM4MyBpbiBgYmxvY2svYmxrLXRocm90dGxlLmNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBnZXQgbXkgYmVhcmluZ3Mgb24gdGhlIGNvZGUgc3Vycm91bmRpbmcgdGhlIGZ1bmN0aW9uIGNhbGwgYW5kIGhlbHBzIG1lIGdyb2sgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIGVmZmVjdCBvZiBhbnkgY2hhbmdlcyBvbiBob3cgdGhlIHRocm90dGxpbmcgbWVjaGFuaXNtIHdvcmtzLiBVbmRlcnN0YW5kaW5nIHRoYXQgY2FsbCdzIGNvbnRleHQgaXMgZ29pbmcgdG8gYmUga2V5IHRvIGdyYXNwaW5nIHRoaXMgcGF0Y2gncyBpbnRlbnRpb24gYW5kIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6MDk6MjUuNjU5ODA2NzIzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstdGhyb3R0bGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzUwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzUwOlxcdFxcbjEzNTE6XFx0XFxuMTM1MjpcXHRzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuMTM1MzpcXHRcXHRcXHRcXHQgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYsIGJvb2wgaXNfdTY0KVxcbjEzNTQ6XFx0e1xcbjEzNTU6XFx0XFx0c3RydWN0IGJsa2NnICpibGtjZyA9IGNzc190b19ibGtjZyhvZl9jc3Mob2YpKTtcXG4xMzU2OlxcdFxcdHN0cnVjdCBibGtnX2NvbmZfY3R4IGN0eDtcXG4xMzU3OlxcdFxcdHN0cnVjdCB0aHJvdGxfZ3JwICp0ZztcXG4xMzU4OlxcdFxcdGludCByZXQ7XFxuMTM1OTpcXHRcXHR1NjQgdjtcXG4xMzYwOlxcdFxcbjEzNjE6XFx0XFx0YmxrZ19jb25mX2luaXQoXFx1MDAyNmN0eCwgYnVmKTtcXG4xMzYyOlxcdFxcbjEzNjM6XFx0XFx0cmV0ID0gYmxrZ19jb25mX29wZW5fYmRldihcXHUwMDI2Y3R4KTtcXG4xMzY0OlxcdFxcdGlmIChyZXQpXFxuMTM2NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzNjY6XFx0XFxuMTM2NzpcXHRcXHRpZiAoIWJsa190aHJvdGxfYWN0aXZhdGVkKGN0eC5iZGV2LVxcdTAwM2ViZF9xdWV1ZSkpIHtcXG4xMzY4OlxcdFxcdFxcdHJldCA9IGJsa190aHJvdGxfaW5pdChjdHguYmRldi1cXHUwMDNlYmRfZGlzayk7XFxuMTM2OTpcXHRcXHRcXHRpZiAocmV0KVxcbjEzNzA6XFx0XFx0XFx0XFx0Z290byBjbG9zZV9iZGV2O1xcbjEzNzE6XFx0XFx0fVxcbjEzNzI6XFx0XFxuMTM3MzpcXHRcXHRyZXQgPSBibGtnX2NvbmZfcHJlcChibGtjZywgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwsIFxcdTAwMjZjdHgpO1xcbjEzNzQ6XFx0XFx0aWYgKHJldClcXG4xMzc1OlxcdFxcdFxcdGdvdG8gY2xvc2VfYmRldjtcXG4xMzc2OlxcdFxcbjEzNzc6XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4xMzc4OlxcdFxcdGlmIChzc2NhbmYoY3R4LmJvZHksIFxcXCIlbGx1XFxcIiwgXFx1MDAyNnYpICE9IDEpXFxuMTM3OTpcXHRcXHRcXHRnb3RvIHVucHJlcDtcXG4xMzgwOlxcdFxcdGlmICghdilcXG4xMzgxOlxcdFxcdFxcdHYgPSBVNjRfTUFYO1xcbjEzODI6XFx0XFxuMTM4MzpcXHRcXHR0ZyA9IGJsa2dfdG9fdGcoY3R4LmJsa2cpO1xcbjEzODQ6XFx0XFx0dGdfdXBkYXRlX2NhcnJ5b3Zlcih0Zyk7XFxuMTM4NTpcXHRcXG4xMzg2OlxcdFxcdHZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyArIG9mX2NmdChvZiktXFx1MDAzZXByaXZhdGU7XFxuMTM4NzpcXHRcXG4xMzg4OlxcdFxcdGlmIChpc191NjQpXFxuMTM4OTpcXHRcXHRcXHQqKHU2NCAqKWZpZWxkID0gdjtcXG4xMzkwOlxcdFxcdGVsc2VcXG4xMzkxOlxcdFxcdFxcdCoodW5zaWduZWQgaW50ICopZmllbGQgPSBtaW4odiwgVUlOVF9NQVgpO1xcbjEzOTI6XFx0XFxuMTM5MzpcXHRcXHR0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTtcXG4xMzk0OlxcdFxcdHJldCA9IDA7XFxuMTM5NTpcXHRcXG4xMzk2OlxcdHVucHJlcDpcXG4xMzk3OlxcdFxcdGJsa2dfY29uZl91bnByZXAoXFx1MDAyNmN0eCk7XFxuMTM5ODpcXHRcXG4xMzk5OlxcdGNsb3NlX2JkZXY6XFxuMTQwMDpcXHRcXHRibGtnX2NvbmZfY2xvc2VfYmRldihcXHUwMDI2Y3R4KTtcXG4xNDAxOlxcdFxcdHJldHVybiByZXQgPzogbmJ5dGVzO1xcbjE0MDI6XFx0fVxcbjE0MDM6XFx0XFxuMTQwNDpcXHRzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91NjQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbjE0MDU6XFx0XFx0XFx0XFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4xNDA2OlxcdHtcXG4xNDA3OlxcdFxcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgdHJ1ZSk7XFxuMTQwODpcXHR9XFxuMTQwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6MDk6MjUuNjU5OTgzMDczWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1Njk5ODQxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IENoYW5nZSBpbiBCbG9jayBUaHJvdHRsZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGRpZmZgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGNoYW5naW5nIGhvdyB3ZSBzZXQgY29uZmlndXJhdGlvbiB2YWx1ZXMgd2l0aGluIHRoZSBibG9jayBJL08gdGhyb3R0bGUgZ3JvdXAsIHNwZWNpZmljYWxseSBpbiBgYmxrLXRocm90dGxlLmNgLiBGaXJzdCwgSSBzZWUgdGhleSd2ZSByZWZhY3RvcmVkIGEgY29tbW9uIGNhbGN1bGF0aW9uIGludG8gYHZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyArIG9mX2NmdChvZiktXHUwMDNlcHJpdmF0ZTtgLCB3aGljaCBpcyBnb29kLiBJdCdzIGEgbmljZSwgY2xlYW4gd2F5IHRvIGdldCB0aGUgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IGZpZWxkIHdpdGhpbiB0aGUgdGhyb3R0bGUgZ3JvdXAncyBkYXRhIHN0cnVjdHVyZS5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiB0aGUgaGFuZGxpbmcgb2YgdGhlIHNldCB2YWx1ZXMuIFByZXZpb3VzbHksIGlmIHRoZSB2YWx1ZSBgdmAgd2FzIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLCBpdCB3YXMgc2ltcGx5IGFzc2lnbmVkIHRvIHRoZSB0YXJnZXQgbWVtb3J5IGxvY2F0aW9uIGFzIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLiBIb3dldmVyLCBpZiB0aGUgdmFsdWUgd2Fzbid0IGEgNjQtYml0IGludGVnZXIsIHRoZXJlIHdhcyBhIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIHRydW5jYXRpb246IGAqKHVuc2lnbmVkIGludCAqKWZpZWxkID0gdjtgLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBsYXJnZSBgdTY0YCB2YWx1ZSBiZWluZyB0cnVuY2F0ZWQgdG8gYW4gYHVuc2lnbmVkIGludGAuIE5vdywgdGhlIGNvZGUgZXhwbGljaXRseSBjbGFtcHMgdGhlIHZhbHVlIHRvIGBVSU5UX01BWGAgd2l0aCBgbWluKHYsIFVJTlRfTUFYKWAgaW4gdGhpcyBjYXNlLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgdGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBzYWZldHkgaW1wcm92ZW1lbnQuXCIgSXQncyBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdmVyZmxvdyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGlmIHNvbWVvbmUgcHJvdmlkZXMgYSBsYXJnZSB2YWx1ZSBmb3IgYSBmaWVsZCB0aGF0J3MgbWVhbnQgdG8gYmUgYW4gYHVuc2lnbmVkIGludGAuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcz8gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLiBDb3VsZCB0aGlzIGNyZWF0ZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBsZWFrLCBvciBzb21ldGhpbmcgS01TQU4gd291bGQgZmxhZz8gTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuKiAgICoqSW5pdGlhbGl6YXRpb246KiogYHZgIGlzIHBvcHVsYXRlZCBieSBgc3NjYW5mYCwgd2hpY2ggc2hvdWxkIGhhbmRsZSB0aGUgaW5pdGlhbGl6YXRpb24uIGBmaWVsZGAgaXMgY2FsY3VsYXRlZCB1c2luZyBhIGRlZmluZWQgb2Zmc2V0IGludG8gdGhlIGB0Z2Agc3RydWN0dXJlLCB3aGljaCBzaG91bGQgYmUgZmluZS4gVGhlIHZhbHVlIGJlaW5nIHdyaXR0ZW4gaW50byBgKmZpZWxkYCBpcyBhIHZhbHVlIGRlcml2ZWQgZWl0aGVyIGZyb20gYHNzY2FuZmAncyBpbnB1dCBvciBmcm9tIHRydW5jYXRpb24sIHdoaWNoIGlzIHNhZmUuXG4qICAgKipNZW1vcnkgUmVhZHMgdG8gVXNlcnNwYWNlOioqIE5vLCBpdCBsb29rcyBsaWtlIHdlJ3JlIGp1c3Qgd3JpdGluZyBhIHZhbHVlIHRvIGEgc3RydWN0dXJlLiBOb3RoaW5nIGlzIGJlaW5nIHJlYWQgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbiogICAqKkJ1ZmZlciBMZW5ndGhzIGFuZCBDb250cm9sIEZsb3c6KiogTm8uIEl0J3Mgc2ltcGx5IHNldHRpbmcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHdpdGhpbiBhIHRocm90dGxlIGdyb3VwIHN0cnVjdHVyZS5cblxuVGhlIGNoYW5nZSBsb29rcyBsaWtlIGEgc3RyaWN0bHkgYmV0dGVyIGltcGxlbWVudGF0aW9uIGZyb20gYSBzYWZldHkgc3RhbmRwb2ludC4gSSB0aGluayB0aGlzIHJlZHVjZXMgcG90ZW50aWFsIGlzc3Vlcywgbm90IGludHJvZHVjZSB0aGVtLiBOb3csIGxldCBtZSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYW55IHBvdGVudGlhbCBjYWxsZXJzLiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGNyZWF0ZSBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgZWxzZXdoZXJlIGluIGBibGstdGhyb3R0bGUuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyOTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowOTozMS4yMjk5NzI0OTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNDExMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRnX3NldF9jb25mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay10aHJvdHRsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay10aHJvdHRsZS5jPTEzMTg9c3RhdGljIGludCBibGtfdGhyb3RsX2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzUxLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjEzNTI6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmYoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNTMtXFx0XFx0XFx0ICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmLCBib29sIGlzX3U2NClcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDMtXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQwNDpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91NjQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDUtXFx0XFx0XFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDA2LXtcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDA3OlxcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgdHJ1ZSk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwOC19XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwOS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDEwOnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3VpbnQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTEtXFx0XFx0XFx0XFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTIte1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MTM6XFx0cmV0dXJuIHRnX3NldF9jb25mKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBmYWxzZSk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxNC19XFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNDQyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9sZWdhY3lfZmlsZXNbXSA9IHtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NDYtXFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91NjQsXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ0NzpcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ0OC1cXHR9LFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1Mi1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDUzOlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDU0LVxcdH0sXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDU4LVxcdFxcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDU5OlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2MC1cXHR9LFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2NC1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3VpbnQsXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ2NTpcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91aW50LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjYtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6MDk6MzEuMzAzMzkxMTYyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNTY2NTIyNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpZ2dpbmcgaW50byBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IHdpdGggdGhpcyBjb25maWd1cmF0aW9uLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIGludG8gYHRnX2NvbmZfdXBkYXRlZGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zLiBJIG5lZWQgdG8gcGlucG9pbnQgZXhhY3RseSAqaG93KiB0aGVzZSBjb25maWd1cmF0aW9uIHZhbHVlcywgYXMgc2V0IGhlcmUsIGFyZSBiZWluZyBhY2Nlc3NlZCBhbmQgaW50ZXJwcmV0ZWQgZG93bnN0cmVhbS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgYWN0dWFsbHkgKnVzaW5nKiB0aGUgY29uZmlndXJhdGlvbiBkYXRhIHRoYXTigJlzIGJlaW5nIHVwZGF0ZWQgaW4gdGhpcyBzZWN0aW9uLiBJJ20gbG9va2luZyBmb3IgdGhlIHJlYWQgY2FsbHMsIGhvdyB0aGV5IGFyZSBzdHJ1Y3R1cmVkLCBhbmQgd2hhdCBjb250ZXh0IHRoZXkgYXJlIHVzZWQgd2l0aGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBub3QganVzdCAqaWYqIHRoZXkncmUgcmVhZCwgYnV0IGFsc28gKmhvdyogdGhleSBhcmUgYmVpbmcgaW50ZXJwcmV0ZWQgYW5kIHBvdGVudGlhbGx5IG1hbmlwdWxhdGVkIGR1cmluZyB0aGUgcnVudGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjM0LjY2MDA0Njc0OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLXRocm90dGxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQxMDpcXHRzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91aW50KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4xNDExOlxcdFxcdFxcdFxcdFxcdGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4xNDEyOlxcdHtcXG4xNDEzOlxcdFxcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgZmFsc2UpO1xcbjE0MTQ6XFx0fVxcbjE0MTU6XFx0XFxuMTQxNjpcXHRzdGF0aWMgaW50IHRnX3ByaW50X3J3c3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbjE0MTc6XFx0e1xcbjE0MTg6XFx0XFx0YmxrY2dfcHJpbnRfYmxrZ3Moc2YsIGNzc190b19ibGtjZyhzZXFfY3NzKHNmKSksXFxuMTQxOTpcXHRcXHRcXHRcXHQgIGJsa2dfcHJmaWxsX3J3c3RhdCwgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwsXFxuMTQyMDpcXHRcXHRcXHRcXHQgIHNlcV9jZnQoc2YpLVxcdTAwM2Vwcml2YXRlLCB0cnVlKTtcXG4xNDIxOlxcdFxcdHJldHVybiAwO1xcbjE0MjI6XFx0fVxcbjE0MjM6XFx0XFxuMTQyNDpcXHRzdGF0aWMgdTY0IHRnX3ByZmlsbF9yd3N0YXRfcmVjdXJzaXZlKHN0cnVjdCBzZXFfZmlsZSAqc2YsXFxuMTQyNTpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQsIGludCBvZmYpXFxuMTQyNjpcXHR7XFxuMTQyNzpcXHRcXHRzdHJ1Y3QgYmxrZ19yd3N0YXRfc2FtcGxlIHN1bTtcXG4xNDI4OlxcdFxcbjE0Mjk6XFx0XFx0YmxrZ19yd3N0YXRfcmVjdXJzaXZlX3N1bShwZF90b19ibGtnKHBkKSwgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwsIG9mZixcXG4xNDMwOlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnN1bSk7XFxuMTQzMTpcXHRcXHRyZXR1cm4gX19ibGtnX3ByZmlsbF9yd3N0YXQoc2YsIHBkLCBcXHUwMDI2c3VtKTtcXG4xNDMyOlxcdH1cXG4xNDMzOlxcdFxcbjE0MzQ6XFx0c3RhdGljIGludCB0Z19wcmludF9yd3N0YXRfcmVjdXJzaXZlKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuMTQzNTpcXHR7XFxuMTQzNjpcXHRcXHRibGtjZ19wcmludF9ibGtncyhzZiwgY3NzX3RvX2Jsa2NnKHNlcV9jc3Moc2YpKSxcXG4xNDM3OlxcdFxcdFxcdFxcdCAgdGdfcHJmaWxsX3J3c3RhdF9yZWN1cnNpdmUsIFxcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLFxcbjE0Mzg6XFx0XFx0XFx0XFx0ICBzZXFfY2Z0KHNmKS1cXHUwMDNlcHJpdmF0ZSwgdHJ1ZSk7XFxuMTQzOTpcXHRcXHRyZXR1cm4gMDtcXG4xNDQwOlxcdH1cXG4xNDQxOlxcdFxcbjE0NDI6XFx0c3RhdGljIHN0cnVjdCBjZnR5cGUgdGhyb3RsX2xlZ2FjeV9maWxlc1tdID0ge1xcbjE0NDM6XFx0XFx0e1xcbjE0NDQ6XFx0XFx0XFx0Lm5hbWUgPSBcXFwidGhyb3R0bGUucmVhZF9icHNfZGV2aWNlXFxcIixcXG4xNDQ1OlxcdFxcdFxcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIGJwc1tSRUFEXSksXFxuMTQ0NjpcXHRcXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcXG4xNDQ3OlxcdFxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcXG4xNDQ4OlxcdFxcdH0sXFxuMTQ0OTpcXHRcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjM0LjY2MDI5NTI2OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDcwMTYwMTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIHRocm90bF9ncnAgQ29uZmlndXJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCBgdGdfc2V0X2NvbmZgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBgYnBzYCBvciBgaW9wc2AgdmFsdWVzIHdpdGhpbiBhIGB0aHJvdGxfZ3JwYCBzdHJ1Y3R1cmUuIFRoZXNlIHZhbHVlcywgaW50ZWdlcnMgb3IgYHU2NGAgdmFsdWVzLCBkZWZpbmUgdGhlIGJhbmR3aWR0aCBvciBJT1BTIGxpbWl0cy4gVGhlIGNydWNpYWwgcGFydCBoZXJlIGlzIHRoZSBwYXRjaCdzIGNsYW1waW5nIG9mIHRoZSB2YWx1ZSBgdmAgd2hlbiBgIWlzX3U2NGAuIEl0J3MgdXNpbmcgYG1pbih2LCAodTY0KVVJTlRfTUFYKWAgYmVmb3JlIGFzc2lnbmluZyB0byB0aGUgYCoodW5zaWduZWQgaW50ICopZmllbGRgLiBUaGlzIGlzIGEgY3JpdGljYWwgZGVmZW5zaXZlIG1lYXN1cmUuIEl0J3MgZGVzaWduZWQgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93IG9yIHRydW5jYXRpb24gaXNzdWVzLCBlc3BlY2lhbGx5IGlmIGEgdmVyeSBsYXJnZSB2YWx1ZSBpcyBiZWluZyBzZXQgd2hlbiBpdCdzIG1lYW50IHRvIGJlIGFuIHVuc2lnbmVkIGludGVnZXIuXG5cblRoZSBtb3N0IGltcG9ydGFudCB0YWtlYXdheSBmb3IgbWUgaXMgdGhlIGFic2VuY2Ugb2YgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgd2hlcmUgbWVtb3J5IGlzIG5vdCBleHBsaWNpdGx5IGluaXRpYWxpemVkLCB0aGVyZSdzIG5vIHBvdGVudGlhbCBmb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIGNydWNpYWxseSwgdGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgcmVseSBvbiB0aGUgc3RhdGUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgZXhjZWxsZW50OyBpdCBzaWduaWZpY2FudGx5IGxvd2VycyB0aGUgcmlzayBwcm9maWxlLlxuXG5Db25zaWRlcmluZyBhbGwgdGhpcywgaXQncyBjbGVhcjogYE5lZWRzS01TQU5gIGlzIHVuZXF1aXZvY2FsbHkgYGZhbHNlYC4gVGhlIHBhdGNoIHNlZW1zIHdlbGwtZGVmZW5kZWQgYWdhaW5zdCBwb3RlbnRpYWwgbWVtb3J5IGluaXRpYWxpemF0aW9uIHByb2JsZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjM0LCJPdXRwdXRUb2tlbnMiOjE5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjM4LjEzMDQ1OTc5M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRnX3NldF9jb25mKClgIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AgdG8gZmFjdG9yIG91dCB0aGUgcG9pbnRlciBjYWxjdWxhdGlvbiBpbnRvIGEgaGVscGVyIGxvY2FsIHZhcmlhYmxlIGBmaWVsZGAgYW5kIHRvIGNsYW1wIHZhbHVlcyB0byBgVUlOVF9NQVhgIHZpYSBgbWluKHYsIFVJTlRfTUFYKWAgd2hlbiBzZXR0aW5nIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGNvbmZpZ3VyYXRpb24gZmllbGRzLlxcblxcblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSB2YXJpYWJsZSBgdmAgaXMgcGFyc2VkIGFuZCB2YWxpZGF0ZWQgYnkgYHNzY2FuZmAsIGFuZCB0aGUgdGFyZ2V0IHN0cnVjdCBmaWVsZCBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBjbGFtcGVkIGludGVnZXIgdmFsdWUuIEFueSBwb3RlbnRpYWwgbWVtb3J5LXNhZmV0eSBvciBjb25jdXJyZW5jeSBpc3N1ZXMgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9VQlNBTi9MT0NLREVQKS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRnX3NldF9jb25mKClgIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AgdG8gZmFjdG9yIG91dCB0aGUgcG9pbnRlciBjYWxjdWxhdGlvbiBpbnRvIGEgaGVscGVyIGxvY2FsIHZhcmlhYmxlIGBmaWVsZGAgYW5kIHRvIGNsYW1wIHZhbHVlcyB0byBgVUlOVF9NQVhgIHZpYSBgbWluKHYsIFVJTlRfTUFYKWAgd2hlbiBzZXR0aW5nIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGNvbmZpZ3VyYXRpb24gZmllbGRzLlxcblxcblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSB2YXJpYWJsZSBgdmAgaXMgcGFyc2VkIGFuZCB2YWxpZGF0ZWQgYnkgYHNzY2FuZmAsIGFuZCB0aGUgdGFyZ2V0IHN0cnVjdCBmaWVsZCBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBjbGFtcGVkIGludGVnZXIgdmFsdWUuIEFueSBwb3RlbnRpYWwgbWVtb3J5LXNhZmV0eSBvciBjb25jdXJyZW5jeSBpc3N1ZXMgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9VQlNBTi9MT0NLREVQKS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowgm7cr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 13:17:07 +0000 UTC FinishedAt: 2026-09-05 14:09:40 +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": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP", "BLK_DEV_THROTTLING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP", "BLK_DEV_THROTTLING" ], "series_id": "342dfc3d-81c2-4fc0-b2db-59ce63686c7a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "tg_set_conf", "tg_set_conf_uint", "tg_set_conf_u64" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGdfc2V0X2NvbmYmIzM0OywKICAgICYjMzQ7dGdfc2V0X2NvbmZfdWludCYjMzQ7LAogICAgJiMzNDt0Z19zZXRfY29uZl91NjQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGdfc2V0X2NvbmYoKWAgaW4gYGJsb2NrL2Jsay10aHJvdHRsZS5jYCB0byBmYWN0b3Igb3V0IHRoZSBwb2ludGVyIGNhbGN1bGF0aW9uIGludG8gYSBoZWxwZXIgbG9jYWwgdmFyaWFibGUgYGZpZWxkYCBhbmQgdG8gY2xhbXAgdmFsdWVzIHRvIGBVSU5UX01BWGAgdmlhIGBtaW4odiwgVUlOVF9NQVgpYCB3aGVuIHNldHRpbmcgdW5zaWduZWQgMzItYml0IGludGVnZXIgY29uZmlndXJhdGlvbiBmaWVsZHMuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSB2YXJpYWJsZSBgdmAgaXMgcGFyc2VkIGFuZCB2YWxpZGF0ZWQgYnkgYHNzY2FuZmAsIGFuZCB0aGUgdGFyZ2V0IHN0cnVjdCBmaWVsZCBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBjbGFtcGVkIGludGVnZXIgdmFsdWUuIEFueSBwb3RlbnRpYWwgbWVtb3J5LXNhZmV0eSBvciBjb25jdXJyZW5jeSBpc3N1ZXMgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9VQlNBTi9MT0NLREVQKS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Z19zZXRfY29uZigpYCBpbiBgYmxvY2svYmxrLXRocm90dGxlLmNgIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdy90cnVuY2F0aW9uIHdoZW4gYXNzaWduaW5nIDMyLWJpdCB0aHJvdHRsZSBjb25maWd1cmF0aW9uIGZpZWxkcyBieSBjbGFtcGluZyB0aGUgcGFyc2VkIDY0LWJpdCB2YWx1ZSB0byBgVUlOVF9NQVhgLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJsa2lvIGNncm91cCBjb250cm9sIGludGVyZmFjZSBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgcHJvcGVyIGJlaGF2aW9yIHdoZW4gd3JpdGluZyB2YXJpb3VzIHZhbHVlcyB0byB0aHJvdHRsZSBwYXJhbWV0ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzhjODQ2YWVjYjFkMmI0ZmE2ZjVkYTczMGM3ZjU2OWUzZmY3MDA1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTQ6MDg6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXRocm90dGxlLmMgYi9ibG9jay9ibGstdGhyb3R0bGUuY1xuaW5kZXggZmZjM2I3MDA2NWQ0Yi4uOTdhZDc5NTlkMDA2ZiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstdGhyb3R0bGUuY1xuQEAgLTEzODMsMTAgJiM0MzsxMzgzLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdHRnID0gYmxrZ190b190ZyhjdHguYmxrZyk7XG4gXHR0Z191cGRhdGVfY2FycnlvdmVyKHRnKTtcbiBcbiYjNDM7XHR2b2lkICpmaWVsZCA9ICh2b2lkICopdGcgJiM0Mzsgb2ZfY2Z0KG9mKS1cdTAwM2Vwcml2YXRlO1xuJiM0MztcbiBcdGlmIChpc191NjQpXG4tXHRcdCoodTY0ICopKCh2b2lkICopdGcgJiM0Mzsgb2ZfY2Z0KG9mKS1cdTAwM2Vwcml2YXRlKSA9IHY7XG4mIzQzO1x0XHQqKHU2NCAqKWZpZWxkID0gdjtcbiBcdGVsc2Vcbi1cdFx0Kih1bnNpZ25lZCBpbnQgKikoKHZvaWQgKil0ZyAmIzQzOyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGUpID0gdjtcbiYjNDM7XHRcdCoodW5zaWduZWQgaW50ICopZmllbGQgPSBtaW4odiwgVUlOVF9NQVgpO1xuIFxuIFx0dGdfY29uZl91cGRhdGVkKHRnLCBmYWxzZSk7XG4gXHRyZXQgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGdfc2V0X2NvbmYmIzM0OywKICAgICYjMzQ7dGdfc2V0X2NvbmZfdWludCYjMzQ7LAogICAgJiMzNDt0Z19zZXRfY29uZl91NjQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRnX3NldF9jb25mKClgIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93L3RydW5jYXRpb24gd2hlbiBhc3NpZ25pbmcgMzItYml0IHRocm90dGxlIGNvbmZpZ3VyYXRpb24gZmllbGRzIGJ5IGNsYW1waW5nIHRoZSBwYXJzZWQgNjQtYml0IHZhbHVlIHRvIGBVSU5UX01BWGAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYmxraW8gY2dyb3VwIGNvbnRyb2wgaW50ZXJmYWNlIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBwcm9wZXIgYmVoYXZpb3Igd2hlbiB3cml0aW5nIHZhcmlvdXMgdmFsdWVzIHRvIHRocm90dGxlIHBhcmFtZXRlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OGM4NDZhZWNiMWQyYjRmYTZmNWRhNzMwYzdmNTY5ZTNmZjcwMDU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxNDowODo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmMKaW5kZXggZmZjM2I3MDA2NWQ0Yi4uOTdhZDc5NTlkMDA2ZiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXRocm90dGxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLXRocm90dGxlLmMKQEAgLTEzODMsMTAgJiM0MzsxMzgzLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwKIAl0ZyA9IGJsa2dfdG9fdGcoY3R4LmJsa2cpOwogCXRnX3VwZGF0ZV9jYXJyeW92ZXIodGcpOwogCiYjNDM7CXZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyAmIzQzOyBvZl9jZnQob2YpLSZndDtwcml2YXRlOwomIzQzOwogCWlmIChpc191NjQpCi0JCSoodTY0ICopKCh2b2lkICopdGcgJiM0Mzsgb2ZfY2Z0KG9mKS0mZ3Q7cHJpdmF0ZSkgPSB2OwomIzQzOwkJKih1NjQgKilmaWVsZCA9IHY7CiAJZWxzZQotCQkqKHVuc2lnbmVkIGludCAqKSgodm9pZCAqKXRnICYjNDM7IG9mX2NmdChvZiktJmd0O3ByaXZhdGUpID0gdjsKJiM0MzsJCSoodW5zaWduZWQgaW50ICopZmllbGQgPSBtaW4odiwgVUlOVF9NQVgpOwogCiAJdGdfY29uZl91cGRhdGVkKHRnLCBmYWxzZSk7CiAJcmV0ID0gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IERpdmluZyBpbnRvIGBibGstdGhyb3R0bGUuY2AqKgoKT2theSwgc28gYSBuZXcgcGF0Y2ggaGFzIGxhbmRlZCwgYW5kIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzIHF1aWNrbHkuIFRoZSBiZXN0IHdheSB0byBkbyB0aGF0LCBvZiBjb3Vyc2UsIGlzIHRvIGxldmVyYWdlIHRoZSB0b29saW5nIEkgaGF2ZS4gSSYjMzk7bGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIGByZWFkLWZpbGVgIGltbWVkaWF0ZWx5LiBJIHdhbnQgdG8gc2VlIHRoaXMgcGF0Y2ggaW4gY29udGV4dCwgdW5kZXJzdGFuZCB3aGVyZSBpdCYjMzk7cyB0b3VjaGluZywgYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlLgoKR2l2ZW4gdGhlIGluaXRpYWwgYXNzZXNzbWVudCwgYGJsb2NrL2Jsay10aHJvdHRsZS5jYCBzZWVtcyBsaWtlIHRoZSBsaWtlbHkgYXJlYSB0byBmb2N1cyBvbiBmaXJzdC4gSXQmIzM5O3Mgb2Z0ZW4gdGhlIGhlYXJ0IG9mIEkvTyBjb250cm9sLCBhbmQga25vd2luZyB0aGlzLCBJIHN1c3BlY3QgdGhpcyB3aWxsIG9mZmVyIHRoZSBtb3N0IHJlbGV2YW50IGluc2lnaHQuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQuIEkgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IGZpbGUgaWYgbmVlZCBiZSwgYnV0IGBibGstdGhyb3R0bGUuY2AgaXMgdGhlIHByaW1lIHN1c3BlY3QgZm9yIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM3MDpcdFx0XHRcdGdvdG8gY2xvc2VfYmRldjtcbjEzNzE6XHRcdH1cbjEzNzI6XHRcbjEzNzM6XHRcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLCBcdTAwMjZjdHgpO1xuMTM3NDpcdFx0aWYgKHJldClcbjEzNzU6XHRcdFx0Z290byBjbG9zZV9iZGV2O1xuMTM3NjpcdFxuMTM3NzpcdFx0cmV0ID0gLUVJTlZBTDtcbjEzNzg6XHRcdGlmIChzc2NhbmYoY3R4LmJvZHksIFwmIzM0OyVsbHVcJiMzNDssIFx1MDAyNnYpICE9IDEpXG4xMzc5Olx0XHRcdGdvdG8gdW5wcmVwO1xuMTM4MDpcdFx0aWYgKCF2KVxuMTM4MTpcdFx0XHR2ID0gVTY0X01BWDtcbjEzODI6XHRcbjEzODM6XHRcdHRnID0gYmxrZ190b190ZyhjdHguYmxrZyk7XG4xMzg0Olx0XHR0Z191cGRhdGVfY2FycnlvdmVyKHRnKTtcbjEzODU6XHRcbjEzODY6XHRcdHZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyAmIzQzOyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGU7XG4xMzg3Olx0XG4xMzg4Olx0XHRpZiAoaXNfdTY0KVxuMTM4OTpcdFx0XHQqKHU2NCAqKWZpZWxkID0gdjtcbjEzOTA6XHRcdGVsc2VcbjEzOTE6XHRcdFx0Kih1bnNpZ25lZCBpbnQgKilmaWVsZCA9IG1pbih2LCBVSU5UX01BWCk7XG4xMzkyOlx0XG4xMzkzOlx0XHR0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTtcbjEzOTQ6XHRcdHJldCA9IDA7XG4xMzk1Olx0XG4xMzk2Olx0dW5wcmVwOlxuMTM5NzpcdFx0YmxrZ19jb25mX3VucHJlcChcdTAwMjZjdHgpO1xuMTM5ODpcdFxuMTM5OTpcdGNsb3NlX2JkZXY6XG4xNDAwOlx0XHRibGtnX2NvbmZfY2xvc2VfYmRldihcdTAwMjZjdHgpO1xuMTQwMTpcdFx0cmV0dXJuIHJldCA/OiBuYnl0ZXM7XG4xNDAyOlx0fVxuMTQwMzpcdFxuMTQwNDpcdHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3U2NChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4xNDA1Olx0XHRcdFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbjE0MDY6XHR7XG4xNDA3Olx0XHRyZXR1cm4gdGdfc2V0X2NvbmYob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIHRydWUpO1xuMTQwODpcdH1cbjE0MDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzY3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gQmxvY2sgVGhyb3R0bGluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyByZWxhdGVkIHRvIGJsb2NrIHRocm90dGxpbmcuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byBgYmxvY2svYmxrLXRocm90dGxlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgdGdfc2V0X2NvbmZgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgaG93IHRoZXNlIHNldHRpbmdzIGFyZSBhcHBsaWVkIGFuZCBtYW5hZ2VkLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgYW5kIGhvdyB0aGV5JiMzOTtyZSBleHBvc2VkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGVpdGhlciBgYmxvY2svS2NvbmZpZ2Agb3IgYGJsb2NrL01ha2VmaWxlYCB0byBzZWUgaG93IGBibGstdGhyb3R0bGUuY2AgaXRzZWxmIGlzIGNvbnRyb2xsZWQuIE9uY2UgSSB1bmRlcnN0YW5kIHRob3NlIGZpbGVzLCBJIHNob3VsZCBoYXZlIGEgZ29vZCBwaWN0dXJlIG9mIGhvdyBJIGNvbmZpZ3VyZSBhbmQgbWFuYWdlIHRocm90dGxpbmcgd2l0aGluIHRoZSBibG9jayBsYXllci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGstdGhyb3R0bGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9MjE9b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfRkNfQVBQSUQpICYjNDM7PSBibGstY2dyb3VwLWZjLWFwcGlkLm9cbmJsb2NrL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcpXHQmIzQzOz0gYmxrLXRocm90dGxlLm9cbmJsb2NrL01ha2VmaWxlLTIzLW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTylcdCYjNDM7PSBibGstaW9wcmlvLm9cbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMzUtI2luY2x1ZGUgXCYjMzQ7YmxrLWlvcHJpby5oXCYjMzQ7XG5ibG9jay9ibGstY2dyb3VwLmM6MzY6I2luY2x1ZGUgXCYjMzQ7YmxrLXRocm90dGxlLmhcJiMzNDtcbmJsb2NrL2Jsay1jZ3JvdXAuYy0zNy1cbi0tXG5ibG9jay9ibGstY29yZS5jLTUwLSNpbmNsdWRlIFwmIzM0O2Jsay1jZ3JvdXAuaFwmIzM0O1xuYmxvY2svYmxrLWNvcmUuYzo1MTojaW5jbHVkZSBcJiMzNDtibGstdGhyb3R0bGUuaFwmIzM0O1xuYmxvY2svYmxrLWNvcmUuYy01Mi0jaW5jbHVkZSBcJiMzNDtibGstaW9wcmlvLmhcJiMzNDtcbi0tXG5ibG9jay9ibGstbWVyZ2UuYy0xNy0jaW5jbHVkZSBcJiMzNDtibGstcnEtcW9zLmhcJiMzNDtcbmJsb2NrL2Jsay1tZXJnZS5jOjE4OiNpbmNsdWRlIFwmIzM0O2Jsay10aHJvdHRsZS5oXCYjMzQ7XG5ibG9jay9ibGstbWVyZ2UuYy0xOS1cbi0tXG5ibG9jay9ibGstc3lzZnMuYy0yMC0jaW5jbHVkZSBcJiMzNDtibGstY2dyb3VwLmhcJiMzNDtcbmJsb2NrL2Jsay1zeXNmcy5jOjIxOiNpbmNsdWRlIFwmIzM0O2Jsay10aHJvdHRsZS5oXCYjMzQ7XG5ibG9jay9ibGstc3lzZnMuYy0yMi0jaW5jbHVkZSBcJiMzNDtlcnJvci1pbmplY3Rpb24uaFwmIzM0O1xuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0LSNpbmNsdWRlIFwmIzM0O2Jsay1jZ3JvdXAtcndzdGF0LmhcJiMzNDtcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE1OiNpbmNsdWRlIFwmIzM0O2Jsay10aHJvdHRsZS5oXCYjMzQ7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNi1cbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xMjcwPXN0YXRpYyB2b2lkIHRnX2NvbmZfdXBkYXRlZChzdHJ1Y3QgdGhyb3RsX2dycCAqdGcsIGJvb2wgZ2xvYmFsKVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEyODYtXHQgKiByZXN0cmljdGlvbnMgaW4gdGhlIHdob2xlIGhpZXJhcmNoeSBhbmQgYWxsb3dzIHRoZW0gdG8gYnlwYXNzXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxMjg3Olx0ICogYmxrLXRocm90dGxlLlxuYmxvY2svYmxrLXRocm90dGxlLmMtMTI4OC1cdCAqL1xuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5oPTE1NT1zdGF0aWMgaW5saW5lIGJvb2wgYmxrX3Rocm90bF9hY3RpdmF0ZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmgtMTU3LVx0LypcbmJsb2NrL2Jsay10aHJvdHRsZS5oOjE1ODpcdCAqIHEtXHUwMDNldGQgZ3VhcmFudGVlcyB0aGF0IHRoZSBibGstdGhyb3R0bGUgbW9kdWxlIGlzIGFscmVhZHkgbG9hZGVkLFxuYmxvY2svYmxrLXRocm90dGxlLmg6MTU5Olx0ICogYW5kIHRoZSBwbGlkIG9mIGJsay10aHJvdHRsZSBpcyBhc3NpZ25lZC5cbmJsb2NrL2Jsay10aHJvdHRsZS5oLTE2MC1cdCAqIGJsa2NnX3BvbGljeV9lbmFibGVkKCkgZ3VhcmFudGVlcyB0aGF0IHRoZSBwb2xpY3kgaXMgYWN0aXZhdGVkXG4tLVxuYmxvY2svZ2VuaGQuYy0yOS1cbmJsb2NrL2dlbmhkLmM6MzA6I2luY2x1ZGUgXCYjMzQ7YmxrLXRocm90dGxlLmhcJiMzNDtcbmJsb2NrL2dlbmhkLmMtMzEtI2luY2x1ZGUgXCYjMzQ7YmxrLmhcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBLY29uZmlnIGZvciBCbG9jayBEZXZpY2UgVGhyb3R0bGluZyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBzdGF0dXMgb2YgYEJMS19ERVZfVEhST1RUTElOR2AuIEl0JiMzOTtzIHByZXR0eSBmdW5kYW1lbnRhbCwgc28gaXQmIzM5O3MgbGlrZWx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtYW55IG1vZGVybiBjb25maWd1cmF0aW9ucywgYnV0IEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lLiBJJiMzOTtsbCBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZXMsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggdGhlIGNvcmUgYmxvY2sgZGV2aWNlIGRlZmluaXRpb25zLCBhbmQgcXVpY2tseSBncmVwIGZvciBgQkxLX0RFVl9USFJPVFRMSU5HYC4gSSYjMzk7bGwgd2FudCB0byBzZWUgbm90IGp1c3QgaWYgaXQmIzM5O3MgKmRlZmluZWQqLCBidXQgYWxzbyBob3cgaXQmIzM5O3MgZGVmaW5lZC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGFueSBjb25maWd1cmF0aW9ucyB0aGF0IGV4cGxpY2l0bHkgZGlzYWJsZSBpdCwgcGVyaGFwcyByZWxhdGVkIHRvIHNwZWNpZmljIHN0b3JhZ2UgdHlwZXMgb3IgdXNlIGNhc2VzIGxpa2UgcmVhbC10aW1lIHN5c3RlbXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhpbmdzIGxpa2UgSS9PIHNjaGVkdWxlcnMsIHBhcnRpY3VsYXJseSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4gSXMgaXQgYSBkaXJlY3QgZGVwZW5kZW5jeSwgb3IgaW5kaXJlY3RseSBwdWxsZWQgaW4gdGhyb3VnaCBhIG1vcmUgZ2VuZXJpYyBibG9jayBsYXllciBmZWF0dXJlPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0JiMzOTtzICpyZWFsbHkqIGRvaW5nIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfVEhST1RUTElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTk3PWNvbmZpZyBCTEtfREVWX1pPTkVEXG4tLVxuYmxvY2svS2NvbmZpZy0xMDUtXG5ibG9jay9LY29uZmlnOjEwNjpjb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXG5ibG9jay9LY29uZmlnLTEwNy1cdGJvb2wgXCYjMzQ7QmxvY2sgbGF5ZXIgYmlvIHRocm90dGxpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNTUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBibG9jay9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEwNi4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIHNlbGVjdGlvbiBsb2dpYyBvciBmZWF0dXJlIGRlZmluaXRpb24gcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgcHJvYmxlbSByZXNpZGVzLiBUaGlzIHVzdWFsbHkgbWVhbnMgdGhhdCBhcm91bmQgdGhhdCBsaW5lIEkmIzM5O2xsIGZpbmQga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbWF5YmUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgb3IgcGVyaGFwcyBkZWZpbml0aW9ucyBvZiBkZXZpY2Utc3BlY2lmaWMgc2V0dGluZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBvcHRpb25zIGFuZCB0aGUgcmVzdCBvZiB0aGUgYmxvY2sgbGF5ZXIuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBrbm9icyB0byB0dXJuLCB0aGUgZmxhZ3MgdGhhdCBjb250cm9sIGVuYWJsZW1lbnQsIGFuZCBob3cgdGhlc2Ugc2V0dGluZ3MgaW50ZXJhY3Qgd2l0aGluIHRoZSBicm9hZGVyIEtjb25maWcgaGllcmFyY2h5LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTA1Olx0XG4gMTA2Olx0Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xuIDEwNzpcdFx0Ym9vbCBcJiMzNDtCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XCYjMzQ7XG4gMTA4Olx0XHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcbiAxMDk6XHRcdHNlbGVjdCBCTEtfQ0dST1VQX1JXU1RBVFxuIDExMDpcdFx0aGVscFxuIDExMTpcdFx0QmxvY2sgbGF5ZXIgYmlvIHRocm90dGxpbmcgc3VwcG9ydC4gSXQgY2FuIGJlIHVzZWQgdG8gbGltaXRcbiAxMTI6XHRcdHRoZSBJTyByYXRlIHRvIGEgZGV2aWNlLiBJTyByYXRlIHBvbGljaWVzIGFyZSBwZXIgY2dyb3VwIGFuZFxuIDExMzpcdFx0b25lIG5lZWRzIHRvIG1vdW50IGFuZCB1c2UgYmxraW8gY2dyb3VwIGNvbnRyb2xsZXIgZm9yIGNyZWF0aW5nXG4gMTE0Olx0XHRjZ3JvdXBzIGFuZCBzcGVjaWZ5aW5nIHBlciBkZXZpY2UgSU8gcmF0ZSBwb2xpY2llcy5cbiAxMTU6XHRcbiAxMTY6XHRcdFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAxMTc6XHRcbiAxMTg6XHRjb25maWcgQkxLX1dCVFxuIDExOTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgYmxvY2sgZGV2aWNlIHdyaXRlYmFjayB0aHJvdHRsaW5nXCYjMzQ7XG4gMTIwOlx0XHRoZWxwXG4gMTIxOlx0XHRFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBibG9jayBsYXllciB0byB0aHJvdHRsZSBidWZmZXJlZFxuIDEyMjpcdFx0YmFja2dyb3VuZCB3cml0ZWJhY2sgZnJvbSB0aGUgVk0sIG1ha2luZyBpdCBtb3JlIHNtb290aCBhbmQgaGF2aW5nXG4gMTIzOlx0XHRsZXNzIGltcGFjdCBvbiBmb3JlZ3JvdW5kIG9wZXJhdGlvbnMuIFRoZSB0aHJvdHRsaW5nIGlzIGRvbmVcbiAxMjQ6XHRcdGR5bmFtaWNhbGx5IG9uIGFuIGFsZ29yaXRobSBsb29zZWx5IGJhc2VkIG9uIENvRGVsLCBmYWN0b3JpbmcgaW5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBzbyBgQkxLX0RFVl9USFJPVFRMSU5HYCByZWxpZXMgb24gYEJMS19DR1JPVVBgLiBNYWtlcyBzZW5zZSwgdGhleSBvZnRlbiBnbyBoYW5kLWluLWhhbmQuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW50byB0aGUgc291cmNlIG9mIHRydXRoLCB0aGUgYGJsb2NrL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgZGVwZW5kZW5jeSBhbmQgdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgY29uZmlndXJlZC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIGRldGFpbHMgb24gaG93IGBCTEtfQ0dST1VQYCBpcyBkZWZpbmVkIGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoZSBlbmFibGVtZW50IG9mIGBCTEtfREVWX1RIUk9UVExJTkdgLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19DR1JPVVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcbi0tXG5ibG9jay9LY29uZmlnLTQxLVxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcbmJsb2NrL0tjb25maWctNDMtXHRib29sXG5ibG9jay9LY29uZmlnLTQ0LVxuYmxvY2svS2NvbmZpZzo0NTpjb25maWcgQkxLX0NHUk9VUF9QVU5UX0JJT1xuYmxvY2svS2NvbmZpZy00Ni1cdGJvb2xcbi0tXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxuLS1cbmJsb2NrL0tjb25maWctMTMzLVxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG5ibG9jay9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE0NC1cbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXG5ibG9jay9LY29uZmlnLTE0Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE1My1cbmJsb2NrL0tjb25maWc6MTU0OmNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxuYmxvY2svS2NvbmZpZy0xNTUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNjMtXG5ibG9jay9LY29uZmlnOjE2NDpjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cbmJsb2NrL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDtDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE4MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpbmRpbmcgdGhlIEJMS19DR1JPVVAgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSBgQkxLX0NHUk9VUGAgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIE15IGZpcnN0IGh1bmNoIGlzIHRoYXQgaXQmIzM5O2xsIGJlIGluIGEgS2NvbmZpZyBmaWxlLCBwcm9iYWJseSBzb21ld2hlcmUgdW5kZXIgYGluaXQvYCBzaW5jZSB0aGF0JiMzOTtzIGEgY29tbW9uIHBsYWNlIGZvciBjb3JlIGZlYXR1cmUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgaW4gYGluaXQvS2NvbmZpZ2AgZmlyc3QsIHRoZW4gSSYjMzk7bGwgYnJvYWRlbiB0aGUgc2VhcmNoIGlmIHRoYXQgZG9lc24mIzM5O3QgcGFuIG91dC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MsIGJ1dCBuZWNlc3NhcnkgYmVmb3JlIEkgY2FuIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfQ0dST1VQXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTExMDg9Y29uZmlnIE1FTUNHX1YxXG4tLVxuaW5pdC9LY29uZmlnLTExMjQtXG5pbml0L0tjb25maWc6MTEyNTpjb25maWcgQkxLX0NHUk9VUFxuaW5pdC9LY29uZmlnLTExMjYtXHRib29sIFwmIzM0O0lPIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQyNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgdGdfc2V0X2NvbmZgLCB0aGUga2V5IGNoYW5nZSBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gV2UmIzM5O3ZlIHJlcGxhY2VkIHRoZSBkaXJlY3QgYXNzaWdubWVudCB0byB0aGUgdGFyZ2V0IGZpZWxkIHdpdGggYSBtb3JlIGNhdXRpb3VzIGFwcHJvYWNoLiBJbml0aWFsbHksIHRoZSBjb2RlIGhhZCBhIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQ6IGBpZiAoaXNfdTY0KWAgd2UmIzM5O2QgY2FzdCB0aGUgcHJpdmF0ZSBmaWVsZCBhbmQgd3JpdGUgYHZgIGFzIGlzOyBvdGhlcndpc2Ugd2UgY2FzdCBhcyBgdW5zaWduZWQgaW50YCBhbmQgc2ltcGx5IGFzc2lnbmVkIGB2YC4KCldhaXQgYSBtaW51dGUsIGB2YCBpcyBhbiBgdW5zaWduZWQgbG9uZyBsb25nYCDigJMgYSBgdTY0YC4gU28sIHdoZW4gYGlzX3U2NGAgaXMgKmZhbHNlKiwgYW5kIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBmdW5jdGlvbiBsaWtlIGB0Z19zZXRfY29uZl91aW50YCwgdGhlIHByZXZpb3VzIGFwcHJvYWNoIHdvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gYSBzdHJhaWdodCB0cnVuY2F0aW9uIG9mIGB2YCB0byBgdW5zaWduZWQgaW50YC4gTm93IHRoZSBsb2dpYyBpcyBgbWluKHYsIFVJTlRfTUFYKWAuIFRoYXQgZmVlbHMgYSBiaXQuLi4gdW5yZWZpbmVkLCBkb2VzbiYjMzk7dCBpdD8gTXkgaW5zdGluY3QgaXMgdG8gdXNlIHNvbWV0aGluZyBsaWtlIGBtaW5fdGAgb3IgZXhwbGljaXRseSBjYXN0IGBVSU5UX01BWGAgdG8gYHU2NGAgZm9yIGEgbW9yZSBleHBsaWNpdCB0eXBlIHNhZmV0eS4KCkhvbGQgb24sIEkgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBtaW4odiwgVUlOVF9NQVgpYCBpcyBlZmZlY3RpdmVseSBjYXBwaW5nIGB2YCBhdCB0aGUgdmFsdWUgb2YgYFVJTlRfTUFYYCEgU28sIGlmIHNvbWVvbmUsIGludGVudGlvbmFsbHkgb3IgdW5pbnRlbnRpb25hbGx5LCB0cmllcyB0byBzZXQgYSB0aHJvdHRsZSBsaW1pdCAobGlrZSBgbWF4X2lvcHNgIG9yIGBtYXhfYnBzYCB0aGF0JiMzOTtzIG1hbmFnZWQgYnkgYHRnX3NldF9jb25mX3VpbnRgIG9yIGFueSBvdGhlciBmdW5jdGlvbiB0aGF0IGNhbGxzIGB0Z19zZXRfY29uZmAgd2l0aCBgaXNfdTY0YCBiZWluZyBmYWxzZSkgdG8gYSB2YWx1ZSBsYXJnZXIgdGhhbiB3aGF0IGBVSU5UX01BWGAgYWxsb3dzLCB0aGUgY29kZSBubyBsb25nZXIganVzdCBvdmVyZmxvd3Mgb3IgdHJ1bmNhdGVzIHRoZSB2YWx1ZSAocG90ZW50aWFsbHkgbGVhZGluZyB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGxpa2UgZXh0cmVtZWx5IGxvdyBsaW1pdHMgb3IgZXZlbiB6ZXJvKS4gSW5zdGVhZCwgaXQgY2xhbXBzIHRoZSB2YWx1ZSB0byB0aGUgbWF4aW11bSBwZXJtaXNzaWJsZSBgdW5zaWduZWQgaW50YCEgVGhpcyBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgYSBjcml0aWNhbCBzYWZldHkgbWVhc3VyZS4gQmVmb3JlIGl0IGNvdWxkIGVhc2lseSBsZWFkIHRvIGEgc2lnbmlmaWNhbnQgdnVsbmVyYWJpbGl0eSEKCk5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGB0Z19zZXRfY29uZmAgdG8gYXNzZXNzIHRoZSBicm9hZGVyIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGdfc2V0X2NvbmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXRocm90dGxlLmM9MTMxOD1zdGF0aWMgaW50IGJsa190aHJvdGxfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzUxLVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTM1MjpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzUzLVx0XHRcdCAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZiwgYm9vbCBpc191NjQpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwMy1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MDQ6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdTY0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDUtXHRcdFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDYte1xuYmxvY2svYmxrLXRocm90dGxlLmM6MTQwNzpcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgdHJ1ZSk7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDA4LX1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDktXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDEwOnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3VpbnQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxMS1cdFx0XHRcdGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTIte1xuYmxvY2svYmxrLXRocm90dGxlLmM6MTQxMzpcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgZmFsc2UpO1xuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxNC19XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTQ0Mj1zdGF0aWMgc3RydWN0IGNmdHlwZSB0aHJvdGxfbGVnYWN5X2ZpbGVzW10gPSB7XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ0Ni1cdFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91NjQsXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDQ3Olx0XHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDQ4LVx0fSxcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDUyLVx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NTM6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTQtXHR9LFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTgtXHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NTk6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDYwLVx0fSxcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDY0LVx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3VpbnQsXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDY1Olx0XHQud3JpdGUgPSB0Z19zZXRfY29uZl91aW50LFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2Ni1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgRXZhbHVhdGlvbjogYmxrLXRocm90dGxlLmMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYHRnX3NldF9jb25mYCBsb29rcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIGV4cG9zZWQgdGhyb3VnaCBjZ3JvdXAgZmlsZSB3cml0ZXMg4oCTIGBibGtpby50aHJvdHRsZS5yZWFkX2lvcHNfZGV2aWNlYCwgdGhhdCBzb3J0IG9mIHRoaW5nLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgbGlrZSBRRU1VIG9yIEdDRSwgd2hpY2ggaXMgYSBtYWpvciBwb2ludCBpbiBpdHMgZmF2b3IuCgpUaGUgcmVhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyBgV29ydGhGdXp6aW5nPXRydWVgPyBUaW1lIGZvciBhIHF1aWNrIGd1aWRlbGluZXMgY2hlY2suIFRoZSBjb3JlIHN1YnN5c3RlbXMgbGlzdCBzZWVtcyByZWxldmFudC4gTWVtb3J5IG1hbmFnZW1lbnQsIGxvY2tpbmcsIEJQRiwgc2NoZWR1bGVyLi4uIGFsbCBnb29kIGNhbmRpZGF0ZXMuIEJsb2NrIGxheWVyIHRvbywgb2YgY291cnNlLCBhbmQgdGhpcyBpcyBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gYmxvY2sgSS9PIHRocm90dGxpbmcuIFJlZmFjdG9yaW5ncyBhbmQgY29kZSBjbGVhbnVwcyBhbHNvIGFwcGx5IGlmIHRoZXJlJiMzOTtzIHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgYWJzdHJhY3Rpb25zIG9yIGFsZ29yaXRobSBmbG93cy4KClNvLCB0aGUgZm9jdXMgc3ltYm9scy4gYHRnX3NldF9jb25mYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYW5kIGl0IGNhbGxzLCBvciBpcyBjYWxsZWQgYnksIGB0Z19zZXRfY29uZl91aW50YCBhbmQgYHRnX3NldF9jb25mX3U2NGAuIFRoZXkmIzM5O3JlIGFsbCBzdGF0aWMsIHNvIHRoZXkmIzM5O3JlIHByb2JhYmx5IGlubGluZWQuIFNvIEkmIzM5O2xsIGluY2x1ZGUgYWxsIHRocmVlIC0gYHRnX3NldF9jb25mYCwgYHRnX3NldF9jb25mX3VpbnRgLCBhbmQgYHRnX3NldF9jb25mX3U2NGAuIEdvdHRhIGJlIHRob3JvdWdoLgoKTm93LCBqdXN0IHRvIGJlIGNlcnRhaW4sIEkgc2hvdWxkIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBibGstdGhyb3R0bGUuY2AgZm9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBsaW5lcyAxNDEwLTE0NzAgaW4gdGhhdCBmaWxlIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIGluIHRoaXMgYXJlYSBJIHNob3VsZCBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQxMDpcdHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3VpbnQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuMTQxMTpcdFx0XHRcdFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuMTQxMjpcdHtcbjE0MTM6XHRcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgZmFsc2UpO1xuMTQxNDpcdH1cbjE0MTU6XHRcbjE0MTY6XHRzdGF0aWMgaW50IHRnX3ByaW50X3J3c3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuMTQxNzpcdHtcbjE0MTg6XHRcdGJsa2NnX3ByaW50X2Jsa2dzKHNmLCBjc3NfdG9fYmxrY2coc2VxX2NzcyhzZikpLFxuMTQxOTpcdFx0XHRcdCAgYmxrZ19wcmZpbGxfcndzdGF0LCBcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLFxuMTQyMDpcdFx0XHRcdCAgc2VxX2NmdChzZiktXHUwMDNlcHJpdmF0ZSwgdHJ1ZSk7XG4xNDIxOlx0XHRyZXR1cm4gMDtcbjE0MjI6XHR9XG4xNDIzOlx0XG4xNDI0Olx0c3RhdGljIHU2NCB0Z19wcmZpbGxfcndzdGF0X3JlY3Vyc2l2ZShzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLFxuMTQyNTpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkLCBpbnQgb2ZmKVxuMTQyNjpcdHtcbjE0Mjc6XHRcdHN0cnVjdCBibGtnX3J3c3RhdF9zYW1wbGUgc3VtO1xuMTQyODpcdFxuMTQyOTpcdFx0YmxrZ19yd3N0YXRfcmVjdXJzaXZlX3N1bShwZF90b19ibGtnKHBkKSwgXHUwMDI2YmxrY2dfcG9saWN5X3Rocm90bCwgb2ZmLFxuMTQzMDpcdFx0XHRcdFx0ICBcdTAwMjZzdW0pO1xuMTQzMTpcdFx0cmV0dXJuIF9fYmxrZ19wcmZpbGxfcndzdGF0KHNmLCBwZCwgXHUwMDI2c3VtKTtcbjE0MzI6XHR9XG4xNDMzOlx0XG4xNDM0Olx0c3RhdGljIGludCB0Z19wcmludF9yd3N0YXRfcmVjdXJzaXZlKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4xNDM1Olx0e1xuMTQzNjpcdFx0YmxrY2dfcHJpbnRfYmxrZ3Moc2YsIGNzc190b19ibGtjZyhzZXFfY3NzKHNmKSksXG4xNDM3Olx0XHRcdFx0ICB0Z19wcmZpbGxfcndzdGF0X3JlY3Vyc2l2ZSwgXHUwMDI2YmxrY2dfcG9saWN5X3Rocm90bCxcbjE0Mzg6XHRcdFx0XHQgIHNlcV9jZnQoc2YpLVx1MDAzZXByaXZhdGUsIHRydWUpO1xuMTQzOTpcdFx0cmV0dXJuIDA7XG4xNDQwOlx0fVxuMTQ0MTpcdFxuMTQ0MjpcdHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9sZWdhY3lfZmlsZXNbXSA9IHtcbjE0NDM6XHRcdHtcbjE0NDQ6XHRcdFx0Lm5hbWUgPSBcJiMzNDt0aHJvdHRsZS5yZWFkX2Jwc19kZXZpY2VcJiMzNDssXG4xNDQ1Olx0XHRcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIGJwc1tSRUFEXSksXG4xNDQ2Olx0XHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdTY0LFxuMTQ0NzpcdFx0XHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXG4xNDQ4Olx0XHR9LFxuMTQ0OTpcdFx0e1xuMTQ1MDpcdFx0XHQubmFtZSA9IFwmIzM0O3Rocm90dGxlLndyaXRlX2Jwc19kZXZpY2VcJiMzNDssXG4xNDUxOlx0XHRcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIGJwc1tXUklURV0pLFxuMTQ1MjpcdFx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcbjE0NTM6XHRcdFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdTY0LFxuMTQ1NDpcdFx0fSxcbjE0NTU6XHRcdHtcbjE0NTY6XHRcdFx0Lm5hbWUgPSBcJiMzNDt0aHJvdHRsZS5yZWFkX2lvcHNfZGV2aWNlXCYjMzQ7LFxuMTQ1NzpcdFx0XHQucHJpdmF0ZSA9IG9mZnNldG9mKHN0cnVjdCB0aHJvdGxfZ3JwLCBpb3BzW1JFQURdKSxcbjE0NTg6XHRcdFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91aW50LFxuMTQ1OTpcdFx0XHQud3JpdGUgPSB0Z19zZXRfY29uZl91aW50LFxuMTQ2MDpcdFx0fSxcbjE0NjE6XHRcdHtcbjE0NjI6XHRcdFx0Lm5hbWUgPSBcJiMzNDt0aHJvdHRsZS53cml0ZV9pb3BzX2RldmljZVwmIzM0OyxcbjE0NjM6XHRcdFx0LnByaXZhdGUgPSBvZmZzZXRvZihzdHJ1Y3QgdGhyb3RsX2dycCwgaW9wc1tXUklURV0pLFxuMTQ2NDpcdFx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3VpbnQsXG4xNDY1Olx0XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXG4xNDY2Olx0XHR9LFxuMTQ2NzpcdFx0e1xuMTQ2ODpcdFx0XHQubmFtZSA9IFwmIzM0O3Rocm90dGxlLmlvX3NlcnZpY2VfYnl0ZXNcJiMzNDssXG4xNDY5Olx0XHRcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIHN0YXRfYnl0ZXMpLFxuMTQ3MDpcdFx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9yd3N0YXQsXG4xNDcxOlx0XHR9LFxuMTQ3MjpcdFx0e1xuMTQ3MzpcdFx0XHQubmFtZSA9IFwmIzM0O3Rocm90dGxlLmlvX3NlcnZpY2VfYnl0ZXNfcmVjdXJzaXZlXCYjMzQ7LFxuMTQ3NDpcdFx0XHQucHJpdmF0ZSA9IG9mZnNldG9mKHN0cnVjdCB0aHJvdGxfZ3JwLCBzdGF0X2J5dGVzKSxcbjE0NzU6XHRcdFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfcndzdGF0X3JlY3Vyc2l2ZSxcbjE0NzY6XHRcdH0sXG4xNDc3Olx0XHR7XG4xNDc4Olx0XHRcdC5uYW1lID0gXCYjMzQ7dGhyb3R0bGUuaW9fc2VydmljZWRcJiMzNDssXG4xNDc5Olx0XHRcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIHN0YXRfaW9zKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk2MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGNncm91cCB2MiBUaHJvdHRsaW5nIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0aHJvdHRsaW5nIG1lY2hhbmlzbXMgaW4gY2dyb3VwIHYyIGEgYml0IGJldHRlci4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHNlZSBpZiBpdCYjMzk7cyBsZXZlcmFnaW5nIHRoZSBzYW1lIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgYXMgY2dyb3VwIHYxLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gd29uZGVyaW5nIGlmIGl0IHVzZXMgYHRnX3NldF9jb25mYCBvciBzb21lIG90aGVyIGFuYWxvZ291cyBmdW5jdGlvbiBmb3Igc2V0dGluZyB0aGUgdGhyb3R0bGluZyBjb25maWd1cmF0aW9ucy4gVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4KClRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGJsb2NrIEkvTyB0aHJvdHRsaW5nLCBgYmxvY2svYmxrLXRocm90dGxlLmNgIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBkbyBhIHF1aWNrIHNlYXJjaCB3aXRoaW4gdGhhdCBmaWxlIGZvciAmIzM0O3Rocm90bF9maWxlcyYjMzQ7IOKAkyB0aGF0JiMzOTtzIG9mdGVuIGEgZ29vZCBrZXl3b3JkIHRvIGZpbmQgcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgaW52b2x2ZWQgd2l0aCB0aGUgdGhyb3R0bGUgaW1wbGVtZW50YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gaGFuZGxpbmcuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGxlYWQgbWUgdG8gdGhlIGNvcmUgbG9naWMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Z19zZXRfY29uZnx0aHJvdGxfZmlsZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYz0xMzE4PXN0YXRpYyBpbnQgYmxrX3Rocm90bF9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNTEtXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxMzUyOnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNTMtXHRcdFx0ICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmLCBib29sIGlzX3U2NClcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDAzLVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQwNDpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91NjQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwNS1cdFx0XHQgICAgICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwNi17XG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDA3Olx0cmV0dXJuIHRnX3NldF9jb25mKG9mLCBidWYsIG5ieXRlcywgb2ZmLCB0cnVlKTtcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDgtfVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwOS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MTA6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdWludChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDExLVx0XHRcdFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxMi17XG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDEzOlx0cmV0dXJuIHRnX3NldF9jb25mKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBmYWxzZSk7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDE0LX1cbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNDQyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9sZWdhY3lfZmlsZXNbXSA9IHtcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDQ2LVx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NDc6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NDgtXHR9LFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTItXHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdTY0LFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ1MzpcdFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdTY0LFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1NC1cdH0sXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1OC1cdFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91aW50LFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ1OTpcdFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdWludCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjAtXHR9LFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjQtXHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NjU6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDY2LVx0fSxcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNTQyPXN0YXRpYyBzc2l6ZV90IHRnX3NldF9saW1pdChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTYyMy1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE2MjQ6c3RhdGljIHN0cnVjdCBjZnR5cGUgdGhyb3RsX2ZpbGVzW10gPSB7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNjI1LVx0e1xuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE2Nzc9c3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfdGhyb3RsID0ge1xuYmxvY2svYmxrLXRocm90dGxlLmM6MTY3ODpcdC5kZmxfY2Z0eXBlc1x0XHQ9IHRocm90bF9maWxlcyxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2NzktXHQubGVnYWN5X2NmdHlwZXNcdFx0PSB0aHJvdGxfbGVnYWN5X2ZpbGVzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE4NgoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24gYW5kIFN5bWJvbCBSZXZpZXcqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IEkgbmVlZCB0byB2ZXJpZnkgYSBjb3VwbGUgb2YgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyBhcmUgc2V0IGNvcnJlY3RseS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGNoZWNraW5nIGZvciBgQkxLX0RFVl9USFJPVFRMSU5HYCwgYW5kLCBiZWNhdXNlIGl0JiMzOTtzIGEgZGVwZW5kZW5jeSwgYEJMS19DR1JPVVBgLiBJdOKAmXMgY3J1Y2lhbCB0aGlzIGlzIGNvcnJlY3QgYmVmb3JlIHdlIG1vdmUgb24uCgpOb3csIGxldCYjMzk7cyBwaXZvdCB0byB0aGUgcmVsZXZhbnQgc3ltYm9scy4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgY29yZSBmdW5jdGlvbnMgYXJlIHJlYWR5IHRvIGV4ZWN1dGUgY29ycmVjdGx5LiBNeSBmb2N1cyBoZXJlIGlzIG9uIGB0Z19zZXRfY29uZmAsIGB0Z19zZXRfY29uZl91aW50YCwgYW5kIGB0Z19zZXRfY29uZl91NjRgLiBJIG1pZ2h0IGhhdmUgdG8gcmV2aXNpdCB0aGlzIHNlY3Rpb24gaWYgc29tZXRoaW5nIGlzIG9mZi4KCkp1c3QgdG8gYmUgY2VydGFpbiwgSeKAmWxsIHRha2UgYSBxdWljayBsb29rIHRocm91Z2ggYGJsb2NrL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyBvciBzeW1ib2xzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBBaCwgdGhlcmUgaXQgaXM6IGNvbmZpcm1pbmcgYEJMS19ERVZfVEhST1RUTElOR2AmIzM5O3MgYm9vbGVhbiBkZWNsYXJhdGlvbiwgdGhlIGBkZXBlbmRzIG9uIEJMS19DR1JPVVBgIGFuZCB0aGUgYHNlbGVjdCBCTEtfQ0dST1VQX1JXU1RBVGAuIEV2ZXJ5dGhpbmcgc2VlbXMgY29tcGxldGVseSBjbGVhciBhbmQgZXhhY3RseSBhcyBleHBlY3RlZDsgdGhlIGRlcGVuZGVuY3kgaXMgZXN0YWJsaXNoZWQgY29ycmVjdGx5LgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgbm93LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGdfc2V0X2NvbmYmIzM0OywKICAgICYjMzQ7dGdfc2V0X2NvbmZfdWludCYjMzQ7LAogICAgJiMzNDt0Z19zZXRfY29uZl91NjQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRnX3NldF9jb25mKClgIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93L3RydW5jYXRpb24gd2hlbiBhc3NpZ25pbmcgMzItYml0IHRocm90dGxlIGNvbmZpZ3VyYXRpb24gZmllbGRzIGJ5IGNsYW1waW5nIHRoZSBwYXJzZWQgNjQtYml0IHZhbHVlIHRvIGBVSU5UX01BWGAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYmxraW8gY2dyb3VwIGNvbnRyb2wgaW50ZXJmYWNlIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBwcm9wZXIgYmVoYXZpb3Igd2hlbiB3cml0aW5nIHZhcmlvdXMgdmFsdWVzIHRvIHRocm90dGxlIHBhcmFtZXRlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGdfc2V0X2NvbmYmIzM0OywKICAgICYjMzQ7dGdfc2V0X2NvbmZfdWludCYjMzQ7LAogICAgJiMzNDt0Z19zZXRfY29uZl91NjQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRnX3NldF9jb25mKClgIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93L3RydW5jYXRpb24gd2hlbiBhc3NpZ25pbmcgMzItYml0IHRocm90dGxlIGNvbmZpZ3VyYXRpb24gZmllbGRzIGJ5IGNsYW1waW5nIHRoZSBwYXJzZWQgNjQtYml0IHZhbHVlIHRvIGBVSU5UX01BWGAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYmxraW8gY2dyb3VwIGNvbnRyb2wgaW50ZXJmYWNlIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBwcm9wZXIgYmVoYXZpb3Igd2hlbiB3cml0aW5nIHZhcmlvdXMgdmFsdWVzIHRvIHRocm90dGxlIHBhcmFtZXRlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGdfc2V0X2NvbmYoKWAgaW4gYGJsb2NrL2Jsay10aHJvdHRsZS5jYCB0byBmYWN0b3Igb3V0IHRoZSBwb2ludGVyIGNhbGN1bGF0aW9uIGludG8gYSBoZWxwZXIgbG9jYWwgdmFyaWFibGUgYGZpZWxkYCBhbmQgdG8gY2xhbXAgdmFsdWVzIHRvIGBVSU5UX01BWGAgdmlhIGBtaW4odiwgVUlOVF9NQVgpYCB3aGVuIHNldHRpbmcgdW5zaWduZWQgMzItYml0IGludGVnZXIgY29uZmlndXJhdGlvbiBmaWVsZHMuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSB2YXJpYWJsZSBgdmAgaXMgcGFyc2VkIGFuZCB2YWxpZGF0ZWQgYnkgYHNzY2FuZmAsIGFuZCB0aGUgdGFyZ2V0IHN0cnVjdCBmaWVsZCBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBjbGFtcGVkIGludGVnZXIgdmFsdWUuIEFueSBwb3RlbnRpYWwgbWVtb3J5LXNhZmV0eSBvciBjb25jdXJyZW5jeSBpc3N1ZXMgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9VQlNBTi9MT0NLREVQKS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OGM4NDZhZWNiMWQyYjRmYTZmNWRhNzMwYzdmNTY5ZTNmZjcwMDU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxNDowODo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmMKaW5kZXggZmZjM2I3MDA2NWQ0Yi4uOTdhZDc5NTlkMDA2ZiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXRocm90dGxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLXRocm90dGxlLmMKQEAgLTEzODMsMTAgJiM0MzsxMzgzLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwKIAl0ZyA9IGJsa2dfdG9fdGcoY3R4LmJsa2cpOwogCXRnX3VwZGF0ZV9jYXJyeW92ZXIodGcpOwogCiYjNDM7CXZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyAmIzQzOyBvZl9jZnQob2YpLSZndDtwcml2YXRlOwomIzQzOwogCWlmIChpc191NjQpCi0JCSoodTY0ICopKCh2b2lkICopdGcgJiM0Mzsgb2ZfY2Z0KG9mKS0mZ3Q7cHJpdmF0ZSkgPSB2OwomIzQzOwkJKih1NjQgKilmaWVsZCA9IHY7CiAJZWxzZQotCQkqKHVuc2lnbmVkIGludCAqKSgodm9pZCAqKXRnICYjNDM7IG9mX2NmdChvZiktJmd0O3ByaXZhdGUpID0gdjsKJiM0MzsJCSoodW5zaWduZWQgaW50ICopZmllbGQgPSBtaW4odiwgVUlOVF9NQVgpOwogCiAJdGdfY29uZl91cGRhdGVkKHRnLCBmYWxzZSk7CiAJcmV0ID0gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgYW5hbHlzaXMsIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCBpdDoKCioqQW5hbHl6aW5nIGBibGstdGhyb3R0bGUuY2AgUGF0Y2gqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhdGNoIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gd2hlcmUgYHRnX3NldF9jb25mYCBpcyBiZWluZyB1c2VkLCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDEzODMgaW4gYGJsb2NrL2Jsay10aHJvdHRsZS5jYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IG15IGJlYXJpbmdzIG9uIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZSBmdW5jdGlvbiBjYWxsIGFuZCBoZWxwcyBtZSBncm9rIHRoZSBzdXJyb3VuZGluZyBsb2dpYy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBlZmZlY3Qgb2YgYW55IGNoYW5nZXMgb24gaG93IHRoZSB0aHJvdHRsaW5nIG1lY2hhbmlzbSB3b3Jrcy4gVW5kZXJzdGFuZGluZyB0aGF0IGNhbGwmIzM5O3MgY29udGV4dCBpcyBnb2luZyB0byBiZSBrZXkgdG8gZ3Jhc3BpbmcgdGhpcyBwYXRjaCYjMzk7cyBpbnRlbnRpb24gYW5kIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1MDpcdFxuMTM1MTpcdFxuMTM1MjpcdHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbjEzNTM6XHRcdFx0XHQgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYsIGJvb2wgaXNfdTY0KVxuMTM1NDpcdHtcbjEzNTU6XHRcdHN0cnVjdCBibGtjZyAqYmxrY2cgPSBjc3NfdG9fYmxrY2cob2ZfY3NzKG9mKSk7XG4xMzU2Olx0XHRzdHJ1Y3QgYmxrZ19jb25mX2N0eCBjdHg7XG4xMzU3Olx0XHRzdHJ1Y3QgdGhyb3RsX2dycCAqdGc7XG4xMzU4Olx0XHRpbnQgcmV0O1xuMTM1OTpcdFx0dTY0IHY7XG4xMzYwOlx0XG4xMzYxOlx0XHRibGtnX2NvbmZfaW5pdChcdTAwMjZjdHgsIGJ1Zik7XG4xMzYyOlx0XG4xMzYzOlx0XHRyZXQgPSBibGtnX2NvbmZfb3Blbl9iZGV2KFx1MDAyNmN0eCk7XG4xMzY0Olx0XHRpZiAocmV0KVxuMTM2NTpcdFx0XHRyZXR1cm4gcmV0O1xuMTM2NjpcdFxuMTM2NzpcdFx0aWYgKCFibGtfdGhyb3RsX2FjdGl2YXRlZChjdHguYmRldi1cdTAwM2ViZF9xdWV1ZSkpIHtcbjEzNjg6XHRcdFx0cmV0ID0gYmxrX3Rocm90bF9pbml0KGN0eC5iZGV2LVx1MDAzZWJkX2Rpc2spO1xuMTM2OTpcdFx0XHRpZiAocmV0KVxuMTM3MDpcdFx0XHRcdGdvdG8gY2xvc2VfYmRldjtcbjEzNzE6XHRcdH1cbjEzNzI6XHRcbjEzNzM6XHRcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLCBcdTAwMjZjdHgpO1xuMTM3NDpcdFx0aWYgKHJldClcbjEzNzU6XHRcdFx0Z290byBjbG9zZV9iZGV2O1xuMTM3NjpcdFxuMTM3NzpcdFx0cmV0ID0gLUVJTlZBTDtcbjEzNzg6XHRcdGlmIChzc2NhbmYoY3R4LmJvZHksIFwmIzM0OyVsbHVcJiMzNDssIFx1MDAyNnYpICE9IDEpXG4xMzc5Olx0XHRcdGdvdG8gdW5wcmVwO1xuMTM4MDpcdFx0aWYgKCF2KVxuMTM4MTpcdFx0XHR2ID0gVTY0X01BWDtcbjEzODI6XHRcbjEzODM6XHRcdHRnID0gYmxrZ190b190ZyhjdHguYmxrZyk7XG4xMzg0Olx0XHR0Z191cGRhdGVfY2FycnlvdmVyKHRnKTtcbjEzODU6XHRcbjEzODY6XHRcdHZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyAmIzQzOyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGU7XG4xMzg3Olx0XG4xMzg4Olx0XHRpZiAoaXNfdTY0KVxuMTM4OTpcdFx0XHQqKHU2NCAqKWZpZWxkID0gdjtcbjEzOTA6XHRcdGVsc2VcbjEzOTE6XHRcdFx0Kih1bnNpZ25lZCBpbnQgKilmaWVsZCA9IG1pbih2LCBVSU5UX01BWCk7XG4xMzkyOlx0XG4xMzkzOlx0XHR0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTtcbjEzOTQ6XHRcdHJldCA9IDA7XG4xMzk1Olx0XG4xMzk2Olx0dW5wcmVwOlxuMTM5NzpcdFx0YmxrZ19jb25mX3VucHJlcChcdTAwMjZjdHgpO1xuMTM5ODpcdFxuMTM5OTpcdGNsb3NlX2JkZXY6XG4xNDAwOlx0XHRibGtnX2NvbmZfY2xvc2VfYmRldihcdTAwMjZjdHgpO1xuMTQwMTpcdFx0cmV0dXJuIHJldCA/OiBuYnl0ZXM7XG4xNDAyOlx0fVxuMTQwMzpcdFxuMTQwNDpcdHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3U2NChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4xNDA1Olx0XHRcdFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbjE0MDY6XHR7XG4xNDA3Olx0XHRyZXR1cm4gdGdfc2V0X2NvbmYob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIHRydWUpO1xuMTQwODpcdH1cbjE0MDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgQ2hhbmdlIGluIEJsb2NrIFRocm90dGxlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBkaWZmYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgY2hhbmdpbmcgaG93IHdlIHNldCBjb25maWd1cmF0aW9uIHZhbHVlcyB3aXRoaW4gdGhlIGJsb2NrIEkvTyB0aHJvdHRsZSBncm91cCwgc3BlY2lmaWNhbGx5IGluIGBibGstdGhyb3R0bGUuY2AuIEZpcnN0LCBJIHNlZSB0aGV5JiMzOTt2ZSByZWZhY3RvcmVkIGEgY29tbW9uIGNhbGN1bGF0aW9uIGludG8gYHZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyAmIzQzOyBvZl9jZnQob2YpLSZndDtwcml2YXRlO2AsIHdoaWNoIGlzIGdvb2QuIEl0JiMzOTtzIGEgbmljZSwgY2xlYW4gd2F5IHRvIGdldCB0aGUgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IGZpZWxkIHdpdGhpbiB0aGUgdGhyb3R0bGUgZ3JvdXAmIzM5O3MgZGF0YSBzdHJ1Y3R1cmUuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIHRoZSBoYW5kbGluZyBvZiB0aGUgc2V0IHZhbHVlcy4gUHJldmlvdXNseSwgaWYgdGhlIHZhbHVlIGB2YCB3YXMgYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIsIGl0IHdhcyBzaW1wbHkgYXNzaWduZWQgdG8gdGhlIHRhcmdldCBtZW1vcnkgbG9jYXRpb24gYXMgYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIuIEhvd2V2ZXIsIGlmIHRoZSB2YWx1ZSB3YXNuJiMzOTt0IGEgNjQtYml0IGludGVnZXIsIHRoZXJlIHdhcyBhIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIHRydW5jYXRpb246IGAqKHVuc2lnbmVkIGludCAqKWZpZWxkID0gdjtgLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBsYXJnZSBgdTY0YCB2YWx1ZSBiZWluZyB0cnVuY2F0ZWQgdG8gYW4gYHVuc2lnbmVkIGludGAuIE5vdywgdGhlIGNvZGUgZXhwbGljaXRseSBjbGFtcHMgdGhlIHZhbHVlIHRvIGBVSU5UX01BWGAgd2l0aCBgbWluKHYsIFVJTlRfTUFYKWAgaW4gdGhpcyBjYXNlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoaXMgc2VlbXMgbGlrZSBhIGdvb2Qgc2FmZXR5IGltcHJvdmVtZW50LiYjMzQ7IEl0JiMzOTtzIHByZXZlbnRpbmcgcG90ZW50aWFsIG92ZXJmbG93IG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgc29tZW9uZSBwcm92aWRlcyBhIGxhcmdlIHZhbHVlIGZvciBhIGZpZWxkIHRoYXQmIzM5O3MgbWVhbnQgdG8gYmUgYW4gYHVuc2lnbmVkIGludGAuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcz8gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLiBDb3VsZCB0aGlzIGNyZWF0ZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBsZWFrLCBvciBzb21ldGhpbmcgS01TQU4gd291bGQgZmxhZz8gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgoqICAgKipJbml0aWFsaXphdGlvbjoqKiBgdmAgaXMgcG9wdWxhdGVkIGJ5IGBzc2NhbmZgLCB3aGljaCBzaG91bGQgaGFuZGxlIHRoZSBpbml0aWFsaXphdGlvbi4gYGZpZWxkYCBpcyBjYWxjdWxhdGVkIHVzaW5nIGEgZGVmaW5lZCBvZmZzZXQgaW50byB0aGUgYHRnYCBzdHJ1Y3R1cmUsIHdoaWNoIHNob3VsZCBiZSBmaW5lLiBUaGUgdmFsdWUgYmVpbmcgd3JpdHRlbiBpbnRvIGAqZmllbGRgIGlzIGEgdmFsdWUgZGVyaXZlZCBlaXRoZXIgZnJvbSBgc3NjYW5mYCYjMzk7cyBpbnB1dCBvciBmcm9tIHRydW5jYXRpb24sIHdoaWNoIGlzIHNhZmUuCiogICAqKk1lbW9yeSBSZWFkcyB0byBVc2Vyc3BhY2U6KiogTm8sIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGp1c3Qgd3JpdGluZyBhIHZhbHVlIHRvIGEgc3RydWN0dXJlLiBOb3RoaW5nIGlzIGJlaW5nIHJlYWQgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4KKiAgICoqQnVmZmVyIExlbmd0aHMgYW5kIENvbnRyb2wgRmxvdzoqKiBOby4gSXQmIzM5O3Mgc2ltcGx5IHNldHRpbmcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHdpdGhpbiBhIHRocm90dGxlIGdyb3VwIHN0cnVjdHVyZS4KClRoZSBjaGFuZ2UgbG9va3MgbGlrZSBhIHN0cmljdGx5IGJldHRlciBpbXBsZW1lbnRhdGlvbiBmcm9tIGEgc2FmZXR5IHN0YW5kcG9pbnQuIEkgdGhpbmsgdGhpcyByZWR1Y2VzIHBvdGVudGlhbCBpc3N1ZXMsIG5vdCBpbnRyb2R1Y2UgdGhlbS4gTm93LCBsZXQgbWUgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGFueSBwb3RlbnRpYWwgY2FsbGVycy4gTmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgY3JlYXRlIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBlbHNld2hlcmUgaW4gYGJsay10aHJvdHRsZS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGdfc2V0X2NvbmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYz0xMzE4PXN0YXRpYyBpbnQgYmxrX3Rocm90bF9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNTEtXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxMzUyOnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNTMtXHRcdFx0ICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmLCBib29sIGlzX3U2NClcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDAzLVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQwNDpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91NjQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwNS1cdFx0XHQgICAgICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwNi17XG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDA3Olx0cmV0dXJuIHRnX3NldF9jb25mKG9mLCBidWYsIG5ieXRlcywgb2ZmLCB0cnVlKTtcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDgtfVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwOS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MTA6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdWludChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDExLVx0XHRcdFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxMi17XG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDEzOlx0cmV0dXJuIHRnX3NldF9jb25mKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBmYWxzZSk7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDE0LX1cbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNDQyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9sZWdhY3lfZmlsZXNbXSA9IHtcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDQ2LVx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NDc6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NDgtXHR9LFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTItXHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdTY0LFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ1MzpcdFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdTY0LFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1NC1cdH0sXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1OC1cdFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91aW50LFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ1OTpcdFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdWludCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjAtXHR9LFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjQtXHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NjU6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDY2LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpZ2dpbmcgaW50byBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyB3aXRoIHRoaXMgY29uZmlndXJhdGlvbi4gVGltZSB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGB0Z19jb25mX3VwZGF0ZWRgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgKmhvdyogdGhlc2UgY29uZmlndXJhdGlvbiB2YWx1ZXMsIGFzIHNldCBoZXJlLCBhcmUgYmVpbmcgYWNjZXNzZWQgYW5kIGludGVycHJldGVkIGRvd25zdHJlYW0uIEkgd2FudCB0byBzZWUgaG93IHRoZSBjb2RlIGlzIGFjdHVhbGx5ICp1c2luZyogdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSB0aGF04oCZcyBiZWluZyB1cGRhdGVkIGluIHRoaXMgc2VjdGlvbi4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgcmVhZCBjYWxscywgaG93IHRoZXkgYXJlIHN0cnVjdHVyZWQsIGFuZCB3aGF0IGNvbnRleHQgdGhleSBhcmUgdXNlZCB3aXRoaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIG5vdCBqdXN0ICppZiogdGhleSYjMzk7cmUgcmVhZCwgYnV0IGFsc28gKmhvdyogdGhleSBhcmUgYmVpbmcgaW50ZXJwcmV0ZWQgYW5kIHBvdGVudGlhbGx5IG1hbmlwdWxhdGVkIGR1cmluZyB0aGUgcnVudGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQxMDpcdHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3VpbnQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuMTQxMTpcdFx0XHRcdFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuMTQxMjpcdHtcbjE0MTM6XHRcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgZmFsc2UpO1xuMTQxNDpcdH1cbjE0MTU6XHRcbjE0MTY6XHRzdGF0aWMgaW50IHRnX3ByaW50X3J3c3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuMTQxNzpcdHtcbjE0MTg6XHRcdGJsa2NnX3ByaW50X2Jsa2dzKHNmLCBjc3NfdG9fYmxrY2coc2VxX2NzcyhzZikpLFxuMTQxOTpcdFx0XHRcdCAgYmxrZ19wcmZpbGxfcndzdGF0LCBcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLFxuMTQyMDpcdFx0XHRcdCAgc2VxX2NmdChzZiktXHUwMDNlcHJpdmF0ZSwgdHJ1ZSk7XG4xNDIxOlx0XHRyZXR1cm4gMDtcbjE0MjI6XHR9XG4xNDIzOlx0XG4xNDI0Olx0c3RhdGljIHU2NCB0Z19wcmZpbGxfcndzdGF0X3JlY3Vyc2l2ZShzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLFxuMTQyNTpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkLCBpbnQgb2ZmKVxuMTQyNjpcdHtcbjE0Mjc6XHRcdHN0cnVjdCBibGtnX3J3c3RhdF9zYW1wbGUgc3VtO1xuMTQyODpcdFxuMTQyOTpcdFx0YmxrZ19yd3N0YXRfcmVjdXJzaXZlX3N1bShwZF90b19ibGtnKHBkKSwgXHUwMDI2YmxrY2dfcG9saWN5X3Rocm90bCwgb2ZmLFxuMTQzMDpcdFx0XHRcdFx0ICBcdTAwMjZzdW0pO1xuMTQzMTpcdFx0cmV0dXJuIF9fYmxrZ19wcmZpbGxfcndzdGF0KHNmLCBwZCwgXHUwMDI2c3VtKTtcbjE0MzI6XHR9XG4xNDMzOlx0XG4xNDM0Olx0c3RhdGljIGludCB0Z19wcmludF9yd3N0YXRfcmVjdXJzaXZlKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4xNDM1Olx0e1xuMTQzNjpcdFx0YmxrY2dfcHJpbnRfYmxrZ3Moc2YsIGNzc190b19ibGtjZyhzZXFfY3NzKHNmKSksXG4xNDM3Olx0XHRcdFx0ICB0Z19wcmZpbGxfcndzdGF0X3JlY3Vyc2l2ZSwgXHUwMDI2YmxrY2dfcG9saWN5X3Rocm90bCxcbjE0Mzg6XHRcdFx0XHQgIHNlcV9jZnQoc2YpLVx1MDAzZXByaXZhdGUsIHRydWUpO1xuMTQzOTpcdFx0cmV0dXJuIDA7XG4xNDQwOlx0fVxuMTQ0MTpcdFxuMTQ0MjpcdHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9sZWdhY3lfZmlsZXNbXSA9IHtcbjE0NDM6XHRcdHtcbjE0NDQ6XHRcdFx0Lm5hbWUgPSBcJiMzNDt0aHJvdHRsZS5yZWFkX2Jwc19kZXZpY2VcJiMzNDssXG4xNDQ1Olx0XHRcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIGJwc1tSRUFEXSksXG4xNDQ2Olx0XHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdTY0LFxuMTQ0NzpcdFx0XHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXG4xNDQ4Olx0XHR9LFxuMTQ0OTpcdFx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjM0CgkJCQkJCQlvdXRwdXQ6IDE5MQoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSB0aHJvdGxfZ3JwIENvbmZpZ3VyYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCBgdGdfc2V0X2NvbmZgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBgYnBzYCBvciBgaW9wc2AgdmFsdWVzIHdpdGhpbiBhIGB0aHJvdGxfZ3JwYCBzdHJ1Y3R1cmUuIFRoZXNlIHZhbHVlcywgaW50ZWdlcnMgb3IgYHU2NGAgdmFsdWVzLCBkZWZpbmUgdGhlIGJhbmR3aWR0aCBvciBJT1BTIGxpbWl0cy4gVGhlIGNydWNpYWwgcGFydCBoZXJlIGlzIHRoZSBwYXRjaCYjMzk7cyBjbGFtcGluZyBvZiB0aGUgdmFsdWUgYHZgIHdoZW4gYCFpc191NjRgLiBJdCYjMzk7cyB1c2luZyBgbWluKHYsICh1NjQpVUlOVF9NQVgpYCBiZWZvcmUgYXNzaWduaW5nIHRvIHRoZSBgKih1bnNpZ25lZCBpbnQgKilmaWVsZGAuIFRoaXMgaXMgYSBjcml0aWNhbCBkZWZlbnNpdmUgbWVhc3VyZS4gSXQmIzM5O3MgZGVzaWduZWQgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93IG9yIHRydW5jYXRpb24gaXNzdWVzLCBlc3BlY2lhbGx5IGlmIGEgdmVyeSBsYXJnZSB2YWx1ZSBpcyBiZWluZyBzZXQgd2hlbiBpdCYjMzk7cyBtZWFudCB0byBiZSBhbiB1bnNpZ25lZCBpbnRlZ2VyLgoKVGhlIG1vc3QgaW1wb3J0YW50IHRha2Vhd2F5IGZvciBtZSBpcyB0aGUgYWJzZW5jZSBvZiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnktcmVsYXRlZCBpc3N1ZXMuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucyB3aGVyZSBtZW1vcnkgaXMgbm90IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIHRoZXJlJiMzOTtzIG5vIHBvdGVudGlhbCBmb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIGNydWNpYWxseSwgdGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgcmVseSBvbiB0aGUgc3RhdGUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgZXhjZWxsZW50OyBpdCBzaWduaWZpY2FudGx5IGxvd2VycyB0aGUgcmlzayBwcm9maWxlLgoKQ29uc2lkZXJpbmcgYWxsIHRoaXMsIGl0JiMzOTtzIGNsZWFyOiBgTmVlZHNLTVNBTmAgaXMgdW5lcXVpdm9jYWxseSBgZmFsc2VgLiBUaGUgcGF0Y2ggc2VlbXMgd2VsbC1kZWZlbmRlZCBhZ2FpbnN0IHBvdGVudGlhbCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcHJvYmxlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Z19zZXRfY29uZigpYCBpbiBgYmxvY2svYmxrLXRocm90dGxlLmNgIHRvIGZhY3RvciBvdXQgdGhlIHBvaW50ZXIgY2FsY3VsYXRpb24gaW50byBhIGhlbHBlciBsb2NhbCB2YXJpYWJsZSBgZmllbGRgIGFuZCB0byBjbGFtcCB2YWx1ZXMgdG8gYFVJTlRfTUFYYCB2aWEgYG1pbih2LCBVSU5UX01BWClgIHdoZW4gc2V0dGluZyB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciBjb25maWd1cmF0aW9uIGZpZWxkcy5cblxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5mby1sZWFrcywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50cm9kdWNlZCBvciBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gVGhlIHZhcmlhYmxlIGB2YCBpcyBwYXJzZWQgYW5kIHZhbGlkYXRlZCBieSBgc3NjYW5mYCwgYW5kIHRoZSB0YXJnZXQgc3RydWN0IGZpZWxkIGlzIG92ZXJ3cml0dGVuIHdpdGggdGhlIGNsYW1wZWQgaW50ZWdlciB2YWx1ZS4gQW55IHBvdGVudGlhbCBtZW1vcnktc2FmZXR5IG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOL1VCU0FOL0xPQ0tERVApLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Z19zZXRfY29uZigpYCBpbiBgYmxvY2svYmxrLXRocm90dGxlLmNgIHRvIGZhY3RvciBvdXQgdGhlIHBvaW50ZXIgY2FsY3VsYXRpb24gaW50byBhIGhlbHBlciBsb2NhbCB2YXJpYWJsZSBgZmllbGRgIGFuZCB0byBjbGFtcCB2YWx1ZXMgdG8gYFVJTlRfTUFYYCB2aWEgYG1pbih2LCBVSU5UX01BWClgIHdoZW4gc2V0dGluZyB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciBjb25maWd1cmF0aW9uIGZpZWxkcy5cblxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5mby1sZWFrcywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50cm9kdWNlZCBvciBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gVGhlIHZhcmlhYmxlIGB2YCBpcyBwYXJzZWQgYW5kIHZhbGlkYXRlZCBieSBgc3NjYW5mYCwgYW5kIHRoZSB0YXJnZXQgc3RydWN0IGZpZWxkIGlzIG92ZXJ3cml0dGVuIHdpdGggdGhlIGNsYW1wZWQgaW50ZWdlciB2YWx1ZS4gQW55IHBvdGVudGlhbCBtZW1vcnktc2FmZXR5IG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOL1VCU0FOL0xPQ0tERVApLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6MDg6NDUuOTAwMDA5NzE0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyMzA0OTgyNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0NHUk9VUFwiLFxuICAgIFwiQkxLX0RFVl9USFJPVFRMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGdfc2V0X2NvbmZcIixcbiAgICBcInRnX3NldF9jb25mX3VpbnRcIixcbiAgICBcInRnX3NldF9jb25mX3U2NFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRnX3NldF9jb25mKClgIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AgdG8gZmFjdG9yIG91dCB0aGUgcG9pbnRlciBjYWxjdWxhdGlvbiBpbnRvIGEgaGVscGVyIGxvY2FsIHZhcmlhYmxlIGBmaWVsZGAgYW5kIHRvIGNsYW1wIHZhbHVlcyB0byBgVUlOVF9NQVhgIHZpYSBgbWluKHYsIFVJTlRfTUFYKWAgd2hlbiBzZXR0aW5nIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGNvbmZpZ3VyYXRpb24gZmllbGRzLlxcblxcblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSB2YXJpYWJsZSBgdmAgaXMgcGFyc2VkIGFuZCB2YWxpZGF0ZWQgYnkgYHNzY2FuZmAsIGFuZCB0aGUgdGFyZ2V0IHN0cnVjdCBmaWVsZCBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBjbGFtcGVkIGludGVnZXIgdmFsdWUuIEFueSBwb3RlbnRpYWwgbWVtb3J5LXNhZmV0eSBvciBjb25jdXJyZW5jeSBpc3N1ZXMgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9VQlNBTi9MT0NLREVQKS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRnX3NldF9jb25mKClgIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93L3RydW5jYXRpb24gd2hlbiBhc3NpZ25pbmcgMzItYml0IHRocm90dGxlIGNvbmZpZ3VyYXRpb24gZmllbGRzIGJ5IGNsYW1waW5nIHRoZSBwYXJzZWQgNjQtYml0IHZhbHVlIHRvIGBVSU5UX01BWGAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYmxraW8gY2dyb3VwIGNvbnRyb2wgaW50ZXJmYWNlIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBwcm9wZXIgYmVoYXZpb3Igd2hlbiB3cml0aW5nIHZhcmlvdXMgdmFsdWVzIHRvIHRocm90dGxlIHBhcmFtZXRlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA4OjQ1LjkwMDAyNDUxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MzgxMzc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc4Yzg0NmFlY2IxZDJiNGZhNmY1ZGE3MzBjN2Y1NjllM2ZmNzAwNThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxNDowODo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstdGhyb3R0bGUuYyBiL2Jsb2NrL2Jsay10aHJvdHRsZS5jXFxuaW5kZXggZmZjM2I3MDA2NWQ0Yi4uOTdhZDc5NTlkMDA2ZiAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstdGhyb3R0bGUuY1xcbisrKyBiL2Jsb2NrL2Jsay10aHJvdHRsZS5jXFxuQEAgLTEzODMsMTAgKzEzODMsMTIgQEAgc3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmYoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbiBcXHR0ZyA9IGJsa2dfdG9fdGcoY3R4LmJsa2cpO1xcbiBcXHR0Z191cGRhdGVfY2FycnlvdmVyKHRnKTtcXG4gXFxuK1xcdHZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyArIG9mX2NmdChvZiktXFx1MDAzZXByaXZhdGU7XFxuK1xcbiBcXHRpZiAoaXNfdTY0KVxcbi1cXHRcXHQqKHU2NCAqKSgodm9pZCAqKXRnICsgb2ZfY2Z0KG9mKS1cXHUwMDNlcHJpdmF0ZSkgPSB2O1xcbitcXHRcXHQqKHU2NCAqKWZpZWxkID0gdjtcXG4gXFx0ZWxzZVxcbi1cXHRcXHQqKHVuc2lnbmVkIGludCAqKSgodm9pZCAqKXRnICsgb2ZfY2Z0KG9mKS1cXHUwMDNlcHJpdmF0ZSkgPSB2O1xcbitcXHRcXHQqKHVuc2lnbmVkIGludCAqKWZpZWxkID0gbWluKHYsIFVJTlRfTUFYKTtcXG4gXFxuIFxcdHRnX2NvbmZfdXBkYXRlZCh0ZywgZmFsc2UpO1xcbiBcXHRyZXQgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowODo0Ny40ODQ1NTg0NDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxNDgwNTk4MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkJMS19ERVZfVEhST1RUTElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRnX3NldF9jb25mXCIsXG4gICAgXCJ0Z19zZXRfY29uZl91aW50XCIsXG4gICAgXCJ0Z19zZXRfY29uZl91NjRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdGdfc2V0X2NvbmYoKWAgaW4gYGJsb2NrL2Jsay10aHJvdHRsZS5jYCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cvdHJ1bmNhdGlvbiB3aGVuIGFzc2lnbmluZyAzMi1iaXQgdGhyb3R0bGUgY29uZmlndXJhdGlvbiBmaWVsZHMgYnkgY2xhbXBpbmcgdGhlIHBhcnNlZCA2NC1iaXQgdmFsdWUgdG8gYFVJTlRfTUFYYC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBibGtpbyBjZ3JvdXAgY29udHJvbCBpbnRlcmZhY2UgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIHByb3BlciBiZWhhdmlvciB3aGVuIHdyaXRpbmcgdmFyaW91cyB2YWx1ZXMgdG8gdGhyb3R0bGUgcGFyYW1ldGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OGM4NDZhZWNiMWQyYjRmYTZmNWRhNzMwYzdmNTY5ZTNmZjcwMDU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNDowODo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmNcbmluZGV4IGZmYzNiNzAwNjVkNGIuLjk3YWQ3OTU5ZDAwNmYgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstdGhyb3R0bGUuY1xuKysrIGIvYmxvY2svYmxrLXRocm90dGxlLmNcbkBAIC0xMzgzLDEwICsxMzgzLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdHRnID0gYmxrZ190b190ZyhjdHguYmxrZyk7XG4gXHR0Z191cGRhdGVfY2FycnlvdmVyKHRnKTtcbiBcbitcdHZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyArIG9mX2NmdChvZiktXHUwMDNlcHJpdmF0ZTtcbitcbiBcdGlmIChpc191NjQpXG4tXHRcdCoodTY0ICopKCh2b2lkICopdGcgKyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGUpID0gdjtcbitcdFx0Kih1NjQgKilmaWVsZCA9IHY7XG4gXHRlbHNlXG4tXHRcdCoodW5zaWduZWQgaW50ICopKCh2b2lkICopdGcgKyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGUpID0gdjtcbitcdFx0Kih1bnNpZ25lZCBpbnQgKilmaWVsZCA9IG1pbih2LCBVSU5UX01BWCk7XG4gXG4gXHR0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTtcbiBcdHJldCA9IDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowODo0Ny40ODQ1NTk5NThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzUxMTE2NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IERpdmluZyBpbnRvIGBibGstdGhyb3R0bGUuY2AqKlxuXG5Pa2F5LCBzbyBhIG5ldyBwYXRjaCBoYXMgbGFuZGVkLCBhbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgcXVpY2tseS4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQsIG9mIGNvdXJzZSwgaXMgdG8gbGV2ZXJhZ2UgdGhlIHRvb2xpbmcgSSBoYXZlLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBgcmVhZC1maWxlYCBpbW1lZGlhdGVseS4gSSB3YW50IHRvIHNlZSB0aGlzIHBhdGNoIGluIGNvbnRleHQsIHVuZGVyc3RhbmQgd2hlcmUgaXQncyB0b3VjaGluZywgYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlLlxuXG5HaXZlbiB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50LCBgYmxvY2svYmxrLXRocm90dGxlLmNgIHNlZW1zIGxpa2UgdGhlIGxpa2VseSBhcmVhIHRvIGZvY3VzIG9uIGZpcnN0LiBJdCdzIG9mdGVuIHRoZSBoZWFydCBvZiBJL08gY29udHJvbCwgYW5kIGtub3dpbmcgdGhpcywgSSBzdXNwZWN0IHRoaXMgd2lsbCBvZmZlciB0aGUgbW9zdCByZWxldmFudCBpbnNpZ2h0LiBJJ2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQuIEkgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IGZpbGUgaWYgbmVlZCBiZSwgYnV0IGBibGstdGhyb3R0bGUuY2AgaXMgdGhlIHByaW1lIHN1c3BlY3QgZm9yIGEgZGVlcGVyIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA4OjUyLjgzNTY3OTQ2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstdGhyb3R0bGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzcwOlxcdFxcdFxcdFxcdGdvdG8gY2xvc2VfYmRldjtcXG4xMzcxOlxcdFxcdH1cXG4xMzcyOlxcdFxcbjEzNzM6XFx0XFx0cmV0ID0gYmxrZ19jb25mX3ByZXAoYmxrY2csIFxcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLCBcXHUwMDI2Y3R4KTtcXG4xMzc0OlxcdFxcdGlmIChyZXQpXFxuMTM3NTpcXHRcXHRcXHRnb3RvIGNsb3NlX2JkZXY7XFxuMTM3NjpcXHRcXG4xMzc3OlxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMTM3ODpcXHRcXHRpZiAoc3NjYW5mKGN0eC5ib2R5LCBcXFwiJWxsdVxcXCIsIFxcdTAwMjZ2KSAhPSAxKVxcbjEzNzk6XFx0XFx0XFx0Z290byB1bnByZXA7XFxuMTM4MDpcXHRcXHRpZiAoIXYpXFxuMTM4MTpcXHRcXHRcXHR2ID0gVTY0X01BWDtcXG4xMzgyOlxcdFxcbjEzODM6XFx0XFx0dGcgPSBibGtnX3RvX3RnKGN0eC5ibGtnKTtcXG4xMzg0OlxcdFxcdHRnX3VwZGF0ZV9jYXJyeW92ZXIodGcpO1xcbjEzODU6XFx0XFxuMTM4NjpcXHRcXHR2b2lkICpmaWVsZCA9ICh2b2lkICopdGcgKyBvZl9jZnQob2YpLVxcdTAwM2Vwcml2YXRlO1xcbjEzODc6XFx0XFxuMTM4ODpcXHRcXHRpZiAoaXNfdTY0KVxcbjEzODk6XFx0XFx0XFx0Kih1NjQgKilmaWVsZCA9IHY7XFxuMTM5MDpcXHRcXHRlbHNlXFxuMTM5MTpcXHRcXHRcXHQqKHVuc2lnbmVkIGludCAqKWZpZWxkID0gbWluKHYsIFVJTlRfTUFYKTtcXG4xMzkyOlxcdFxcbjEzOTM6XFx0XFx0dGdfY29uZl91cGRhdGVkKHRnLCBmYWxzZSk7XFxuMTM5NDpcXHRcXHRyZXQgPSAwO1xcbjEzOTU6XFx0XFxuMTM5NjpcXHR1bnByZXA6XFxuMTM5NzpcXHRcXHRibGtnX2NvbmZfdW5wcmVwKFxcdTAwMjZjdHgpO1xcbjEzOTg6XFx0XFxuMTM5OTpcXHRjbG9zZV9iZGV2OlxcbjE0MDA6XFx0XFx0YmxrZ19jb25mX2Nsb3NlX2JkZXYoXFx1MDAyNmN0eCk7XFxuMTQwMTpcXHRcXHRyZXR1cm4gcmV0ID86IG5ieXRlcztcXG4xNDAyOlxcdH1cXG4xNDAzOlxcdFxcbjE0MDQ6XFx0c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdTY0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4xNDA1OlxcdFxcdFxcdFxcdCAgICAgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXFxuMTQwNjpcXHR7XFxuMTQwNzpcXHRcXHRyZXR1cm4gdGdfc2V0X2NvbmYob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIHRydWUpO1xcbjE0MDg6XFx0fVxcbjE0MDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA4OjUyLjgzNTgzNDY0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzA5NjUzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gQmxvY2sgVGhyb3R0bGluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHJlbGF0ZWQgdG8gYmxvY2sgdGhyb3R0bGluZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGBibG9jay9ibGstdGhyb3R0bGUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGB0Z19zZXRfY29uZmAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCBob3cgdGhlc2Ugc2V0dGluZ3MgYXJlIGFwcGxpZWQgYW5kIG1hbmFnZWQuIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBrbm93IHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSdyZSBleHBvc2VkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbGwgbmVlZCB0byBjaGVjayBlaXRoZXIgYGJsb2NrL0tjb25maWdgIG9yIGBibG9jay9NYWtlZmlsZWAgdG8gc2VlIGhvdyBgYmxrLXRocm90dGxlLmNgIGl0c2VsZiBpcyBjb250cm9sbGVkLiBPbmNlIEkgdW5kZXJzdGFuZCB0aG9zZSBmaWxlcywgSSBzaG91bGQgaGF2ZSBhIGdvb2QgcGljdHVyZSBvZiBob3cgSSBjb25maWd1cmUgYW5kIG1hbmFnZSB0aHJvdHRsaW5nIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NjcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA4OjU1LjMwNjgwNDQ5MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDYzOTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGstdGhyb3R0bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0ZDX0FQUElEKSArPSBibGstY2dyb3VwLWZjLWFwcGlkLm9cXG5ibG9jay9NYWtlZmlsZToyMjpvYmotJChDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HKVxcdCs9IGJsay10aHJvdHRsZS5vXFxuYmxvY2svTWFrZWZpbGUtMjMtb2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9QUklPKVxcdCs9IGJsay1pb3ByaW8ub1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTM1LSNpbmNsdWRlIFxcXCJibGstaW9wcmlvLmhcXFwiXFxuYmxvY2svYmxrLWNncm91cC5jOjM2OiNpbmNsdWRlIFxcXCJibGstdGhyb3R0bGUuaFxcXCJcXG5ibG9jay9ibGstY2dyb3VwLmMtMzctXFxuLS1cXG5ibG9jay9ibGstY29yZS5jLTUwLSNpbmNsdWRlIFxcXCJibGstY2dyb3VwLmhcXFwiXFxuYmxvY2svYmxrLWNvcmUuYzo1MTojaW5jbHVkZSBcXFwiYmxrLXRocm90dGxlLmhcXFwiXFxuYmxvY2svYmxrLWNvcmUuYy01Mi0jaW5jbHVkZSBcXFwiYmxrLWlvcHJpby5oXFxcIlxcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtMTctI2luY2x1ZGUgXFxcImJsay1ycS1xb3MuaFxcXCJcXG5ibG9jay9ibGstbWVyZ2UuYzoxODojaW5jbHVkZSBcXFwiYmxrLXRocm90dGxlLmhcXFwiXFxuYmxvY2svYmxrLW1lcmdlLmMtMTktXFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy0yMC0jaW5jbHVkZSBcXFwiYmxrLWNncm91cC5oXFxcIlxcbmJsb2NrL2Jsay1zeXNmcy5jOjIxOiNpbmNsdWRlIFxcXCJibGstdGhyb3R0bGUuaFxcXCJcXG5ibG9jay9ibGstc3lzZnMuYy0yMi0jaW5jbHVkZSBcXFwiZXJyb3ItaW5qZWN0aW9uLmhcXFwiXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNC0jaW5jbHVkZSBcXFwiYmxrLWNncm91cC1yd3N0YXQuaFxcXCJcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNTojaW5jbHVkZSBcXFwiYmxrLXRocm90dGxlLmhcXFwiXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTYtXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xMjcwPXN0YXRpYyB2b2lkIHRnX2NvbmZfdXBkYXRlZChzdHJ1Y3QgdGhyb3RsX2dycCAqdGcsIGJvb2wgZ2xvYmFsKVxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTI4Ni1cXHQgKiByZXN0cmljdGlvbnMgaW4gdGhlIHdob2xlIGhpZXJhcmNoeSBhbmQgYWxsb3dzIHRoZW0gdG8gYnlwYXNzXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTI4NzpcXHQgKiBibGstdGhyb3R0bGUuXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTI4OC1cXHQgKi9cXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5oPTE1NT1zdGF0aWMgaW5saW5lIGJvb2wgYmxrX3Rocm90bF9hY3RpdmF0ZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaC0xNTctXFx0LypcXG5ibG9jay9ibGstdGhyb3R0bGUuaDoxNTg6XFx0ICogcS1cXHUwMDNldGQgZ3VhcmFudGVlcyB0aGF0IHRoZSBibGstdGhyb3R0bGUgbW9kdWxlIGlzIGFscmVhZHkgbG9hZGVkLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5oOjE1OTpcXHQgKiBhbmQgdGhlIHBsaWQgb2YgYmxrLXRocm90dGxlIGlzIGFzc2lnbmVkLlxcbmJsb2NrL2Jsay10aHJvdHRsZS5oLTE2MC1cXHQgKiBibGtjZ19wb2xpY3lfZW5hYmxlZCgpIGd1YXJhbnRlZXMgdGhhdCB0aGUgcG9saWN5IGlzIGFjdGl2YXRlZFxcbi0tXFxuYmxvY2svZ2VuaGQuYy0yOS1cXG5ibG9jay9nZW5oZC5jOjMwOiNpbmNsdWRlIFxcXCJibGstdGhyb3R0bGUuaFxcXCJcXG5ibG9jay9nZW5oZC5jLTMxLSNpbmNsdWRlIFxcXCJibGsuaFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6MDg6NTUuMzg3NDUwNjUxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk3ODIwMjk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBLY29uZmlnIGZvciBCbG9jayBEZXZpY2UgVGhyb3R0bGluZyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHN0YXR1cyBvZiBgQkxLX0RFVl9USFJPVFRMSU5HYC4gSXQncyBwcmV0dHkgZnVuZGFtZW50YWwsIHNvIGl0J3MgbGlrZWx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtYW55IG1vZGVybiBjb25maWd1cmF0aW9ucywgYnV0IEkgY2FuJ3QganVzdCBhc3N1bWUuIEknbGwganVtcCBzdHJhaWdodCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBwcm9iYWJseSBzdGFydGluZyB3aXRoIHRoZSBjb3JlIGJsb2NrIGRldmljZSBkZWZpbml0aW9ucywgYW5kIHF1aWNrbHkgZ3JlcCBmb3IgYEJMS19ERVZfVEhST1RUTElOR2AuIEknbGwgd2FudCB0byBzZWUgbm90IGp1c3QgaWYgaXQncyAqZGVmaW5lZCosIGJ1dCBhbHNvIGhvdyBpdCdzIGRlZmluZWQuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBhbnkgY29uZmlndXJhdGlvbnMgdGhhdCBleHBsaWNpdGx5IGRpc2FibGUgaXQsIHBlcmhhcHMgcmVsYXRlZCB0byBzcGVjaWZpYyBzdG9yYWdlIHR5cGVzIG9yIHVzZSBjYXNlcyBsaWtlIHJlYWwtdGltZSBzeXN0ZW1zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoaW5ncyBsaWtlIEkvTyBzY2hlZHVsZXJzLCBwYXJ0aWN1bGFybHkgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMuIElzIGl0IGEgZGlyZWN0IGRlcGVuZGVuY3ksIG9yIGluZGlyZWN0bHkgcHVsbGVkIGluIHRocm91Z2ggYSBtb3JlIGdlbmVyaWMgYmxvY2sgbGF5ZXIgZmVhdHVyZT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCdzICpyZWFsbHkqIGRvaW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowODo1OC4zNjU2NTY1NzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMDQyODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9OTc9Y29uZmlnIEJMS19ERVZfWk9ORURcXG4tLVxcbmJsb2NrL0tjb25maWctMTA1LVxcbmJsb2NrL0tjb25maWc6MTA2OmNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcXG5ibG9jay9LY29uZmlnLTEwNy1cXHRib29sIFxcXCJCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowODo1OC40Nzc3MDQ4NDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjg1ODMyODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiB0aGUgYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgYmxvY2svS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDYuIEknbSBhc3N1bWluZyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgc2VsZWN0aW9uIGxvZ2ljIG9yIGZlYXR1cmUgZGVmaW5pdGlvbiByZWxldmFudCB0byB0aGUgY3VycmVudCBwcm9ibGVtIHJlc2lkZXMuIFRoaXMgdXN1YWxseSBtZWFucyB0aGF0IGFyb3VuZCB0aGF0IGxpbmUgSSdsbCBmaW5kIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG1heWJlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIG9yIHBlcmhhcHMgZGVmaW5pdGlvbnMgb2YgZGV2aWNlLXNwZWNpZmljIHNldHRpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2Ugb3B0aW9ucyBhbmQgdGhlIHJlc3Qgb2YgdGhlIGJsb2NrIGxheWVyLiBJJ20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBrbm9icyB0byB0dXJuLCB0aGUgZmxhZ3MgdGhhdCBjb250cm9sIGVuYWJsZW1lbnQsIGFuZCBob3cgdGhlc2Ugc2V0dGluZ3MgaW50ZXJhY3Qgd2l0aGluIHRoZSBicm9hZGVyIEtjb25maWcgaGllcmFyY2h5LiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDU1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6MDk6MDAuMTYzNTQxODE0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwNTpcXHRcXG4gMTA2OlxcdGNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcXG4gMTA3OlxcdFxcdGJvb2wgXFxcIkJsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcXFwiXFxuIDEwODpcXHRcXHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcXG4gMTA5OlxcdFxcdHNlbGVjdCBCTEtfQ0dST1VQX1JXU1RBVFxcbiAxMTA6XFx0XFx0aGVscFxcbiAxMTE6XFx0XFx0QmxvY2sgbGF5ZXIgYmlvIHRocm90dGxpbmcgc3VwcG9ydC4gSXQgY2FuIGJlIHVzZWQgdG8gbGltaXRcXG4gMTEyOlxcdFxcdHRoZSBJTyByYXRlIHRvIGEgZGV2aWNlLiBJTyByYXRlIHBvbGljaWVzIGFyZSBwZXIgY2dyb3VwIGFuZFxcbiAxMTM6XFx0XFx0b25lIG5lZWRzIHRvIG1vdW50IGFuZCB1c2UgYmxraW8gY2dyb3VwIGNvbnRyb2xsZXIgZm9yIGNyZWF0aW5nXFxuIDExNDpcXHRcXHRjZ3JvdXBzIGFuZCBzcGVjaWZ5aW5nIHBlciBkZXZpY2UgSU8gcmF0ZSBwb2xpY2llcy5cXG4gMTE1OlxcdFxcbiAxMTY6XFx0XFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiAxMTc6XFx0XFxuIDExODpcXHRjb25maWcgQkxLX1dCVFxcbiAxMTk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSB3cml0ZWJhY2sgdGhyb3R0bGluZ1xcXCJcXG4gMTIwOlxcdFxcdGhlbHBcXG4gMTIxOlxcdFxcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGJsb2NrIGxheWVyIHRvIHRocm90dGxlIGJ1ZmZlcmVkXFxuIDEyMjpcXHRcXHRiYWNrZ3JvdW5kIHdyaXRlYmFjayBmcm9tIHRoZSBWTSwgbWFraW5nIGl0IG1vcmUgc21vb3RoIGFuZCBoYXZpbmdcXG4gMTIzOlxcdFxcdGxlc3MgaW1wYWN0IG9uIGZvcmVncm91bmQgb3BlcmF0aW9ucy4gVGhlIHRocm90dGxpbmcgaXMgZG9uZVxcbiAxMjQ6XFx0XFx0ZHluYW1pY2FsbHkgb24gYW4gYWxnb3JpdGhtIGxvb3NlbHkgYmFzZWQgb24gQ29EZWwsIGZhY3RvcmluZyBpblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowOTowMC4xNjM2NDgzMjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk1MzM4NjI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuQWxyaWdodCwgc28gYEJMS19ERVZfVEhST1RUTElOR2AgcmVsaWVzIG9uIGBCTEtfQ0dST1VQYC4gTWFrZXMgc2Vuc2UsIHRoZXkgb2Z0ZW4gZ28gaGFuZC1pbi1oYW5kLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBvZiB0cnV0aCwgdGhlIGBibG9jay9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGRlcGVuZGVuY3kgYW5kIHVuZGVyc3RhbmQgaG93IGl0J3MgY29uZmlndXJlZC4gVGhhdCdzIHdoZXJlIEknbGwgZ2V0IHRoZSBkZXRhaWxzIG9uIGhvdyBgQkxLX0NHUk9VUGAgaXMgZGVmaW5lZCBhbmQgd2hhdCBvdGhlciBvcHRpb25zIG1pZ2h0IGluZmx1ZW5jZSB0aGUgZW5hYmxlbWVudCBvZiBgQkxLX0RFVl9USFJPVFRMSU5HYC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjAyLjExNzAzOTA1MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU3NjAxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19DR1JPVVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXFxuLS1cXG5ibG9jay9LY29uZmlnLTQxLVxcbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXFxuYmxvY2svS2NvbmZpZy00My1cXHRib29sXFxuYmxvY2svS2NvbmZpZy00NC1cXG5ibG9jay9LY29uZmlnOjQ1OmNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXFxuYmxvY2svS2NvbmZpZy00Ni1cXHRib29sXFxuLS1cXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMzMtXFxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXFxuYmxvY2svS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE0NC1cXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxcbmJsb2NrL0tjb25maWctMTQ2LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNTMtXFxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXFxuYmxvY2svS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE2My1cXG5ibG9jay9LY29uZmlnOjE2NDpjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cXG5ibG9jay9LY29uZmlnLTE2NS1cXHRib29sIFxcXCJDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjAyLjE5MjgwODgzMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTY1OTYyMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpbmRpbmcgdGhlIEJMS19DR1JPVVAgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHdoZXJlIGBCTEtfQ0dST1VQYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gTXkgZmlyc3QgaHVuY2ggaXMgdGhhdCBpdCdsbCBiZSBpbiBhIEtjb25maWcgZmlsZSwgcHJvYmFibHkgc29tZXdoZXJlIHVuZGVyIGBpbml0L2Agc2luY2UgdGhhdCdzIGEgY29tbW9uIHBsYWNlIGZvciBjb3JlIGZlYXR1cmUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgaW4gYGluaXQvS2NvbmZpZ2AgZmlyc3QsIHRoZW4gSSdsbCBicm9hZGVuIHRoZSBzZWFyY2ggaWYgdGhhdCBkb2Vzbid0IHBhbiBvdXQuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MsIGJ1dCBuZWNlc3NhcnkgYmVmb3JlIEkgY2FuIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowOTowMy43NTg3NzQyMDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjIwMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfQ0dST1VQXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTExMDg9Y29uZmlnIE1FTUNHX1YxXFxuLS1cXG5pbml0L0tjb25maWctMTEyNC1cXG5pbml0L0tjb25maWc6MTEyNTpjb25maWcgQkxLX0NHUk9VUFxcbmluaXQvS2NvbmZpZy0xMTI2LVxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjAzLjgxNTQwMjE3NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzA2MTc5ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgdGdfc2V0X2NvbmZgLCB0aGUga2V5IGNoYW5nZSBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gV2UndmUgcmVwbGFjZWQgdGhlIGRpcmVjdCBhc3NpZ25tZW50IHRvIHRoZSB0YXJnZXQgZmllbGQgd2l0aCBhIG1vcmUgY2F1dGlvdXMgYXBwcm9hY2guIEluaXRpYWxseSwgdGhlIGNvZGUgaGFkIGEgY29uZGl0aW9uYWwgYXNzaWdubWVudDogYGlmIChpc191NjQpYCB3ZSdkIGNhc3QgdGhlIHByaXZhdGUgZmllbGQgYW5kIHdyaXRlIGB2YCBhcyBpczsgb3RoZXJ3aXNlIHdlIGNhc3QgYXMgYHVuc2lnbmVkIGludGAgYW5kIHNpbXBseSBhc3NpZ25lZCBgdmAuXG5cbldhaXQgYSBtaW51dGUsIGB2YCBpcyBhbiBgdW5zaWduZWQgbG9uZyBsb25nYCDigJMgYSBgdTY0YC4gU28sIHdoZW4gYGlzX3U2NGAgaXMgKmZhbHNlKiwgYW5kIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uIGxpa2UgYHRnX3NldF9jb25mX3VpbnRgLCB0aGUgcHJldmlvdXMgYXBwcm9hY2ggd291bGQgaGF2ZSByZXN1bHRlZCBpbiBhIHN0cmFpZ2h0IHRydW5jYXRpb24gb2YgYHZgIHRvIGB1bnNpZ25lZCBpbnRgLiBOb3cgdGhlIGxvZ2ljIGlzIGBtaW4odiwgVUlOVF9NQVgpYC4gVGhhdCBmZWVscyBhIGJpdC4uLiB1bnJlZmluZWQsIGRvZXNuJ3QgaXQ/IE15IGluc3RpbmN0IGlzIHRvIHVzZSBzb21ldGhpbmcgbGlrZSBgbWluX3RgIG9yIGV4cGxpY2l0bHkgY2FzdCBgVUlOVF9NQVhgIHRvIGB1NjRgIGZvciBhIG1vcmUgZXhwbGljaXQgdHlwZSBzYWZldHkuXG5cbkhvbGQgb24sIEkgc2VlIHdoYXQncyBoYXBwZW5pbmcuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG1pbih2LCBVSU5UX01BWClgIGlzIGVmZmVjdGl2ZWx5IGNhcHBpbmcgYHZgIGF0IHRoZSB2YWx1ZSBvZiBgVUlOVF9NQVhgISBTbywgaWYgc29tZW9uZSwgaW50ZW50aW9uYWxseSBvciB1bmludGVudGlvbmFsbHksIHRyaWVzIHRvIHNldCBhIHRocm90dGxlIGxpbWl0IChsaWtlIGBtYXhfaW9wc2Agb3IgYG1heF9icHNgIHRoYXQncyBtYW5hZ2VkIGJ5IGB0Z19zZXRfY29uZl91aW50YCBvciBhbnkgb3RoZXIgZnVuY3Rpb24gdGhhdCBjYWxscyBgdGdfc2V0X2NvbmZgIHdpdGggYGlzX3U2NGAgYmVpbmcgZmFsc2UpIHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4gd2hhdCBgVUlOVF9NQVhgIGFsbG93cywgdGhlIGNvZGUgbm8gbG9uZ2VyIGp1c3Qgb3ZlcmZsb3dzIG9yIHRydW5jYXRlcyB0aGUgdmFsdWUgKHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBsaWtlIGV4dHJlbWVseSBsb3cgbGltaXRzIG9yIGV2ZW4gemVybykuIEluc3RlYWQsIGl0IGNsYW1wcyB0aGUgdmFsdWUgdG8gdGhlIG1heGltdW0gcGVybWlzc2libGUgYHVuc2lnbmVkIGludGAhIFRoaXMgbWFrZXMgc2Vuc2UuIEl0J3MgYSBjcml0aWNhbCBzYWZldHkgbWVhc3VyZS4gQmVmb3JlIGl0IGNvdWxkIGVhc2lseSBsZWFkIHRvIGEgc2lnbmlmaWNhbnQgdnVsbmVyYWJpbGl0eSFcblxuTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYHRnX3NldF9jb25mYCB0byBhc3Nlc3MgdGhlIGJyb2FkZXIgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDI1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjEwLjEyMTU4NDc2M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2NDQ2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGdfc2V0X2NvbmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay10aHJvdHRsZS5jPTEzMTg9c3RhdGljIGludCBibGtfdGhyb3RsX2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzUxLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjEzNTI6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmYoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNTMtXFx0XFx0XFx0ICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmLCBib29sIGlzX3U2NClcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDMtXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQwNDpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91NjQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDUtXFx0XFx0XFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDA2LXtcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDA3OlxcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgdHJ1ZSk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwOC19XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwOS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDEwOnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3VpbnQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTEtXFx0XFx0XFx0XFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTIte1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MTM6XFx0cmV0dXJuIHRnX3NldF9jb25mKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBmYWxzZSk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxNC19XFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNDQyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9sZWdhY3lfZmlsZXNbXSA9IHtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NDYtXFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91NjQsXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ0NzpcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ0OC1cXHR9LFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1Mi1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDUzOlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDU0LVxcdH0sXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDU4LVxcdFxcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDU5OlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2MC1cXHR9LFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2NC1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3VpbnQsXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ2NTpcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91aW50LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjYtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6MDk6MTAuMTkxMjM0MzMyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMjczNDUzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgRXZhbHVhdGlvbjogYmxrLXRocm90dGxlLmMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGB0Z19zZXRfY29uZmAgbG9va3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGV4cG9zZWQgdGhyb3VnaCBjZ3JvdXAgZmlsZSB3cml0ZXMg4oCTIGBibGtpby50aHJvdHRsZS5yZWFkX2lvcHNfZGV2aWNlYCwgdGhhdCBzb3J0IG9mIHRoaW5nLiBUaGF0IG1lYW5zIGl0J3MgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBsaWtlIFFFTVUgb3IgR0NFLCB3aGljaCBpcyBhIG1ham9yIHBvaW50IGluIGl0cyBmYXZvci5cblxuVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGlzIHRoaXMgYFdvcnRoRnV6emluZz10cnVlYD8gVGltZSBmb3IgYSBxdWljayBndWlkZWxpbmVzIGNoZWNrLiBUaGUgY29yZSBzdWJzeXN0ZW1zIGxpc3Qgc2VlbXMgcmVsZXZhbnQuIE1lbW9yeSBtYW5hZ2VtZW50LCBsb2NraW5nLCBCUEYsIHNjaGVkdWxlci4uLiBhbGwgZ29vZCBjYW5kaWRhdGVzLiBCbG9jayBsYXllciB0b28sIG9mIGNvdXJzZSwgYW5kIHRoaXMgaXMgZGVmaW5pdGVseSByZWxhdGVkIHRvIGJsb2NrIEkvTyB0aHJvdHRsaW5nLiBSZWZhY3RvcmluZ3MgYW5kIGNvZGUgY2xlYW51cHMgYWxzbyBhcHBseSBpZiB0aGVyZSdzIHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgYWJzdHJhY3Rpb25zIG9yIGFsZ29yaXRobSBmbG93cy5cblxuU28sIHRoZSBmb2N1cyBzeW1ib2xzLiBgdGdfc2V0X2NvbmZgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50LCBhbmQgaXQgY2FsbHMsIG9yIGlzIGNhbGxlZCBieSwgYHRnX3NldF9jb25mX3VpbnRgIGFuZCBgdGdfc2V0X2NvbmZfdTY0YC4gVGhleSdyZSBhbGwgc3RhdGljLCBzbyB0aGV5J3JlIHByb2JhYmx5IGlubGluZWQuIFNvIEknbGwgaW5jbHVkZSBhbGwgdGhyZWUgLSBgdGdfc2V0X2NvbmZgLCBgdGdfc2V0X2NvbmZfdWludGAsIGFuZCBgdGdfc2V0X2NvbmZfdTY0YC4gR290dGEgYmUgdGhvcm91Z2guXG5cbk5vdywganVzdCB0byBiZSBjZXJ0YWluLCBJIHNob3VsZCBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgYmxrLXRocm90dGxlLmNgIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBsaW5lcyAxNDEwLTE0NzAgaW4gdGhhdCBmaWxlIHRvIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2UgaW4gdGhpcyBhcmVhIEkgc2hvdWxkIGJlIGF3YXJlIG9mLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDI1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjEzLjUxODU4Mjc1OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLXRocm90dGxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQxMCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQxMDpcXHRzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91aW50KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4xNDExOlxcdFxcdFxcdFxcdFxcdGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4xNDEyOlxcdHtcXG4xNDEzOlxcdFxcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgZmFsc2UpO1xcbjE0MTQ6XFx0fVxcbjE0MTU6XFx0XFxuMTQxNjpcXHRzdGF0aWMgaW50IHRnX3ByaW50X3J3c3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbjE0MTc6XFx0e1xcbjE0MTg6XFx0XFx0YmxrY2dfcHJpbnRfYmxrZ3Moc2YsIGNzc190b19ibGtjZyhzZXFfY3NzKHNmKSksXFxuMTQxOTpcXHRcXHRcXHRcXHQgIGJsa2dfcHJmaWxsX3J3c3RhdCwgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwsXFxuMTQyMDpcXHRcXHRcXHRcXHQgIHNlcV9jZnQoc2YpLVxcdTAwM2Vwcml2YXRlLCB0cnVlKTtcXG4xNDIxOlxcdFxcdHJldHVybiAwO1xcbjE0MjI6XFx0fVxcbjE0MjM6XFx0XFxuMTQyNDpcXHRzdGF0aWMgdTY0IHRnX3ByZmlsbF9yd3N0YXRfcmVjdXJzaXZlKHN0cnVjdCBzZXFfZmlsZSAqc2YsXFxuMTQyNTpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQsIGludCBvZmYpXFxuMTQyNjpcXHR7XFxuMTQyNzpcXHRcXHRzdHJ1Y3QgYmxrZ19yd3N0YXRfc2FtcGxlIHN1bTtcXG4xNDI4OlxcdFxcbjE0Mjk6XFx0XFx0YmxrZ19yd3N0YXRfcmVjdXJzaXZlX3N1bShwZF90b19ibGtnKHBkKSwgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwsIG9mZixcXG4xNDMwOlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnN1bSk7XFxuMTQzMTpcXHRcXHRyZXR1cm4gX19ibGtnX3ByZmlsbF9yd3N0YXQoc2YsIHBkLCBcXHUwMDI2c3VtKTtcXG4xNDMyOlxcdH1cXG4xNDMzOlxcdFxcbjE0MzQ6XFx0c3RhdGljIGludCB0Z19wcmludF9yd3N0YXRfcmVjdXJzaXZlKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuMTQzNTpcXHR7XFxuMTQzNjpcXHRcXHRibGtjZ19wcmludF9ibGtncyhzZiwgY3NzX3RvX2Jsa2NnKHNlcV9jc3Moc2YpKSxcXG4xNDM3OlxcdFxcdFxcdFxcdCAgdGdfcHJmaWxsX3J3c3RhdF9yZWN1cnNpdmUsIFxcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLFxcbjE0Mzg6XFx0XFx0XFx0XFx0ICBzZXFfY2Z0KHNmKS1cXHUwMDNlcHJpdmF0ZSwgdHJ1ZSk7XFxuMTQzOTpcXHRcXHRyZXR1cm4gMDtcXG4xNDQwOlxcdH1cXG4xNDQxOlxcdFxcbjE0NDI6XFx0c3RhdGljIHN0cnVjdCBjZnR5cGUgdGhyb3RsX2xlZ2FjeV9maWxlc1tdID0ge1xcbjE0NDM6XFx0XFx0e1xcbjE0NDQ6XFx0XFx0XFx0Lm5hbWUgPSBcXFwidGhyb3R0bGUucmVhZF9icHNfZGV2aWNlXFxcIixcXG4xNDQ1OlxcdFxcdFxcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIGJwc1tSRUFEXSksXFxuMTQ0NjpcXHRcXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcXG4xNDQ3OlxcdFxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcXG4xNDQ4OlxcdFxcdH0sXFxuMTQ0OTpcXHRcXHR7XFxuMTQ1MDpcXHRcXHRcXHQubmFtZSA9IFxcXCJ0aHJvdHRsZS53cml0ZV9icHNfZGV2aWNlXFxcIixcXG4xNDUxOlxcdFxcdFxcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIGJwc1tXUklURV0pLFxcbjE0NTI6XFx0XFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91NjQsXFxuMTQ1MzpcXHRcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXFxuMTQ1NDpcXHRcXHR9LFxcbjE0NTU6XFx0XFx0e1xcbjE0NTY6XFx0XFx0XFx0Lm5hbWUgPSBcXFwidGhyb3R0bGUucmVhZF9pb3BzX2RldmljZVxcXCIsXFxuMTQ1NzpcXHRcXHRcXHQucHJpdmF0ZSA9IG9mZnNldG9mKHN0cnVjdCB0aHJvdGxfZ3JwLCBpb3BzW1JFQURdKSxcXG4xNDU4OlxcdFxcdFxcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcXG4xNDU5OlxcdFxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXFxuMTQ2MDpcXHRcXHR9LFxcbjE0NjE6XFx0XFx0e1xcbjE0NjI6XFx0XFx0XFx0Lm5hbWUgPSBcXFwidGhyb3R0bGUud3JpdGVfaW9wc19kZXZpY2VcXFwiLFxcbjE0NjM6XFx0XFx0XFx0LnByaXZhdGUgPSBvZmZzZXRvZihzdHJ1Y3QgdGhyb3RsX2dycCwgaW9wc1tXUklURV0pLFxcbjE0NjQ6XFx0XFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91aW50LFxcbjE0NjU6XFx0XFx0XFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdWludCxcXG4xNDY2OlxcdFxcdH0sXFxuMTQ2NzpcXHRcXHR7XFxuMTQ2ODpcXHRcXHRcXHQubmFtZSA9IFxcXCJ0aHJvdHRsZS5pb19zZXJ2aWNlX2J5dGVzXFxcIixcXG4xNDY5OlxcdFxcdFxcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIHN0YXRfYnl0ZXMpLFxcbjE0NzA6XFx0XFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfcndzdGF0LFxcbjE0NzE6XFx0XFx0fSxcXG4xNDcyOlxcdFxcdHtcXG4xNDczOlxcdFxcdFxcdC5uYW1lID0gXFxcInRocm90dGxlLmlvX3NlcnZpY2VfYnl0ZXNfcmVjdXJzaXZlXFxcIixcXG4xNDc0OlxcdFxcdFxcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIHN0YXRfYnl0ZXMpLFxcbjE0NzU6XFx0XFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfcndzdGF0X3JlY3Vyc2l2ZSxcXG4xNDc2OlxcdFxcdH0sXFxuMTQ3NzpcXHRcXHR7XFxuMTQ3ODpcXHRcXHRcXHQubmFtZSA9IFxcXCJ0aHJvdHRsZS5pb19zZXJ2aWNlZFxcXCIsXFxuMTQ3OTpcXHRcXHRcXHQucHJpdmF0ZSA9IG9mZnNldG9mKHN0cnVjdCB0aHJvdGxfZ3JwLCBzdGF0X2lvcyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjEzLjUxODc2NTQ2OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTgzNzk2OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBjZ3JvdXAgdjIgVGhyb3R0bGluZyBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0aHJvdHRsaW5nIG1lY2hhbmlzbXMgaW4gY2dyb3VwIHYyIGEgYml0IGJldHRlci4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHNlZSBpZiBpdCdzIGxldmVyYWdpbmcgdGhlIHNhbWUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSBhcyBjZ3JvdXAgdjEuIFNwZWNpZmljYWxseSwgSSdtIHdvbmRlcmluZyBpZiBpdCB1c2VzIGB0Z19zZXRfY29uZmAgb3Igc29tZSBvdGhlciBhbmFsb2dvdXMgZnVuY3Rpb24gZm9yIHNldHRpbmcgdGhlIHRocm90dGxpbmcgY29uZmlndXJhdGlvbnMuIFRoYXQncyBteSBzdGFydGluZyBwb2ludC5cblxuVG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcywgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBzb3VyY2UgY29kZS4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIGJsb2NrIEkvTyB0aHJvdHRsaW5nLCBgYmxvY2svYmxrLXRocm90dGxlLmNgIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJJ2xsIGRvIGEgcXVpY2sgc2VhcmNoIHdpdGhpbiB0aGF0IGZpbGUgZm9yIFwidGhyb3RsX2ZpbGVzXCIg4oCTIHRoYXQncyBvZnRlbiBhIGdvb2Qga2V5d29yZCB0byBmaW5kIHJlbGF0ZWQgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGludm9sdmVkIHdpdGggdGhlIHRocm90dGxlIGltcGxlbWVudGF0aW9uIGFuZCBjb25maWd1cmF0aW9uIGhhbmRsaW5nLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBsZWFkIG1lIHRvIHRoZSBjb3JlIGxvZ2ljLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTYyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowOToxNS41MDI1NjU4NTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTEwNzcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Z19zZXRfY29uZnx0aHJvdGxfZmlsZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmxrLXRocm90dGxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLXRocm90dGxlLmM9MTMxOD1zdGF0aWMgaW50IGJsa190aHJvdGxfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNTEtXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTM1MjpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTM1My1cXHRcXHRcXHQgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYsIGJvb2wgaXNfdTY0KVxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwMy1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDA0OnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3U2NChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwNS1cXHRcXHRcXHQgICAgICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDYte1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MDc6XFx0cmV0dXJuIHRnX3NldF9jb25mKG9mLCBidWYsIG5ieXRlcywgb2ZmLCB0cnVlKTtcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDA4LX1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDA5LVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MTA6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdWludChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxMS1cXHRcXHRcXHRcXHRjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxMi17XFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQxMzpcXHRyZXR1cm4gdGdfc2V0X2NvbmYob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIGZhbHNlKTtcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDE0LX1cXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE0NDI9c3RhdGljIHN0cnVjdCBjZnR5cGUgdGhyb3RsX2xlZ2FjeV9maWxlc1tdID0ge1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ0Ni1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDQ3OlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDQ4LVxcdH0sXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDUyLVxcdFxcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdTY0LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NTM6XFx0XFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdTY0LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTQtXFx0fSxcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTgtXFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91aW50LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NTk6XFx0XFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdWludCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDYwLVxcdH0sXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDY0LVxcdFxcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDY1OlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2Ni1cXHR9LFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmM9MTU0Mj1zdGF0aWMgc3NpemVfdCB0Z19zZXRfbGltaXQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTYyMy1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNjI0OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9maWxlc1tdID0ge1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2MjUtXFx0e1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmM9MTY3Nz1zdHJ1Y3QgYmxrY2dfcG9saWN5IGJsa2NnX3BvbGljeV90aHJvdGwgPSB7XFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTY3ODpcXHQuZGZsX2NmdHlwZXNcXHRcXHQ9IHRocm90bF9maWxlcyxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNjc5LVxcdC5sZWdhY3lfY2Z0eXBlc1xcdFxcdD0gdGhyb3RsX2xlZ2FjeV9maWxlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6MDk6MTUuNjczNjc5MTg0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMzY3Mzc4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24gYW5kIFN5bWJvbCBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QgdGhpbmdzIGZpcnN0OiBJIG5lZWQgdG8gdmVyaWZ5IGEgY291cGxlIG9mIGNydWNpYWwgY29uZmlndXJhdGlvbnMgYXJlIHNldCBjb3JyZWN0bHkuIFNwZWNpZmljYWxseSwgSSdtIGNoZWNraW5nIGZvciBgQkxLX0RFVl9USFJPVFRMSU5HYCwgYW5kLCBiZWNhdXNlIGl0J3MgYSBkZXBlbmRlbmN5LCBgQkxLX0NHUk9VUGAuIEl04oCZcyBjcnVjaWFsIHRoaXMgaXMgY29ycmVjdCBiZWZvcmUgd2UgbW92ZSBvbi5cblxuTm93LCBsZXQncyBwaXZvdCB0byB0aGUgcmVsZXZhbnQgc3ltYm9scy4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBhcmUgcmVhZHkgdG8gZXhlY3V0ZSBjb3JyZWN0bHkuIE15IGZvY3VzIGhlcmUgaXMgb24gYHRnX3NldF9jb25mYCwgYHRnX3NldF9jb25mX3VpbnRgLCBhbmQgYHRnX3NldF9jb25mX3U2NGAuIEkgbWlnaHQgaGF2ZSB0byByZXZpc2l0IHRoaXMgc2VjdGlvbiBpZiBzb21ldGhpbmcgaXMgb2ZmLlxuXG5KdXN0IHRvIGJlIGNlcnRhaW4sIEnigJlsbCB0YWtlIGEgcXVpY2sgbG9vayB0aHJvdWdoIGBibG9jay9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3Mgb3Igc3ltYm9scyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gQWgsIHRoZXJlIGl0IGlzOiBjb25maXJtaW5nIGBCTEtfREVWX1RIUk9UVExJTkdgJ3MgYm9vbGVhbiBkZWNsYXJhdGlvbiwgdGhlIGBkZXBlbmRzIG9uIEJMS19DR1JPVVBgIGFuZCB0aGUgYHNlbGVjdCBCTEtfQ0dST1VQX1JXU1RBVGAuIEV2ZXJ5dGhpbmcgc2VlbXMgY29tcGxldGVseSBjbGVhciBhbmQgZXhhY3RseSBhcyBleHBlY3RlZDsgdGhlIGRlcGVuZGVuY3kgaXMgZXN0YWJsaXNoZWQgY29ycmVjdGx5LlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IG5vdy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTg2LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowOToxOC44MTA0MTk4MTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ3MzI0MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkJMS19ERVZfVEhST1RUTElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRnX3NldF9jb25mXCIsXG4gICAgXCJ0Z19zZXRfY29uZl91aW50XCIsXG4gICAgXCJ0Z19zZXRfY29uZl91NjRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdGdfc2V0X2NvbmYoKWAgaW4gYGJsb2NrL2Jsay10aHJvdHRsZS5jYCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cvdHJ1bmNhdGlvbiB3aGVuIGFzc2lnbmluZyAzMi1iaXQgdGhyb3R0bGUgY29uZmlndXJhdGlvbiBmaWVsZHMgYnkgY2xhbXBpbmcgdGhlIHBhcnNlZCA2NC1iaXQgdmFsdWUgdG8gYFVJTlRfTUFYYC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBibGtpbyBjZ3JvdXAgY29udHJvbCBpbnRlcmZhY2UgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIHByb3BlciBiZWhhdmlvciB3aGVuIHdyaXRpbmcgdmFyaW91cyB2YWx1ZXMgdG8gdGhyb3R0bGUgcGFyYW1ldGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCTEtfREVWX1RIUk9UVExJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Z19zZXRfY29uZlwiLFxuICAgIFwidGdfc2V0X2NvbmZfdWludFwiLFxuICAgIFwidGdfc2V0X2NvbmZfdTY0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRnX3NldF9jb25mKClgIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93L3RydW5jYXRpb24gd2hlbiBhc3NpZ25pbmcgMzItYml0IHRocm90dGxlIGNvbmZpZ3VyYXRpb24gZmllbGRzIGJ5IGNsYW1waW5nIHRoZSBwYXJzZWQgNjQtYml0IHZhbHVlIHRvIGBVSU5UX01BWGAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYmxraW8gY2dyb3VwIGNvbnRyb2wgaW50ZXJmYWNlIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBwcm9wZXIgYmVoYXZpb3Igd2hlbiB3cml0aW5nIHZhcmlvdXMgdmFsdWVzIHRvIHRocm90dGxlIHBhcmFtZXRlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjE4Ljk2NTE2MTY5MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNjUzMzMzMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowOToxOC45NjU2MTMyNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5MTY0ODc1NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdGdfc2V0X2NvbmYoKWAgaW4gYGJsb2NrL2Jsay10aHJvdHRsZS5jYCB0byBmYWN0b3Igb3V0IHRoZSBwb2ludGVyIGNhbGN1bGF0aW9uIGludG8gYSBoZWxwZXIgbG9jYWwgdmFyaWFibGUgYGZpZWxkYCBhbmQgdG8gY2xhbXAgdmFsdWVzIHRvIGBVSU5UX01BWGAgdmlhIGBtaW4odiwgVUlOVF9NQVgpYCB3aGVuIHNldHRpbmcgdW5zaWduZWQgMzItYml0IGludGVnZXIgY29uZmlndXJhdGlvbiBmaWVsZHMuXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5mby1sZWFrcywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50cm9kdWNlZCBvciBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gVGhlIHZhcmlhYmxlIGB2YCBpcyBwYXJzZWQgYW5kIHZhbGlkYXRlZCBieSBgc3NjYW5mYCwgYW5kIHRoZSB0YXJnZXQgc3RydWN0IGZpZWxkIGlzIG92ZXJ3cml0dGVuIHdpdGggdGhlIGNsYW1wZWQgaW50ZWdlciB2YWx1ZS4gQW55IHBvdGVudGlhbCBtZW1vcnktc2FmZXR5IG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOL1VCU0FOL0xPQ0tERVApLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OGM4NDZhZWNiMWQyYjRmYTZmNWRhNzMwYzdmNTY5ZTNmZjcwMDU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNDowODo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmNcbmluZGV4IGZmYzNiNzAwNjVkNGIuLjk3YWQ3OTU5ZDAwNmYgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstdGhyb3R0bGUuY1xuKysrIGIvYmxvY2svYmxrLXRocm90dGxlLmNcbkBAIC0xMzgzLDEwICsxMzgzLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdHRnID0gYmxrZ190b190ZyhjdHguYmxrZyk7XG4gXHR0Z191cGRhdGVfY2FycnlvdmVyKHRnKTtcbiBcbitcdHZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyArIG9mX2NmdChvZiktXHUwMDNlcHJpdmF0ZTtcbitcbiBcdGlmIChpc191NjQpXG4tXHRcdCoodTY0ICopKCh2b2lkICopdGcgKyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGUpID0gdjtcbitcdFx0Kih1NjQgKilmaWVsZCA9IHY7XG4gXHRlbHNlXG4tXHRcdCoodW5zaWduZWQgaW50ICopKCh2b2lkICopdGcgKyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGUpID0gdjtcbitcdFx0Kih1bnNpZ25lZCBpbnQgKilmaWVsZCA9IG1pbih2LCBVSU5UX01BWCk7XG4gXG4gXHR0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTtcbiBcdHJldCA9IDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowOToxOC45NjU2MTQ0NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Njk0MTg4MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyBhbmFseXNpcywgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkFuYWx5emluZyBgYmxrLXRocm90dGxlLmNgIFBhdGNoKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhdGNoIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gd2hlcmUgYHRnX3NldF9jb25mYCBpcyBiZWluZyB1c2VkLCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMTM4MyBpbiBgYmxvY2svYmxrLXRocm90dGxlLmNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBnZXQgbXkgYmVhcmluZ3Mgb24gdGhlIGNvZGUgc3Vycm91bmRpbmcgdGhlIGZ1bmN0aW9uIGNhbGwgYW5kIGhlbHBzIG1lIGdyb2sgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIGVmZmVjdCBvZiBhbnkgY2hhbmdlcyBvbiBob3cgdGhlIHRocm90dGxpbmcgbWVjaGFuaXNtIHdvcmtzLiBVbmRlcnN0YW5kaW5nIHRoYXQgY2FsbCdzIGNvbnRleHQgaXMgZ29pbmcgdG8gYmUga2V5IHRvIGdyYXNwaW5nIHRoaXMgcGF0Y2gncyBpbnRlbnRpb24gYW5kIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6MDk6MjUuNjU5ODA2NzIzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstdGhyb3R0bGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzUwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzUwOlxcdFxcbjEzNTE6XFx0XFxuMTM1MjpcXHRzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuMTM1MzpcXHRcXHRcXHRcXHQgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYsIGJvb2wgaXNfdTY0KVxcbjEzNTQ6XFx0e1xcbjEzNTU6XFx0XFx0c3RydWN0IGJsa2NnICpibGtjZyA9IGNzc190b19ibGtjZyhvZl9jc3Mob2YpKTtcXG4xMzU2OlxcdFxcdHN0cnVjdCBibGtnX2NvbmZfY3R4IGN0eDtcXG4xMzU3OlxcdFxcdHN0cnVjdCB0aHJvdGxfZ3JwICp0ZztcXG4xMzU4OlxcdFxcdGludCByZXQ7XFxuMTM1OTpcXHRcXHR1NjQgdjtcXG4xMzYwOlxcdFxcbjEzNjE6XFx0XFx0YmxrZ19jb25mX2luaXQoXFx1MDAyNmN0eCwgYnVmKTtcXG4xMzYyOlxcdFxcbjEzNjM6XFx0XFx0cmV0ID0gYmxrZ19jb25mX29wZW5fYmRldihcXHUwMDI2Y3R4KTtcXG4xMzY0OlxcdFxcdGlmIChyZXQpXFxuMTM2NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzNjY6XFx0XFxuMTM2NzpcXHRcXHRpZiAoIWJsa190aHJvdGxfYWN0aXZhdGVkKGN0eC5iZGV2LVxcdTAwM2ViZF9xdWV1ZSkpIHtcXG4xMzY4OlxcdFxcdFxcdHJldCA9IGJsa190aHJvdGxfaW5pdChjdHguYmRldi1cXHUwMDNlYmRfZGlzayk7XFxuMTM2OTpcXHRcXHRcXHRpZiAocmV0KVxcbjEzNzA6XFx0XFx0XFx0XFx0Z290byBjbG9zZV9iZGV2O1xcbjEzNzE6XFx0XFx0fVxcbjEzNzI6XFx0XFxuMTM3MzpcXHRcXHRyZXQgPSBibGtnX2NvbmZfcHJlcChibGtjZywgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwsIFxcdTAwMjZjdHgpO1xcbjEzNzQ6XFx0XFx0aWYgKHJldClcXG4xMzc1OlxcdFxcdFxcdGdvdG8gY2xvc2VfYmRldjtcXG4xMzc2OlxcdFxcbjEzNzc6XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4xMzc4OlxcdFxcdGlmIChzc2NhbmYoY3R4LmJvZHksIFxcXCIlbGx1XFxcIiwgXFx1MDAyNnYpICE9IDEpXFxuMTM3OTpcXHRcXHRcXHRnb3RvIHVucHJlcDtcXG4xMzgwOlxcdFxcdGlmICghdilcXG4xMzgxOlxcdFxcdFxcdHYgPSBVNjRfTUFYO1xcbjEzODI6XFx0XFxuMTM4MzpcXHRcXHR0ZyA9IGJsa2dfdG9fdGcoY3R4LmJsa2cpO1xcbjEzODQ6XFx0XFx0dGdfdXBkYXRlX2NhcnJ5b3Zlcih0Zyk7XFxuMTM4NTpcXHRcXG4xMzg2OlxcdFxcdHZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyArIG9mX2NmdChvZiktXFx1MDAzZXByaXZhdGU7XFxuMTM4NzpcXHRcXG4xMzg4OlxcdFxcdGlmIChpc191NjQpXFxuMTM4OTpcXHRcXHRcXHQqKHU2NCAqKWZpZWxkID0gdjtcXG4xMzkwOlxcdFxcdGVsc2VcXG4xMzkxOlxcdFxcdFxcdCoodW5zaWduZWQgaW50ICopZmllbGQgPSBtaW4odiwgVUlOVF9NQVgpO1xcbjEzOTI6XFx0XFxuMTM5MzpcXHRcXHR0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTtcXG4xMzk0OlxcdFxcdHJldCA9IDA7XFxuMTM5NTpcXHRcXG4xMzk2OlxcdHVucHJlcDpcXG4xMzk3OlxcdFxcdGJsa2dfY29uZl91bnByZXAoXFx1MDAyNmN0eCk7XFxuMTM5ODpcXHRcXG4xMzk5OlxcdGNsb3NlX2JkZXY6XFxuMTQwMDpcXHRcXHRibGtnX2NvbmZfY2xvc2VfYmRldihcXHUwMDI2Y3R4KTtcXG4xNDAxOlxcdFxcdHJldHVybiByZXQgPzogbmJ5dGVzO1xcbjE0MDI6XFx0fVxcbjE0MDM6XFx0XFxuMTQwNDpcXHRzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91NjQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbjE0MDU6XFx0XFx0XFx0XFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4xNDA2OlxcdHtcXG4xNDA3OlxcdFxcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgdHJ1ZSk7XFxuMTQwODpcXHR9XFxuMTQwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6MDk6MjUuNjU5OTgzMDczWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1Njk5ODQxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IENoYW5nZSBpbiBCbG9jayBUaHJvdHRsZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGRpZmZgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGNoYW5naW5nIGhvdyB3ZSBzZXQgY29uZmlndXJhdGlvbiB2YWx1ZXMgd2l0aGluIHRoZSBibG9jayBJL08gdGhyb3R0bGUgZ3JvdXAsIHNwZWNpZmljYWxseSBpbiBgYmxrLXRocm90dGxlLmNgLiBGaXJzdCwgSSBzZWUgdGhleSd2ZSByZWZhY3RvcmVkIGEgY29tbW9uIGNhbGN1bGF0aW9uIGludG8gYHZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyArIG9mX2NmdChvZiktXHUwMDNlcHJpdmF0ZTtgLCB3aGljaCBpcyBnb29kLiBJdCdzIGEgbmljZSwgY2xlYW4gd2F5IHRvIGdldCB0aGUgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IGZpZWxkIHdpdGhpbiB0aGUgdGhyb3R0bGUgZ3JvdXAncyBkYXRhIHN0cnVjdHVyZS5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiB0aGUgaGFuZGxpbmcgb2YgdGhlIHNldCB2YWx1ZXMuIFByZXZpb3VzbHksIGlmIHRoZSB2YWx1ZSBgdmAgd2FzIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLCBpdCB3YXMgc2ltcGx5IGFzc2lnbmVkIHRvIHRoZSB0YXJnZXQgbWVtb3J5IGxvY2F0aW9uIGFzIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLiBIb3dldmVyLCBpZiB0aGUgdmFsdWUgd2Fzbid0IGEgNjQtYml0IGludGVnZXIsIHRoZXJlIHdhcyBhIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIHRydW5jYXRpb246IGAqKHVuc2lnbmVkIGludCAqKWZpZWxkID0gdjtgLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBsYXJnZSBgdTY0YCB2YWx1ZSBiZWluZyB0cnVuY2F0ZWQgdG8gYW4gYHVuc2lnbmVkIGludGAuIE5vdywgdGhlIGNvZGUgZXhwbGljaXRseSBjbGFtcHMgdGhlIHZhbHVlIHRvIGBVSU5UX01BWGAgd2l0aCBgbWluKHYsIFVJTlRfTUFYKWAgaW4gdGhpcyBjYXNlLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgdGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBzYWZldHkgaW1wcm92ZW1lbnQuXCIgSXQncyBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdmVyZmxvdyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGlmIHNvbWVvbmUgcHJvdmlkZXMgYSBsYXJnZSB2YWx1ZSBmb3IgYSBmaWVsZCB0aGF0J3MgbWVhbnQgdG8gYmUgYW4gYHVuc2lnbmVkIGludGAuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcz8gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLiBDb3VsZCB0aGlzIGNyZWF0ZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBsZWFrLCBvciBzb21ldGhpbmcgS01TQU4gd291bGQgZmxhZz8gTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuKiAgICoqSW5pdGlhbGl6YXRpb246KiogYHZgIGlzIHBvcHVsYXRlZCBieSBgc3NjYW5mYCwgd2hpY2ggc2hvdWxkIGhhbmRsZSB0aGUgaW5pdGlhbGl6YXRpb24uIGBmaWVsZGAgaXMgY2FsY3VsYXRlZCB1c2luZyBhIGRlZmluZWQgb2Zmc2V0IGludG8gdGhlIGB0Z2Agc3RydWN0dXJlLCB3aGljaCBzaG91bGQgYmUgZmluZS4gVGhlIHZhbHVlIGJlaW5nIHdyaXR0ZW4gaW50byBgKmZpZWxkYCBpcyBhIHZhbHVlIGRlcml2ZWQgZWl0aGVyIGZyb20gYHNzY2FuZmAncyBpbnB1dCBvciBmcm9tIHRydW5jYXRpb24sIHdoaWNoIGlzIHNhZmUuXG4qICAgKipNZW1vcnkgUmVhZHMgdG8gVXNlcnNwYWNlOioqIE5vLCBpdCBsb29rcyBsaWtlIHdlJ3JlIGp1c3Qgd3JpdGluZyBhIHZhbHVlIHRvIGEgc3RydWN0dXJlLiBOb3RoaW5nIGlzIGJlaW5nIHJlYWQgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbiogICAqKkJ1ZmZlciBMZW5ndGhzIGFuZCBDb250cm9sIEZsb3c6KiogTm8uIEl0J3Mgc2ltcGx5IHNldHRpbmcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHdpdGhpbiBhIHRocm90dGxlIGdyb3VwIHN0cnVjdHVyZS5cblxuVGhlIGNoYW5nZSBsb29rcyBsaWtlIGEgc3RyaWN0bHkgYmV0dGVyIGltcGxlbWVudGF0aW9uIGZyb20gYSBzYWZldHkgc3RhbmRwb2ludC4gSSB0aGluayB0aGlzIHJlZHVjZXMgcG90ZW50aWFsIGlzc3Vlcywgbm90IGludHJvZHVjZSB0aGVtLiBOb3csIGxldCBtZSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYW55IHBvdGVudGlhbCBjYWxsZXJzLiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGNyZWF0ZSBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgZWxzZXdoZXJlIGluIGBibGstdGhyb3R0bGUuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyOTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDowOTozMS4yMjk5NzI0OTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNDExMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRnX3NldF9jb25mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay10aHJvdHRsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay10aHJvdHRsZS5jPTEzMTg9c3RhdGljIGludCBibGtfdGhyb3RsX2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzUxLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjEzNTI6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmYoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNTMtXFx0XFx0XFx0ICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmLCBib29sIGlzX3U2NClcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDMtXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQwNDpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91NjQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDUtXFx0XFx0XFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDA2LXtcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDA3OlxcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgdHJ1ZSk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwOC19XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwOS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDEwOnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3VpbnQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTEtXFx0XFx0XFx0XFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTIte1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MTM6XFx0cmV0dXJuIHRnX3NldF9jb25mKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBmYWxzZSk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxNC19XFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNDQyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9sZWdhY3lfZmlsZXNbXSA9IHtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NDYtXFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91NjQsXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ0NzpcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ0OC1cXHR9LFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1Mi1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDUzOlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDU0LVxcdH0sXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDU4LVxcdFxcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDU5OlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2MC1cXHR9LFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2NC1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3VpbnQsXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ2NTpcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91aW50LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjYtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6MDk6MzEuMzAzMzkxMTYyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNTY2NTIyNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpZ2dpbmcgaW50byBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IHdpdGggdGhpcyBjb25maWd1cmF0aW9uLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIGludG8gYHRnX2NvbmZfdXBkYXRlZGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zLiBJIG5lZWQgdG8gcGlucG9pbnQgZXhhY3RseSAqaG93KiB0aGVzZSBjb25maWd1cmF0aW9uIHZhbHVlcywgYXMgc2V0IGhlcmUsIGFyZSBiZWluZyBhY2Nlc3NlZCBhbmQgaW50ZXJwcmV0ZWQgZG93bnN0cmVhbS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgYWN0dWFsbHkgKnVzaW5nKiB0aGUgY29uZmlndXJhdGlvbiBkYXRhIHRoYXTigJlzIGJlaW5nIHVwZGF0ZWQgaW4gdGhpcyBzZWN0aW9uLiBJJ20gbG9va2luZyBmb3IgdGhlIHJlYWQgY2FsbHMsIGhvdyB0aGV5IGFyZSBzdHJ1Y3R1cmVkLCBhbmQgd2hhdCBjb250ZXh0IHRoZXkgYXJlIHVzZWQgd2l0aGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBub3QganVzdCAqaWYqIHRoZXkncmUgcmVhZCwgYnV0IGFsc28gKmhvdyogdGhleSBhcmUgYmVpbmcgaW50ZXJwcmV0ZWQgYW5kIHBvdGVudGlhbGx5IG1hbmlwdWxhdGVkIGR1cmluZyB0aGUgcnVudGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjM0LjY2MDA0Njc0OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLXRocm90dGxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQxMDpcXHRzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91aW50KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4xNDExOlxcdFxcdFxcdFxcdFxcdGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4xNDEyOlxcdHtcXG4xNDEzOlxcdFxcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgZmFsc2UpO1xcbjE0MTQ6XFx0fVxcbjE0MTU6XFx0XFxuMTQxNjpcXHRzdGF0aWMgaW50IHRnX3ByaW50X3J3c3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbjE0MTc6XFx0e1xcbjE0MTg6XFx0XFx0YmxrY2dfcHJpbnRfYmxrZ3Moc2YsIGNzc190b19ibGtjZyhzZXFfY3NzKHNmKSksXFxuMTQxOTpcXHRcXHRcXHRcXHQgIGJsa2dfcHJmaWxsX3J3c3RhdCwgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwsXFxuMTQyMDpcXHRcXHRcXHRcXHQgIHNlcV9jZnQoc2YpLVxcdTAwM2Vwcml2YXRlLCB0cnVlKTtcXG4xNDIxOlxcdFxcdHJldHVybiAwO1xcbjE0MjI6XFx0fVxcbjE0MjM6XFx0XFxuMTQyNDpcXHRzdGF0aWMgdTY0IHRnX3ByZmlsbF9yd3N0YXRfcmVjdXJzaXZlKHN0cnVjdCBzZXFfZmlsZSAqc2YsXFxuMTQyNTpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQsIGludCBvZmYpXFxuMTQyNjpcXHR7XFxuMTQyNzpcXHRcXHRzdHJ1Y3QgYmxrZ19yd3N0YXRfc2FtcGxlIHN1bTtcXG4xNDI4OlxcdFxcbjE0Mjk6XFx0XFx0YmxrZ19yd3N0YXRfcmVjdXJzaXZlX3N1bShwZF90b19ibGtnKHBkKSwgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwsIG9mZixcXG4xNDMwOlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnN1bSk7XFxuMTQzMTpcXHRcXHRyZXR1cm4gX19ibGtnX3ByZmlsbF9yd3N0YXQoc2YsIHBkLCBcXHUwMDI2c3VtKTtcXG4xNDMyOlxcdH1cXG4xNDMzOlxcdFxcbjE0MzQ6XFx0c3RhdGljIGludCB0Z19wcmludF9yd3N0YXRfcmVjdXJzaXZlKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuMTQzNTpcXHR7XFxuMTQzNjpcXHRcXHRibGtjZ19wcmludF9ibGtncyhzZiwgY3NzX3RvX2Jsa2NnKHNlcV9jc3Moc2YpKSxcXG4xNDM3OlxcdFxcdFxcdFxcdCAgdGdfcHJmaWxsX3J3c3RhdF9yZWN1cnNpdmUsIFxcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLFxcbjE0Mzg6XFx0XFx0XFx0XFx0ICBzZXFfY2Z0KHNmKS1cXHUwMDNlcHJpdmF0ZSwgdHJ1ZSk7XFxuMTQzOTpcXHRcXHRyZXR1cm4gMDtcXG4xNDQwOlxcdH1cXG4xNDQxOlxcdFxcbjE0NDI6XFx0c3RhdGljIHN0cnVjdCBjZnR5cGUgdGhyb3RsX2xlZ2FjeV9maWxlc1tdID0ge1xcbjE0NDM6XFx0XFx0e1xcbjE0NDQ6XFx0XFx0XFx0Lm5hbWUgPSBcXFwidGhyb3R0bGUucmVhZF9icHNfZGV2aWNlXFxcIixcXG4xNDQ1OlxcdFxcdFxcdC5wcml2YXRlID0gb2Zmc2V0b2Yoc3RydWN0IHRocm90bF9ncnAsIGJwc1tSRUFEXSksXFxuMTQ0NjpcXHRcXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcXG4xNDQ3OlxcdFxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcXG4xNDQ4OlxcdFxcdH0sXFxuMTQ0OTpcXHRcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjM0LjY2MDI5NTI2OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDcwMTYwMTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIHRocm90bF9ncnAgQ29uZmlndXJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCBgdGdfc2V0X2NvbmZgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBgYnBzYCBvciBgaW9wc2AgdmFsdWVzIHdpdGhpbiBhIGB0aHJvdGxfZ3JwYCBzdHJ1Y3R1cmUuIFRoZXNlIHZhbHVlcywgaW50ZWdlcnMgb3IgYHU2NGAgdmFsdWVzLCBkZWZpbmUgdGhlIGJhbmR3aWR0aCBvciBJT1BTIGxpbWl0cy4gVGhlIGNydWNpYWwgcGFydCBoZXJlIGlzIHRoZSBwYXRjaCdzIGNsYW1waW5nIG9mIHRoZSB2YWx1ZSBgdmAgd2hlbiBgIWlzX3U2NGAuIEl0J3MgdXNpbmcgYG1pbih2LCAodTY0KVVJTlRfTUFYKWAgYmVmb3JlIGFzc2lnbmluZyB0byB0aGUgYCoodW5zaWduZWQgaW50ICopZmllbGRgLiBUaGlzIGlzIGEgY3JpdGljYWwgZGVmZW5zaXZlIG1lYXN1cmUuIEl0J3MgZGVzaWduZWQgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93IG9yIHRydW5jYXRpb24gaXNzdWVzLCBlc3BlY2lhbGx5IGlmIGEgdmVyeSBsYXJnZSB2YWx1ZSBpcyBiZWluZyBzZXQgd2hlbiBpdCdzIG1lYW50IHRvIGJlIGFuIHVuc2lnbmVkIGludGVnZXIuXG5cblRoZSBtb3N0IGltcG9ydGFudCB0YWtlYXdheSBmb3IgbWUgaXMgdGhlIGFic2VuY2Ugb2YgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgd2hlcmUgbWVtb3J5IGlzIG5vdCBleHBsaWNpdGx5IGluaXRpYWxpemVkLCB0aGVyZSdzIG5vIHBvdGVudGlhbCBmb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIGNydWNpYWxseSwgdGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgcmVseSBvbiB0aGUgc3RhdGUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgZXhjZWxsZW50OyBpdCBzaWduaWZpY2FudGx5IGxvd2VycyB0aGUgcmlzayBwcm9maWxlLlxuXG5Db25zaWRlcmluZyBhbGwgdGhpcywgaXQncyBjbGVhcjogYE5lZWRzS01TQU5gIGlzIHVuZXF1aXZvY2FsbHkgYGZhbHNlYC4gVGhlIHBhdGNoIHNlZW1zIHdlbGwtZGVmZW5kZWQgYWdhaW5zdCBwb3RlbnRpYWwgbWVtb3J5IGluaXRpYWxpemF0aW9uIHByb2JsZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjM0LCJPdXRwdXRUb2tlbnMiOjE5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjA5OjM4LjEzMDQ1OTc5M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRnX3NldF9jb25mKClgIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AgdG8gZmFjdG9yIG91dCB0aGUgcG9pbnRlciBjYWxjdWxhdGlvbiBpbnRvIGEgaGVscGVyIGxvY2FsIHZhcmlhYmxlIGBmaWVsZGAgYW5kIHRvIGNsYW1wIHZhbHVlcyB0byBgVUlOVF9NQVhgIHZpYSBgbWluKHYsIFVJTlRfTUFYKWAgd2hlbiBzZXR0aW5nIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGNvbmZpZ3VyYXRpb24gZmllbGRzLlxcblxcblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSB2YXJpYWJsZSBgdmAgaXMgcGFyc2VkIGFuZCB2YWxpZGF0ZWQgYnkgYHNzY2FuZmAsIGFuZCB0aGUgdGFyZ2V0IHN0cnVjdCBmaWVsZCBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBjbGFtcGVkIGludGVnZXIgdmFsdWUuIEFueSBwb3RlbnRpYWwgbWVtb3J5LXNhZmV0eSBvciBjb25jdXJyZW5jeSBpc3N1ZXMgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9VQlNBTi9MT0NLREVQKS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRnX3NldF9jb25mKClgIGluIGBibG9jay9ibGstdGhyb3R0bGUuY2AgdG8gZmFjdG9yIG91dCB0aGUgcG9pbnRlciBjYWxjdWxhdGlvbiBpbnRvIGEgaGVscGVyIGxvY2FsIHZhcmlhYmxlIGBmaWVsZGAgYW5kIHRvIGNsYW1wIHZhbHVlcyB0byBgVUlOVF9NQVhgIHZpYSBgbWluKHYsIFVJTlRfTUFYKWAgd2hlbiBzZXR0aW5nIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGNvbmZpZ3VyYXRpb24gZmllbGRzLlxcblxcblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSB2YXJpYWJsZSBgdmAgaXMgcGFyc2VkIGFuZCB2YWxpZGF0ZWQgYnkgYHNzY2FuZmAsIGFuZCB0aGUgdGFyZ2V0IHN0cnVjdCBmaWVsZCBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBjbGFtcGVkIGludGVnZXIgdmFsdWUuIEFueSBwb3RlbnRpYWwgbWVtb3J5LXNhZmV0eSBvciBjb25jdXJyZW5jeSBpc3N1ZXMgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9VQlNBTi9MT0NLREVQKS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowgm7cr[1] Phase: Succeeded StartedAt: 2026-09-05 14:09:50 +0000 UTC FinishedAt: 2026-09-05 14:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 14:09:50 +0000 UTC FinishedAt: 2026-09-05 14:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2] Phase: Succeeded StartedAt: 2026-09-05 14:09:50 +0000 UTC FinishedAt: 2026-09-05 17:48:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:09:50 +0000 UTC FinishedAt: 2026-09-05 17:48:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:09:50 +0000 UTC FinishedAt: 2026-09-05 14:10:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:09:50 +0000 UTC FinishedAt: 2026-09-05 14:09:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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-workflowgm7cr/series-workflowgm7cr-convert-artifact-2476830594/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:10:00 +0000 UTC FinishedAt: 2026-09-05 14:27:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:10:00 +0000 UTC FinishedAt: 2026-09-05 14:27:46 +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:*9e70145d-39f1-49d5-88ef-2fc15944a80c,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-workflowgm7cr/series-workflowgm7cr-convert-artifact-2476830594/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": "e7e95d3d-0e72-4e95-b41c-c96ac61121f3", "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-workflowgm7cr/series-workflowgm7cr-build-action-4152426048/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:10:00 +0000 UTC FinishedAt: 2026-09-05 14:27:36 +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:*9e70145d-39f1-49d5-88ef-2fc15944a80c,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-workflowgm7cr/series-workflowgm7cr-convert-artifact-2476830594/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": "e7e95d3d-0e72-4e95-b41c-c96ac61121f3", "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-workflowgm7cr/series-workflowgm7cr-build-action-4152426048/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:27:46 +0000 UTC FinishedAt: 2026-09-05 14:27:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:27:46 +0000 UTC FinishedAt: 2026-09-05 14:27:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:27:46 +0000 UTC FinishedAt: 2026-09-05 14:27:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:27:46 +0000 UTC FinishedAt: 2026-09-05 14:27:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-workflowgm7cr/series-workflowgm7cr-convert-artifact-2276987613/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:27:56 +0000 UTC FinishedAt: 2026-09-05 14:29:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:27:56 +0000 UTC FinishedAt: 2026-09-05 14:29:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e7e95d3d-0e72-4e95-b41c-c96ac61121f3,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-workflowgm7cr/series-workflowgm7cr-build-action-4152426048/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-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:29:46 +0000 UTC FinishedAt: 2026-09-05 14:29:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:29:46 +0000 UTC FinishedAt: 2026-09-05 14:29:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:29:46 +0000 UTC FinishedAt: 2026-09-05 14:45:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:29:46 +0000 UTC FinishedAt: 2026-09-05 14:45:44 +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:*9e70145d-39f1-49d5-88ef-2fc15944a80c,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-workflowgm7cr/series-workflowgm7cr-convert-artifact-2276987613/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": "e30d4097-481b-4c90-ad5b-1bd4890e51a0", "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-workflowgm7cr/series-workflowgm7cr-build-action-3003995065/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:29:46 +0000 UTC FinishedAt: 2026-09-05 14:45:34 +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:*9e70145d-39f1-49d5-88ef-2fc15944a80c,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-workflowgm7cr/series-workflowgm7cr-convert-artifact-2276987613/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": "e30d4097-481b-4c90-ad5b-1bd4890e51a0", "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-workflowgm7cr/series-workflowgm7cr-build-action-3003995065/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:45:44 +0000 UTC FinishedAt: 2026-09-05 14:45:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:45:44 +0000 UTC FinishedAt: 2026-09-05 14:45:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:45:44 +0000 UTC FinishedAt: 2026-09-05 14:47:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:45:44 +0000 UTC FinishedAt: 2026-09-05 14:47:16 +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:*e30d4097-481b-4c90-ad5b-1bd4890e51a0,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-workflowgm7cr/series-workflowgm7cr-build-action-3003995065/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-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:47:26 +0000 UTC FinishedAt: 2026-09-05 17:48:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:47:26 +0000 UTC FinishedAt: 2026-09-05 17:48:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},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:*e7e95d3d-0e72-4e95-b41c-c96ac61121f3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e30d4097-481b-4c90-ad5b-1bd4890e51a0,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-workflowgm7cr/series-workflowgm7cr-build-action-4152426048/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-workflowgm7cr/series-workflowgm7cr-build-action-3003995065/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:47:26 +0000 UTC FinishedAt: 2026-09-05 14:47:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:47:26 +0000 UTC FinishedAt: 2026-09-05 14:47:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},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-workflowgm7cr/series-workflowgm7cr-convert-artifact-2291312226/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:47:26 +0000 UTC FinishedAt: 2026-09-05 14:47:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:47:26 +0000 UTC FinishedAt: 2026-09-05 14:47:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:47:27 +0000 UTC FinishedAt: 2026-09-05 14:47:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:47:37 +0000 UTC FinishedAt: 2026-09-05 17:48:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgm7cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf","tg_set_conf_uint","tg_set_conf_u64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING"],"series_id":"342dfc3d-81c2-4fc0-b2db-59ce63686c7a","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-09-05 14:47:37 +0000 UTC FinishedAt: 2026-09-05 17:48:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e7e95d3d-0e72-4e95-b41c-c96ac61121f3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e30d4097-481b-4c90-ad5b-1bd4890e51a0,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-workflowgm7cr/series-workflowgm7cr-build-action-4152426048/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-workflowgm7cr/series-workflowgm7cr-build-action-3003995065/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-workflowgm7cr/series-workflowgm7cr-convert-artifact-2291312226/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,}