Name: series-workflowr8mv7 Phase: Succeeded StartedAt: 2026-09-13 06:44:33 +0000 UTC FinishedAt: 2026-09-13 10:43:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[0] Phase: Succeeded StartedAt: 2026-09-13 06:44:33 +0000 UTC FinishedAt: 2026-09-13 07:03:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 06:44:33 +0000 UTC FinishedAt: 2026-09-13 07:03:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "32b2f3801ba5c772b5be4c0f17fffc0f911241d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "ZSWAP_DEFAULT_ON", "ZSWAP_SHRINKER_DEFAULT_ON" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "32b2f3801ba5c772b5be4c0f17fffc0f911241d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "ZSWAP_DEFAULT_ON", "ZSWAP_SHRINKER_DEFAULT_ON" ], "series_id": "a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_writeback_entry", "shrink_memcg_cb", "zswap_shrinker_scan", "shrink_memcg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "32b2f3801ba5c772b5be4c0f17fffc0f911241d3", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7LAogICAgJiMzNDtaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfd3JpdGViYWNrX2VudHJ5JiMzNDssCiAgICAmIzM0O3Nocmlua19tZW1jZ19jYiYjMzQ7LAogICAgJiMzNDt6c3dhcF9zaHJpbmtlcl9zY2FuJiMzNDssCiAgICAmIzM0O3Nocmlua19tZW1jZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGluIGB6c3dhcF93cml0ZWJhY2tfZW50cnkoKWAgZnJvbSBgLUVFWElTVGAgdG8gYC1FTk9FTlRgIHdoZW4gYGdldF9zd2FwX2RldmljZShzd3BlbnRyeSlgIHJldHVybnMgTlVMTC4gVGhpcyBwcmV2ZW50cyB0aGUgenN3YXAgc2hyaW5rZXIgKGBzaHJpbmtfbWVtY2dfY2JgKSBmcm9tIGZhbHNlbHkgYXNzdW1pbmcgdGhlIHBhZ2UgaXMgYWxyZWFkeSBpbiB0aGUgc3dhcCBjYWNoZSAod2hpY2ggY2hlY2tzIGZvciBgd3JpdGViYWNrX3Jlc3VsdCA9PSAtRUVYSVNUYCB0byBhYm9ydCBzaHJpbmtpbmcpLiBUaGUgY2hhbmdlIGlzIHN0cmljdGx5IGEgbG9naWMvZXJyb3IgY29kZSBmaXggaW4gdGhlIHN3YXAgcmVjbGFpbSBwYXRoOyBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlcnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQ29uc2VxdWVudGx5LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgaW4gbW0venN3YXAuYyB0byByZXR1cm4gLUVOT0VOVCBpbnN0ZWFkIG9mIC1FRVhJU1Qgd2hlbiBnZXRfc3dhcF9kZXZpY2UoKSBmYWlscy4gSW4gc2hyaW5rX21lbWNnX2NiKCksIC1FRVhJU1QgaXMgc3BlY2lmaWNhbGx5IGNoZWNrZWQgdG8gZGV0ZWN0IHBhZ2VzIGFscmVhZHkgY2FjaGVkIGluIHN3YXAgY2FjaGUsIHdoaWNoIHRyaWdnZXJzIExSVV9TVE9QIHRvIHRlcm1pbmF0ZSBzaHJpbmtpbmcuIENoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgYWx0ZXJzIHRoZSBzaHJpbmtlciYjMzk7cyBlcnJvciBoYW5kbGluZyBhbmQgcmV0cnkgbG9vcCBiZWhhdmlvciB1bmRlciBjb25jdXJyZW50IHN3YXBvZmYvZGV2aWNlIHJlbW92YWwuIEFzIHRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiB6c3dhcCB3cml0ZWJhY2sgYW5kIExSVSByZWNsYW1hdGlvbiwgaXQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFkNGJiNzE5ZmNhNWZlYzUyYjc2NjM2ODhkNzAwZDE4ODk4MzlmMTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAwNzowMTo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggMzdmMzRlNDA2YzhlMy4uYjk5NDhkNDY1N2QyNiAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmNcbkBAIC05OTgsNyAmIzQzOzk5OCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqL1xuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpO1xuIFx0aWYgKCFzaSlcbi1cdFx0cmV0dXJuIC1FRVhJU1Q7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4gXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQX0RFRkFVTFRfT04mIzM0OywKICAgICYjMzQ7WlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19lbnRyeSYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbWVtY2dfY2ImIzM0OywKICAgICYjMzQ7enN3YXBfc2hyaW5rZXJfc2NhbiYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbWVtY2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgaW4gbW0venN3YXAuYyB0byByZXR1cm4gLUVOT0VOVCBpbnN0ZWFkIG9mIC1FRVhJU1Qgd2hlbiBnZXRfc3dhcF9kZXZpY2UoKSBmYWlscy4gSW4gc2hyaW5rX21lbWNnX2NiKCksIC1FRVhJU1QgaXMgc3BlY2lmaWNhbGx5IGNoZWNrZWQgdG8gZGV0ZWN0IHBhZ2VzIGFscmVhZHkgY2FjaGVkIGluIHN3YXAgY2FjaGUsIHdoaWNoIHRyaWdnZXJzIExSVV9TVE9QIHRvIHRlcm1pbmF0ZSBzaHJpbmtpbmcuIENoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgYWx0ZXJzIHRoZSBzaHJpbmtlciYjMzk7cyBlcnJvciBoYW5kbGluZyBhbmQgcmV0cnkgbG9vcCBiZWhhdmlvciB1bmRlciBjb25jdXJyZW50IHN3YXBvZmYvZGV2aWNlIHJlbW92YWwuIEFzIHRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiB6c3dhcCB3cml0ZWJhY2sgYW5kIExSVSByZWNsYW1hdGlvbiwgaXQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkNGJiNzE5ZmNhNWZlYzUyYjc2NjM2ODhkNzAwZDE4ODk4MzlmMTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCAxMyAwNzowMTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLmI5OTQ4ZDQ2NTdkMjYgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtOTk4LDcgJiM0Mzs5OTgsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCS8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpOwogCWlmICghc2kpCi0JCXJldHVybiAtRUVYSVNUOwomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiAKIAltcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpOwogCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgWnN3YXAgQ29tbWl0KioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGFuYWx5emUgYSBzcGVjaWZpYyBnaXQgY29tbWl0IGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSBhIGNoYW5nZSBpbiBgbW0venN3YXAuY2AuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgdHJpYWdlIHRhc2sgcmVsYXRlZCB0byBmdXp6aW5nLCBwcm9iYWJseSBmb3Igc3l6a2FsbGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNoYW5nZSBpcyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBzcGVjaWZpYyBmdXp6aW5nIGF0dGVudGlvbiwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgcmVsZXZhbnQgY29kZSBhcmVhcywgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMsIGFuZCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSBhIGRlZmVuc2l2ZS9RQSB0eXBlIG9mIGFuYWx5c2lzIOKAkyBiZW5pZ24sIG5vIGltbWVkaWF0ZSBzZWN1cml0eSB0aHJlYXQuIEdvb2QsIHNhZmUgdG8gZGl2ZSBpbi4KCk15IHByb2Nlc3Mgc3RhcnRzIHdpdGggdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgZWl0aGVyIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCBvZiB0aGUgZW50aXJlIGZpbGUsIG9yIGBncmVwcGVyYCB0byBsb29rIGF0IHRoZSBjb2RlIG1vcmUgc2VsZWN0aXZlbHksIGFuZCBpZGVudGlmeSBzdXJyb3VuZGluZyBjb2RlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJlYXNvbiBmb3IgdGhpcyBjb21taXQuIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL3pzd2FwLmNgLCBsb29raW5nIGZvciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtb2RpZmljYXRpb24uIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHRoYXQgY291bGQgbGVhZCB0byBuZXcgb3IgY2hhbmdlZCBiZWhhdmlvdXIuIEZyb20gd2hhdCBJIHNlZSwgaXQgbG9va3MgbGlrZSBhIGNoYW5nZSBmcm9tIGAtRUVYSVNUYCB0byBgLUVOT0VOVGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCBhbmQgd2hhdCB0aGUgb3JpZ2luYWwgYmVoYXZpb3Igd2FzLCBzaW5jZSB0aGUgZnVuY3Rpb24gbmFtZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBzZWVtcyBpbXBvcnRhbnQuCgpFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBvcmlnaW5hbCBjb2RlIGRpZCwgd2hhdCB0aGUgbmV3IGNvZGUgZG9lcywgYW5kIHdoeSB0aGUgZGV2ZWxvcGVycyBkZWNpZGVkIHRvIG1ha2UgdGhpcyBzcGVjaWZpYyBjaGFuZ2UuIEkmIzM5O2xsIGxldmVyYWdlIHRvb2xzIGxpa2UgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCB0byBjaGVjayBob3cgdGhlIGVycm9yIGNvZGUgaXMgYmVpbmcgaGFuZGxlZCBpbiBvdGhlciBwbGFjZXMgaW4gdGhlIGNvZGUsIGFuZCBob3cgdGhlc2UgY2hhbmdlcyBtaWdodCBiZSByZWxldmFudCBpbiBmdXp6aW5nLCBhbmQgSSBtaWdodCBuZWVkIHRvIGBzZXQtcmVzdWx0c2AgdG8gc3VtbWFyaXplIG15IGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTg1Olx0ICogZnJlZWQuXG4gOTg2Olx0ICovXG4gOTg3Olx0c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiA5ODg6XHRcdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbiA5ODk6XHR7XG4gOTkwOlx0XHRzdHJ1Y3QgeGFycmF5ICp0cmVlO1xuIDk5MTpcdFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cGVudHJ5KTtcbiA5OTI6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gOTkzOlx0XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xuIDk5NDpcdFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpO1xuIDk5NTpcdFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xuIDk5NjpcdFx0aW50IHJldCA9IDA7XG4gOTk3Olx0XG4gOTk4Olx0XHQvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqL1xuIDk5OTpcdFx0c2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpO1xuMTAwMDpcdFx0aWYgKCFzaSlcbjEwMDE6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xMDAyOlx0XG4xMDAzOlx0XHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuMTAwNDpcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4xMDA1Olx0XHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4xMDA2Olx0XHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuMTAwNzpcdFxuMTAwODpcdFx0LypcbjEwMDk6XHRcdCAqIFN3YXAgY2FjaGUgYWxsb2NhdGlvbiBtaWdodCBmYWlsIGR1ZSB0byBPT00sIG9yIHRoZSBlbnRyeVxuMTAxMDpcdFx0ICogbWF5IGFscmVhZHkgYmUgY2FjaGVkIGR1ZSB0byBjb25jdXJyZW50IHN3YXBpbiBvciBoYXZlIGJlZW5cbjEwMTE6XHRcdCAqIGZyZWVkLiBJZiBhbHJlYWR5IGNhY2hlZCwgYSBjb25jdXJyZW50IHN3YXBpbiBtYWRlIHRoZSBmb2xpb1xuMTAxMjpcdFx0ICogaG90LCBzbyBza2lwIGl0LiBGb3IgdGhlIHVubGlrZWx5IGNvbmN1cnJlbnQgc2hyaW5rZXIgY2FzZSxcbjEwMTM6XHRcdCAqIGl0IHdpbGwgYmUgdW5saW5rZWQgYW5kIGZyZWVkIHdoZW4gaW52YWxpZGF0ZWQgYW55d2F5LlxuMTAxNDpcdFx0ICovXG4xMDE1Olx0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbjEwMTY6XHRcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuMTAxNzpcdFxuMTAxODpcdFx0LypcbjEwMTk6XHRcdCAqIGZvbGlvIGlzIGxvY2tlZCwgYW5kIHRoZSBzd2FwY2FjaGUgaXMgbm93IHNlY3VyZWQgYWdhaW5zdFxuMTAyMDpcdFx0ICogY29uY3VycmVudCBzd2FwcGluZyB0byBhbmQgZnJvbSB0aGUgc2xvdCwgYW5kIGNvbmN1cnJlbnRcbjEwMjE6XHRcdCAqIHN3YXBvZmYgc28gd2UgY2FuIHNhZmVseSBkZXJlZmVyZW5jZSB0aGUgenN3YXAgdHJlZSBoZXJlLlxuMTAyMjpcdFx0ICogVmVyaWZ5IHRoYXQgdGhlIHN3YXAgZW50cnkgaGFzbiYjMzk7dCBiZWVuIGludmFsaWRhdGVkIGFuZCByZWN5Y2xlZFxuMTAyMzpcdFx0ICogYmVoaW5kIG91ciBiYWNrcywgdG8gYXZvaWQgb3ZlcndyaXRpbmcgYSBuZXcgc3dhcCBmb2xpbyB3aXRoXG4xMDI0Olx0XHQgKiBvbGQgY29tcHJlc3NlZCBkYXRhLiBPbmx5IHdoZW4gdGhpcyBpcyBzdWNjZXNzZnVsIGNhbiB0aGUgZW50cnlcbjEwMjU6XHRcdCAqIGJlIGRlcmVmZXJlbmNlZC5cbjEwMjY6XHRcdCAqL1xuMTAyNzpcdFx0dHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3BlbnRyeSk7XG4xMDI4Olx0XHRpZiAoZW50cnkgIT0geGFfbG9hZCh0cmVlLCBvZmZzZXQpKSB7XG4xMDI5Olx0XHRcdHJldCA9IC1FTk9NRU07XG4xMDMwOlx0XHRcdGdvdG8gb3V0O1xuMTAzMTpcdFx0fVxuMTAzMjpcdFxuMTAzMzpcdFx0aWYgKCF6c3dhcF9kZWNvbXByZXNzKGVudHJ5LCBmb2xpbykpIHtcbjEwMzQ6XHRcdFx0cmV0ID0gLUVJTztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDI2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8genN3YXBfd3JpdGViYWNrX2VudHJ5KioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gTXkgb2JqZWN0aXZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gcGlucG9pbnQgZXZlcnkgY2FsbCBzaXRlIGFuZCBkaXNzZWN0IGhvdyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gaXMgbWFuYWdlZC4gVW5kZXJzdGFuZGluZyBob3cgdGhlIHJldHVybiBjb2RlIGlzIHVzZWQgY2FuIHRlbGwgbWUgdGhlIGZhaWx1cmUgbW9kZXMgb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgZXhwZWN0ZWQgZXJyb3IgaGFuZGxpbmcuCgpUaW1lIHRvIGNyYWNrIG9wZW4gYG1tL3pzd2FwLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDEwMzAgdG8gMTEwMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgd2luZG93IHRvIHNwb3QgdGhlIGNhbGxzLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYSBrZWVuIGV5ZSBvdXQuIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aGluZ3Mgd2UgY2FuIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDM1Olx0XHRcdGdvdG8gb3V0O1xuMTAzNjpcdFx0fVxuMTAzNzpcdFxuMTAzODpcdFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcbjEwMzk6XHRcbjEwNDA6XHRcdGNvdW50X3ZtX2V2ZW50KFpTV1BXQik7XG4xMDQxOlx0XHRpZiAoZW50cnktXHUwMDNlb2JqY2cpXG4xMDQyOlx0XHRcdGNvdW50X29iamNnX2V2ZW50cyhlbnRyeS1cdTAwM2VvYmpjZywgWlNXUFdCLCAxKTtcbjEwNDM6XHRcbjEwNDQ6XHRcdHpzd2FwX2VudHJ5X2ZyZWUoZW50cnkpO1xuMTA0NTpcdFxuMTA0NjpcdFx0LyogZm9saW8gaXMgdXAgdG8gZGF0ZSAqL1xuMTA0NzpcdFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4xMDQ4Olx0XG4xMDQ5Olx0XHQvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi9cbjEwNTA6XHRcdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcbjEwNTE6XHRcbjEwNTI6XHRcdC8qIHN0YXJ0IHdyaXRlYmFjayAqL1xuMTA1MzpcdFx0X19zd2FwX3dyaXRlcGFnZShcdTAwMjZjdHgsIGZvbGlvKTtcbjEwNTQ6XHRcdHN3YXBfd3JpdGVfc3VibWl0KFx1MDAyNmN0eCk7XG4xMDU1Olx0XG4xMDU2Olx0b3V0OlxuMTA1NzpcdFx0aWYgKHJldCkge1xuMTA1ODpcdFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4xMDU5Olx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4xMDYwOlx0XHR9XG4xMDYxOlx0XHRmb2xpb19wdXQoZm9saW8pO1xuMTA2MjpcdFx0cmV0dXJuIHJldDtcbjEwNjM6XHR9XG4xMDY0Olx0XG4xMDY1Olx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuMTA2NjpcdCogc2hyaW5rZXIgZnVuY3Rpb25zXG4xMDY3Olx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbjEwNjg6XHQvKlxuMTA2OTpcdCAqIFRoZSBkeW5hbWljIHNocmlua2VyIGlzIG1vZHVsYXRlZCBieSB0aGUgZm9sbG93aW5nIGZhY3RvcnM6XG4xMDcwOlx0ICpcbjEwNzE6XHQgKiAxLiBFYWNoIHpzd2FwIGVudHJ5IGhhcyBhIHJlZmVyZW5jZWQgYml0LCB3aGljaCB0aGUgc2hyaW5rZXIgdW5zZXRzIChnaXZpbmdcbjEwNzI6XHQgKiAgICB0aGUgZW50cnkgYSBzZWNvbmQgY2hhbmNlKSBiZWZvcmUgcm90YXRpbmcgaXQgaW4gdGhlIExSVSBsaXN0LiBJZiB0aGVcbjEwNzM6XHQgKiAgICBlbnRyeSBpcyBjb25zaWRlcmVkIGFnYWluIGJ5IHRoZSBzaHJpbmtlciwgd2l0aCBpdHMgcmVmZXJlbmNlZCBiaXQgdW5zZXQsXG4xMDc0Olx0ICogICAgaXQgaXMgd3JpdHRlbiBiYWNrLiBUaGUgd3JpdGViYWNrIHJhdGUgYXMgYSByZXN1bHQgaXMgZHluYW1pY2FsbHlcbjEwNzU6XHQgKiAgICBhZGp1c3RlZCBieSB0aGUgcG9vbCBhY3Rpdml0aWVzIC0gaWYgdGhlIHBvb2wgaXMgZG9taW5hdGVkIGJ5IG5ldyBlbnRyaWVzXG4xMDc2Olx0ICogICAgKGkuZSBsb3RzIG9mIHJlY2VudCB6c3dhcG91dHMpLCB0aGVzZSBlbnRyaWVzIHdpbGwgYmUgcHJvdGVjdGVkIGFuZFxuMTA3NzpcdCAqICAgIHRoZSB3cml0ZWJhY2sgcmF0ZSB3aWxsIHNsb3cgZG93bi4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSBwb29sIGhhcyBhXG4xMDc4Olx0ICogICAgbG90IG9mIHN0YWduYW50IGVudHJpZXMsIHRoZXNlIGVudHJpZXMgd2lsbCBiZSByZWNsYWltZWQgaW1tZWRpYXRlbHksXG4xMDc5Olx0ICogICAgZWZmZWN0aXZlbHkgaW5jcmVhc2luZyB0aGUgd3JpdGViYWNrIHJhdGUuXG4xMDgwOlx0ICpcbjEwODE6XHQgKiAyLiBTd2FwaW5zIGNvdW50ZXI6IElmIHdlIG9ic2VydmUgc3dhcGlucywgaXQgaXMgYSBzaWduIHRoYXQgd2UgYXJlXG4xMDgyOlx0ICogICAgb3ZlcnNocmlua2luZyBhbmQgc2hvdWxkIHNsb3cgZG93bi4gV2UgbWFpbnRhaW4gYSBzd2FwaW5zIGNvdW50ZXIsIHdoaWNoXG4xMDgzOlx0ICogICAgaXMgY29uc3VtZWQgYW5kIHN1YnRyYWN0IGZyb20gdGhlIG51bWJlciBvZiBlbGlnaWJsZSBvYmplY3RzIG9uIHRoZSBMUlVcbjEwODQ6XHQgKiAgICBpbiB6c3dhcF9zaHJpbmtlcl9jb3VudCgpLlxuMTA4NTpcdCAqXG4xMDg2Olx0ICogMy4gQ29tcHJlc3Npb24gcmF0aW8uIFRoZSBiZXR0ZXIgdGhlIHdvcmtsb2FkIGNvbXByZXNzZXMsIHRoZSBsZXNzIGdhaW5zIHdlXG4xMDg3Olx0ICogICAgY2FuIGV4cGVjdCBmcm9tIHdyaXRlYmFjay4gV2Ugc2NhbGUgZG93biB0aGUgbnVtYmVyIG9mIG9iamVjdHMgYXZhaWxhYmxlXG4xMDg4Olx0ICogICAgZm9yIHJlY2xhaW0gYnkgdGhpcyByYXRpby5cbjEwODk6XHQgKi9cbjEwOTA6XHRzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxuMTA5MTpcdFx0XHRcdFx0ICAgICAgIHZvaWQgKmFyZylcbjEwOTI6XHR7XG4xMDkzOlx0XHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCB6c3dhcF9lbnRyeSwgbHJ1KTtcbjEwOTQ6XHRcdGJvb2wgKmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gKGJvb2wgKilhcmc7XG4xMDk1Olx0XHRzd3BfZW50cnlfdCBzd3BlbnRyeTtcbjEwOTY6XHRcdGVudW0gbHJ1X3N0YXR1cyByZXQgPSBMUlVfUkVNT1ZFRF9SRVRSWTtcbjEwOTc6XHRcdGludCB3cml0ZWJhY2tfcmVzdWx0O1xuMTA5ODpcdFxuMTA5OTpcdFx0LypcbjExMDA6XHRcdCAqIFNlY29uZCBjaGFuY2UgYWxnb3JpdGhtOiBpZiB0aGUgZW50cnkgaGFzIGl0cyByZWZlcmVuY2VkIGJpdCBzZXQsIGdpdmUgaXRcbjExMDE6XHRcdCAqIGEgc2Vjb25kIGNoYW5jZS4gT25seSBjbGVhciB0aGUgcmVmZXJlbmNlZCBiaXQgYW5kIHJvdGF0ZSBpdCBpbiB0aGVcbjExMDI6XHRcdCAqIHpzd2FwJiMzOTtzIExSVSBsaXN0LlxuMTEwMzpcdFx0ICovXG4xMTA0Olx0XHRpZiAoZW50cnktXHUwMDNlcmVmZXJlbmNlZCkge1xuMTEwNTpcdFx0XHRlbnRyeS1cdTAwM2VyZWZlcmVuY2VkID0gZmFsc2U7XG4xMTA2Olx0XHRcdHJldHVybiBMUlVfUk9UQVRFO1xuMTEwNzpcdFx0fVxuMTEwODpcdFxuMTEwOTpcdFx0LypcbjExMTA6XHRcdCAqIEFzIHNvb24gYXMgd2UgZHJvcCB0aGUgTFJVIGxvY2ssIHRoZSBlbnRyeSBjYW4gYmUgZnJlZWQgYnlcbjExMTE6XHRcdCAqIGEgY29uY3VycmVudCBpbnZhbGlkYXRpb24uIFRoaXMgbWVhbnMgdGhlIGZvbGxvd2luZzpcbjExMTI6XHRcdCAqXG4xMTEzOlx0XHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXG4xMTE0Olx0XHQgKiAgICB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSB0byBwaW4gdGhlIHN3YXAgZW50cnkgYW5kXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkyNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyBgd3JpdGViYWNrX3Jlc3VsdGAgSGFuZGxpbmcqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBzZWN0aW9uIG5vdywgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExMTUuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgd3JpdGViYWNrX3Jlc3VsdGAgdmFyaWFibGUgaXMgYmVpbmcgbWFuYWdlZCBhbmQgd2hhdCBvcGVyYXRpb25zIGFyZSBiZWluZyBwZXJmb3JtZWQgb24gaXQuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBjZXJ0YWluIHBhdHRlcm5zIGFuZCBwb3RlbnRpYWwgY29tcGxleGl0aWVzIGluIGRhdGEgY29uc2lzdGVuY3kgb3IgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byB0aGlzIHJlc3VsdC4gSSB3YW50IHRvIHNlZSBpZiBhbnkgY29uY3VycmVuY3kgaXNzdWVzIG1pZ2h0IGJlIGludm9sdmVkLCBvciBwZXJoYXBzIGhvdyB0aGUgcmVzdWx0IGludGVyYWN0cyB3aXRoIG90aGVyIGNydWNpYWwgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGZsb3cgb2YgZGF0YSBhbmQgZGV0ZXJtaW5lIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBhc3NpZ25tZW50IGFuZCBvcGVyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExNTpcdFx0ICogICAgdGhlbiB2YWxpZGF0ZSB0aGUgenN3YXAgZW50cnkgYWdhaW5zdCB0aGF0IHN3YXAgZW50cnkmIzM5O3NcbjExMTY6XHRcdCAqICAgIHRyZWUgdXNpbmcgcG9pbnRlciB2YWx1ZSBjb21wYXJpc29uLiBPbmx5IHdoZW4gdGhhdFxuMTExNzpcdFx0ICogICAgaXMgc3VjY2Vzc2Z1bCBjYW4gdGhlIGVudHJ5IGJlIGRlcmVmZXJlbmNlZC5cbjExMTg6XHRcdCAqXG4xMTE5Olx0XHQgKiAyLiBVc3VhbGx5LCBvYmplY3RzIGFyZSB0YWtlbiBvZmYgdGhlIExSVSBmb3IgcmVjbGFpbS4gSW5cbjExMjA6XHRcdCAqICAgIHRoaXMgY2FzZSB0aGlzIGlzbiYjMzk7dCBwb3NzaWJsZSwgYmVjYXVzZSBpZiByZWNsYWltIGZhaWxzXG4xMTIxOlx0XHQgKiAgICBmb3Igd2hhdGV2ZXIgcmVhc29uLCB3ZSBoYXZlIG5vIG1lYW5zIG9mIGtub3dpbmcgaWYgdGhlXG4xMTIyOlx0XHQgKiAgICBlbnRyeSBpcyBhbGl2ZSB0byBwdXQgaXQgYmFjayBvbiB0aGUgTFJVLlxuMTEyMzpcdFx0ICpcbjExMjQ6XHRcdCAqICAgIFNvIHJvdGF0ZSBpdCBiZWZvcmUgZHJvcHBpbmcgdGhlIGxvY2suIElmIHRoZSBlbnRyeSBpc1xuMTEyNTpcdFx0ICogICAgd3JpdHRlbiBiYWNrIG9yIGludmFsaWRhdGVkLCB0aGUgZnJlZSBwYXRoIHdpbGwgdW5saW5rXG4xMTI2Olx0XHQgKiAgICBpdC4gRm9yIGZhaWx1cmVzLCByb3RhdGlvbiBpcyB0aGUgcmlnaHQgdGhpbmcgYXMgd2VsbC5cbjExMjc6XHRcdCAqXG4xMTI4Olx0XHQgKiAgICBUZW1wb3JhcnkgZmFpbHVyZXMsIHdoZXJlIHRoZSBzYW1lIGVudHJ5IHNob3VsZCBiZSB0cmllZFxuMTEyOTpcdFx0ICogICAgYWdhaW4gaW1tZWRpYXRlbHksIGFsbW9zdCBuZXZlciBoYXBwZW4gZm9yIHRoaXMgc2hyaW5rZXIuXG4xMTMwOlx0XHQgKiAgICBXZSBkb24mIzM5O3QgZG8gYW55IHRyeWxvY2tpbmc7IC1FTk9NRU0gY29tZXMgY2xvc2VzdCxcbjExMzE6XHRcdCAqICAgIGJ1dCB0aGF0JiMzOTtzIGV4dHJlbWVseSByYXJlIGFuZCBkb2VzbiYjMzk7dCBoYXBwZW4gc3B1cmlvdXNseVxuMTEzMjpcdFx0ICogICAgZWl0aGVyLiBEb24mIzM5O3QgYm90aGVyIGRpc3Rpbmd1aXNoaW5nIHRoaXMgY2FzZS5cbjExMzM6XHRcdCAqL1xuMTEzNDpcdFx0bGlzdF9tb3ZlX3RhaWwoaXRlbSwgXHUwMDI2bC1cdTAwM2VsaXN0KTtcbjExMzU6XHRcbjExMzY6XHRcdC8qXG4xMTM3Olx0XHQgKiBPbmNlIHRoZSBscnUgbG9jayBpcyBkcm9wcGVkLCB0aGUgZW50cnkgbWlnaHQgZ2V0IGZyZWVkLiBUaGVcbjExMzg6XHRcdCAqIHN3cGVudHJ5IGlzIGNvcGllZCB0byB0aGUgc3RhY2ssIGFuZCBlbnRyeSBpc24mIzM5O3QgZGVyZWYmIzM5O2QgYWdhaW5cbjExMzk6XHRcdCAqIHVudGlsIHRoZSBlbnRyeSBpcyB2ZXJpZmllZCB0byBzdGlsbCBiZSBhbGl2ZSBpbiB0aGUgdHJlZS5cbjExNDA6XHRcdCAqL1xuMTE0MTpcdFx0c3dwZW50cnkgPSBlbnRyeS1cdTAwM2Vzd3BlbnRyeTtcbjExNDI6XHRcbjExNDM6XHRcdC8qXG4xMTQ0Olx0XHQgKiBJdCYjMzk7cyBzYWZlIHRvIGRyb3AgdGhlIGxvY2sgaGVyZSBiZWNhdXNlIHdlIHJldHVybiBlaXRoZXJcbjExNDU6XHRcdCAqIExSVV9SRU1PVkVEX1JFVFJZLCBMUlVfUkVUUlkgb3IgTFJVX1NUT1AuXG4xMTQ2Olx0XHQgKi9cbjExNDc6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmwtXHUwMDNlbG9jayk7XG4xMTQ4Olx0XG4xMTQ5Olx0XHR3cml0ZWJhY2tfcmVzdWx0ID0genN3YXBfd3JpdGViYWNrX2VudHJ5KGVudHJ5LCBzd3BlbnRyeSk7XG4xMTUwOlx0XG4xMTUxOlx0XHRpZiAod3JpdGViYWNrX3Jlc3VsdCkge1xuMTE1MjpcdFx0XHR6c3dhcF9yZWplY3RfcmVjbGFpbV9mYWlsJiM0MzsmIzQzOztcbjExNTM6XHRcdFx0cmV0ID0gTFJVX1JFVFJZO1xuMTE1NDpcdFxuMTE1NTpcdFx0XHQvKlxuMTE1NjpcdFx0XHQgKiBFbmNvdW50ZXJpbmcgYSBwYWdlIGFscmVhZHkgaW4gc3dhcCBjYWNoZSBpcyBhIHNpZ24gdGhhdCB3ZSBhcmUgc2hyaW5raW5nXG4xMTU3Olx0XHRcdCAqIGludG8gdGhlIHdhcm1lciByZWdpb24uIFdlIHNob3VsZCB0ZXJtaW5hdGUgc2hyaW5raW5nIChpZiB3ZSYjMzk7cmUgaW4gdGhlIGR5bmFtaWNcbjExNTg6XHRcdFx0ICogc2hyaW5rZXIgY29udGV4dCkuXG4xMTU5Olx0XHRcdCAqL1xuMTE2MDpcdFx0XHRpZiAod3JpdGViYWNrX3Jlc3VsdCA9PSAtRUVYSVNUIFx1MDAyNlx1MDAyNiBlbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSkge1xuMTE2MTpcdFx0XHRcdHJldCA9IExSVV9TVE9QO1xuMTE2MjpcdFx0XHRcdCplbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IHRydWU7XG4xMTYzOlx0XHRcdH1cbjExNjQ6XHRcdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDYxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBac3dhcCBXcml0ZWJhY2sgT3B0aW1pemF0aW9uKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZy4gVGhpcyBpcyBpbnRlcmVzdGluZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gYHpzd2FwLmNgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaGFuZGxlcyBlcnJvcnMgd2hlbiB0cnlpbmcgdG8gd3JpdGUgYSBwYWdlIGJhY2sgdG8gc3dhcC4gVGhlIGtleSBpcyBpbiB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIGBnZXRfc3dhcF9kZXZpY2VgLiBQcmV2aW91c2x5LCBhIE5VTEwgcmV0dXJuIGZyb20gYGdldF9zd2FwX2RldmljZShzd3BlbnRyeSlgIC0gaW5kaWNhdGluZyB0aGUgc3dhcCBkZXZpY2UgaXMgZ29uZSBvciB0aGUgZW50cnkgaXMgaW52YWxpZCAtIHJlc3VsdGVkIGluIGAtRUVYSVNUYCBiZWluZyByZXR1cm5lZC4KClRoaXMsIGhvd2V2ZXIsIHdhcyBwcm9ibGVtYXRpYy4gVGhlIGZ1bmN0aW9uIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIHdhcyBiZWluZyBtaXNpbnRlcnByZXRlZCBieSBpdHMgY2FsbGVycywgc3BlY2lmaWNhbGx5IGluIHRoZSBgc2hyaW5rX21lbWNnX2NiYCBjb250ZXh0LiBBIHJldHVybiBvZiBgLUVFWElTVGAgZnJvbSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCB3YXMgaW5jb3JyZWN0bHkgdHJpZ2dlcmluZyBhIHNwZWNpZmljIGNvZGUgcGF0aCB3aXRoaW4gYHNocmlua19tZW1jZ19jYmAuIFRoZSBsb2dpYyBhc3N1bWVkIHRoYXQgYC1FRVhJU1RgIG1lYW50IHRoZSBwYWdlICphbHJlYWR5KiBleGlzdGVkIGluIHRoZSBzd2FwIGNhY2hlLCB3aGljaCBpcyB3aGF0IGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKClgIHJldHVybnMgd2hlbiBhIHBhZ2UgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGNhY2hlLiBUaGlzLCB0aGVuLCBsZWQgdG8gcHJlbWF0dXJlIHRlcm1pbmF0aW9uIG9mIHRoZSByZWNsYWltIHByb2Nlc3MgKHJldHVybmluZyBgTFJVX1NUT1BgKSwgd3JvbmdseSBhc3N1bWluZyB0aGF0IHdlIHdlcmUgc2hyaW5raW5nIGludG8gdGhlIHdhcm1lciByZWdpb24uCgpUaGUgZml4LCBhcyBJIHNlZSBpdCwgaXMgZWxlZ2FudC4gIFRoZXkmIzM5O3ZlIGNoYW5nZWQgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGAtRUVYSVNUYCB0byBgLUVOT0VOVGAuIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiB0d28gc2VwYXJhdGUgZmFpbHVyZSBzY2VuYXJpb3M6ICBhIGdlbnVpbmUgJiMzNDtwYWdlIGFscmVhZHkgaW4gc3dhcCBjYWNoZSYjMzQ7IHNpdHVhdGlvbiAod2hlcmUgYC1FRVhJU1RgIGlzIGNvcnJlY3QpLCBhbmQgdGhlICYjMzQ7c3dhcCBkZXZpY2UgdW5hdmFpbGFibGUvZW50cnkgaW52YWxpZCYjMzQ7IGNvbmRpdGlvbiAod2hlcmUgYC1FTk9FTlRgIGlzIHRoZSBtb3JlIGFjY3VyYXRlIGVycm9yIGNvZGUpLiBUaGlzIGRpZmZlcmVudGlhdGlvbiBwcmV2ZW50cyB0aGUgc3B1cmlvdXMgYExSVV9TVE9QYCBzaWduYWwsIGVuc3VyaW5nIHRoZSByZWNsYWltIHByb2Nlc3MgcHJvY2VlZHMgY29ycmVjdGx5IHVubGVzcyBhIGxlZ2l0aW1hdGUgc3dhcCBjYWNoZSBjb25mbGljdCBpcyBlbmNvdW50ZXJlZC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSBpZiB0aGlzIGNoYW5nZSBhZmZlY3RzIGFueSBvdGhlciBjYWxsZXJzIG9mIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfd3JpdGViYWNrX2VudHJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9OTI0PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTk4Ni0gKi9cbm1tL3pzd2FwLmM6OTg3OnN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG5tbS96c3dhcC5jLTk4OC1cdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbi0tXG5tbS96c3dhcC5jPTEwOTA9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbi0tXG5tbS96c3dhcC5jLTExMTMtXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXG5tbS96c3dhcC5jOjExMTQ6XHQgKiAgICB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSB0byBwaW4gdGhlIHN3YXAgZW50cnkgYW5kXG5tbS96c3dhcC5jLTExMTUtXHQgKiAgICB0aGVuIHZhbGlkYXRlIHRoZSB6c3dhcCBlbnRyeSBhZ2FpbnN0IHRoYXQgc3dhcCBlbnRyeSYjMzk7c1xuLS1cbm1tL3pzd2FwLmMtMTE0OC1cbm1tL3pzd2FwLmM6MTE0OTpcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcbm1tL3pzd2FwLmMtMTE1MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IENHIFNocmlua2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBtZW1jZyBzaHJpbmtpbmcgYmVoYXZpb3IgYW5kIHNwZWNpZmljYWxseSB1bmRlcnN0YW5kIGhvdyB0aGUgYHNocmlua19tZW1jZ19jYmAgY2FsbGJhY2sgaXMgYmVpbmcgaW52b2tlZCBhbmQgd2hlcmUgdGhlIHpzd2FwIGNvbXBvbmVudCBnZXRzIGludm9sdmVkIGluIHRoaXMgcHJvY2Vzcy4gVGltZSB0byB0cmFjZSB0aGUgY2FsbHMuIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBjb2RlIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBpbnRlcmFjdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBjYWxscyB0byB0aGF0IHNwZWNpZmljIGNhbGxiYWNrIGZ1bmN0aW9uLiBUaGVuIEkmIzM5O2xsIHdvcmsgZnJvbSB0aGVyZSB0byBmaWd1cmUgb3V0IHRoZSBwYXRoIHRvIHpzd2FwIGludGVyYWN0aW9uIGluIG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfbWVtY2dfY2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbi0tXG5tbS96c3dhcC5jLTEwODktICovXG5tbS96c3dhcC5jOjEwOTA6c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbm1tL3pzd2FwLmMtMTA5MS1cdFx0XHRcdCAgICAgICB2b2lkICphcmcpXG4tLVxubW0venN3YXAuYz0xMTcxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS96c3dhcC5jLTExODItXG5tbS96c3dhcC5jOjExODM6XHRzaHJpbmtfcmV0ID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoXHUwMDI2enN3YXBfbGlzdF9scnUsIHNjLCBcdTAwMjZzaHJpbmtfbWVtY2dfY2IsXG5tbS96c3dhcC5jLTExODQtXHRcdFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcbi0tXG5tbS96c3dhcC5jPTEyODg9c3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3pzd2FwLmMtMTMwNS1cdFx0c2hydW5rICYjNDM7PSBsaXN0X2xydV93YWxrX29uZShcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZyxcbm1tL3pzd2FwLmM6MTMwNjpcdFx0XHRcdFx0ICAgIFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXHUwMDI2bnJfdG9fd2Fsayk7XG5tbS96c3dhcC5jLTEzMDctXHRcdHNjYW5uZWQgJiM0Mzs9IFNXQVBfQ0xVU1RFUl9NQVggLSBucl90b193YWxrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODY4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRob3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczoKCioqQ2hlY2tpbmcgYG1tL0tjb25maWdgIGZvciBac3dhcCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBac3dhcCBvcHRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBwYXJ0aWN1bGFybHkgdGhpcyBzd2FwIGNvbXByZXNzaW9uIGZlYXR1cmUuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHdoaWNoIG9wdGlvbnMgY29udHJvbCB0aGluZ3MgbGlrZSB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLCB0aGUgc2l6ZSBsaW1pdGF0aW9ucywgbWF5YmUgZXZlbiBzb21lIHBlcmZvcm1hbmNlIHR1bmluZyBwYXJhbWV0ZXJzLiBJIGFsc28gd2FudCB0byBzZWUgaWYgYW55IG5ldyBvcHRpb25zIGhhdmUgYmVlbiBhZGRlZCBzaW5jZSBteSBsYXN0IGRlZXAgZGl2ZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaWYgdGhlcmUgYXJlIG5ldyB3YXlzIHRvIHNwZWNpZnkgY2FjaGUgc2l6ZXMgYW5kIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgZGlmZmVyZW50IGhhcmR3YXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGVhY2ggb3B0aW9uIGFuZCB0aGUgaW1wYWN0IG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGVtIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcbi0tXG5tbS9LY29uZmlnLTIxLVxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM0LVxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy03Ni1cbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG5tbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWZsYXRlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04Mi1cbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbm1tL0tjb25maWctODQtXHRib29sIFwmIzM0O0xaT1wmIzM0O1xuLS1cbm1tL0tjb25maWctODgtXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXG5tbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0LVxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxubW0vS2NvbmZpZy05Ni1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDAtXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXG5tbS9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7TFo0SENcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNi1cbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxubW0vS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2Vcbm1tL0tjb25maWctMTEzLVxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjMwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgQ09ORklHX1pTV0FQIERlcGVuZGVuY2llcyBpbiBtbS9LY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19aU1dBUGAuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUsIHNvIEkga25vdyBpdCYjMzk7cyBnb2luZyB0byBiZSBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUg4oCTIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgcmVsZXZhbnQgZW50cmllcyBkaXJlY3RseS4gSSB3YW50IHRvIHNlZSB3aGF0IG90aGVyIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgYENPTkZJR19aU1dBUGAgY2FuIGV2ZW4gYmUgY29uc2lkZXJlZC4gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzPyBEb2VzIGl0IHJlcXVpcmUgc3BlY2lmaWMgTlVNQSBjb25maWd1cmF0aW9ucywgb3IgY2VydGFpbiBibG9jayBkZXZpY2UgZmVhdHVyZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBaU1dBUCBmaXRzIGludG8gdGhlIGxhcmdlciBtZW1vcnkgbWFuYWdlbWVudCBwaWN0dXJlLiBJdCYjMzk7bGwgYWxzbyBoZWxwIG1lIHRyb3VibGVzaG9vdCBhbnkgcG90ZW50aWFsIGJ1aWxkIGlzc3VlcyBpZiBJJiMzOTttIGVuYWJsaW5nIG9yIGRpc2FibGluZyBaU1dBUCwgb3IgZGVidWdnaW5nIHJlbGF0ZWQga2VybmVsIGlzc3Vlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XG4gIDE4Olx0XHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcbiAgMTk6XHRcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XG4gIDIwOlx0XHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFpTV0FQXG4gIDIzOlx0XHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gU1dBUFxuICAyNTpcdFx0c2VsZWN0IENSWVBUT1xuICAyNjpcdFx0c2VsZWN0IFpTTUFMTE9DXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXG4gIDI5Olx0XHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xuICAzMDpcdFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxuICAzMTpcdFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcbiAgMzI6XHRcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxuICAzMzpcdFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXG4gIDQwOlx0XHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxuICA0MTpcdFxuICA0MjpcdFx0ICBUaGUgc2VsZWN0aW9uIG1hZGUgaGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUga2VybmVsXG4gIDQzOlx0XHQgIGNvbW1hbmQgbGluZSAmIzM5O3pzd2FwLmVuYWJsZWQ9JiMzOTsgb3B0aW9uLlxuICA0NDpcdFxuICA0NTpcdGNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG4gIDQ2Olx0XHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbiAgNDc6XHRcdGRlcGVuZHMgb24gWlNXQVBcbiAgNDg6XHRcdGRlZmF1bHQgblxuICA0OTpcdFx0aGVscFxuICA1MDpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIHpzd2FwIHNocmlua2VyIHdpbGwgYmUgZW5hYmxlZCwgYW5kIHRoZSBwYWdlc1xuICA1MTpcdFx0ICBzdG9yZWQgaW4gdGhlIHpzd2FwIHBvb2wgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGZvciByZWNsYWltIChpLmVcbiAgNTI6XHRcdCAgd3JpdHRlbiBiYWNrIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlKSBvbiBtZW1vcnkgcHJlc3N1cmUuXG4gIDUzOlx0XG4gIDU0Olx0XHQgIFRoaXMgbWVhbnMgdGhhdCB6c3dhcCB3cml0ZWJhY2sgY291bGQgaGFwcGVuIGV2ZW4gaWYgdGhlIHBvb2wgaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXM6IHpzd2FwIFdyaXRlYmFjayBSZXR1cm4gQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGRldGVybWluaW5nIGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIFRoZSBjaGFuZ2UgaXMgaW4gYG1tL3pzd2FwLmNgLCB3aGljaCBpcyBkZWZpbml0ZWx5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIHRoYXQmIzM5O3MgYSBwb3NpdGl2ZSByaWdodCBvZmYgdGhlIGJhdC4gSXQgbG9va3MgbGlrZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBub3cgcmV0dXJucyBgLUVOT0VOVGAgaW5zdGVhZCBvZiBgLUVFWElTVGAgd2hlbiBgZ2V0X3N3YXBfZGV2aWNlKClgIGZhaWxzLgoKSSBjYW4gc2VlIHRoYXQsIHByZXZpb3VzbHksIGEgZmFpbHVyZSB3b3VsZCBsZWFkIHRvIGBzaHJpbmtfbWVtY2dfY2JgIHJldHVybmluZyBgTFJVX1NUT1BgIHByZW1hdHVyZWx5LiBUaGUgY2hhbmdlIHRvIGAtRU5PRU5UYCBjYXVzZXMgYExSVV9SRVRSWWAgdG8gYmUgcmV0dXJuZWQuIFRoaXMgaXMgY2xlYXJseSBhIGNoYW5nZSBpbiBjb250cm9sIGZsb3cgd2l0aGluIHRoZSB6c3dhcCBzaHJpbmtlciwgc28geWVzLCBhY2NvcmRpbmcgdG8gdGhlIGNyaXRlcmlhLCB0aGlzIHdhcnJhbnRzIGZ1enppbmc6IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gaW5jbHVkZSBhbnkgdWJpcXVpdG91cyBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBhcmUgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgKHRoZSBvbmUgSSYjMzk7bSBjaGFuZ2luZyksIGBzaHJpbmtfbWVtY2dfY2JgICh0aGUgY2FsbGVyKSwgYHpzd2FwX3Nocmlua2VyX3NjYW5gIGFuZCBgc2hyaW5rX21lbWNnYC4KCkhtbSwgYXJlIGFueSBvZiB0aGVzZSBzdGF0aWM/IFllcywgdGhleSBhcmUgYWxsIHN0YXRpYyEgSSB0aG91Z2h0IEkgbWlnaHQgcnVuIGludG8gdGhlICYjMzQ7c3RhdGljIGlubGluZSBmdW5jdGlvbiYjMzQ7IHRyYXAsIGJ1dCBzaW5jZSB0aGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucyBpbiBhIC5jIGZpbGUgYW5kIG5vdCBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBhIGhlYWRlciwgdGhleSAqc2hvdWxkKiBoYXZlIGRpc3RpbmN0IHN5bWJvbHMgaW4gdGhlIGtlcm5lbC4gYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgY2FsbGVkIG9uY2UgaW4gYHNocmlua19tZW1jZ19jYmAsIHNvIGl0IG1pZ2h0IGJlIGlubGluZWQuIEJ1dCBgc2hyaW5rX21lbWNnX2NiYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGBsaXN0X2xydV9zaHJpbmtfd2Fsa2AsIGFuZCBpdCBpcyB0aHVzIGltcG9zc2libGUgdG8gYmUgaW5saW5lZCEgYHpzd2FwX3Nocmlua2VyX3NjYW5gIGlzIGFsc28gcGFzc2VkIGEgZnVuY3Rpb24gcG9pbnRlciAoaXRzIGFkZHJlc3MgaXMgdGFrZW4pLCBzbyBpdCBtdXN0IGJlIGEgZnVuY3Rpb24gc3ltYm9sLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgcmVmbGVjdCB0aGUgYWx0ZXJlZCBsb2dpYyBhcmUgdGhlIHN5bWJvbHMgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGBzaHJpbmtfbWVtY2dfY2JgIGFuZCBgenN3YXBfc2hyaW5rZXJfc2NhbmAuIEkmIzM5O2xsIGZvY3VzIG9uIHRob3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9zaHJpbmtlcl9zY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS96c3dhcC5jPTEwOTA9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbi0tXG5tbS96c3dhcC5jLTExNzAtXG5tbS96c3dhcC5jOjExNzE6c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxubW0venN3YXAuYy0xMTcyLVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3pzd2FwLmM9MTI2ND1zdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxuLS1cbm1tL3pzd2FwLmMtMTI3Mi1cbm1tL3pzd2FwLmM6MTI3MzpcdHNocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0cyA9IHpzd2FwX3Nocmlua2VyX3NjYW47XG5tbS96c3dhcC5jLTEyNzQtXHRzaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0genN3YXBfc2hyaW5rZXJfY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzIxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb2RlIENoYW5nZXMgUmVsYXRlZCB0byBac3dhcCBhbmQgTWVtb3J5IFNocmlua2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBzaHJpbmtfbWVtY2dfY2JgIGFuZCBgenN3YXBfc2hyaW5rZXJfc2NhbmAgYXJlIGZ1bmN0aW9uIHBvaW50ZXJzLiBSaWdodCBhd2F5LCB0aGF0IHRlbGxzIG1lIHRoZXkgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgcHJlc2VudCBhcyBzeW1ib2xzIGluIHRoZSB2bWxpbnV4IGltYWdlLiBHb29kIHRvIGtub3csIGtlZXBzIHRoaW5ncyBjbGVhbmVyLiBBbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIG1vZGlmaWVkIGlzIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3ZlIGluY2x1ZGVkIGJvdGggYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGBzaHJpbmtfbWVtY2dfY2JgIGFuZCBwb3RlbnRpYWxseSBldmVuIGB6c3dhcF9zaHJpbmtlcl9zY2FuYCBpbiB0aGUgYnVpbGQgcHJvY2VzcyBpcyBleGNlbGxlbnQsIGRlbW9uc3RyYXRpbmcgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIHRoZSBiZXN0IHdheSB0byBkbyBpdC4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzOiB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBhY3R1YWxseSByZXF1aXJlZCBmb3IgenN3YXAgYW5kIGZvciB0aGUgc2hyaW5rZXIgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGNoZWNrIHRob3NlIGBFbmFibGVDb25maWdzYCB0byBiZSBzdXJlLiBJJiMzOTtsbCBwcm9iYWJseSBmaW5kIHNvbWUgY2x1ZXMgaW4gYG1tL3pzd2FwLmNgIHRvby4gSXQmIzM5O3MgYSBjbGFzc2ljIHBsYWNlIHRvIGxvb2sgZm9yIHRob3NlIGNvbmRpdGlvbmFsIGlmZGVmcyB0aGF0JiMzOTtsbCB0ZWxsIG1lIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZnwjaWYgSVNfRU5BQkxFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz02MTc9c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsXG4tLVxubW0venN3YXAuYy02NTAtLyogc2hvdWxkIGJlIGNhbGxlZCB1bmRlciBSQ1UgKi9cbm1tL3pzd2FwLmM6NjUxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3pzd2FwLmMtNjUyLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuLS1cbm1tL3pzd2FwLmM9MTY4MT12b2lkIHpzd2FwX3N3YXBvZmYoaW50IHR5cGUpXG4tLVxubW0venN3YXAuYy0xNzAwLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5tbS96c3dhcC5jOjE3MDE6I2lmZGVmIENPTkZJR19ERUJVR19GU1xubW0venN3YXAuYy0xNzAyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMyNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgbW0venN3YXAuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlbiBgbW0venN3YXAuY2AgZ2V0cyBjb21waWxlZC4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBtbS9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBidWlsZCBpbnN0cnVjdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgc2hvdWxkIHJlc2lkZS4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgbG9vayBmb3IgZGlyZWN0aXZlcyBvciBkZXBlbmRlbmNpZXMgdGhhdCByZWxhdGUgdG8gYHpzd2FwLmNgLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHRoaXMgc3BlY2lmaWMgZmlsZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBkaXJlY3QgcmVmZXJlbmNlIHRvIGl0LCBvciBpbmRpcmVjdCBpbmNsdXNpb24gdmlhIGEgbGFyZ2VyIG1vZHVsZS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Nzg9b2JqLSQoQ09ORklHX1NXQVApXHQmIzQzOz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfWlNXQVApXHQmIzQzOz0genN3YXAub1xubW0vTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX0hBU19ETUEpXHQmIzQzOz0gZG1hcG9vbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjI1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlpzd2FwIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGxpbmU6IGBvYmotJChDT05GSUdfWlNXQVApICYjNDM7PSB6c3dhcC5vYC4gVGhhdCB0ZWxscyBtZSB0aGUgenN3YXAgbW9kdWxlIGlzIGJlaW5nIGNvbXBpbGVkLCBidXQgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGBDT05GSUdfWlNXQVBgLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBpbiBgbW0vS2NvbmZpZ2A6IFllcCwgYENPTkZJR19aU1dBUGAgcmVxdWlyZXMgYFNXQVBgLCBzZWxlY3RzIGBDUllQVE9gIGFuZCBgWlNNQUxMT0NgLiBTdGFuZGFyZCBzdHVmZi4KCk5vdywgSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgdGhlIGRlZmF1bHQgc3RhdGUgb2YgenN3YXAuIFRoZSBjb2RlIG1lbnRpb25zIGBDT05GSUdfWlNXQVBfREVGQVVMVF9PTmAuIFRoYXQgbWFrZXMgaXQgc291bmQgbGlrZSB6c3dhcCBpcyBlbmFibGVkIGF0IGJvb3QgaWYgdGhpcyBjb25maWcgb3B0aW9uIGlzIHNldC4gT3RoZXJ3aXNlLCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBpdCBleHBsaWNpdGx5IHRocm91Z2ggYSBjb21tYW5kLWxpbmUgYXJndW1lbnQgb3Igc3lzZnMuIEkgbmVlZCB0byBrbm93IGhvdyBzeXprYWxsZXIgaXMgZW5hYmxpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LCBkb2VzIGl0IHBhc3MgYHpzd2FwLmVuYWJsZWQ9MWAgdG8gdGhlIGtlcm5lbD8gT3IgZG9lcyBpdCByZWx5IG9uIGBaU1dBUF9ERUZBVUxUX09OYCBiZWluZyBlbmFibGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gaGVyZSBpcyBrZXkgdG8gaW50ZXJwcmV0aW5nIHRoZSBmdXp6ZXIgcmVzdWx0cy4KCkFuZCB3aGF0IGFib3V0IHRoaXMgYENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYD8gV2hlcmUgaXMgdGhhdCBldmVuIHVzZWQ/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUuIExldCYjMzk7cyBmaW5kIG91dCBleGFjdGx5IHdoZXJlIGBDT05GSUdfWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAgc2hvd3MgdXAgaW4gYG1tL3pzd2FwLmNgLiBHb3R0YSB0cmFjZSB0aGUgbG9naWMgb2YgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MzU9Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL3pzd2FwLmM9MTIxPXN0YXRpYyBib29sIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQgPSBJU19FTkFCTEVEKFxubW0venN3YXAuYzoxMjI6XHRcdENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OKTtcbm1tL3pzd2FwLmMtMTIzLW1vZHVsZV9wYXJhbV9uYW1lZChzaHJpbmtlcl9lbmFibGVkLCB6c3dhcF9zaHJpbmtlcl9lbmFibGVkLCBib29sLCAwNjQ0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNzAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBac3dhcCBTaHJpbmtlciBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB6c3dhcF9zaHJpbmtlcl9lbmFibGVkYCBmbGFnLiBJIHNlZSBpdCYjMzk7cyBpbml0aWFsaXplZCB3aXRoIGBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OKWAuIEludGVyZXN0aW5nLiBUaGF0IG1lYW5zIGl0IGRlZmF1bHRzIHRvIHdoYXRldmVyIHRoZSBjb25maWcgc2V0dGluZyBpcy4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0IHNocmlua2VyIGlzIGVuYWJsZWQsIHRob3VnaCwgcmlnaHQ/CgpXYWl0IGEgbWludXRlLCBJIHNlZSB0aGF0IGBzaHJpbmtfbWVtY2dfY2JgIGlzIGV4ZWN1dGVkIHdoZW4gdGhlIHNocmlua2VyIGFjdHVhbGx5ICpydW5zKi4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gSSBoYXZlIHRvIHNlZSB3aGVyZSB0aGF0IGlzIHVzZWQuIFRoYXQgaXMgdGhlIGNyaXRpY2FsIHBhcnQgdG8gdW5kZXJzdGFuZCBub3csIHRvIHNlZSAqaG93KiB0aGlzIGZsYWcgYWN0dWFsbHkgYWZmZWN0cyBiZWhhdmlvci4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGB6c3dhcF9zaHJpbmtlcl9lbmFibGVkYCB2YXJpYWJsZSBpcyAqYWN0dWFsbHkqIGJlaW5nIGNoZWNrZWQuIEdvdHRhIHRyYWNlIHRoZSBjb2RlIGFuZCBzZWUgd2hlcmUgaXQgbWF0dGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfc2hyaW5rZXJfZW5hYmxlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz0xMTc9bW9kdWxlX3BhcmFtX25hbWVkKGFjY2VwdF90aHJlc2hvbGRfcGVyY2VudCwgenN3YXBfYWNjZXB0X3Rocl9wZXJjZW50LFxuLS1cbm1tL3pzd2FwLmMtMTIwLS8qIEVuYWJsZS9kaXNhYmxlIG1lbW9yeSBwcmVzc3VyZS1iYXNlZCBzaHJpbmtlci4gKi9cbm1tL3pzd2FwLmM6MTIxOnN0YXRpYyBib29sIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQgPSBJU19FTkFCTEVEKFxubW0venN3YXAuYy0xMjItXHRcdENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OKTtcbm1tL3pzd2FwLmM6MTIzOm1vZHVsZV9wYXJhbV9uYW1lZChzaHJpbmtlcl9lbmFibGVkLCB6c3dhcF9zaHJpbmtlcl9lbmFibGVkLCBib29sLCAwNjQ0KTtcbm1tL3pzd2FwLmMtMTI0LVxuLS1cbm1tL3pzd2FwLmM9MTE3MT1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4tLVxubW0venN3YXAuYy0xMTc2LVxubW0venN3YXAuYzoxMTc3Olx0aWYgKCF6c3dhcF9zaHJpbmtlcl9lbmFibGVkIHx8XG5tbS96c3dhcC5jLTExNzgtXHRcdFx0IW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc2MtXHUwMDNlbWVtY2cpKSB7XG4tLVxubW0venN3YXAuYz0xMTkyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4tLVxubW0venN3YXAuYy0xMjAxLVxubW0venN3YXAuYzoxMjAyOlx0aWYgKCF6c3dhcF9zaHJpbmtlcl9lbmFibGVkIHx8ICFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSlcbm1tL3pzd2FwLmMtMTIwMy1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDQ1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBac3dhcCBTaHJpbmtlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgenN3YXBfc2hyaW5rZXJfc2NhbmAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgdGhpcyBjb25kaXRpb25hbDogYGlmICghenN3YXBfc2hyaW5rZXJfZW5hYmxlZCB8fCAhbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzYy0mZ3Q7bWVtY2cpKWAuIFRoYXQmIzM5O3MgdGhlIGNydXggb2YgaG93IHRoZSBzaHJpbmtlciBiZWhhdmVzLiBOb3csIEkgcmVtZW1iZXIgdGhhdCBgQ09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gIGRlZmF1bHRzIHRvICYjMzk7biYjMzk7LiBSaWdodCwgc28gaWYgdGhhdCBpc24mIzM5O3Qgc2V0LCBgenN3YXBfc2hyaW5rZXJfZW5hYmxlZGAgaXMgZ29pbmcgdG8gYmUgZmFsc2UgdW5sZXNzIHNvbWVvbmUmIzM5O3MgZXhwbGljaXRseSBlbmFibGVkIGl0IHRocm91Z2ggc3lzZnMuCgpBbHJpZ2h0LCBzbyB0aGUgaW1wbGljYXRpb25zIGhlcmUgYXJlIHByZXR0eSBjbGVhci4gYFpTV0FQYCwgYFpTV0FQX0RFRkFVTFRfT05gLCBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAsIGFuZCBvZiBjb3Vyc2UgYFNXQVBgLCBhcmUgdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhdCBwbGF5LiBUaGV5IGVzc2VudGlhbGx5IGRldGVybWluZSBpZiBhbmQgaG93IHRoZSBzaHJpbmtlciBldmVuIHJ1bnMuIFRoZXNlIGFyZSB0aGUga2V5IGxldmVycy4KCkhvbGQgb24gYSBzZWNvbmQsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcuLi4gSSYjMzk7bSBnb2luZyB0byBsb29rIGRlZXBlciBpbnRvIGBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkYC4gV2hlcmUgaXMgdGhhdCBmdW5jdGlvbmFsaXR5IGRlZmluZWQ/IEdvdHRhIGJlIHN1cmUgSSYjMzk7bSBjbGVhciBvbiBob3cgdGhhdCBwbGF5cyBpbnRvIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODk2PXZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4OTc6Ym9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODk4LSNlbHNlXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkwNz1zdGF0aWMgaW5saW5lIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTkxMC19XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTExOnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MTIte1xuLS1cbm1tL21lbWNvbnRyb2wuYz02MDU5PXZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxuLS1cbm1tL21lbWNvbnRyb2wuYy02MDc5LVxubW0vbWVtY29udHJvbC5jOjYwODA6Ym9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL21lbWNvbnRyb2wuYy02MDgxLXtcbi0tXG5tbS9wYWdlX2lvLmM9MjA0PWludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3BhZ2VfaW8uYy0yNDMtXHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9wYWdlX2lvLmM6MjQ0Olx0aWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKGZvbGlvX21lbWNnKGZvbGlvKSkpIHtcbm1tL3BhZ2VfaW8uYy0yNDUtXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm1tL3pzd2FwLmM9ODQwPXN0YXRpYyBib29sIHpzd2FwX2NvbXByZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuLS1cbm1tL3pzd2FwLmMtODg1LVx0XHRyY3VfcmVhZF9sb2NrKCk7XG5tbS96c3dhcC5jOjg4NjpcdFx0aWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKFxubW0venN3YXAuYy04ODctXHRcdFx0XHRcdGZvbGlvX21lbWNnKHBhZ2VfZm9saW8ocGFnZSkpKSkge1xuLS1cbm1tL3pzd2FwLmM9MTE3MT1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4tLVxubW0venN3YXAuYy0xMTc3LVx0aWYgKCF6c3dhcF9zaHJpbmtlcl9lbmFibGVkIHx8XG5tbS96c3dhcC5jOjExNzg6XHRcdFx0IW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc2MtXHUwMDNlbWVtY2cpKSB7XG5tbS96c3dhcC5jLTExNzktXHRcdHNjLVx1MDAzZW5yX3NjYW5uZWQgPSAwO1xuLS1cbm1tL3pzd2FwLmM9MTE5Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuLS1cbm1tL3pzd2FwLmMtMTIwMS1cbm1tL3pzd2FwLmM6MTIwMjpcdGlmICghenN3YXBfc2hyaW5rZXJfZW5hYmxlZCB8fCAhbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChtZW1jZykpXG5tbS96c3dhcC5jLTEyMDMtXHRcdHJldHVybiAwO1xuLS1cbm1tL3pzd2FwLmM9MTI4OD1zdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0venN3YXAuYy0xMjkxLVxubW0venN3YXAuYzoxMjkyOlx0aWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSlcbm1tL3pzd2FwLmMtMTI5My1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzkxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZGAgVW5kZXIgU2NydXRpbnkqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWRgIGZ1bmN0aW9uLCBwYXJ0aWN1bGFybHkgd2hlbiBgQ09ORklHX01FTUNHYCAqaXNuJiMzOTt0KiBlbmFibGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgaW4gdGhpcyBzcGVjaWZpYyBzY2VuYXJpby4gVGhlIGluY2x1ZGUgZmlsZSBgbGludXgvbWVtY29udHJvbC5oYCBzZWVtcyB0byBoYXZlIHRoZSBhbnN3ZXI6IGEgc2ltcGxlIGlubGluZSBmdW5jdGlvbiB0aGF0ICphbHdheXMqIHJldHVybnMgYHRydWVgIGlmIGBDT05GSUdfTUVNQ0dgIGlzIG9mZi4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIOKAkyBpdCBlZmZlY3RpdmVseSBtYWtlcyB6c3dhcCB3cml0ZWJhY2sgYWx3YXlzIGVuYWJsZWQgaW4gdGhlIGFic2VuY2Ugb2YgbWVtb3J5IGNncm91cHMuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBtbS9tZW1jb250cm9sLmM6NjA4MGAgdG8gc2VlIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBmbGFnICppcyogc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjA4MDpcdGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG42MDgxOlx0e1xuNjA4MjpcdFx0LyogaWYgenN3YXAgaXMgZGlzYWJsZWQsIGRvIG5vdCBibG9jayBwYWdlcyBnb2luZyB0byB0aGUgc3dhcHBpbmcgZGV2aWNlICovXG42MDgzOlx0XHRpZiAoIXpzd2FwX2lzX2VuYWJsZWQoKSlcbjYwODQ6XHRcdFx0cmV0dXJuIHRydWU7XG42MDg1Olx0XG42MDg2Olx0XHRmb3IgKDsgbWVtY2c7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKVxuNjA4NzpcdFx0XHRpZiAoIVJFQURfT05DRShtZW1jZy1cdTAwM2V6c3dhcF93cml0ZWJhY2spKVxuNjA4ODpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjYwODk6XHRcbjYwOTA6XHRcdHJldHVybiB0cnVlO1xuNjA5MTpcdH1cbjYwOTI6XHRcbjYwOTM6XHRzdGF0aWMgdTY0IHpzd2FwX2N1cnJlbnRfcmVhZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxuNjA5NDpcdFx0XHRcdCAgICAgIHN0cnVjdCBjZnR5cGUgKmNmdClcbjYwOTU6XHR7XG42MDk2Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNzcyk7XG42MDk3Olx0XG42MDk4Olx0XHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnKTtcbjYwOTk6XHRcdHJldHVybiBtZW1jZ19wYWdlX3N0YXRlKG1lbWNnLCBNRU1DR19aU1dBUF9CKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMzcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCAmYW1wOyBac3dhcCBXcml0ZWJhY2sqKgoKQWxyaWdodCwgc28gdGhlIGRlZmF1bHQgc3RhdGUgZm9yIGBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkYCBpcyBzZXQgdG8gdHJ1ZS4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cg4oCTIGl0IG1lYW5zIHdlJiMzOTtyZSBwcm9iYWJseSBhbHJlYWR5IGxldmVyYWdpbmcgenN3YXAgd3JpdGViYWNrIGluIG1hbnkgY29tbW9uIGNvbmZpZ3VyYXRpb25zLiBCdXQgdGhhdCBicmluZ3MgdXAgYW4gaW1wb3J0YW50IHF1ZXN0aW9uOiBXaGF0IHNwZWNpZmljYWxseSAqdHJpZ2dlcnMqIHRoZSBgc2hyaW5rX21lbWNnKClgIGZ1bmN0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBtZW1vcnkgY2dyb3VwIHNocmlua2luZyBpcyBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIG91ciBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvciwgZXNwZWNpYWxseSBpbiByZXNvdXJjZS1jb25zdHJhaW5lZCBlbnZpcm9ubWVudHMgb3Igd2hlbiBkZWFsaW5nIHdpdGggY29udGFpbmVyaXphdGlvbi4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hhdCBjb25kaXRpb25zIGNhdXNlIHRoYXQgc2hyaW5rIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyBsaWUsIGFuZCB0aGF0IHdpbGwgdWx0aW1hdGVseSBoZWxwIG1lIGRlY2lkZSBob3cgdG8gb3B0aW1pemUgbXkgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19tZW1jZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbi0tXG5tbS96c3dhcC5jLTEwODktICovXG5tbS96c3dhcC5jOjEwOTA6c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbm1tL3pzd2FwLmMtMTA5MS1cdFx0XHRcdCAgICAgICB2b2lkICphcmcpXG4tLVxubW0venN3YXAuYz0xMTcxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS96c3dhcC5jLTExODItXG5tbS96c3dhcC5jOjExODM6XHRzaHJpbmtfcmV0ID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoXHUwMDI2enN3YXBfbGlzdF9scnUsIHNjLCBcdTAwMjZzaHJpbmtfbWVtY2dfY2IsXG5tbS96c3dhcC5jLTExODQtXHRcdFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcbi0tXG5tbS96c3dhcC5jPTEyNjQ9c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcbi0tXG5tbS96c3dhcC5jLTEyODctICovXG5tbS96c3dhcC5jOjEyODg6c3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0venN3YXAuYy0xMjg5LXtcbi0tXG5tbS96c3dhcC5jLTEzMDUtXHRcdHNocnVuayAmIzQzOz0gbGlzdF9scnVfd2Fsa19vbmUoXHUwMDI2enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2csXG5tbS96c3dhcC5jOjEzMDY6XHRcdFx0XHRcdCAgICBcdTAwMjZzaHJpbmtfbWVtY2dfY2IsIE5VTEwsIFx1MDAyNm5yX3RvX3dhbGspO1xubW0venN3YXAuYy0xMzA3LVx0XHRzY2FubmVkICYjNDM7PSBTV0FQX0NMVVNURVJfTUFYIC0gbnJfdG9fd2Fsaztcbi0tXG5tbS96c3dhcC5jPTEzMTc9c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxubW0venN3YXAuYy0xMzgyLVxubW0venN3YXAuYzoxMzgzOlx0XHRyZXQgPSBzaHJpbmtfbWVtY2cobWVtY2cpO1xubW0venN3YXAuYy0xMzg0LVx0XHQvKiBkcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgKi9cbi0tXG5tbS96c3dhcC5jPTE0ODg9Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtMTUwNi1cdFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbm1tL3pzd2FwLmM6MTUwNzpcdFx0aWYgKHNocmlua19tZW1jZyhtZW1jZykpIHtcbm1tL3pzd2FwLmMtMTUwOC1cdFx0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTE5CgkJCQkJCQlvdXRwdXQ6IDIxOAoJCQkJCQkJdGhvdWdodHM6IDczNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBac3dhcCBTaHJpbmtpbmcgYW5kIFdyaXRlYmFjayBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHRoZSBvcHRpbWFsIGFwcHJvYWNoIGZvciBmdXp6aW5nIGEgcmVjZW50IHBhdGNoIHJlbGF0ZWQgdG8genN3YXAgd3JpdGViYWNrIGFuZCBzaHJpbmtpbmcuCgpGaXJzdCwgSSBpZGVudGlmaWVkIHRoYXQgdGhlIGZ1bmN0aW9ucyBgc2hyaW5rX21lbWNnYCAoY2FsbGVkIGZyb20gYHpzd2FwX3N0b3JlYCBhbmQgYHNocmlua193b3JrZXJgKSBhbmQgYHpzd2FwX3Nocmlua2VyX3NjYW5gIChjYWxsZWQgYnkgdGhlIHNocmlua2VyIHN1YnN5c3RlbSkgYXJlIGtleSBlbnRyeSBwb2ludHMuIFRoZSBsYXR0ZXIgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgY29ubmVjdHMgdG8gYHNocmlua19tZW1jZ19jYmAuIE5vdywgSSBuZWVkIHRvIGtub3cgd2hpY2gga2VybmVsIGNvbmZpZ3MgY29udHJvbCB0aGlzIGZ1bmN0aW9uYWxpdHkuIExvb2tpbmcgaW50byBgbW0vS2NvbmZpZ2AsIGl0JiMzOTtzIGNsZWFyIHRoYXQgYFNXQVBgLCBgWlNXQVBgLCBgWlNXQVBfREVGQVVMVF9PTmAsIGFuZCBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAgYXJlIHRoZSByZWxldmFudCBmbGFncy4gYE1FTUNHYCBpcyBpbmRpcmVjdGx5IHJlbGF0ZWQsIGdpdmVuIHpzd2FwJiMzOTtzIHVzZSBvZiBtZW1jZyBsaXN0X2xydSwgYWx0aG91Z2ggbGlzdF9scnUgaXRzZWxmIGRvZXNuJiMzOTt0IHJlcXVpcmUgTUVNQ0cuCgpOZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCBieSB0aGUgcGF0Y2guIEkmIzM5O3ZlIGZvY3VzZWQgb24gYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGNoYW5nZWQuIFRoZW4gSSB6ZXJvZWQgaW4gb24gYHNocmlua19tZW1jZ19jYmAsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSByZXR1cm4gdmFsdWUgb2YgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgYW5kIGJyYW5jaGVzIGJhc2VkIG9uIHRoZSByZXR1cm5lZCBlcnJvciBjb2RlLCBlc3BlY2lhbGx5IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIGAtRUVYSVNUYCBhbmQgb3RoZXIgZXJyb3IgY29kZXMsIGFuZCB0aGUgYHpzd2FwX3Nocmlua2VyX3NjYW5gIGZ1bmN0aW9uIHdoaWNoIGNhbGxzIGBzaHJpbmtfbWVtY2dfY2JgLiBBbmQgb2YgY291cnNlLCBgc2hyaW5rX21lbWNnYCBpdHNlbGYsIGFzIGl0IGNhbGxzIGBsaXN0X2xydV93YWxrX29uZWAgd2l0aCBgc2hyaW5rX21lbWNnX2NiYC4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3BlY2lmaWMgdG8genN3YXAsIHNvIHRoZSBtb2RpZmljYXRpb24gaXMgbm90IHViaXF1aXRvdXMuIFRoZXkgYWxsIHJlbGF0ZSB0byB6c3dhcCB3cml0ZWJhY2sgYW5kIHNocmlua2luZyB3aGVuIHN3YXBwaW5nLgoKU28sIGZvciBgc2V0LXJlc3VsdHNgLCBJIGNhbiBjb25maWRlbnRseSBpbmNsdWRlOgoKKiAgICoqYEVuYWJsZUNvbmZpZ3NgOioqIGBbJiMzNDtTV0FQJiMzNDssICYjMzQ7WlNXQVAmIzM0OywgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDssICYjMzQ7WlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTiYjMzQ7XWAKKiAgICoqYEZvY3VzU3ltYm9sc2A6KiogYFsmIzM0O3pzd2FwX3dyaXRlYmFja19lbnRyeSYjMzQ7LCAmIzM0O3Nocmlua19tZW1jZ19jYiYjMzQ7LCAmIzM0O3pzd2FwX3Nocmlua2VyX3NjYW4mIzM0OywgJiMzNDtzaHJpbmtfbWVtY2cmIzM0O11gCiogICAqKmBSZWFzb25pbmdgOioqIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgYHpzd2FwX3dyaXRlYmFja19lbnRyeSgpYCB3aGVuIHN3YXAgZGV2aWNlIHJldHJpZXZhbCBmYWlscy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGlzIGNvZGUgZnJvbSBgLUVFWElTVGAgdG8gYC1FTk9FTlRgLiBJbiBgc2hyaW5rX21lbWNnX2NiKClgLCBgLUVFWElTVGAgY2F1c2VkIHRoZSBzaHJpbmtlciB0byBzdG9wLCBpbnRlcnByZXRpbmcgdGhpcyBhcyBmaW5kaW5nIGEgc3dhcHBlZCBwYWdlLiBOb3cgdGhlIGNoYW5nZWQgZXJyb3IgY29kZSB3aWxsIGxlYWQgdG8gdGhlIHNocmlua2luZyBjb250aW51ZS4gVGhpcyBkaXJlY3RseSBhbHRlcnMgdGhlIGNvbnRyb2wgZmxvdyBhbmQgdGVybWluYXRpb24gYmVoYXZpb3Igb2YgenN3YXAgc2hyaW5rZXIgaXRlcmF0aW9ucyBkdXJpbmcgd3JpdGViYWNrLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIHdhcnJhbnRzIGZ1enppbmcuCiogICAqKmBXb3J0aEZ1enppbmdgOioqIGB0cnVlYAoKSSYjMzk7bSBzYXRpc2ZpZWQgd2l0aCB0aGlzIGFuYWx5c2lzLCB3aGljaCBwcm92aWRlcyBhIGNvbmNpc2UgeWV0IHRob3JvdWdoIGp1c3RpZmljYXRpb24gZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQX0RFRkFVTFRfT04mIzM0OywKICAgICYjMzQ7WlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19lbnRyeSYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbWVtY2dfY2ImIzM0OywKICAgICYjMzQ7enN3YXBfc2hyaW5rZXJfc2NhbiYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbWVtY2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgaW4gbW0venN3YXAuYyB0byByZXR1cm4gLUVOT0VOVCBpbnN0ZWFkIG9mIC1FRVhJU1Qgd2hlbiBnZXRfc3dhcF9kZXZpY2UoKSBmYWlscy4gSW4gc2hyaW5rX21lbWNnX2NiKCksIC1FRVhJU1QgaXMgc3BlY2lmaWNhbGx5IGNoZWNrZWQgdG8gZGV0ZWN0IHBhZ2VzIGFscmVhZHkgY2FjaGVkIGluIHN3YXAgY2FjaGUsIHdoaWNoIHRyaWdnZXJzIExSVV9TVE9QIHRvIHRlcm1pbmF0ZSBzaHJpbmtpbmcuIENoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgYWx0ZXJzIHRoZSBzaHJpbmtlciYjMzk7cyBlcnJvciBoYW5kbGluZyBhbmQgcmV0cnkgbG9vcCBiZWhhdmlvciB1bmRlciBjb25jdXJyZW50IHN3YXBvZmYvZGV2aWNlIHJlbW92YWwuIEFzIHRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiB6c3dhcCB3cml0ZWJhY2sgYW5kIExSVSByZWNsYW1hdGlvbiwgaXQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OywKICAgICYjMzQ7c2hyaW5rX21lbWNnX2NiJiMzNDssCiAgICAmIzM0O3pzd2FwX3Nocmlua2VyX3NjYW4mIzM0OywKICAgICYjMzQ7c2hyaW5rX21lbWNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHpzd2FwX3dyaXRlYmFja19lbnRyeSgpIGluIG1tL3pzd2FwLmMgdG8gcmV0dXJuIC1FTk9FTlQgaW5zdGVhZCBvZiAtRUVYSVNUIHdoZW4gZ2V0X3N3YXBfZGV2aWNlKCkgZmFpbHMuIEluIHNocmlua19tZW1jZ19jYigpLCAtRUVYSVNUIGlzIHNwZWNpZmljYWxseSBjaGVja2VkIHRvIGRldGVjdCBwYWdlcyBhbHJlYWR5IGNhY2hlZCBpbiBzd2FwIGNhY2hlLCB3aGljaCB0cmlnZ2VycyBMUlVfU1RPUCB0byB0ZXJtaW5hdGUgc2hyaW5raW5nLiBDaGFuZ2luZyB0aGUgcmV0dXJuIHZhbHVlIGFsdGVycyB0aGUgc2hyaW5rZXImIzM5O3MgZXJyb3IgaGFuZGxpbmcgYW5kIHJldHJ5IGxvb3AgYmVoYXZpb3IgdW5kZXIgY29uY3VycmVudCBzd2Fwb2ZmL2RldmljZSByZW1vdmFsLiBBcyB0aGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4genN3YXAgd3JpdGViYWNrIGFuZCBMUlUgcmVjbGFtYXRpb24sIGl0IHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGNoYW5nZXMgdGhlIGVycm9yIHJldHVybiB2YWx1ZSBpbiBgenN3YXBfd3JpdGViYWNrX2VudHJ5KClgIGZyb20gYC1FRVhJU1RgIHRvIGAtRU5PRU5UYCB3aGVuIGBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpYCByZXR1cm5zIE5VTEwuIFRoaXMgcHJldmVudHMgdGhlIHpzd2FwIHNocmlua2VyIChgc2hyaW5rX21lbWNnX2NiYCkgZnJvbSBmYWxzZWx5IGFzc3VtaW5nIHRoZSBwYWdlIGlzIGFscmVhZHkgaW4gdGhlIHN3YXAgY2FjaGUgKHdoaWNoIGNoZWNrcyBmb3IgYHdyaXRlYmFja19yZXN1bHQgPT0gLUVFWElTVGAgdG8gYWJvcnQgc2hyaW5raW5nKS4gVGhlIGNoYW5nZSBpcyBzdHJpY3RseSBhIGxvZ2ljL2Vycm9yIGNvZGUgZml4IGluIHRoZSBzd2FwIHJlY2xhaW0gcGF0aDsgaXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIENvbnNlcXVlbnRseSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZDRiYjcxOWZjYTVmZWM1MmI3NjYzNjg4ZDcwMGQxODg5ODM5ZjE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMDc6MDE6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCAzN2YzNGU0MDZjOGUzLi5iOTk0OGQ0NjU3ZDI2IDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTk5OCw3ICYjNDM7OTk4LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAkvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqLwogCXNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTsKIAlpZiAoIXNpKQotCQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJCXJldHVybiAtRU5PRU5UOwogCiAJbXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKIAlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgTmVlZCBmb3IgYSBLTVNBTiBGdXp6aW5nIFNlc3Npb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgTGludXgga2VybmVsIHBhdGNoIGZvciBgbW0venN3YXAuY2AgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhpcyBpcyBzdGFuZGFyZCBkZXZlbG9wZXIgUUEsIHJpZ2h0PyBKdXN0IGRvaW5nIG15IGR1ZSBkaWxpZ2VuY2UsIGV2YWx1YXRpbmcgdGhlIHBvdGVudGlhbCBmb3Igc2FuaXRpemVyIGFwcGxpY2FiaWxpdHkg4oCTIEtBU0FOIHZlcnN1cyBLTVNBTiwgaW4gdGhpcyBjYXNlLiBObyBtYWxpY2lvdXMgaW50ZW50LCBubyBleHBsb2l0IGdlbmVyYXRpb24sIGp1c3QgdGhlIHVzdWFsIFFBIHByb2Nlc3MuIFNldmVyaXR5LXdpc2UsIEkmIzM5O2Qgc2F5IHRoaXMgaXMgcHJldHR5IGJlbmlnbiwgbm90aGluZyB0byByYWlzZSBhbnkgYWxhcm1zLgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGY6IGl0IHNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLiBUaGUgZGlmZiBzaG93cyBhIHNpbXBsZSByZXBsYWNlbWVudCBvZiBgLUVFWElTVGAgd2l0aCBgLUVOT0VOVGAgd2l0aGluIHRoZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBmdW5jdGlvbi4gTm93LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyByZXR1cm4gdmFsdWUgbWF0dGVycy4gVGhlIGNvbnRleHQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBzd2FwIGNhY2hlIGZvbGlvIGFsbG9jYXRpb24uCgpTbywgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBgbW0venN3YXAuY2AgYXJvdW5kIGxpbmUgOTk4LCBzZWUgd2hlcmUgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgY2FsbGVkLCBhbmQgdGhlbiBmaWd1cmUgb3V0IGhvdyB0aGF0IHJldHVybiB2YWx1ZSBpcyB1c2VkIHVwc3RyZWFtLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGFjdCBvZiB0aGUgcmV0dXJuIHZhbHVlIGNoYW5nZS4gTG9va3MgbGlrZSBpdCYjMzk7cyB0aW1lIHRvIGZpcmUgdXAgYGdyZXBwZXJgIChvciB1c2UgYHJlYWQtZmlsZWApIHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugb24gZXJyb3IgaGFuZGxpbmcgYW5kIGNvbnRyb2wgZmxvdy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIGRlY2lkZSBpZiBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeSBvciBpZiB0aGUgZXhpc3RpbmcgS0FTQU4gY292ZXJhZ2UgaXMgc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHQgKiBUaGlzIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGEgXCYjMzQ7cmVzdW1lZCB3cml0ZWJhY2tcJiMzNDsgb2YgdGhlIGZvbGlvXG4gOTgxOlx0ICogdG8gdGhlIHN3YXAgZGV2aWNlLiAgV2UgYXJlIGJhc2ljYWxseSByZXN1bWluZyB0aGUgc2FtZSBzd2FwXG4gOTgyOlx0ICogd3JpdGViYWNrIHBhdGggdGhhdCB3YXMgaW50ZXJjZXB0ZWQgd2l0aCB0aGUgenN3YXBfc3RvcmUoKVxuIDk4MzpcdCAqIGluIHRoZSBmaXJzdCBwbGFjZS4gIEFmdGVyIHRoZSBmb2xpbyBoYXMgYmVlbiBkZWNvbXByZXNzZWQgaW50b1xuIDk4NDpcdCAqIHRoZSBzd2FwIGNhY2hlLCB0aGUgY29tcHJlc3NlZCB2ZXJzaW9uIHN0b3JlZCBieSB6c3dhcCBjYW4gYmVcbiA5ODU6XHQgKiBmcmVlZC5cbiA5ODY6XHQgKi9cbiA5ODc6XHRzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIDk4ODpcdFx0XHRcdFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxuIDk4OTpcdHtcbiA5OTA6XHRcdHN0cnVjdCB4YXJyYXkgKnRyZWU7XG4gOTkxOlx0XHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwZW50cnkpO1xuIDk5MjpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiA5OTM6XHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XG4gOTk0Olx0XHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XG4gOTk1Olx0XHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XG4gOTk2Olx0XHRpbnQgcmV0ID0gMDtcbiA5OTc6XHRcbiA5OTg6XHRcdC8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovXG4gOTk5Olx0XHRzaSA9IGdldF9zd2FwX2RldmljZShzd3BlbnRyeSk7XG4xMDAwOlx0XHRpZiAoIXNpKVxuMTAwMTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbjEwMDI6XHRcbjEwMDM6XHRcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4xMDA0Olx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbjEwMDU6XHRcdFx0XHRcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcbjEwMDY6XHRcdHB1dF9zd2FwX2RldmljZShzaSk7XG4xMDA3Olx0XG4xMDA4Olx0XHQvKlxuMTAwOTpcdFx0ICogU3dhcCBjYWNoZSBhbGxvY2F0aW9uIG1pZ2h0IGZhaWwgZHVlIHRvIE9PTSwgb3IgdGhlIGVudHJ5XG4xMDEwOlx0XHQgKiBtYXkgYWxyZWFkeSBiZSBjYWNoZWQgZHVlIHRvIGNvbmN1cnJlbnQgc3dhcGluIG9yIGhhdmUgYmVlblxuMTAxMTpcdFx0ICogZnJlZWQuIElmIGFscmVhZHkgY2FjaGVkLCBhIGNvbmN1cnJlbnQgc3dhcGluIG1hZGUgdGhlIGZvbGlvXG4xMDEyOlx0XHQgKiBob3QsIHNvIHNraXAgaXQuIEZvciB0aGUgdW5saWtlbHkgY29uY3VycmVudCBzaHJpbmtlciBjYXNlLFxuMTAxMzpcdFx0ICogaXQgd2lsbCBiZSB1bmxpbmtlZCBhbmQgZnJlZWQgd2hlbiBpbnZhbGlkYXRlZCBhbnl3YXkuXG4xMDE0Olx0XHQgKi9cbjEwMTU6XHRcdGlmIChJU19FUlIoZm9saW8pKVxuMTAxNjpcdFx0XHRyZXR1cm4gUFRSX0VSUihmb2xpbyk7XG4xMDE3Olx0XG4xMDE4Olx0XHQvKlxuMTAxOTpcdFx0ICogZm9saW8gaXMgbG9ja2VkLCBhbmQgdGhlIHN3YXBjYWNoZSBpcyBub3cgc2VjdXJlZCBhZ2FpbnN0XG4xMDIwOlx0XHQgKiBjb25jdXJyZW50IHN3YXBwaW5nIHRvIGFuZCBmcm9tIHRoZSBzbG90LCBhbmQgY29uY3VycmVudFxuMTAyMTpcdFx0ICogc3dhcG9mZiBzbyB3ZSBjYW4gc2FmZWx5IGRlcmVmZXJlbmNlIHRoZSB6c3dhcCB0cmVlIGhlcmUuXG4xMDIyOlx0XHQgKiBWZXJpZnkgdGhhdCB0aGUgc3dhcCBlbnRyeSBoYXNuJiMzOTt0IGJlZW4gaW52YWxpZGF0ZWQgYW5kIHJlY3ljbGVkXG4xMDIzOlx0XHQgKiBiZWhpbmQgb3VyIGJhY2tzLCB0byBhdm9pZCBvdmVyd3JpdGluZyBhIG5ldyBzd2FwIGZvbGlvIHdpdGhcbjEwMjQ6XHRcdCAqIG9sZCBjb21wcmVzc2VkIGRhdGEuIE9ubHkgd2hlbiB0aGlzIGlzIHN1Y2Nlc3NmdWwgY2FuIHRoZSBlbnRyeVxuMTAyNTpcdFx0ICogYmUgZGVyZWZlcmVuY2VkLlxuMTAyNjpcdFx0ICovXG4xMDI3Olx0XHR0cmVlID0gc3dhcF96c3dhcF90cmVlKHN3cGVudHJ5KTtcbjEwMjg6XHRcdGlmIChlbnRyeSAhPSB4YV9sb2FkKHRyZWUsIG9mZnNldCkpIHtcbjEwMjk6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjEwMzA6XHRcdFx0Z290byBvdXQ7XG4xMDMxOlx0XHR9XG4xMDMyOlx0XG4xMDMzOlx0XHRpZiAoIXpzd2FwX2RlY29tcHJlc3MoZW50cnksIGZvbGlvKSkge1xuMTAzNDpcdFx0XHRyZXQgPSAtRUlPO1xuMTAzNTpcdFx0XHRnb3RvIG91dDtcbjEwMzY6XHRcdH1cbjEwMzc6XHRcbjEwMzg6XHRcdHhhX2VyYXNlKHRyZWUsIG9mZnNldCk7XG4xMDM5Olx0XG4xMDQwOlx0XHRjb3VudF92bV9ldmVudChaU1dQV0IpO1xuMTA0MTpcdFx0aWYgKGVudHJ5LVx1MDAzZW9iamNnKVxuMTA0MjpcdFx0XHRjb3VudF9vYmpjZ19ldmVudHMoZW50cnktXHUwMDNlb2JqY2csIFpTV1BXQiwgMSk7XG4xMDQzOlx0XG4xMDQ0Olx0XHR6c3dhcF9lbnRyeV9mcmVlKGVudHJ5KTtcbjEwNDU6XHRcbjEwNDY6XHRcdC8qIGZvbGlvIGlzIHVwIHRvIGRhdGUgKi9cbjEwNDc6XHRcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuMTA0ODpcdFxuMTA0OTpcdFx0LyogbW92ZSBpdCB0byB0aGUgdGFpbCBvZiB0aGUgaW5hY3RpdmUgbGlzdCBhZnRlciBlbmRfd3JpdGViYWNrICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NzUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgQ2FsbCBTaXRlcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIFRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgYSBxdWljayBjb2RlIHNlYXJjaC4gTGV0JiMzOTtzIGZpcmUgdXAgYSBncmVwIGNvbW1hbmQgYW5kIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nIGludm9rZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIHBpY3R1cmUgb2YgdGhlIHJlbGV2YW50IGFyZWFzLCBhbGxvd2luZyBtZSB0byBxdWlja2x5IG5hcnJvdyBkb3duIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IG9wZXJhdGVzLCBob3BlZnVsbHkgaGVscGluZyBtZSBmaWd1cmUgb3V0IHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfd3JpdGViYWNrX2VudHJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9OTI0PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTk4Ni0gKi9cbm1tL3pzd2FwLmM6OTg3OnN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG5tbS96c3dhcC5jLTk4OC1cdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbi0tXG5tbS96c3dhcC5jPTEwOTA9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbi0tXG5tbS96c3dhcC5jLTExMTMtXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXG5tbS96c3dhcC5jOjExMTQ6XHQgKiAgICB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSB0byBwaW4gdGhlIHN3YXAgZW50cnkgYW5kXG5tbS96c3dhcC5jLTExMTUtXHQgKiAgICB0aGVuIHZhbGlkYXRlIHRoZSB6c3dhcCBlbnRyeSBhZ2FpbnN0IHRoYXQgc3dhcCBlbnRyeSYjMzk7c1xuLS1cbm1tL3pzd2FwLmMtMTE0OC1cbm1tL3pzd2FwLmM6MTE0OTpcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcbm1tL3pzd2FwLmMtMTE1MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhvc2UgbGluZXMgb2YgYG1tL3pzd2FwLmNgOgoKKipEaXZpbmcgaW50byB0aGUgWnN3YXAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIGxpbmVzIDExNDAtMTIwMCBvZiBgbW0venN3YXAuY2AuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3Qgd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIGtleSBwaWVjZSBvZiB0aGUgenN3YXAgcHJvY2VzcyBsb2dpYywgbWF5YmUgcmVsYXRlZCB0byBwYWdlIGluc2VydGlvbiwgZXZpY3Rpb24sIG9yIHBlcmhhcHMgc29tZSBzb3J0IG9mIG1ldGFkYXRhIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgZ2l2ZW4gdGhhdCB3ZSBhcmUgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBJIHdpbGwgdHJ5IHRvIGlkZW50aWZ5IGlmIHRoZSBjb2RlIGlzIGZvY3VzZWQgb24gZGF0YSBzdHJ1Y3R1cmVzLCBsb2NraW5nLCBvciB0aGUgaW50ZXJmYWNlIHdpdGggdGhlIGFjdHVhbCBjb21wcmVzc2lvbiBhbmQgc3dhcCBsYXllcnMuIEkgaGF2ZSBhIGh1bmNoIGl0IHdpbGwgcmVsYXRlIHRvIGhvdyB3ZSBkZWNpZGUgKndoZXJlKiB0byBzdG9yZSBhIGNvbXByZXNzZWQgcGFnZSB0aGF0JiMzOTtzIGRlc3RpbmVkIGZvciBzd2FwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVjaXNpb24tbWFraW5nIHByb2Nlc3MgaGVyZS4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhbiBhbGdvcml0aG0gb3IgYSBzZXQgb2YgaGV1cmlzdGljcyBpbiBwbGFjZSB0byBvcHRpbWl6ZSBzd2FwIHNwYWNlIHV0aWxpemF0aW9uLiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHNvbWUga2luZCBvZiBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIGJsb2NrLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIHpzd2FwIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgcG90ZW50aWFsIGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaXNzdWVzIHdpdGggdGhlIHVuZGVybHlpbmcgc3dhcCBkZXZpY2UuIEkgYWxzbyBwbGFuIHRvIG5vdGUgdGhlIGV4YWN0IHVzZSBvZiBhbnkga2V5IGRhdGEgc3RydWN0dXJlcywgbGlrZSBgenN3YXBfZW50cnlgLCBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQgdG8gdHJhY2sgYW5kIG1hbmFnZSB0aGUgY29tcHJlc3NlZCBwYWdlcy4gV2l0aCBhIGRlZXAgYnJlYXRoIGFuZCBhIGNsb3NlIGxvb2ssIEkgc2hvdWxkIGdldCBhIGZpcm0gZ3Jhc3Agb2YgdGhlIGNvcmUgZnVuY3Rpb24gb2YgdGhpcyBwb3J0aW9uIG9mIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE0MDpcdFx0ICovXG4xMTQxOlx0XHRzd3BlbnRyeSA9IGVudHJ5LVx1MDAzZXN3cGVudHJ5O1xuMTE0MjpcdFxuMTE0MzpcdFx0LypcbjExNDQ6XHRcdCAqIEl0JiMzOTtzIHNhZmUgdG8gZHJvcCB0aGUgbG9jayBoZXJlIGJlY2F1c2Ugd2UgcmV0dXJuIGVpdGhlclxuMTE0NTpcdFx0ICogTFJVX1JFTU9WRURfUkVUUlksIExSVV9SRVRSWSBvciBMUlVfU1RPUC5cbjExNDY6XHRcdCAqL1xuMTE0NzpcdFx0c3Bpbl91bmxvY2soXHUwMDI2bC1cdTAwM2Vsb2NrKTtcbjExNDg6XHRcbjExNDk6XHRcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcbjExNTA6XHRcbjExNTE6XHRcdGlmICh3cml0ZWJhY2tfcmVzdWx0KSB7XG4xMTUyOlx0XHRcdHpzd2FwX3JlamVjdF9yZWNsYWltX2ZhaWwmIzQzOyYjNDM7O1xuMTE1MzpcdFx0XHRyZXQgPSBMUlVfUkVUUlk7XG4xMTU0Olx0XG4xMTU1Olx0XHRcdC8qXG4xMTU2Olx0XHRcdCAqIEVuY291bnRlcmluZyBhIHBhZ2UgYWxyZWFkeSBpbiBzd2FwIGNhY2hlIGlzIGEgc2lnbiB0aGF0IHdlIGFyZSBzaHJpbmtpbmdcbjExNTc6XHRcdFx0ICogaW50byB0aGUgd2FybWVyIHJlZ2lvbi4gV2Ugc2hvdWxkIHRlcm1pbmF0ZSBzaHJpbmtpbmcgKGlmIHdlJiMzOTtyZSBpbiB0aGUgZHluYW1pY1xuMTE1ODpcdFx0XHQgKiBzaHJpbmtlciBjb250ZXh0KS5cbjExNTk6XHRcdFx0ICovXG4xMTYwOlx0XHRcdGlmICh3cml0ZWJhY2tfcmVzdWx0ID09IC1FRVhJU1QgXHUwMDI2XHUwMDI2IGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKSB7XG4xMTYxOlx0XHRcdFx0cmV0ID0gTFJVX1NUT1A7XG4xMTYyOlx0XHRcdFx0KmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gdHJ1ZTtcbjExNjM6XHRcdFx0fVxuMTE2NDpcdFx0fSBlbHNlIHtcbjExNjU6XHRcdFx0enN3YXBfd3JpdHRlbl9iYWNrX3BhZ2VzJiM0MzsmIzQzOztcbjExNjY6XHRcdH1cbjExNjc6XHRcbjExNjg6XHRcdHJldHVybiByZXQ7XG4xMTY5Olx0fVxuMTE3MDpcdFxuMTE3MTpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbjExNzI6XHRcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcbjExNzM6XHR7XG4xMTc0Olx0XHR1bnNpZ25lZCBsb25nIHNocmlua19yZXQ7XG4xMTc1Olx0XHRib29sIGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gZmFsc2U7XG4xMTc2Olx0XG4xMTc3Olx0XHRpZiAoIXpzd2FwX3Nocmlua2VyX2VuYWJsZWQgfHxcbjExNzg6XHRcdFx0XHQhbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzYy1cdTAwM2VtZW1jZykpIHtcbjExNzk6XHRcdFx0c2MtXHUwMDNlbnJfc2Nhbm5lZCA9IDA7XG4xMTgwOlx0XHRcdHJldHVybiBTSFJJTktfU1RPUDtcbjExODE6XHRcdH1cbjExODI6XHRcbjExODM6XHRcdHNocmlua19yZXQgPSBsaXN0X2xydV9zaHJpbmtfd2FsayhcdTAwMjZ6c3dhcF9saXN0X2xydSwgc2MsIFx1MDAyNnNocmlua19tZW1jZ19jYixcbjExODQ6XHRcdFx0XHUwMDI2ZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpO1xuMTE4NTpcdFxuMTE4NjpcdFx0aWYgKGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKVxuMTE4NzpcdFx0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4xMTg4Olx0XG4xMTg5Olx0XHRyZXR1cm4gc2hyaW5rX3JldCA/IHNocmlua19yZXQgOiBTSFJJTktfU1RPUDtcbjExOTA6XHR9XG4xMTkxOlx0XG4xMTkyOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbjExOTM6XHRcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcbjExOTQ6XHR7XG4xMTk1Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBzYy1cdTAwM2VtZW1jZztcbjExOTY6XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBOT0RFX0RBVEEoc2MtXHUwMDNlbmlkKSk7XG4xMTk3Olx0XHRhdG9taWNfbG9uZ190ICpucl9kaXNrX3N3YXBpbnMgPVxuMTE5ODpcdFx0XHRcdTAwMjZscnV2ZWMtXHUwMDNlenN3YXBfbHJ1dmVjX3N0YXRlLm5yX2Rpc2tfc3dhcGlucztcbjExOTk6XHRcdHVuc2lnbmVkIGxvbmcgbnJfYmFja2luZywgbnJfc3RvcmVkLCBucl9mcmVlYWJsZSwgbnJfZGlza19zd2FwaW5zX2N1cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY1NwoJCQkJCQkJb3V0cHV0OiAxNzAKCQkJCQkJCXRob3VnaHRzOiA4OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgWnN3YXAgU2hyaW5rZXIgQnVnIGFuZCBNaXRpZ2F0aW9uKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGRlYWw6IEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHpzd2FwIGNvZGUsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBlcnJvcnMgZHVyaW5nIHdyaXRlYmFjay4gSXQgc2VlbXMgdGhlcmUgd2FzIGEgZmxhdyBpbiB0aGUgZXJyb3IgcmVwb3J0aW5nIGZyb20gYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIFByZXZpb3VzbHksIGlmIGBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpYCByZXR1cm5lZCBOVUxMLCBpbmRpY2F0aW5nIGEgc3dhcCBkZXZpY2UgaXNzdWUgKG9yIGFuIGludmFsaWQgYHN3cGVudHJ5YCksIHRoZSBmdW5jdGlvbiB3b3VsZCByZXR1cm4gYC1FRVhJU1RgLiBUaGUgcHJvYmxlbT8gYC1FRVhJU1RgIHdhcyBtaXNpbnRlcnByZXRlZCBieSB0aGUgY2FsbGluZyBmdW5jdGlvbiwgYHNocmlua19tZW1jZ19jYmAsIGFzIG1lYW5pbmcgdGhlIHBhZ2Ugd2FzICphbHJlYWR5KiBpbiB0aGUgc3dhcCBjYWNoZS4gVGhpcyBsZWQgdG8gcHJlbWF0dXJlIHRlcm1pbmF0aW9uIG9mIHRoZSBzaHJpbmtpbmcgcHJvY2Vzcywgd2hpY2ggaXMgY2xlYXJseSBpbmNvcnJlY3QgYmVoYXZpb3IuIFRoZSByZXR1cm4gY29kZSBzaG91bGQgaW5kaWNhdGUgdGhhdCB3ZSAqY291bGRuJiMzOTt0KiB3cml0ZSBpdCBiYWNrLCBub3QgdGhhdCBpdCBhbHJlYWR5IGV4aXN0ZWQuIFNvLCB0aGUgcGF0Y2ggY29ycmVjdGx5IGNoYW5nZXMgdGhlIHJldHVybiBjb2RlIHRvIGAtRU5PRU5UYCwgd2hpY2ggaXMgZmFyIG1vcmUgYXBwcm9wcmlhdGUgaW4gdGhpcyBzY2VuYXJpby4KCk15IHByaW1hcnkgY29uY2VybiBub3cgaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCYjMzk7cyBicmVhayBpdCBkb3duOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vcGUuIE5vIGRhdGEgaXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgYmUgdW5pbml0aWFsaXplZC4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogSSBkb3VibGUtY2hlY2tlZCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMsIGBzaHJpbmtfbWVtY2dfY2JgIGFuZCBgenN3YXBfc2hyaW5rZXJfc2NhbmAuIEluIGB6c3dhcF9zaHJpbmtlcl9zY2FuYCB0aGUgYGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlYCB2YXJpYWJsZSwgd2hpY2ggaXMgY3J1Y2lhbCBoZXJlLCBpcyBpbml0aWFsaXplZCB0byBgZmFsc2VgIChwaGV3ISkuCjMuICAqKk5ldyBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBpbml0aWFsaXphdGlvbnM/KiogTm8gYWRkaXRpb25zIG9yIG1vZGlmaWNhdGlvbnMuCjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm9wZS4gTm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzLgoKRXNzZW50aWFsbHksIGFsbCB0aGlzIHBhdGNoIGRvZXMgaXMgbW9kaWZ5IGFuIGVycm9yIGNvZGUgYmVpbmcgcmV0dXJuZWQgZnJvbSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gSXQgZG9lc24mIzM5O3QgbW9kaWZ5IGFueSBkYXRhIGJ1ZmZlcnMsIHN0YWNrIHZhcmlhYmxlcywgaGVhcCBhbGxvY2F0aW9ucywgdXNlciBjb3B5IG9wZXJhdGlvbnMsIG9yIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBnaXZlbiB0aGUgZ3VpZGVsaW5lcywgSSBkb24mIzM5O3Qgc2VlIGFueSByZWFzb24gdG8gdHJpZ2dlciBhIEtNU0FOIHJ1bi4gS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyBoZXJlLiBJbiBmYWN0LCBpZiBzb21ldGhpbmcgbGlrZSB0aGlzIHdlcmUgY2F1Z2h0IGJ5IEtNU0FOLCB0aGVuIHdlJiMzOTtkIGhhdmUgYSAqc2VyaW91cyogcHJvYmxlbSBpbiB0aGUgY29kZSwgYW5kIGEgcmVkZXNpZ24gd291bGQgYmUgbmVlZGVkLiBUaGlzIGlzIG5vdCB0aGUgY2FzZS4KCioqTmVlZHNLTVNBTj1mYWxzZS4gTGV0JiMzOTtzIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi4qKgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGNoYW5nZXMgdGhlIGVycm9yIHJldHVybiB2YWx1ZSBpbiBgenN3YXBfd3JpdGViYWNrX2VudHJ5KClgIGZyb20gYC1FRVhJU1RgIHRvIGAtRU5PRU5UYCB3aGVuIGBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpYCByZXR1cm5zIE5VTEwuIFRoaXMgcHJldmVudHMgdGhlIHpzd2FwIHNocmlua2VyIChgc2hyaW5rX21lbWNnX2NiYCkgZnJvbSBmYWxzZWx5IGFzc3VtaW5nIHRoZSBwYWdlIGlzIGFscmVhZHkgaW4gdGhlIHN3YXAgY2FjaGUgKHdoaWNoIGNoZWNrcyBmb3IgYHdyaXRlYmFja19yZXN1bHQgPT0gLUVFWElTVGAgdG8gYWJvcnQgc2hyaW5raW5nKS4gVGhlIGNoYW5nZSBpcyBzdHJpY3RseSBhIGxvZ2ljL2Vycm9yIGNvZGUgZml4IGluIHRoZSBzd2FwIHJlY2xhaW0gcGF0aDsgaXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIENvbnNlcXVlbnRseSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGNoYW5nZXMgdGhlIGVycm9yIHJldHVybiB2YWx1ZSBpbiBgenN3YXBfd3JpdGViYWNrX2VudHJ5KClgIGZyb20gYC1FRVhJU1RgIHRvIGAtRU5PRU5UYCB3aGVuIGBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpYCByZXR1cm5zIE5VTEwuIFRoaXMgcHJldmVudHMgdGhlIHpzd2FwIHNocmlua2VyIChgc2hyaW5rX21lbWNnX2NiYCkgZnJvbSBmYWxzZWx5IGFzc3VtaW5nIHRoZSBwYWdlIGlzIGFscmVhZHkgaW4gdGhlIHN3YXAgY2FjaGUgKHdoaWNoIGNoZWNrcyBmb3IgYHdyaXRlYmFja19yZXN1bHQgPT0gLUVFWElTVGAgdG8gYWJvcnQgc2hyaW5raW5nKS4gVGhlIGNoYW5nZSBpcyBzdHJpY3RseSBhIGxvZ2ljL2Vycm9yIGNvZGUgZml4IGluIHRoZSBzd2FwIHJlY2xhaW0gcGF0aDsgaXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIENvbnNlcXVlbnRseSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAxOjU1LjAzMTYzMjU4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQxNzU4MjM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3dyaXRlYmFja19lbnRyeVwiLFxuICAgIFwic2hyaW5rX21lbWNnX2NiXCIsXG4gICAgXCJ6c3dhcF9zaHJpbmtlcl9zY2FuXCIsXG4gICAgXCJzaHJpbmtfbWVtY2dcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGluIGB6c3dhcF93cml0ZWJhY2tfZW50cnkoKWAgZnJvbSBgLUVFWElTVGAgdG8gYC1FTk9FTlRgIHdoZW4gYGdldF9zd2FwX2RldmljZShzd3BlbnRyeSlgIHJldHVybnMgTlVMTC4gVGhpcyBwcmV2ZW50cyB0aGUgenN3YXAgc2hyaW5rZXIgKGBzaHJpbmtfbWVtY2dfY2JgKSBmcm9tIGZhbHNlbHkgYXNzdW1pbmcgdGhlIHBhZ2UgaXMgYWxyZWFkeSBpbiB0aGUgc3dhcCBjYWNoZSAod2hpY2ggY2hlY2tzIGZvciBgd3JpdGViYWNrX3Jlc3VsdCA9PSAtRUVYSVNUYCB0byBhYm9ydCBzaHJpbmtpbmcpLiBUaGUgY2hhbmdlIGlzIHN0cmljdGx5IGEgbG9naWMvZXJyb3IgY29kZSBmaXggaW4gdGhlIHN3YXAgcmVjbGFpbSBwYXRoOyBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlcnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQ29uc2VxdWVudGx5LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSBpbiBtbS96c3dhcC5jIHRvIHJldHVybiAtRU5PRU5UIGluc3RlYWQgb2YgLUVFWElTVCB3aGVuIGdldF9zd2FwX2RldmljZSgpIGZhaWxzLiBJbiBzaHJpbmtfbWVtY2dfY2IoKSwgLUVFWElTVCBpcyBzcGVjaWZpY2FsbHkgY2hlY2tlZCB0byBkZXRlY3QgcGFnZXMgYWxyZWFkeSBjYWNoZWQgaW4gc3dhcCBjYWNoZSwgd2hpY2ggdHJpZ2dlcnMgTFJVX1NUT1AgdG8gdGVybWluYXRlIHNocmlua2luZy4gQ2hhbmdpbmcgdGhlIHJldHVybiB2YWx1ZSBhbHRlcnMgdGhlIHNocmlua2VyJ3MgZXJyb3IgaGFuZGxpbmcgYW5kIHJldHJ5IGxvb3AgYmVoYXZpb3IgdW5kZXIgY29uY3VycmVudCBzd2Fwb2ZmL2RldmljZSByZW1vdmFsLiBBcyB0aGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4genN3YXAgd3JpdGViYWNrIGFuZCBMUlUgcmVjbGFtYXRpb24sIGl0IHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAxOjU1LjAzMTYzNzEzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MTE4MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWQ0YmI3MTlmY2E1ZmVjNTJiNzY2MzY4OGQ3MDBkMTg4OTgzOWYxNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCAxMyAwNzowMTo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xcbmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLmI5OTQ4ZDQ2NTdkMjYgMTAwNjQ0XFxuLS0tIGEvbW0venN3YXAuY1xcbisrKyBiL21tL3pzd2FwLmNcXG5AQCAtOTk4LDcgKzk5OCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuIFxcdC8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovXFxuIFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcXG4gXFx0aWYgKCFzaSlcXG4tXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4gXFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG4gXFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAxOjU1LjUwNjMzMTUyOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODg3MDU1MzEwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIixcbiAgICBcIlpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIixcbiAgICBcInNocmlua19tZW1jZ19jYlwiLFxuICAgIFwienN3YXBfc2hyaW5rZXJfc2NhblwiLFxuICAgIFwic2hyaW5rX21lbWNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgaW4gbW0venN3YXAuYyB0byByZXR1cm4gLUVOT0VOVCBpbnN0ZWFkIG9mIC1FRVhJU1Qgd2hlbiBnZXRfc3dhcF9kZXZpY2UoKSBmYWlscy4gSW4gc2hyaW5rX21lbWNnX2NiKCksIC1FRVhJU1QgaXMgc3BlY2lmaWNhbGx5IGNoZWNrZWQgdG8gZGV0ZWN0IHBhZ2VzIGFscmVhZHkgY2FjaGVkIGluIHN3YXAgY2FjaGUsIHdoaWNoIHRyaWdnZXJzIExSVV9TVE9QIHRvIHRlcm1pbmF0ZSBzaHJpbmtpbmcuIENoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgYWx0ZXJzIHRoZSBzaHJpbmtlcidzIGVycm9yIGhhbmRsaW5nIGFuZCByZXRyeSBsb29wIGJlaGF2aW9yIHVuZGVyIGNvbmN1cnJlbnQgc3dhcG9mZi9kZXZpY2UgcmVtb3ZhbC4gQXMgdGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIHpzd2FwIHdyaXRlYmFjayBhbmQgTFJVIHJlY2xhbWF0aW9uLCBpdCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFkNGJiNzE5ZmNhNWZlYzUyYjc2NjM2ODhkNzAwZDE4ODk4MzlmMTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAwNzowMTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCAzN2YzNGU0MDZjOGUzLi5iOTk0OGQ0NjU3ZDI2IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTk5OCw3ICs5OTgsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcbiBcdGlmICghc2kpXG4tXHRcdHJldHVybiAtRUVYSVNUO1xuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4gXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAxOjU1LjUwNjMzMzA4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExOTI2MzAzMDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgWnN3YXAgQ29tbWl0KipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gYW5hbHl6ZSBhIHNwZWNpZmljIGdpdCBjb21taXQgaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IGEgY2hhbmdlIGluIGBtbS96c3dhcC5jYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSB0cmlhZ2UgdGFzayByZWxhdGVkIHRvIGZ1enppbmcsIHByb2JhYmx5IGZvciBzeXprYWxsZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY2hhbmdlIGlzIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIHNwZWNpZmljIGZ1enppbmcgYXR0ZW50aW9uLCBhbmQgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHJlbGV2YW50IGNvZGUgYXJlYXMsIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzLCBhbmQgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgYSBkZWZlbnNpdmUvUUEgdHlwZSBvZiBhbmFseXNpcyDigJMgYmVuaWduLCBubyBpbW1lZGlhdGUgc2VjdXJpdHkgdGhyZWF0LiBHb29kLCBzYWZlIHRvIGRpdmUgaW4uXG5cbk15IHByb2Nlc3Mgc3RhcnRzIHdpdGggdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlIGl0c2VsZi4gSSdsbCBuZWVkIHRvIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0IG9mIHRoZSBlbnRpcmUgZmlsZSwgb3IgYGdyZXBwZXJgIHRvIGxvb2sgYXQgdGhlIGNvZGUgbW9yZSBzZWxlY3RpdmVseSwgYW5kIGlkZW50aWZ5IHN1cnJvdW5kaW5nIGNvZGUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdW5kZXJzdGFuZGluZyB0aGUgcmVhc29uIGZvciB0aGlzIGNvbW1pdC4gSSdsbCBwYXkgYXR0ZW50aW9uIHRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS96c3dhcC5jYCwgbG9va2luZyBmb3IgaW1wbGljYXRpb25zIG9mIHRoaXMgbW9kaWZpY2F0aW9uLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHRoYXQgY291bGQgbGVhZCB0byBuZXcgb3IgY2hhbmdlZCBiZWhhdmlvdXIuIEZyb20gd2hhdCBJIHNlZSwgaXQgbG9va3MgbGlrZSBhIGNoYW5nZSBmcm9tIGAtRUVYSVNUYCB0byBgLUVOT0VOVGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCBhbmQgd2hhdCB0aGUgb3JpZ2luYWwgYmVoYXZpb3Igd2FzLCBzaW5jZSB0aGUgZnVuY3Rpb24gbmFtZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBzZWVtcyBpbXBvcnRhbnQuXG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlIG9yaWdpbmFsIGNvZGUgZGlkLCB3aGF0IHRoZSBuZXcgY29kZSBkb2VzLCBhbmQgd2h5IHRoZSBkZXZlbG9wZXJzIGRlY2lkZWQgdG8gbWFrZSB0aGlzIHNwZWNpZmljIGNoYW5nZS4gSSdsbCBsZXZlcmFnZSB0b29scyBsaWtlIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgdG8gY2hlY2sgaG93IHRoZSBlcnJvciBjb2RlIGlzIGJlaW5nIGhhbmRsZWQgaW4gb3RoZXIgcGxhY2VzIGluIHRoZSBjb2RlLCBhbmQgaG93IHRoZXNlIGNoYW5nZXMgbWlnaHQgYmUgcmVsZXZhbnQgaW4gZnV6emluZywgYW5kIEkgbWlnaHQgbmVlZCB0byBgc2V0LXJlc3VsdHNgIHRvIHN1bW1hcml6ZSBteSBmaW5kaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjA3LjQzMjYzOTA2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk4NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk4NTpcXHQgKiBmcmVlZC5cXG4gOTg2OlxcdCAqL1xcbiA5ODc6XFx0c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gOTg4OlxcdFxcdFxcdFxcdFxcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcXG4gOTg5OlxcdHtcXG4gOTkwOlxcdFxcdHN0cnVjdCB4YXJyYXkgKnRyZWU7XFxuIDk5MTpcXHRcXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwZW50cnkpO1xcbiA5OTI6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gOTkzOlxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XFxuIDk5NDpcXHRcXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XFxuIDk5NTpcXHRcXHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XFxuIDk5NjpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gOTk3OlxcdFxcbiA5OTg6XFx0XFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cXG4gOTk5OlxcdFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcXG4xMDAwOlxcdFxcdGlmICghc2kpXFxuMTAwMTpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4xMDAyOlxcdFxcbjEwMDM6XFx0XFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG4xMDA0OlxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxcbjEwMDU6XFx0XFx0XFx0XFx0XFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xcbjEwMDY6XFx0XFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcXG4xMDA3OlxcdFxcbjEwMDg6XFx0XFx0LypcXG4xMDA5OlxcdFxcdCAqIFN3YXAgY2FjaGUgYWxsb2NhdGlvbiBtaWdodCBmYWlsIGR1ZSB0byBPT00sIG9yIHRoZSBlbnRyeVxcbjEwMTA6XFx0XFx0ICogbWF5IGFscmVhZHkgYmUgY2FjaGVkIGR1ZSB0byBjb25jdXJyZW50IHN3YXBpbiBvciBoYXZlIGJlZW5cXG4xMDExOlxcdFxcdCAqIGZyZWVkLiBJZiBhbHJlYWR5IGNhY2hlZCwgYSBjb25jdXJyZW50IHN3YXBpbiBtYWRlIHRoZSBmb2xpb1xcbjEwMTI6XFx0XFx0ICogaG90LCBzbyBza2lwIGl0LiBGb3IgdGhlIHVubGlrZWx5IGNvbmN1cnJlbnQgc2hyaW5rZXIgY2FzZSxcXG4xMDEzOlxcdFxcdCAqIGl0IHdpbGwgYmUgdW5saW5rZWQgYW5kIGZyZWVkIHdoZW4gaW52YWxpZGF0ZWQgYW55d2F5LlxcbjEwMTQ6XFx0XFx0ICovXFxuMTAxNTpcXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4xMDE2OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcXG4xMDE3OlxcdFxcbjEwMTg6XFx0XFx0LypcXG4xMDE5OlxcdFxcdCAqIGZvbGlvIGlzIGxvY2tlZCwgYW5kIHRoZSBzd2FwY2FjaGUgaXMgbm93IHNlY3VyZWQgYWdhaW5zdFxcbjEwMjA6XFx0XFx0ICogY29uY3VycmVudCBzd2FwcGluZyB0byBhbmQgZnJvbSB0aGUgc2xvdCwgYW5kIGNvbmN1cnJlbnRcXG4xMDIxOlxcdFxcdCAqIHN3YXBvZmYgc28gd2UgY2FuIHNhZmVseSBkZXJlZmVyZW5jZSB0aGUgenN3YXAgdHJlZSBoZXJlLlxcbjEwMjI6XFx0XFx0ICogVmVyaWZ5IHRoYXQgdGhlIHN3YXAgZW50cnkgaGFzbid0IGJlZW4gaW52YWxpZGF0ZWQgYW5kIHJlY3ljbGVkXFxuMTAyMzpcXHRcXHQgKiBiZWhpbmQgb3VyIGJhY2tzLCB0byBhdm9pZCBvdmVyd3JpdGluZyBhIG5ldyBzd2FwIGZvbGlvIHdpdGhcXG4xMDI0OlxcdFxcdCAqIG9sZCBjb21wcmVzc2VkIGRhdGEuIE9ubHkgd2hlbiB0aGlzIGlzIHN1Y2Nlc3NmdWwgY2FuIHRoZSBlbnRyeVxcbjEwMjU6XFx0XFx0ICogYmUgZGVyZWZlcmVuY2VkLlxcbjEwMjY6XFx0XFx0ICovXFxuMTAyNzpcXHRcXHR0cmVlID0gc3dhcF96c3dhcF90cmVlKHN3cGVudHJ5KTtcXG4xMDI4OlxcdFxcdGlmIChlbnRyeSAhPSB4YV9sb2FkKHRyZWUsIG9mZnNldCkpIHtcXG4xMDI5OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTAzMDpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDMxOlxcdFxcdH1cXG4xMDMyOlxcdFxcbjEwMzM6XFx0XFx0aWYgKCF6c3dhcF9kZWNvbXByZXNzKGVudHJ5LCBmb2xpbykpIHtcXG4xMDM0OlxcdFxcdFxcdHJldCA9IC1FSU87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjA3LjQzMjc0MjM5MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwNjA0NjY2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8genN3YXBfd3JpdGViYWNrX2VudHJ5KipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIE15IG9iamVjdGl2ZSBpcyBjbGVhcjogSSBuZWVkIHRvIHBpbnBvaW50IGV2ZXJ5IGNhbGwgc2l0ZSBhbmQgZGlzc2VjdCBob3cgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIG1hbmFnZWQuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSByZXR1cm4gY29kZSBpcyB1c2VkIGNhbiB0ZWxsIG1lIHRoZSBmYWlsdXJlIG1vZGVzIG9mIHRoZSBmdW5jdGlvbiBhbmQgdGhlIGV4cGVjdGVkIGVycm9yIGhhbmRsaW5nLlxuXG5UaW1lIHRvIGNyYWNrIG9wZW4gYG1tL3pzd2FwLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDEwMzAgdG8gMTEwMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgd2luZG93IHRvIHNwb3QgdGhlIGNhbGxzLiBJJ2xsIG5lZWQgdG8ga2VlcCBhIGtlZW4gZXllIG91dC4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGhpbmdzIHdlIGNhbiBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDI2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMjowOS40OTMyMTEwMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMzUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMzU6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTAzNjpcXHRcXHR9XFxuMTAzNzpcXHRcXG4xMDM4OlxcdFxcdHhhX2VyYXNlKHRyZWUsIG9mZnNldCk7XFxuMTAzOTpcXHRcXG4xMDQwOlxcdFxcdGNvdW50X3ZtX2V2ZW50KFpTV1BXQik7XFxuMTA0MTpcXHRcXHRpZiAoZW50cnktXFx1MDAzZW9iamNnKVxcbjEwNDI6XFx0XFx0XFx0Y291bnRfb2JqY2dfZXZlbnRzKGVudHJ5LVxcdTAwM2VvYmpjZywgWlNXUFdCLCAxKTtcXG4xMDQzOlxcdFxcbjEwNDQ6XFx0XFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XFxuMTA0NTpcXHRcXG4xMDQ2OlxcdFxcdC8qIGZvbGlvIGlzIHVwIHRvIGRhdGUgKi9cXG4xMDQ3OlxcdFxcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xcbjEwNDg6XFx0XFxuMTA0OTpcXHRcXHQvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi9cXG4xMDUwOlxcdFxcdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcXG4xMDUxOlxcdFxcbjEwNTI6XFx0XFx0Lyogc3RhcnQgd3JpdGViYWNrICovXFxuMTA1MzpcXHRcXHRfX3N3YXBfd3JpdGVwYWdlKFxcdTAwMjZjdHgsIGZvbGlvKTtcXG4xMDU0OlxcdFxcdHN3YXBfd3JpdGVfc3VibWl0KFxcdTAwMjZjdHgpO1xcbjEwNTU6XFx0XFxuMTA1NjpcXHRvdXQ6XFxuMTA1NzpcXHRcXHRpZiAocmV0KSB7XFxuMTA1ODpcXHRcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxuMTA1OTpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjEwNjA6XFx0XFx0fVxcbjEwNjE6XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4xMDYyOlxcdFxcdHJldHVybiByZXQ7XFxuMTA2MzpcXHR9XFxuMTA2NDpcXHRcXG4xMDY1OlxcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4xMDY2OlxcdCogc2hyaW5rZXIgZnVuY3Rpb25zXFxuMTA2NzpcXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbjEwNjg6XFx0LypcXG4xMDY5OlxcdCAqIFRoZSBkeW5hbWljIHNocmlua2VyIGlzIG1vZHVsYXRlZCBieSB0aGUgZm9sbG93aW5nIGZhY3RvcnM6XFxuMTA3MDpcXHQgKlxcbjEwNzE6XFx0ICogMS4gRWFjaCB6c3dhcCBlbnRyeSBoYXMgYSByZWZlcmVuY2VkIGJpdCwgd2hpY2ggdGhlIHNocmlua2VyIHVuc2V0cyAoZ2l2aW5nXFxuMTA3MjpcXHQgKiAgICB0aGUgZW50cnkgYSBzZWNvbmQgY2hhbmNlKSBiZWZvcmUgcm90YXRpbmcgaXQgaW4gdGhlIExSVSBsaXN0LiBJZiB0aGVcXG4xMDczOlxcdCAqICAgIGVudHJ5IGlzIGNvbnNpZGVyZWQgYWdhaW4gYnkgdGhlIHNocmlua2VyLCB3aXRoIGl0cyByZWZlcmVuY2VkIGJpdCB1bnNldCxcXG4xMDc0OlxcdCAqICAgIGl0IGlzIHdyaXR0ZW4gYmFjay4gVGhlIHdyaXRlYmFjayByYXRlIGFzIGEgcmVzdWx0IGlzIGR5bmFtaWNhbGx5XFxuMTA3NTpcXHQgKiAgICBhZGp1c3RlZCBieSB0aGUgcG9vbCBhY3Rpdml0aWVzIC0gaWYgdGhlIHBvb2wgaXMgZG9taW5hdGVkIGJ5IG5ldyBlbnRyaWVzXFxuMTA3NjpcXHQgKiAgICAoaS5lIGxvdHMgb2YgcmVjZW50IHpzd2Fwb3V0cyksIHRoZXNlIGVudHJpZXMgd2lsbCBiZSBwcm90ZWN0ZWQgYW5kXFxuMTA3NzpcXHQgKiAgICB0aGUgd3JpdGViYWNrIHJhdGUgd2lsbCBzbG93IGRvd24uIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgcG9vbCBoYXMgYVxcbjEwNzg6XFx0ICogICAgbG90IG9mIHN0YWduYW50IGVudHJpZXMsIHRoZXNlIGVudHJpZXMgd2lsbCBiZSByZWNsYWltZWQgaW1tZWRpYXRlbHksXFxuMTA3OTpcXHQgKiAgICBlZmZlY3RpdmVseSBpbmNyZWFzaW5nIHRoZSB3cml0ZWJhY2sgcmF0ZS5cXG4xMDgwOlxcdCAqXFxuMTA4MTpcXHQgKiAyLiBTd2FwaW5zIGNvdW50ZXI6IElmIHdlIG9ic2VydmUgc3dhcGlucywgaXQgaXMgYSBzaWduIHRoYXQgd2UgYXJlXFxuMTA4MjpcXHQgKiAgICBvdmVyc2hyaW5raW5nIGFuZCBzaG91bGQgc2xvdyBkb3duLiBXZSBtYWludGFpbiBhIHN3YXBpbnMgY291bnRlciwgd2hpY2hcXG4xMDgzOlxcdCAqICAgIGlzIGNvbnN1bWVkIGFuZCBzdWJ0cmFjdCBmcm9tIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgb2JqZWN0cyBvbiB0aGUgTFJVXFxuMTA4NDpcXHQgKiAgICBpbiB6c3dhcF9zaHJpbmtlcl9jb3VudCgpLlxcbjEwODU6XFx0ICpcXG4xMDg2OlxcdCAqIDMuIENvbXByZXNzaW9uIHJhdGlvLiBUaGUgYmV0dGVyIHRoZSB3b3JrbG9hZCBjb21wcmVzc2VzLCB0aGUgbGVzcyBnYWlucyB3ZVxcbjEwODc6XFx0ICogICAgY2FuIGV4cGVjdCBmcm9tIHdyaXRlYmFjay4gV2Ugc2NhbGUgZG93biB0aGUgbnVtYmVyIG9mIG9iamVjdHMgYXZhaWxhYmxlXFxuMTA4ODpcXHQgKiAgICBmb3IgcmVjbGFpbSBieSB0aGlzIHJhdGlvLlxcbjEwODk6XFx0ICovXFxuMTA5MDpcXHRzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxcbjEwOTE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmFyZylcXG4xMDkyOlxcdHtcXG4xMDkzOlxcdFxcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IHpzd2FwX2VudHJ5LCBscnUpO1xcbjEwOTQ6XFx0XFx0Ym9vbCAqZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSAoYm9vbCAqKWFyZztcXG4xMDk1OlxcdFxcdHN3cF9lbnRyeV90IHN3cGVudHJ5O1xcbjEwOTY6XFx0XFx0ZW51bSBscnVfc3RhdHVzIHJldCA9IExSVV9SRU1PVkVEX1JFVFJZO1xcbjEwOTc6XFx0XFx0aW50IHdyaXRlYmFja19yZXN1bHQ7XFxuMTA5ODpcXHRcXG4xMDk5OlxcdFxcdC8qXFxuMTEwMDpcXHRcXHQgKiBTZWNvbmQgY2hhbmNlIGFsZ29yaXRobTogaWYgdGhlIGVudHJ5IGhhcyBpdHMgcmVmZXJlbmNlZCBiaXQgc2V0LCBnaXZlIGl0XFxuMTEwMTpcXHRcXHQgKiBhIHNlY29uZCBjaGFuY2UuIE9ubHkgY2xlYXIgdGhlIHJlZmVyZW5jZWQgYml0IGFuZCByb3RhdGUgaXQgaW4gdGhlXFxuMTEwMjpcXHRcXHQgKiB6c3dhcCdzIExSVSBsaXN0LlxcbjExMDM6XFx0XFx0ICovXFxuMTEwNDpcXHRcXHRpZiAoZW50cnktXFx1MDAzZXJlZmVyZW5jZWQpIHtcXG4xMTA1OlxcdFxcdFxcdGVudHJ5LVxcdTAwM2VyZWZlcmVuY2VkID0gZmFsc2U7XFxuMTEwNjpcXHRcXHRcXHRyZXR1cm4gTFJVX1JPVEFURTtcXG4xMTA3OlxcdFxcdH1cXG4xMTA4OlxcdFxcbjExMDk6XFx0XFx0LypcXG4xMTEwOlxcdFxcdCAqIEFzIHNvb24gYXMgd2UgZHJvcCB0aGUgTFJVIGxvY2ssIHRoZSBlbnRyeSBjYW4gYmUgZnJlZWQgYnlcXG4xMTExOlxcdFxcdCAqIGEgY29uY3VycmVudCBpbnZhbGlkYXRpb24uIFRoaXMgbWVhbnMgdGhlIGZvbGxvd2luZzpcXG4xMTEyOlxcdFxcdCAqXFxuMTExMzpcXHRcXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXFxuMTExNDpcXHRcXHQgKiAgICB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSB0byBwaW4gdGhlIHN3YXAgZW50cnkgYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjA5LjQ5MzM3MDQ5MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2MTk3ODA1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyBgd3JpdGViYWNrX3Jlc3VsdGAgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgc2VjdGlvbiBub3csIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMTE1LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHdyaXRlYmFja19yZXN1bHRgIHZhcmlhYmxlIGlzIGJlaW5nIG1hbmFnZWQgYW5kIHdoYXQgb3BlcmF0aW9ucyBhcmUgYmVpbmcgcGVyZm9ybWVkIG9uIGl0LiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBjZXJ0YWluIHBhdHRlcm5zIGFuZCBwb3RlbnRpYWwgY29tcGxleGl0aWVzIGluIGRhdGEgY29uc2lzdGVuY3kgb3IgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byB0aGlzIHJlc3VsdC4gSSB3YW50IHRvIHNlZSBpZiBhbnkgY29uY3VycmVuY3kgaXNzdWVzIG1pZ2h0IGJlIGludm9sdmVkLCBvciBwZXJoYXBzIGhvdyB0aGUgcmVzdWx0IGludGVyYWN0cyB3aXRoIG90aGVyIGNydWNpYWwgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGZsb3cgb2YgZGF0YSBhbmQgZGV0ZXJtaW5lIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBhc3NpZ25tZW50IGFuZCBvcGVyYXRpb24uIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjExLjExMzE1MzMxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMTU6XFx0XFx0ICogICAgdGhlbiB2YWxpZGF0ZSB0aGUgenN3YXAgZW50cnkgYWdhaW5zdCB0aGF0IHN3YXAgZW50cnknc1xcbjExMTY6XFx0XFx0ICogICAgdHJlZSB1c2luZyBwb2ludGVyIHZhbHVlIGNvbXBhcmlzb24uIE9ubHkgd2hlbiB0aGF0XFxuMTExNzpcXHRcXHQgKiAgICBpcyBzdWNjZXNzZnVsIGNhbiB0aGUgZW50cnkgYmUgZGVyZWZlcmVuY2VkLlxcbjExMTg6XFx0XFx0ICpcXG4xMTE5OlxcdFxcdCAqIDIuIFVzdWFsbHksIG9iamVjdHMgYXJlIHRha2VuIG9mZiB0aGUgTFJVIGZvciByZWNsYWltLiBJblxcbjExMjA6XFx0XFx0ICogICAgdGhpcyBjYXNlIHRoaXMgaXNuJ3QgcG9zc2libGUsIGJlY2F1c2UgaWYgcmVjbGFpbSBmYWlsc1xcbjExMjE6XFx0XFx0ICogICAgZm9yIHdoYXRldmVyIHJlYXNvbiwgd2UgaGF2ZSBubyBtZWFucyBvZiBrbm93aW5nIGlmIHRoZVxcbjExMjI6XFx0XFx0ICogICAgZW50cnkgaXMgYWxpdmUgdG8gcHV0IGl0IGJhY2sgb24gdGhlIExSVS5cXG4xMTIzOlxcdFxcdCAqXFxuMTEyNDpcXHRcXHQgKiAgICBTbyByb3RhdGUgaXQgYmVmb3JlIGRyb3BwaW5nIHRoZSBsb2NrLiBJZiB0aGUgZW50cnkgaXNcXG4xMTI1OlxcdFxcdCAqICAgIHdyaXR0ZW4gYmFjayBvciBpbnZhbGlkYXRlZCwgdGhlIGZyZWUgcGF0aCB3aWxsIHVubGlua1xcbjExMjY6XFx0XFx0ICogICAgaXQuIEZvciBmYWlsdXJlcywgcm90YXRpb24gaXMgdGhlIHJpZ2h0IHRoaW5nIGFzIHdlbGwuXFxuMTEyNzpcXHRcXHQgKlxcbjExMjg6XFx0XFx0ICogICAgVGVtcG9yYXJ5IGZhaWx1cmVzLCB3aGVyZSB0aGUgc2FtZSBlbnRyeSBzaG91bGQgYmUgdHJpZWRcXG4xMTI5OlxcdFxcdCAqICAgIGFnYWluIGltbWVkaWF0ZWx5LCBhbG1vc3QgbmV2ZXIgaGFwcGVuIGZvciB0aGlzIHNocmlua2VyLlxcbjExMzA6XFx0XFx0ICogICAgV2UgZG9uJ3QgZG8gYW55IHRyeWxvY2tpbmc7IC1FTk9NRU0gY29tZXMgY2xvc2VzdCxcXG4xMTMxOlxcdFxcdCAqICAgIGJ1dCB0aGF0J3MgZXh0cmVtZWx5IHJhcmUgYW5kIGRvZXNuJ3QgaGFwcGVuIHNwdXJpb3VzbHlcXG4xMTMyOlxcdFxcdCAqICAgIGVpdGhlci4gRG9uJ3QgYm90aGVyIGRpc3Rpbmd1aXNoaW5nIHRoaXMgY2FzZS5cXG4xMTMzOlxcdFxcdCAqL1xcbjExMzQ6XFx0XFx0bGlzdF9tb3ZlX3RhaWwoaXRlbSwgXFx1MDAyNmwtXFx1MDAzZWxpc3QpO1xcbjExMzU6XFx0XFxuMTEzNjpcXHRcXHQvKlxcbjExMzc6XFx0XFx0ICogT25jZSB0aGUgbHJ1IGxvY2sgaXMgZHJvcHBlZCwgdGhlIGVudHJ5IG1pZ2h0IGdldCBmcmVlZC4gVGhlXFxuMTEzODpcXHRcXHQgKiBzd3BlbnRyeSBpcyBjb3BpZWQgdG8gdGhlIHN0YWNrLCBhbmQgZW50cnkgaXNuJ3QgZGVyZWYnZCBhZ2FpblxcbjExMzk6XFx0XFx0ICogdW50aWwgdGhlIGVudHJ5IGlzIHZlcmlmaWVkIHRvIHN0aWxsIGJlIGFsaXZlIGluIHRoZSB0cmVlLlxcbjExNDA6XFx0XFx0ICovXFxuMTE0MTpcXHRcXHRzd3BlbnRyeSA9IGVudHJ5LVxcdTAwM2Vzd3BlbnRyeTtcXG4xMTQyOlxcdFxcbjExNDM6XFx0XFx0LypcXG4xMTQ0OlxcdFxcdCAqIEl0J3Mgc2FmZSB0byBkcm9wIHRoZSBsb2NrIGhlcmUgYmVjYXVzZSB3ZSByZXR1cm4gZWl0aGVyXFxuMTE0NTpcXHRcXHQgKiBMUlVfUkVNT1ZFRF9SRVRSWSwgTFJVX1JFVFJZIG9yIExSVV9TVE9QLlxcbjExNDY6XFx0XFx0ICovXFxuMTE0NzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bC1cXHUwMDNlbG9jayk7XFxuMTE0ODpcXHRcXG4xMTQ5OlxcdFxcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcXG4xMTUwOlxcdFxcbjExNTE6XFx0XFx0aWYgKHdyaXRlYmFja19yZXN1bHQpIHtcXG4xMTUyOlxcdFxcdFxcdHpzd2FwX3JlamVjdF9yZWNsYWltX2ZhaWwrKztcXG4xMTUzOlxcdFxcdFxcdHJldCA9IExSVV9SRVRSWTtcXG4xMTU0OlxcdFxcbjExNTU6XFx0XFx0XFx0LypcXG4xMTU2OlxcdFxcdFxcdCAqIEVuY291bnRlcmluZyBhIHBhZ2UgYWxyZWFkeSBpbiBzd2FwIGNhY2hlIGlzIGEgc2lnbiB0aGF0IHdlIGFyZSBzaHJpbmtpbmdcXG4xMTU3OlxcdFxcdFxcdCAqIGludG8gdGhlIHdhcm1lciByZWdpb24uIFdlIHNob3VsZCB0ZXJtaW5hdGUgc2hyaW5raW5nIChpZiB3ZSdyZSBpbiB0aGUgZHluYW1pY1xcbjExNTg6XFx0XFx0XFx0ICogc2hyaW5rZXIgY29udGV4dCkuXFxuMTE1OTpcXHRcXHRcXHQgKi9cXG4xMTYwOlxcdFxcdFxcdGlmICh3cml0ZWJhY2tfcmVzdWx0ID09IC1FRVhJU1QgXFx1MDAyNlxcdTAwMjYgZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpIHtcXG4xMTYxOlxcdFxcdFxcdFxcdHJldCA9IExSVV9TVE9QO1xcbjExNjI6XFx0XFx0XFx0XFx0KmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gdHJ1ZTtcXG4xMTYzOlxcdFxcdFxcdH1cXG4xMTY0OlxcdFxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjExLjExMzM4OTA0NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyNTQ4MDkzODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgWnN3YXAgV3JpdGViYWNrIE9wdGltaXphdGlvbioqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSBzZWVpbmcuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIFdlJ3JlIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gYHpzd2FwLmNgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaGFuZGxlcyBlcnJvcnMgd2hlbiB0cnlpbmcgdG8gd3JpdGUgYSBwYWdlIGJhY2sgdG8gc3dhcC4gVGhlIGtleSBpcyBpbiB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIGBnZXRfc3dhcF9kZXZpY2VgLiBQcmV2aW91c2x5LCBhIE5VTEwgcmV0dXJuIGZyb20gYGdldF9zd2FwX2RldmljZShzd3BlbnRyeSlgIC0gaW5kaWNhdGluZyB0aGUgc3dhcCBkZXZpY2UgaXMgZ29uZSBvciB0aGUgZW50cnkgaXMgaW52YWxpZCAtIHJlc3VsdGVkIGluIGAtRUVYSVNUYCBiZWluZyByZXR1cm5lZC5cblxuVGhpcywgaG93ZXZlciwgd2FzIHByb2JsZW1hdGljLiBUaGUgZnVuY3Rpb24gYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgd2FzIGJlaW5nIG1pc2ludGVycHJldGVkIGJ5IGl0cyBjYWxsZXJzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBzaHJpbmtfbWVtY2dfY2JgIGNvbnRleHQuIEEgcmV0dXJuIG9mIGAtRUVYSVNUYCBmcm9tIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIHdhcyBpbmNvcnJlY3RseSB0cmlnZ2VyaW5nIGEgc3BlY2lmaWMgY29kZSBwYXRoIHdpdGhpbiBgc2hyaW5rX21lbWNnX2NiYC4gVGhlIGxvZ2ljIGFzc3VtZWQgdGhhdCBgLUVFWElTVGAgbWVhbnQgdGhlIHBhZ2UgKmFscmVhZHkqIGV4aXN0ZWQgaW4gdGhlIHN3YXAgY2FjaGUsIHdoaWNoIGlzIHdoYXQgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oKWAgcmV0dXJucyB3aGVuIGEgcGFnZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgY2FjaGUuIFRoaXMsIHRoZW4sIGxlZCB0byBwcmVtYXR1cmUgdGVybWluYXRpb24gb2YgdGhlIHJlY2xhaW0gcHJvY2VzcyAocmV0dXJuaW5nIGBMUlVfU1RPUGApLCB3cm9uZ2x5IGFzc3VtaW5nIHRoYXQgd2Ugd2VyZSBzaHJpbmtpbmcgaW50byB0aGUgd2FybWVyIHJlZ2lvbi5cblxuVGhlIGZpeCwgYXMgSSBzZWUgaXQsIGlzIGVsZWdhbnQuICBUaGV5J3ZlIGNoYW5nZWQgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGAtRUVYSVNUYCB0byBgLUVOT0VOVGAuIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiB0d28gc2VwYXJhdGUgZmFpbHVyZSBzY2VuYXJpb3M6ICBhIGdlbnVpbmUgXCJwYWdlIGFscmVhZHkgaW4gc3dhcCBjYWNoZVwiIHNpdHVhdGlvbiAod2hlcmUgYC1FRVhJU1RgIGlzIGNvcnJlY3QpLCBhbmQgdGhlIFwic3dhcCBkZXZpY2UgdW5hdmFpbGFibGUvZW50cnkgaW52YWxpZFwiIGNvbmRpdGlvbiAod2hlcmUgYC1FTk9FTlRgIGlzIHRoZSBtb3JlIGFjY3VyYXRlIGVycm9yIGNvZGUpLiBUaGlzIGRpZmZlcmVudGlhdGlvbiBwcmV2ZW50cyB0aGUgc3B1cmlvdXMgYExSVV9TVE9QYCBzaWduYWwsIGVuc3VyaW5nIHRoZSByZWNsYWltIHByb2Nlc3MgcHJvY2VlZHMgY29ycmVjdGx5IHVubGVzcyBhIGxlZ2l0aW1hdGUgc3dhcCBjYWNoZSBjb25mbGljdCBpcyBlbmNvdW50ZXJlZC5cblxuTm93LCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgdGhpcyBjaGFuZ2UgYWZmZWN0cyBhbnkgb3RoZXIgY2FsbGVycyBvZiBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gSXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk2NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjE1LjM2ODIwMDUyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NDQ4ODI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz05MjQ9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy05ODYtICovXFxubW0venN3YXAuYzo5ODc6c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTk4OC1cXHRcXHRcXHRcXHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jPTEwOTA9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG4tLVxcbm1tL3pzd2FwLmMtMTExMy1cXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXFxubW0venN3YXAuYzoxMTE0OlxcdCAqICAgIHpzd2FwX3dyaXRlYmFja19lbnRyeSgpIHRvIHBpbiB0aGUgc3dhcCBlbnRyeSBhbmRcXG5tbS96c3dhcC5jLTExMTUtXFx0ICogICAgdGhlbiB2YWxpZGF0ZSB0aGUgenN3YXAgZW50cnkgYWdhaW5zdCB0aGF0IHN3YXAgZW50cnknc1xcbi0tXFxubW0venN3YXAuYy0xMTQ4LVxcbm1tL3pzd2FwLmM6MTE0OTpcXHR3cml0ZWJhY2tfcmVzdWx0ID0genN3YXBfd3JpdGViYWNrX2VudHJ5KGVudHJ5LCBzd3BlbnRyeSk7XFxubW0venN3YXAuYy0xMTUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMjoxNi45NTI2OTgxMjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAxMzA5NzM0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IENHIFNocmlua2FnZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG1lbWNnIHNocmlua2luZyBiZWhhdmlvciBhbmQgc3BlY2lmaWNhbGx5IHVuZGVyc3RhbmQgaG93IHRoZSBgc2hyaW5rX21lbWNnX2NiYCBjYWxsYmFjayBpcyBiZWluZyBpbnZva2VkIGFuZCB3aGVyZSB0aGUgenN3YXAgY29tcG9uZW50IGdldHMgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzLiBUaW1lIHRvIHRyYWNlIHRoZSBjYWxscy4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgY29kZSB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgaW50ZXJhY3Rpb25zLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGNhbGxzIHRvIHRoYXQgc3BlY2lmaWMgY2FsbGJhY2sgZnVuY3Rpb24uIFRoZW4gSSdsbCB3b3JrIGZyb20gdGhlcmUgdG8gZmlndXJlIG91dCB0aGUgcGF0aCB0byB6c3dhcCBpbnRlcmFjdGlvbiBpbiBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMyNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjI3LjA4MzY3MzkxOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3ODE3MDA2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfbWVtY2dfY2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4tLVxcbm1tL3pzd2FwLmMtMTA4OS0gKi9cXG5tbS96c3dhcC5jOjEwOTA6c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG5tbS96c3dhcC5jLTEwOTEtXFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmFyZylcXG4tLVxcbm1tL3pzd2FwLmM9MTE3MT1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuLS1cXG5tbS96c3dhcC5jLTExODItXFxubW0venN3YXAuYzoxMTgzOlxcdHNocmlua19yZXQgPSBsaXN0X2xydV9zaHJpbmtfd2FsayhcXHUwMDI2enN3YXBfbGlzdF9scnUsIHNjLCBcXHUwMDI2c2hyaW5rX21lbWNnX2NiLFxcbm1tL3pzd2FwLmMtMTE4NC1cXHRcXHRcXHUwMDI2ZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpO1xcbi0tXFxubW0venN3YXAuYz0xMjg4PXN0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3pzd2FwLmMtMTMwNS1cXHRcXHRzaHJ1bmsgKz0gbGlzdF9scnVfd2Fsa19vbmUoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnLFxcbm1tL3pzd2FwLmM6MTMwNjpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXFx1MDAyNm5yX3RvX3dhbGspO1xcbm1tL3pzd2FwLmMtMTMwNy1cXHRcXHRzY2FubmVkICs9IFNXQVBfQ0xVU1RFUl9NQVggLSBucl90b193YWxrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMjoyOC45NjE4NDk0NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDc4MTI2NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRob3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczpcblxuKipDaGVja2luZyBgbW0vS2NvbmZpZ2AgZm9yIFpzd2FwIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgWnN3YXAgb3B0aW9ucy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbW0vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSB0aGlzIHN3YXAgY29tcHJlc3Npb24gZmVhdHVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hpY2ggb3B0aW9ucyBjb250cm9sIHRoaW5ncyBsaWtlIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0sIHRoZSBzaXplIGxpbWl0YXRpb25zLCBtYXliZSBldmVuIHNvbWUgcGVyZm9ybWFuY2UgdHVuaW5nIHBhcmFtZXRlcnMuIEkgYWxzbyB3YW50IHRvIHNlZSBpZiBhbnkgbmV3IG9wdGlvbnMgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIG15IGxhc3QgZGVlcCBkaXZlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGlmIHRoZXJlIGFyZSBuZXcgd2F5cyB0byBzcGVjaWZ5IGNhY2hlIHNpemVzIGFuZCBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIGRpZmZlcmVudCBoYXJkd2FyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBlYWNoIG9wdGlvbiBhbmQgdGhlIGltcGFjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhlbSB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg2OCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjMxLjAzOTk3OTI4N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2MTAzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMjozMS4wODc1OTI2ODdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjEyMjUwNjM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgQ09ORklHX1pTV0FQIERlcGVuZGVuY2llcyBpbiBtbS9LY29uZmlnKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX1pTV0FQYC4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZSwgc28gSSBrbm93IGl0J3MgZ29pbmcgdG8gYmUgaW4gdGhlIGBtbS9LY29uZmlnYCBmaWxlIOKAkyB0aGF0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSByZWxldmFudCBlbnRyaWVzIGRpcmVjdGx5LiBJIHdhbnQgdG8gc2VlIHdoYXQgb3RoZXIgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgQ09ORklHX1pTV0FQYCBjYW4gZXZlbiBiZSBjb25zaWRlcmVkLiBBcmUgdGhlcmUgYW55IHByZXJlcXVpc2l0ZXM/IERvZXMgaXQgcmVxdWlyZSBzcGVjaWZpYyBOVU1BIGNvbmZpZ3VyYXRpb25zLCBvciBjZXJ0YWluIGJsb2NrIGRldmljZSBmZWF0dXJlcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIFpTV0FQIGZpdHMgaW50byB0aGUgbGFyZ2VyIG1lbW9yeSBtYW5hZ2VtZW50IHBpY3R1cmUuIEl0J2xsIGFsc28gaGVscCBtZSB0cm91Ymxlc2hvb3QgYW55IHBvdGVudGlhbCBidWlsZCBpc3N1ZXMgaWYgSSdtIGVuYWJsaW5nIG9yIGRpc2FibGluZyBaU1dBUCwgb3IgZGVidWdnaW5nIHJlbGF0ZWQga2VybmVsIGlzc3Vlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYzMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjMzLjIxMDEwMjAyNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcXG4gIDE4OlxcdFxcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxcbiAgMTk6XFx0XFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcXG4gIDIwOlxcdFxcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIFpTV0FQXFxuICAyMzpcXHRcXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBTV0FQXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAyNjpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcXG4gIDI5OlxcdFxcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXFxuICAzMDpcXHRcXHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXFxuICAzMTpcXHRcXHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxcbiAgMzI6XFx0XFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXFxuICAzMzpcXHRcXHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIFpTV0FQXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcXG4gIDQwOlxcdFxcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdCAgVGhlIHNlbGVjdGlvbiBtYWRlIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGtlcm5lbFxcbiAgNDM6XFx0XFx0ICBjb21tYW5kIGxpbmUgJ3pzd2FwLmVuYWJsZWQ9JyBvcHRpb24uXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxuICA0NjpcXHRcXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbiAgNDc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgNDg6XFx0XFx0ZGVmYXVsdCBuXFxuICA0OTpcXHRcXHRoZWxwXFxuICA1MDpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgenN3YXAgc2hyaW5rZXIgd2lsbCBiZSBlbmFibGVkLCBhbmQgdGhlIHBhZ2VzXFxuICA1MTpcXHRcXHQgIHN0b3JlZCBpbiB0aGUgenN3YXAgcG9vbCB3aWxsIGJlY29tZSBhdmFpbGFibGUgZm9yIHJlY2xhaW0gKGkuZVxcbiAgNTI6XFx0XFx0ICB3cml0dGVuIGJhY2sgdG8gdGhlIGJhY2tpbmcgc3dhcCBkZXZpY2UpIG9uIG1lbW9yeSBwcmVzc3VyZS5cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0ICBUaGlzIG1lYW5zIHRoYXQgenN3YXAgd3JpdGViYWNrIGNvdWxkIGhhcHBlbiBldmVuIGlmIHRoZSBwb29sIGlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjMzLjIxMDIwNjM2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDYwMzA1Njg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEFuYWx5c2lzOiB6c3dhcCBXcml0ZWJhY2sgUmV0dXJuIENvZGUgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5pbmcgaWYgaXQncyB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIGluIGBtbS96c3dhcC5jYCwgd2hpY2ggaXMgZGVmaW5pdGVseSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyB0aGF0J3MgYSBwb3NpdGl2ZSByaWdodCBvZmYgdGhlIGJhdC4gSXQgbG9va3MgbGlrZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBub3cgcmV0dXJucyBgLUVOT0VOVGAgaW5zdGVhZCBvZiBgLUVFWElTVGAgd2hlbiBgZ2V0X3N3YXBfZGV2aWNlKClgIGZhaWxzLlxuXG5JIGNhbiBzZWUgdGhhdCwgcHJldmlvdXNseSwgYSBmYWlsdXJlIHdvdWxkIGxlYWQgdG8gYHNocmlua19tZW1jZ19jYmAgcmV0dXJuaW5nIGBMUlVfU1RPUGAgcHJlbWF0dXJlbHkuIFRoZSBjaGFuZ2UgdG8gYC1FTk9FTlRgIGNhdXNlcyBgTFJVX1JFVFJZYCB0byBiZSByZXR1cm5lZC4gVGhpcyBpcyBjbGVhcmx5IGEgY2hhbmdlIGluIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhlIHpzd2FwIHNocmlua2VyLCBzbyB5ZXMsIGFjY29yZGluZyB0byB0aGUgY3JpdGVyaWEsIHRoaXMgd2FycmFudHMgZnV6emluZzogYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Ob3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBgRm9jdXNTeW1ib2xzYC4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGluY2x1ZGUgYW55IHViaXF1aXRvdXMgZnVuY3Rpb25zLiBMZXQncyBzZWUuLi4gdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBhcmUgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgKHRoZSBvbmUgSSdtIGNoYW5naW5nKSwgYHNocmlua19tZW1jZ19jYmAgKHRoZSBjYWxsZXIpLCBgenN3YXBfc2hyaW5rZXJfc2NhbmAgYW5kIGBzaHJpbmtfbWVtY2dgLlxuXG5IbW0sIGFyZSBhbnkgb2YgdGhlc2Ugc3RhdGljPyBZZXMsIHRoZXkgYXJlIGFsbCBzdGF0aWMhIEkgdGhvdWdodCBJIG1pZ2h0IHJ1biBpbnRvIHRoZSBcInN0YXRpYyBpbmxpbmUgZnVuY3Rpb25cIiB0cmFwLCBidXQgc2luY2UgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYSAuYyBmaWxlIGFuZCBub3Qgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gYSBoZWFkZXIsIHRoZXkgKnNob3VsZCogaGF2ZSBkaXN0aW5jdCBzeW1ib2xzIGluIHRoZSBrZXJuZWwuIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIGNhbGxlZCBvbmNlIGluIGBzaHJpbmtfbWVtY2dfY2JgLCBzbyBpdCBtaWdodCBiZSBpbmxpbmVkLiBCdXQgYHNocmlua19tZW1jZ19jYmAgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgbGlzdF9scnVfc2hyaW5rX3dhbGtgLCBhbmQgaXQgaXMgdGh1cyBpbXBvc3NpYmxlIHRvIGJlIGlubGluZWQhIGB6c3dhcF9zaHJpbmtlcl9zY2FuYCBpcyBhbHNvIHBhc3NlZCBhIGZ1bmN0aW9uIHBvaW50ZXIgKGl0cyBhZGRyZXNzIGlzIHRha2VuKSwgc28gaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIHN5bWJvbC5cblxuU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgcmVmbGVjdCB0aGUgYWx0ZXJlZCBsb2dpYyBhcmUgdGhlIHN5bWJvbHMgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGBzaHJpbmtfbWVtY2dfY2JgIGFuZCBgenN3YXBfc2hyaW5rZXJfc2NhbmAuIEknbGwgZm9jdXMgb24gdGhvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjQzLjgxMzI2NTUyM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzNDM2NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX3Nocmlua2VyX3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTEwOTA9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG4tLVxcbm1tL3pzd2FwLmMtMTE3MC1cXG5tbS96c3dhcC5jOjExNzE6c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbm1tL3pzd2FwLmMtMTE3Mi1cXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0venN3YXAuYz0xMjY0PXN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX2FsbG9jX3Nocmlua2VyKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTEyNzItXFxubW0venN3YXAuYzoxMjczOlxcdHNocmlua2VyLVxcdTAwM2VzY2FuX29iamVjdHMgPSB6c3dhcF9zaHJpbmtlcl9zY2FuO1xcbm1tL3pzd2FwLmMtMTI3NC1cXHRzaHJpbmtlci1cXHUwMDNlY291bnRfb2JqZWN0cyA9IHpzd2FwX3Nocmlua2VyX2NvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMjo0NC4wMTY3MTAxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTMwMDA2NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb2RlIENoYW5nZXMgUmVsYXRlZCB0byBac3dhcCBhbmQgTWVtb3J5IFNocmlua2luZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBgc2hyaW5rX21lbWNnX2NiYCBhbmQgYHpzd2FwX3Nocmlua2VyX3NjYW5gIGFyZSBmdW5jdGlvbiBwb2ludGVycy4gUmlnaHQgYXdheSwgdGhhdCB0ZWxscyBtZSB0aGV5IGFyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIHByZXNlbnQgYXMgc3ltYm9scyBpbiB0aGUgdm1saW51eCBpbWFnZS4gR29vZCB0byBrbm93LCBrZWVwcyB0aGluZ3MgY2xlYW5lci4gQW5kIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBtb2RpZmllZCBpcyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gVGhlIGZhY3QgdGhhdCB0aGV5J3ZlIGluY2x1ZGVkIGJvdGggYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGBzaHJpbmtfbWVtY2dfY2JgIGFuZCBwb3RlbnRpYWxseSBldmVuIGB6c3dhcF9zaHJpbmtlcl9zY2FuYCBpbiB0aGUgYnVpbGQgcHJvY2VzcyBpcyBleGNlbGxlbnQsIGRlbW9uc3RyYXRpbmcgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIEl0J3MgdGhlIGJlc3Qgd2F5IHRvIGRvIGl0LlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzOiB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBhY3R1YWxseSByZXF1aXJlZCBmb3IgenN3YXAgYW5kIGZvciB0aGUgc2hyaW5rZXIgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGNoZWNrIHRob3NlIGBFbmFibGVDb25maWdzYCB0byBiZSBzdXJlLiBJJ2xsIHByb2JhYmx5IGZpbmQgc29tZSBjbHVlcyBpbiBgbW0venN3YXAuY2AgdG9vLiBJdCdzIGEgY2xhc3NpYyBwbGFjZSB0byBsb29rIGZvciB0aG9zZSBjb25kaXRpb25hbCBpZmRlZnMgdGhhdCdsbCB0ZWxsIG1lIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDc6MDI6NDYuNTQ2NzIxMDAxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA5OTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZ8I2lmIElTX0VOQUJMRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTYxNz1zdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCxcXG4tLVxcbm1tL3pzd2FwLmMtNjUwLS8qIHNob3VsZCBiZSBjYWxsZWQgdW5kZXIgUkNVICovXFxubW0venN3YXAuYzo2NTE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3pzd2FwLmMtNjUyLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxcbi0tXFxubW0venN3YXAuYz0xNjgxPXZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSlcXG4tLVxcbm1tL3pzd2FwLmMtMTcwMC0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbm1tL3pzd2FwLmM6MTcwMTojaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxubW0venN3YXAuYy0xNzAyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjQ2LjU5MTgyMzY3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwNDM5NzIwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgbW0venN3YXAuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVuIGBtbS96c3dhcC5jYCBnZXRzIGNvbXBpbGVkLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYG1tL2AgZGlyZWN0b3J5LiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgYnVpbGQgaW5zdHJ1Y3Rpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHNob3VsZCByZXNpZGUuIEknbGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgbG9vayBmb3IgZGlyZWN0aXZlcyBvciBkZXBlbmRlbmNpZXMgdGhhdCByZWxhdGUgdG8gYHpzd2FwLmNgLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHRoaXMgc3BlY2lmaWMgZmlsZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIGRpcmVjdCByZWZlcmVuY2UgdG8gaXQsIG9yIGluZGlyZWN0IGluY2x1c2lvbiB2aWEgYSBsYXJnZXIgbW9kdWxlLiBMZXQncyBkaWcgaW4gYW5kIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMjcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMjo0OC42MzU3OTc5OThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTY0OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcbm1tL01ha2VmaWxlLTgwLW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMjo0OC42ODY3NzA1MzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA4MjQzMDU0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWnN3YXAgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGxpbmU6IGBvYmotJChDT05GSUdfWlNXQVApICs9IHpzd2FwLm9gLiBUaGF0IHRlbGxzIG1lIHRoZSB6c3dhcCBtb2R1bGUgaXMgYmVpbmcgY29tcGlsZWQsIGJ1dCBpdCdzIGRlcGVuZGVudCBvbiBgQ09ORklHX1pTV0FQYC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgaW4gYG1tL0tjb25maWdgOiBZZXAsIGBDT05GSUdfWlNXQVBgIHJlcXVpcmVzIGBTV0FQYCwgc2VsZWN0cyBgQ1JZUFRPYCBhbmQgYFpTTUFMTE9DYC4gU3RhbmRhcmQgc3R1ZmYuXG5cbk5vdywgSSdtIHdvbmRlcmluZyBhYm91dCB0aGUgZGVmYXVsdCBzdGF0ZSBvZiB6c3dhcC4gVGhlIGNvZGUgbWVudGlvbnMgYENPTkZJR19aU1dBUF9ERUZBVUxUX09OYC4gVGhhdCBtYWtlcyBpdCBzb3VuZCBsaWtlIHpzd2FwIGlzIGVuYWJsZWQgYXQgYm9vdCBpZiB0aGlzIGNvbmZpZyBvcHRpb24gaXMgc2V0LiBPdGhlcndpc2UsIEknbGwgbmVlZCB0byBlbmFibGUgaXQgZXhwbGljaXRseSB0aHJvdWdoIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50IG9yIHN5c2ZzLiBJIG5lZWQgdG8ga25vdyBob3cgc3l6a2FsbGVyIGlzIGVuYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSwgZG9lcyBpdCBwYXNzIGB6c3dhcC5lbmFibGVkPTFgIHRvIHRoZSBrZXJuZWw/IE9yIGRvZXMgaXQgcmVseSBvbiBgWlNXQVBfREVGQVVMVF9PTmAgYmVpbmcgZW5hYmxlZD8gVW5kZXJzdGFuZGluZyB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGhlcmUgaXMga2V5IHRvIGludGVycHJldGluZyB0aGUgZnV6emVyIHJlc3VsdHMuXG5cbkFuZCB3aGF0IGFib3V0IHRoaXMgYENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYD8gV2hlcmUgaXMgdGhhdCBldmVuIHVzZWQ/IEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZS4gTGV0J3MgZmluZCBvdXQgZXhhY3RseSB3aGVyZSBgQ09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gIHNob3dzIHVwIGluIGBtbS96c3dhcC5jYC4gR290dGEgdHJhY2UgdGhlIGxvZ2ljIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MjUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDc6MDI6NTkuNTExMDc5MjQ0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzI4NDQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTM1PWNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS96c3dhcC5jPTEyMT1zdGF0aWMgYm9vbCB6c3dhcF9zaHJpbmtlcl9lbmFibGVkID0gSVNfRU5BQkxFRChcXG5tbS96c3dhcC5jOjEyMjpcXHRcXHRDT05GSUdfWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTik7XFxubW0venN3YXAuYy0xMjMtbW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMjo1OS41NjgzNjk0MTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDYwNTA1MDU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBac3dhcCBTaHJpbmtlciBNdXNpbmdzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgenN3YXBfc2hyaW5rZXJfZW5hYmxlZGAgZmxhZy4gSSBzZWUgaXQncyBpbml0aWFsaXplZCB3aXRoIGBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OKWAuIEludGVyZXN0aW5nLiBUaGF0IG1lYW5zIGl0IGRlZmF1bHRzIHRvIHdoYXRldmVyIHRoZSBjb25maWcgc2V0dGluZyBpcy4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0IHNocmlua2VyIGlzIGVuYWJsZWQsIHRob3VnaCwgcmlnaHQ/XG5cbldhaXQgYSBtaW51dGUsIEkgc2VlIHRoYXQgYHNocmlua19tZW1jZ19jYmAgaXMgZXhlY3V0ZWQgd2hlbiB0aGUgc2hyaW5rZXIgYWN0dWFsbHkgKnJ1bnMqLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBJIGhhdmUgdG8gc2VlIHdoZXJlIHRoYXQgaXMgdXNlZC4gVGhhdCBpcyB0aGUgY3JpdGljYWwgcGFydCB0byB1bmRlcnN0YW5kIG5vdywgdG8gc2VlICpob3cqIHRoaXMgZmxhZyBhY3R1YWxseSBhZmZlY3RzIGJlaGF2aW9yLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBgenN3YXBfc2hyaW5rZXJfZW5hYmxlZGAgdmFyaWFibGUgaXMgKmFjdHVhbGx5KiBiZWluZyBjaGVja2VkLiBHb3R0YSB0cmFjZSB0aGUgY29kZSBhbmQgc2VlIHdoZXJlIGl0IG1hdHRlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzcwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDc6MDM6MDQuMTczNDIyNzQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU0OTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF9zaHJpbmtlcl9lbmFibGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz0xMTc9bW9kdWxlX3BhcmFtX25hbWVkKGFjY2VwdF90aHJlc2hvbGRfcGVyY2VudCwgenN3YXBfYWNjZXB0X3Rocl9wZXJjZW50LFxcbi0tXFxubW0venN3YXAuYy0xMjAtLyogRW5hYmxlL2Rpc2FibGUgbWVtb3J5IHByZXNzdXJlLWJhc2VkIHNocmlua2VyLiAqL1xcbm1tL3pzd2FwLmM6MTIxOnN0YXRpYyBib29sIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQgPSBJU19FTkFCTEVEKFxcbm1tL3pzd2FwLmMtMTIyLVxcdFxcdENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OKTtcXG5tbS96c3dhcC5jOjEyMzptb2R1bGVfcGFyYW1fbmFtZWQoc2hyaW5rZXJfZW5hYmxlZCwgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCwgYm9vbCwgMDY0NCk7XFxubW0venN3YXAuYy0xMjQtXFxuLS1cXG5tbS96c3dhcC5jPTExNzE9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbi0tXFxubW0venN3YXAuYy0xMTc2LVxcbm1tL3pzd2FwLmM6MTE3NzpcXHRpZiAoIXpzd2FwX3Nocmlua2VyX2VuYWJsZWQgfHxcXG5tbS96c3dhcC5jLTExNzgtXFx0XFx0XFx0IW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc2MtXFx1MDAzZW1lbWNnKSkge1xcbi0tXFxubW0venN3YXAuYz0xMTkyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuLS1cXG5tbS96c3dhcC5jLTEyMDEtXFxubW0venN3YXAuYzoxMjAyOlxcdGlmICghenN3YXBfc2hyaW5rZXJfZW5hYmxlZCB8fCAhbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChtZW1jZykpXFxubW0venN3YXAuYy0xMjAzLVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzowNC4yMTg5NzgxMzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQ3Mjc3MzE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgWnN3YXAgU2hyaW5rZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGB6c3dhcF9zaHJpbmtlcl9zY2FuYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyB0aGlzIGNvbmRpdGlvbmFsOiBgaWYgKCF6c3dhcF9zaHJpbmtlcl9lbmFibGVkIHx8ICFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHNjLVx1MDAzZW1lbWNnKSlgLiBUaGF0J3MgdGhlIGNydXggb2YgaG93IHRoZSBzaHJpbmtlciBiZWhhdmVzLiBOb3csIEkgcmVtZW1iZXIgdGhhdCBgQ09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gIGRlZmF1bHRzIHRvICduJy4gUmlnaHQsIHNvIGlmIHRoYXQgaXNuJ3Qgc2V0LCBgenN3YXBfc2hyaW5rZXJfZW5hYmxlZGAgaXMgZ29pbmcgdG8gYmUgZmFsc2UgdW5sZXNzIHNvbWVvbmUncyBleHBsaWNpdGx5IGVuYWJsZWQgaXQgdGhyb3VnaCBzeXNmcy5cblxuQWxyaWdodCwgc28gdGhlIGltcGxpY2F0aW9ucyBoZXJlIGFyZSBwcmV0dHkgY2xlYXIuIGBaU1dBUGAsIGBaU1dBUF9ERUZBVUxUX09OYCwgYFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gLCBhbmQgb2YgY291cnNlIGBTV0FQYCwgYXJlIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXQgcGxheS4gVGhleSBlc3NlbnRpYWxseSBkZXRlcm1pbmUgaWYgYW5kIGhvdyB0aGUgc2hyaW5rZXIgZXZlbiBydW5zLiBUaGVzZSBhcmUgdGhlIGtleSBsZXZlcnMuXG5cbkhvbGQgb24gYSBzZWNvbmQsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcuLi4gSSdtIGdvaW5nIHRvIGxvb2sgZGVlcGVyIGludG8gYG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWRgLiBXaGVyZSBpcyB0aGF0IGZ1bmN0aW9uYWxpdHkgZGVmaW5lZD8gR290dGEgYmUgc3VyZSBJJ20gY2xlYXIgb24gaG93IHRoYXQgcGxheXMgaW50byB0aGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDQ1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAzOjA2LjY5MTc1MzYzNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMDM4MjE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4OTY9dm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4OTc6Ym9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg5OC0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkwNz1zdGF0aWMgaW5saW5lIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTEwLX1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTExOnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTEyLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz02MDU5PXZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTYwNzktXFxubW0vbWVtY29udHJvbC5jOjYwODA6Ym9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtNjA4MS17XFxuLS1cXG5tbS9wYWdlX2lvLmM9MjA0PWludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vcGFnZV9pby5jLTI0My1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vcGFnZV9pby5jOjI0NDpcXHRpZiAoIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoZm9saW9fbWVtY2coZm9saW8pKSkge1xcbm1tL3BhZ2VfaW8uYy0yNDUtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5tbS96c3dhcC5jPTg0MD1zdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4tLVxcbm1tL3pzd2FwLmMtODg1LVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS96c3dhcC5jOjg4NjpcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoXFxubW0venN3YXAuYy04ODctXFx0XFx0XFx0XFx0XFx0Zm9saW9fbWVtY2cocGFnZV9mb2xpbyhwYWdlKSkpKSB7XFxuLS1cXG5tbS96c3dhcC5jPTExNzE9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbi0tXFxubW0venN3YXAuYy0xMTc3LVxcdGlmICghenN3YXBfc2hyaW5rZXJfZW5hYmxlZCB8fFxcbm1tL3pzd2FwLmM6MTE3ODpcXHRcXHRcXHQhbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzYy1cXHUwMDNlbWVtY2cpKSB7XFxubW0venN3YXAuYy0xMTc5LVxcdFxcdHNjLVxcdTAwM2Vucl9zY2FubmVkID0gMDtcXG4tLVxcbm1tL3pzd2FwLmM9MTE5Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbi0tXFxubW0venN3YXAuYy0xMjAxLVxcbm1tL3pzd2FwLmM6MTIwMjpcXHRpZiAoIXpzd2FwX3Nocmlua2VyX2VuYWJsZWQgfHwgIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQobWVtY2cpKVxcbm1tL3pzd2FwLmMtMTIwMy1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3pzd2FwLmM9MTI4OD1zdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS96c3dhcC5jLTEyOTEtXFxubW0venN3YXAuYzoxMjkyOlxcdGlmICghbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChtZW1jZykpXFxubW0venN3YXAuYy0xMjkzLVxcdFxcdHJldHVybiAtRU5PRU5UO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzowOC4yMjIxNDE2NjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM0MjkyMzc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWRgIFVuZGVyIFNjcnV0aW55KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZGAgZnVuY3Rpb24sIHBhcnRpY3VsYXJseSB3aGVuIGBDT05GSUdfTUVNQ0dgICppc24ndCogZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8uIFRoZSBpbmNsdWRlIGZpbGUgYGxpbnV4L21lbWNvbnRyb2wuaGAgc2VlbXMgdG8gaGF2ZSB0aGUgYW5zd2VyOiBhIHNpbXBsZSBpbmxpbmUgZnVuY3Rpb24gdGhhdCAqYWx3YXlzKiByZXR1cm5zIGB0cnVlYCBpZiBgQ09ORklHX01FTUNHYCBpcyBvZmYuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIOKAkyBpdCBlZmZlY3RpdmVseSBtYWtlcyB6c3dhcCB3cml0ZWJhY2sgYWx3YXlzIGVuYWJsZWQgaW4gdGhlIGFic2VuY2Ugb2YgbWVtb3J5IGNncm91cHMuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBtbS9tZW1jb250cm9sLmM6NjA4MGAgdG8gc2VlIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBmbGFnICppcyogc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM5MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzoxMC41NjUwNjkxNjVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MDgwOlxcdGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuNjA4MTpcXHR7XFxuNjA4MjpcXHRcXHQvKiBpZiB6c3dhcCBpcyBkaXNhYmxlZCwgZG8gbm90IGJsb2NrIHBhZ2VzIGdvaW5nIHRvIHRoZSBzd2FwcGluZyBkZXZpY2UgKi9cXG42MDgzOlxcdFxcdGlmICghenN3YXBfaXNfZW5hYmxlZCgpKVxcbjYwODQ6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNjA4NTpcXHRcXG42MDg2OlxcdFxcdGZvciAoOyBtZW1jZzsgbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpXFxuNjA4NzpcXHRcXHRcXHRpZiAoIVJFQURfT05DRShtZW1jZy1cXHUwMDNlenN3YXBfd3JpdGViYWNrKSlcXG42MDg4OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG42MDg5OlxcdFxcbjYwOTA6XFx0XFx0cmV0dXJuIHRydWU7XFxuNjA5MTpcXHR9XFxuNjA5MjpcXHRcXG42MDkzOlxcdHN0YXRpYyB1NjQgenN3YXBfY3VycmVudF9yZWFkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxuNjA5NDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgY2Z0eXBlICpjZnQpXFxuNjA5NTpcXHR7XFxuNjA5NjpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNzcyk7XFxuNjA5NzpcXHRcXG42MDk4OlxcdFxcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHMobWVtY2cpO1xcbjYwOTk6XFx0XFx0cmV0dXJuIG1lbWNnX3BhZ2Vfc3RhdGUobWVtY2csIE1FTUNHX1pTV0FQX0IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzoxMC41NjUyOTIzMTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDEwNjM3Njg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQgXHUwMDI2IFpzd2FwIFdyaXRlYmFjayoqXG5cbkFscmlnaHQsIHNvIHRoZSBkZWZhdWx0IHN0YXRlIGZvciBgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZGAgaXMgc2V0IHRvIHRydWUuIFRoYXQncyBnb29kIHRvIGtub3cg4oCTIGl0IG1lYW5zIHdlJ3JlIHByb2JhYmx5IGFscmVhZHkgbGV2ZXJhZ2luZyB6c3dhcCB3cml0ZWJhY2sgaW4gbWFueSBjb21tb24gY29uZmlndXJhdGlvbnMuIEJ1dCB0aGF0IGJyaW5ncyB1cCBhbiBpbXBvcnRhbnQgcXVlc3Rpb246IFdoYXQgc3BlY2lmaWNhbGx5ICp0cmlnZ2VycyogdGhlIGBzaHJpbmtfbWVtY2coKWAgZnVuY3Rpb24/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIG1lbW9yeSBjZ3JvdXAgc2hyaW5raW5nIGlzIGNydWNpYWwgZm9yIG9wdGltaXppbmcgb3VyIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGluIHJlc291cmNlLWNvbnN0cmFpbmVkIGVudmlyb25tZW50cyBvciB3aGVuIGRlYWxpbmcgd2l0aCBjb250YWluZXJpemF0aW9uLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQgY29uZGl0aW9ucyBjYXVzZSB0aGF0IHNocmluayBmdW5jdGlvbiB0byBiZSBjYWxsZWQuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyBsaWUsIGFuZCB0aGF0IHdpbGwgdWx0aW1hdGVseSBoZWxwIG1lIGRlY2lkZSBob3cgdG8gb3B0aW1pemUgbXkgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDM3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzoxNC42NzE2NzE3MjJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODYyMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19tZW1jZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9OTg3PXN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuLS1cXG5tbS96c3dhcC5jLTEwODktICovXFxubW0venN3YXAuYzoxMDkwOnN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxubW0venN3YXAuYy0xMDkxLVxcdFxcdFxcdFxcdCAgICAgICB2b2lkICphcmcpXFxuLS1cXG5tbS96c3dhcC5jPTExNzE9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbi0tXFxubW0venN3YXAuYy0xMTgyLVxcbm1tL3pzd2FwLmM6MTE4MzpcXHRzaHJpbmtfcmV0ID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBzYywgXFx1MDAyNnNocmlua19tZW1jZ19jYixcXG5tbS96c3dhcC5jLTExODQtXFx0XFx0XFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcXG4tLVxcbm1tL3pzd2FwLmM9MTI2ND1zdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxcbi0tXFxubW0venN3YXAuYy0xMjg3LSAqL1xcbm1tL3pzd2FwLmM6MTI4ODpzdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0venN3YXAuYy0xMjg5LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTMwNS1cXHRcXHRzaHJ1bmsgKz0gbGlzdF9scnVfd2Fsa19vbmUoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnLFxcbm1tL3pzd2FwLmM6MTMwNjpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXFx1MDAyNm5yX3RvX3dhbGspO1xcbm1tL3pzd2FwLmMtMTMwNy1cXHRcXHRzY2FubmVkICs9IFNXQVBfQ0xVU1RFUl9NQVggLSBucl90b193YWxrO1xcbi0tXFxubW0venN3YXAuYz0xMzE3PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxubW0venN3YXAuYy0xMzgyLVxcbm1tL3pzd2FwLmM6MTM4MzpcXHRcXHRyZXQgPSBzaHJpbmtfbWVtY2cobWVtY2cpO1xcbm1tL3pzd2FwLmMtMTM4NC1cXHRcXHQvKiBkcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgKi9cXG4tLVxcbm1tL3pzd2FwLmM9MTQ4OD1ib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTE1MDYtXFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcXG5tbS96c3dhcC5jOjE1MDc6XFx0XFx0aWYgKHNocmlua19tZW1jZyhtZW1jZykpIHtcXG5tbS96c3dhcC5jLTE1MDgtXFx0XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzoxNC43MTc1NDI3MzJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTQyNDE4ODI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBac3dhcCBTaHJpbmtpbmcgYW5kIFdyaXRlYmFjayBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSB0aGUgb3B0aW1hbCBhcHByb2FjaCBmb3IgZnV6emluZyBhIHJlY2VudCBwYXRjaCByZWxhdGVkIHRvIHpzd2FwIHdyaXRlYmFjayBhbmQgc2hyaW5raW5nLlxuXG5GaXJzdCwgSSBpZGVudGlmaWVkIHRoYXQgdGhlIGZ1bmN0aW9ucyBgc2hyaW5rX21lbWNnYCAoY2FsbGVkIGZyb20gYHpzd2FwX3N0b3JlYCBhbmQgYHNocmlua193b3JrZXJgKSBhbmQgYHpzd2FwX3Nocmlua2VyX3NjYW5gIChjYWxsZWQgYnkgdGhlIHNocmlua2VyIHN1YnN5c3RlbSkgYXJlIGtleSBlbnRyeSBwb2ludHMuIFRoZSBsYXR0ZXIgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgY29ubmVjdHMgdG8gYHNocmlua19tZW1jZ19jYmAuIE5vdywgSSBuZWVkIHRvIGtub3cgd2hpY2gga2VybmVsIGNvbmZpZ3MgY29udHJvbCB0aGlzIGZ1bmN0aW9uYWxpdHkuIExvb2tpbmcgaW50byBgbW0vS2NvbmZpZ2AsIGl0J3MgY2xlYXIgdGhhdCBgU1dBUGAsIGBaU1dBUGAsIGBaU1dBUF9ERUZBVUxUX09OYCwgYW5kIGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYCBhcmUgdGhlIHJlbGV2YW50IGZsYWdzLiBgTUVNQ0dgIGlzIGluZGlyZWN0bHkgcmVsYXRlZCwgZ2l2ZW4genN3YXAncyB1c2Ugb2YgbWVtY2cgbGlzdF9scnUsIGFsdGhvdWdoIGxpc3RfbHJ1IGl0c2VsZiBkb2Vzbid0IHJlcXVpcmUgTUVNQ0cuXG5cbk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gSSd2ZSBmb2N1c2VkIG9uIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCB0aGUgZnVuY3Rpb24gdGhhdCdzIGNoYW5nZWQuIFRoZW4gSSB6ZXJvZWQgaW4gb24gYHNocmlua19tZW1jZ19jYmAsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSByZXR1cm4gdmFsdWUgb2YgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgYW5kIGJyYW5jaGVzIGJhc2VkIG9uIHRoZSByZXR1cm5lZCBlcnJvciBjb2RlLCBlc3BlY2lhbGx5IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIGAtRUVYSVNUYCBhbmQgb3RoZXIgZXJyb3IgY29kZXMsIGFuZCB0aGUgYHpzd2FwX3Nocmlua2VyX3NjYW5gIGZ1bmN0aW9uIHdoaWNoIGNhbGxzIGBzaHJpbmtfbWVtY2dfY2JgLiBBbmQgb2YgY291cnNlLCBgc2hyaW5rX21lbWNnYCBpdHNlbGYsIGFzIGl0IGNhbGxzIGBsaXN0X2xydV93YWxrX29uZWAgd2l0aCBgc2hyaW5rX21lbWNnX2NiYC5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIHNwZWNpZmljIHRvIHpzd2FwLCBzbyB0aGUgbW9kaWZpY2F0aW9uIGlzIG5vdCB1YmlxdWl0b3VzLiBUaGV5IGFsbCByZWxhdGUgdG8genN3YXAgd3JpdGViYWNrIGFuZCBzaHJpbmtpbmcgd2hlbiBzd2FwcGluZy5cblxuU28sIGZvciBgc2V0LXJlc3VsdHNgLCBJIGNhbiBjb25maWRlbnRseSBpbmNsdWRlOlxuXG4qICAgKipgRW5hYmxlQ29uZmlnc2A6KiogYFtcIlNXQVBcIiwgXCJaU1dBUFwiLCBcIlpTV0FQX0RFRkFVTFRfT05cIiwgXCJaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXCJdYFxuKiAgICoqYEZvY3VzU3ltYm9sc2A6KiogYFtcInpzd2FwX3dyaXRlYmFja19lbnRyeVwiLCBcInNocmlua19tZW1jZ19jYlwiLCBcInpzd2FwX3Nocmlua2VyX3NjYW5cIiwgXCJzaHJpbmtfbWVtY2dcIl1gXG4qICAgKipgUmVhc29uaW5nYDoqKiBUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IGB6c3dhcF93cml0ZWJhY2tfZW50cnkoKWAgd2hlbiBzd2FwIGRldmljZSByZXRyaWV2YWwgZmFpbHMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGNoYW5nZXMgdGhpcyBjb2RlIGZyb20gYC1FRVhJU1RgIHRvIGAtRU5PRU5UYC4gSW4gYHNocmlua19tZW1jZ19jYigpYCwgYC1FRVhJU1RgIGNhdXNlZCB0aGUgc2hyaW5rZXIgdG8gc3RvcCwgaW50ZXJwcmV0aW5nIHRoaXMgYXMgZmluZGluZyBhIHN3YXBwZWQgcGFnZS4gTm93IHRoZSBjaGFuZ2VkIGVycm9yIGNvZGUgd2lsbCBsZWFkIHRvIHRoZSBzaHJpbmtpbmcgY29udGludWUuIFRoaXMgZGlyZWN0bHkgYWx0ZXJzIHRoZSBjb250cm9sIGZsb3cgYW5kIHRlcm1pbmF0aW9uIGJlaGF2aW9yIG9mIHpzd2FwIHNocmlua2VyIGl0ZXJhdGlvbnMgZHVyaW5nIHdyaXRlYmFjay4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCB3YXJyYW50cyBmdXp6aW5nLlxuKiAgICoqYFdvcnRoRnV6emluZ2A6KiogYHRydWVgXG5cbkknbSBzYXRpc2ZpZWQgd2l0aCB0aGlzIGFuYWx5c2lzLCB3aGljaCBwcm92aWRlcyBhIGNvbmNpc2UgeWV0IHRob3JvdWdoIGp1c3RpZmljYXRpb24gZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTE5LCJPdXRwdXRUb2tlbnMiOjIxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzoyNC4xNDE3MzM1N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMTI1MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3dyaXRlYmFja19lbnRyeVwiLFxuICAgIFwic2hyaW5rX21lbWNnX2NiXCIsXG4gICAgXCJ6c3dhcF9zaHJpbmtlcl9zY2FuXCIsXG4gICAgXCJzaHJpbmtfbWVtY2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSBpbiBtbS96c3dhcC5jIHRvIHJldHVybiAtRU5PRU5UIGluc3RlYWQgb2YgLUVFWElTVCB3aGVuIGdldF9zd2FwX2RldmljZSgpIGZhaWxzLiBJbiBzaHJpbmtfbWVtY2dfY2IoKSwgLUVFWElTVCBpcyBzcGVjaWZpY2FsbHkgY2hlY2tlZCB0byBkZXRlY3QgcGFnZXMgYWxyZWFkeSBjYWNoZWQgaW4gc3dhcCBjYWNoZSwgd2hpY2ggdHJpZ2dlcnMgTFJVX1NUT1AgdG8gdGVybWluYXRlIHNocmlua2luZy4gQ2hhbmdpbmcgdGhlIHJldHVybiB2YWx1ZSBhbHRlcnMgdGhlIHNocmlua2VyJ3MgZXJyb3IgaGFuZGxpbmcgYW5kIHJldHJ5IGxvb3AgYmVoYXZpb3IgdW5kZXIgY29uY3VycmVudCBzd2Fwb2ZmL2RldmljZSByZW1vdmFsLiBBcyB0aGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4genN3YXAgd3JpdGViYWNrIGFuZCBMUlUgcmVjbGFtYXRpb24sIGl0IHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIixcbiAgICBcIlpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIixcbiAgICBcInNocmlua19tZW1jZ19jYlwiLFxuICAgIFwienN3YXBfc2hyaW5rZXJfc2NhblwiLFxuICAgIFwic2hyaW5rX21lbWNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgaW4gbW0venN3YXAuYyB0byByZXR1cm4gLUVOT0VOVCBpbnN0ZWFkIG9mIC1FRVhJU1Qgd2hlbiBnZXRfc3dhcF9kZXZpY2UoKSBmYWlscy4gSW4gc2hyaW5rX21lbWNnX2NiKCksIC1FRVhJU1QgaXMgc3BlY2lmaWNhbGx5IGNoZWNrZWQgdG8gZGV0ZWN0IHBhZ2VzIGFscmVhZHkgY2FjaGVkIGluIHN3YXAgY2FjaGUsIHdoaWNoIHRyaWdnZXJzIExSVV9TVE9QIHRvIHRlcm1pbmF0ZSBzaHJpbmtpbmcuIENoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgYWx0ZXJzIHRoZSBzaHJpbmtlcidzIGVycm9yIGhhbmRsaW5nIGFuZCByZXRyeSBsb29wIGJlaGF2aW9yIHVuZGVyIGNvbmN1cnJlbnQgc3dhcG9mZi9kZXZpY2UgcmVtb3ZhbC4gQXMgdGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIHpzd2FwIHdyaXRlYmFjayBhbmQgTFJVIHJlY2xhbWF0aW9uLCBpdCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzoyNC4yMTE4NjY4NzlaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjM3MzI3NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDc6MDM6MjQuMjEyMzI2NTY5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjIyMzY4NjI3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGluIGB6c3dhcF93cml0ZWJhY2tfZW50cnkoKWAgZnJvbSBgLUVFWElTVGAgdG8gYC1FTk9FTlRgIHdoZW4gYGdldF9zd2FwX2RldmljZShzd3BlbnRyeSlgIHJldHVybnMgTlVMTC4gVGhpcyBwcmV2ZW50cyB0aGUgenN3YXAgc2hyaW5rZXIgKGBzaHJpbmtfbWVtY2dfY2JgKSBmcm9tIGZhbHNlbHkgYXNzdW1pbmcgdGhlIHBhZ2UgaXMgYWxyZWFkeSBpbiB0aGUgc3dhcCBjYWNoZSAod2hpY2ggY2hlY2tzIGZvciBgd3JpdGViYWNrX3Jlc3VsdCA9PSAtRUVYSVNUYCB0byBhYm9ydCBzaHJpbmtpbmcpLiBUaGUgY2hhbmdlIGlzIHN0cmljdGx5IGEgbG9naWMvZXJyb3IgY29kZSBmaXggaW4gdGhlIHN3YXAgcmVjbGFpbSBwYXRoOyBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlcnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQ29uc2VxdWVudGx5LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZDRiYjcxOWZjYTVmZWM1MmI3NjYzNjg4ZDcwMGQxODg5ODM5ZjE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMDc6MDE6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggMzdmMzRlNDA2YzhlMy4uYjk5NDhkNDY1N2QyNiAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC05OTgsNyArOTk4LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdC8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShzd3BlbnRyeSk7XG4gXHRpZiAoIXNpKVxuLVx0XHRyZXR1cm4gLUVFWElTVDtcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuIFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzoyNC4yMTIzMjc1NTlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAwNDI5OTk3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgTmVlZCBmb3IgYSBLTVNBTiBGdXp6aW5nIFNlc3Npb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaCBmb3IgYG1tL3pzd2FwLmNgIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoaXMgaXMgc3RhbmRhcmQgZGV2ZWxvcGVyIFFBLCByaWdodD8gSnVzdCBkb2luZyBteSBkdWUgZGlsaWdlbmNlLCBldmFsdWF0aW5nIHRoZSBwb3RlbnRpYWwgZm9yIHNhbml0aXplciBhcHBsaWNhYmlsaXR5IOKAkyBLQVNBTiB2ZXJzdXMgS01TQU4sIGluIHRoaXMgY2FzZS4gTm8gbWFsaWNpb3VzIGludGVudCwgbm8gZXhwbG9pdCBnZW5lcmF0aW9uLCBqdXN0IHRoZSB1c3VhbCBRQSBwcm9jZXNzLiBTZXZlcml0eS13aXNlLCBJJ2Qgc2F5IHRoaXMgaXMgcHJldHR5IGJlbmlnbiwgbm90aGluZyB0byByYWlzZSBhbnkgYWxhcm1zLlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmOiBpdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZS4gVGhlIGRpZmYgc2hvd3MgYSBzaW1wbGUgcmVwbGFjZW1lbnQgb2YgYC1FRVhJU1RgIHdpdGggYC1FTk9FTlRgIHdpdGhpbiB0aGUgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgZnVuY3Rpb24uIE5vdywgdGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyByZXR1cm4gdmFsdWUgbWF0dGVycy4gVGhlIGNvbnRleHQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBzd2FwIGNhY2hlIGZvbGlvIGFsbG9jYXRpb24uXG5cblNvLCBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGBtbS96c3dhcC5jYCBhcm91bmQgbGluZSA5OTgsIHNlZSB3aGVyZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBpcyBjYWxsZWQsIGFuZCB0aGVuIGZpZ3VyZSBvdXQgaG93IHRoYXQgcmV0dXJuIHZhbHVlIGlzIHVzZWQgdXBzdHJlYW0uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBhY3Qgb2YgdGhlIHJldHVybiB2YWx1ZSBjaGFuZ2UuIExvb2tzIGxpa2UgaXQncyB0aW1lIHRvIGZpcmUgdXAgYGdyZXBwZXJgIChvciB1c2UgYHJlYWQtZmlsZWApIHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugb24gZXJyb3IgaGFuZGxpbmcgYW5kIGNvbnRyb2wgZmxvdy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIGRlY2lkZSBpZiBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeSBvciBpZiB0aGUgZXhpc3RpbmcgS0FTQU4gY292ZXJhZ2UgaXMgc3VmZmljaWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAzOjM0LjI1NTMyOTY1OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0venN3YXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5ODA6XFx0ICogVGhpcyBjYW4gYmUgdGhvdWdodCBvZiBhcyBhIFxcXCJyZXN1bWVkIHdyaXRlYmFja1xcXCIgb2YgdGhlIGZvbGlvXFxuIDk4MTpcXHQgKiB0byB0aGUgc3dhcCBkZXZpY2UuICBXZSBhcmUgYmFzaWNhbGx5IHJlc3VtaW5nIHRoZSBzYW1lIHN3YXBcXG4gOTgyOlxcdCAqIHdyaXRlYmFjayBwYXRoIHRoYXQgd2FzIGludGVyY2VwdGVkIHdpdGggdGhlIHpzd2FwX3N0b3JlKClcXG4gOTgzOlxcdCAqIGluIHRoZSBmaXJzdCBwbGFjZS4gIEFmdGVyIHRoZSBmb2xpbyBoYXMgYmVlbiBkZWNvbXByZXNzZWQgaW50b1xcbiA5ODQ6XFx0ICogdGhlIHN3YXAgY2FjaGUsIHRoZSBjb21wcmVzc2VkIHZlcnNpb24gc3RvcmVkIGJ5IHpzd2FwIGNhbiBiZVxcbiA5ODU6XFx0ICogZnJlZWQuXFxuIDk4NjpcXHQgKi9cXG4gOTg3OlxcdHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuIDk4ODpcXHRcXHRcXHRcXHRcXHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXFxuIDk4OTpcXHR7XFxuIDk5MDpcXHRcXHRzdHJ1Y3QgeGFycmF5ICp0cmVlO1xcbiA5OTE6XFx0XFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cGVudHJ5KTtcXG4gOTkyOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDk5MzpcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xcbiA5OTQ6XFx0XFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpO1xcbiA5OTU6XFx0XFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xcbiA5OTY6XFx0XFx0aW50IHJldCA9IDA7XFxuIDk5NzpcXHRcXG4gOTk4OlxcdFxcdC8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovXFxuIDk5OTpcXHRcXHRzaSA9IGdldF9zd2FwX2RldmljZShzd3BlbnRyeSk7XFxuMTAwMDpcXHRcXHRpZiAoIXNpKVxcbjEwMDE6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTAwMjpcXHRcXG4xMDAzOlxcdFxcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XFxuMTAwNDpcXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcXG4xMDA1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcXG4xMDA2OlxcdFxcdHB1dF9zd2FwX2RldmljZShzaSk7XFxuMTAwNzpcXHRcXG4xMDA4OlxcdFxcdC8qXFxuMTAwOTpcXHRcXHQgKiBTd2FwIGNhY2hlIGFsbG9jYXRpb24gbWlnaHQgZmFpbCBkdWUgdG8gT09NLCBvciB0aGUgZW50cnlcXG4xMDEwOlxcdFxcdCAqIG1heSBhbHJlYWR5IGJlIGNhY2hlZCBkdWUgdG8gY29uY3VycmVudCBzd2FwaW4gb3IgaGF2ZSBiZWVuXFxuMTAxMTpcXHRcXHQgKiBmcmVlZC4gSWYgYWxyZWFkeSBjYWNoZWQsIGEgY29uY3VycmVudCBzd2FwaW4gbWFkZSB0aGUgZm9saW9cXG4xMDEyOlxcdFxcdCAqIGhvdCwgc28gc2tpcCBpdC4gRm9yIHRoZSB1bmxpa2VseSBjb25jdXJyZW50IHNocmlua2VyIGNhc2UsXFxuMTAxMzpcXHRcXHQgKiBpdCB3aWxsIGJlIHVubGlua2VkIGFuZCBmcmVlZCB3aGVuIGludmFsaWRhdGVkIGFueXdheS5cXG4xMDE0OlxcdFxcdCAqL1xcbjEwMTU6XFx0XFx0aWYgKElTX0VSUihmb2xpbykpXFxuMTAxNjpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihmb2xpbyk7XFxuMTAxNzpcXHRcXG4xMDE4OlxcdFxcdC8qXFxuMTAxOTpcXHRcXHQgKiBmb2xpbyBpcyBsb2NrZWQsIGFuZCB0aGUgc3dhcGNhY2hlIGlzIG5vdyBzZWN1cmVkIGFnYWluc3RcXG4xMDIwOlxcdFxcdCAqIGNvbmN1cnJlbnQgc3dhcHBpbmcgdG8gYW5kIGZyb20gdGhlIHNsb3QsIGFuZCBjb25jdXJyZW50XFxuMTAyMTpcXHRcXHQgKiBzd2Fwb2ZmIHNvIHdlIGNhbiBzYWZlbHkgZGVyZWZlcmVuY2UgdGhlIHpzd2FwIHRyZWUgaGVyZS5cXG4xMDIyOlxcdFxcdCAqIFZlcmlmeSB0aGF0IHRoZSBzd2FwIGVudHJ5IGhhc24ndCBiZWVuIGludmFsaWRhdGVkIGFuZCByZWN5Y2xlZFxcbjEwMjM6XFx0XFx0ICogYmVoaW5kIG91ciBiYWNrcywgdG8gYXZvaWQgb3ZlcndyaXRpbmcgYSBuZXcgc3dhcCBmb2xpbyB3aXRoXFxuMTAyNDpcXHRcXHQgKiBvbGQgY29tcHJlc3NlZCBkYXRhLiBPbmx5IHdoZW4gdGhpcyBpcyBzdWNjZXNzZnVsIGNhbiB0aGUgZW50cnlcXG4xMDI1OlxcdFxcdCAqIGJlIGRlcmVmZXJlbmNlZC5cXG4xMDI2OlxcdFxcdCAqL1xcbjEwMjc6XFx0XFx0dHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3BlbnRyeSk7XFxuMTAyODpcXHRcXHRpZiAoZW50cnkgIT0geGFfbG9hZCh0cmVlLCBvZmZzZXQpKSB7XFxuMTAyOTpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjEwMzA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTAzMTpcXHRcXHR9XFxuMTAzMjpcXHRcXG4xMDMzOlxcdFxcdGlmICghenN3YXBfZGVjb21wcmVzcyhlbnRyeSwgZm9saW8pKSB7XFxuMTAzNDpcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbjEwMzU6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTAzNjpcXHRcXHR9XFxuMTAzNzpcXHRcXG4xMDM4OlxcdFxcdHhhX2VyYXNlKHRyZWUsIG9mZnNldCk7XFxuMTAzOTpcXHRcXG4xMDQwOlxcdFxcdGNvdW50X3ZtX2V2ZW50KFpTV1BXQik7XFxuMTA0MTpcXHRcXHRpZiAoZW50cnktXFx1MDAzZW9iamNnKVxcbjEwNDI6XFx0XFx0XFx0Y291bnRfb2JqY2dfZXZlbnRzKGVudHJ5LVxcdTAwM2VvYmpjZywgWlNXUFdCLCAxKTtcXG4xMDQzOlxcdFxcbjEwNDQ6XFx0XFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XFxuMTA0NTpcXHRcXG4xMDQ2OlxcdFxcdC8qIGZvbGlvIGlzIHVwIHRvIGRhdGUgKi9cXG4xMDQ3OlxcdFxcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xcbjEwNDg6XFx0XFxuMTA0OTpcXHRcXHQvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDc6MDM6MzQuMjU1NDM2MDM5WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NzAzODk4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBDYWxsIFNpdGVzKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBUaGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIGEgcXVpY2sgY29kZSBzZWFyY2guIExldCdzIGZpcmUgdXAgYSBncmVwIGNvbW1hbmQgYW5kIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nIGludm9rZWQuIEknbSBleHBlY3RpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgYXJlYXMsIGFsbG93aW5nIG1lIHRvIHF1aWNrbHkgbmFycm93IGRvd24gdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgb3BlcmF0ZXMsIGhvcGVmdWxseSBoZWxwaW5nIG1lIGZpZ3VyZSBvdXQgd2hlcmUgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODc1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzozNi4yMjU4Mjk5NzlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzYwMTAzNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfd3JpdGViYWNrX2VudHJ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9OTI0PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtOTg2LSAqL1xcbm1tL3pzd2FwLmM6OTg3OnN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxubW0venN3YXAuYy05ODgtXFx0XFx0XFx0XFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxcbi0tXFxubW0venN3YXAuYz0xMDkwPXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxuLS1cXG5tbS96c3dhcC5jLTExMTMtXFx0ICogMS4gV2UgZXh0cmFjdCB0aGUgc3dwX2VudHJ5X3QgdG8gdGhlIHN0YWNrLCBhbGxvd2luZ1xcbm1tL3pzd2FwLmM6MTExNDpcXHQgKiAgICB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSB0byBwaW4gdGhlIHN3YXAgZW50cnkgYW5kXFxubW0venN3YXAuYy0xMTE1LVxcdCAqICAgIHRoZW4gdmFsaWRhdGUgdGhlIHpzd2FwIGVudHJ5IGFnYWluc3QgdGhhdCBzd2FwIGVudHJ5J3NcXG4tLVxcbm1tL3pzd2FwLmMtMTE0OC1cXG5tbS96c3dhcC5jOjExNDk6XFx0d3JpdGViYWNrX3Jlc3VsdCA9IHpzd2FwX3dyaXRlYmFja19lbnRyeShlbnRyeSwgc3dwZW50cnkpO1xcbm1tL3pzd2FwLmMtMTE1MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDc6MDM6MzcuNzYxODQ1ODM2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3ODYwMDI5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRob3NlIGxpbmVzIG9mIGBtbS96c3dhcC5jYDpcblxuKipEaXZpbmcgaW50byB0aGUgWnN3YXAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBnZXQgaW50byBsaW5lcyAxMTQwLTEyMDAgb2YgYG1tL3pzd2FwLmNgLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3Qgd2hhdCdzIGdvaW5nIG9uIGhlcmUuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBrZXkgcGllY2Ugb2YgdGhlIHpzd2FwIHByb2Nlc3MgbG9naWMsIG1heWJlIHJlbGF0ZWQgdG8gcGFnZSBpbnNlcnRpb24sIGV2aWN0aW9uLCBvciBwZXJoYXBzIHNvbWUgc29ydCBvZiBtZXRhZGF0YSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIGdpdmVuIHRoYXQgd2UgYXJlIHdpdGhpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBJIHdpbGwgdHJ5IHRvIGlkZW50aWZ5IGlmIHRoZSBjb2RlIGlzIGZvY3VzZWQgb24gZGF0YSBzdHJ1Y3R1cmVzLCBsb2NraW5nLCBvciB0aGUgaW50ZXJmYWNlIHdpdGggdGhlIGFjdHVhbCBjb21wcmVzc2lvbiBhbmQgc3dhcCBsYXllcnMuIEkgaGF2ZSBhIGh1bmNoIGl0IHdpbGwgcmVsYXRlIHRvIGhvdyB3ZSBkZWNpZGUgKndoZXJlKiB0byBzdG9yZSBhIGNvbXByZXNzZWQgcGFnZSB0aGF0J3MgZGVzdGluZWQgZm9yIHN3YXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZWNpc2lvbi1tYWtpbmcgcHJvY2VzcyBoZXJlLiBQZXJoYXBzIHRoZXJlJ3MgYW4gYWxnb3JpdGhtIG9yIGEgc2V0IG9mIGhldXJpc3RpY3MgaW4gcGxhY2UgdG8gb3B0aW1pemUgc3dhcCBzcGFjZSB1dGlsaXphdGlvbi4gSSdtIGFsc28gYW50aWNpcGF0aW5nIHNvbWUga2luZCBvZiBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIGJsb2NrLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgenN3YXAgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBwb3RlbnRpYWwgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpc3N1ZXMgd2l0aCB0aGUgdW5kZXJseWluZyBzd2FwIGRldmljZS4gSSBhbHNvIHBsYW4gdG8gbm90ZSB0aGUgZXhhY3QgdXNlIG9mIGFueSBrZXkgZGF0YSBzdHJ1Y3R1cmVzLCBsaWtlIGB6c3dhcF9lbnRyeWAsIGFuZCBob3cgdGhleSdyZSB1c2VkIHRvIHRyYWNrIGFuZCBtYW5hZ2UgdGhlIGNvbXByZXNzZWQgcGFnZXMuIFdpdGggYSBkZWVwIGJyZWF0aCBhbmQgYSBjbG9zZSBsb29rLCBJIHNob3VsZCBnZXQgYSBmaXJtIGdyYXNwIG9mIHRoZSBjb3JlIGZ1bmN0aW9uIG9mIHRoaXMgcG9ydGlvbiBvZiBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzY2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDc6MDM6NDAuNTQ3ODUwODc1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0XFx0ICovXFxuMTE0MTpcXHRcXHRzd3BlbnRyeSA9IGVudHJ5LVxcdTAwM2Vzd3BlbnRyeTtcXG4xMTQyOlxcdFxcbjExNDM6XFx0XFx0LypcXG4xMTQ0OlxcdFxcdCAqIEl0J3Mgc2FmZSB0byBkcm9wIHRoZSBsb2NrIGhlcmUgYmVjYXVzZSB3ZSByZXR1cm4gZWl0aGVyXFxuMTE0NTpcXHRcXHQgKiBMUlVfUkVNT1ZFRF9SRVRSWSwgTFJVX1JFVFJZIG9yIExSVV9TVE9QLlxcbjExNDY6XFx0XFx0ICovXFxuMTE0NzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bC1cXHUwMDNlbG9jayk7XFxuMTE0ODpcXHRcXG4xMTQ5OlxcdFxcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcXG4xMTUwOlxcdFxcbjExNTE6XFx0XFx0aWYgKHdyaXRlYmFja19yZXN1bHQpIHtcXG4xMTUyOlxcdFxcdFxcdHpzd2FwX3JlamVjdF9yZWNsYWltX2ZhaWwrKztcXG4xMTUzOlxcdFxcdFxcdHJldCA9IExSVV9SRVRSWTtcXG4xMTU0OlxcdFxcbjExNTU6XFx0XFx0XFx0LypcXG4xMTU2OlxcdFxcdFxcdCAqIEVuY291bnRlcmluZyBhIHBhZ2UgYWxyZWFkeSBpbiBzd2FwIGNhY2hlIGlzIGEgc2lnbiB0aGF0IHdlIGFyZSBzaHJpbmtpbmdcXG4xMTU3OlxcdFxcdFxcdCAqIGludG8gdGhlIHdhcm1lciByZWdpb24uIFdlIHNob3VsZCB0ZXJtaW5hdGUgc2hyaW5raW5nIChpZiB3ZSdyZSBpbiB0aGUgZHluYW1pY1xcbjExNTg6XFx0XFx0XFx0ICogc2hyaW5rZXIgY29udGV4dCkuXFxuMTE1OTpcXHRcXHRcXHQgKi9cXG4xMTYwOlxcdFxcdFxcdGlmICh3cml0ZWJhY2tfcmVzdWx0ID09IC1FRVhJU1QgXFx1MDAyNlxcdTAwMjYgZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpIHtcXG4xMTYxOlxcdFxcdFxcdFxcdHJldCA9IExSVV9TVE9QO1xcbjExNjI6XFx0XFx0XFx0XFx0KmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gdHJ1ZTtcXG4xMTYzOlxcdFxcdFxcdH1cXG4xMTY0OlxcdFxcdH0gZWxzZSB7XFxuMTE2NTpcXHRcXHRcXHR6c3dhcF93cml0dGVuX2JhY2tfcGFnZXMrKztcXG4xMTY2OlxcdFxcdH1cXG4xMTY3OlxcdFxcbjExNjg6XFx0XFx0cmV0dXJuIHJldDtcXG4xMTY5OlxcdH1cXG4xMTcwOlxcdFxcbjExNzE6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbjExNzI6XFx0XFx0XFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4xMTczOlxcdHtcXG4xMTc0OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2hyaW5rX3JldDtcXG4xMTc1OlxcdFxcdGJvb2wgZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSBmYWxzZTtcXG4xMTc2OlxcdFxcbjExNzc6XFx0XFx0aWYgKCF6c3dhcF9zaHJpbmtlcl9lbmFibGVkIHx8XFxuMTE3ODpcXHRcXHRcXHRcXHQhbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzYy1cXHUwMDNlbWVtY2cpKSB7XFxuMTE3OTpcXHRcXHRcXHRzYy1cXHUwMDNlbnJfc2Nhbm5lZCA9IDA7XFxuMTE4MDpcXHRcXHRcXHRyZXR1cm4gU0hSSU5LX1NUT1A7XFxuMTE4MTpcXHRcXHR9XFxuMTE4MjpcXHRcXG4xMTgzOlxcdFxcdHNocmlua19yZXQgPSBsaXN0X2xydV9zaHJpbmtfd2FsayhcXHUwMDI2enN3YXBfbGlzdF9scnUsIHNjLCBcXHUwMDI2c2hyaW5rX21lbWNnX2NiLFxcbjExODQ6XFx0XFx0XFx0XFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcXG4xMTg1OlxcdFxcbjExODY6XFx0XFx0aWYgKGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKVxcbjExODc6XFx0XFx0XFx0cmV0dXJuIFNIUklOS19TVE9QO1xcbjExODg6XFx0XFxuMTE4OTpcXHRcXHRyZXR1cm4gc2hyaW5rX3JldCA/IHNocmlua19yZXQgOiBTSFJJTktfU1RPUDtcXG4xMTkwOlxcdH1cXG4xMTkxOlxcdFxcbjExOTI6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4xMTkzOlxcdFxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuMTE5NDpcXHR7XFxuMTE5NTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBzYy1cXHUwMDNlbWVtY2c7XFxuMTE5NjpcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKHNjLVxcdTAwM2VuaWQpKTtcXG4xMTk3OlxcdFxcdGF0b21pY19sb25nX3QgKm5yX2Rpc2tfc3dhcGlucyA9XFxuMTE5ODpcXHRcXHRcXHRcXHUwMDI2bHJ1dmVjLVxcdTAwM2V6c3dhcF9scnV2ZWNfc3RhdGUubnJfZGlza19zd2FwaW5zO1xcbjExOTk6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9iYWNraW5nLCBucl9zdG9yZWQsIG5yX2ZyZWVhYmxlLCBucl9kaXNrX3N3YXBpbnNfY3VyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzo0MC41NDc5OTU0MDVaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTkwMTE1ODE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBac3dhcCBTaHJpbmtlciBCdWcgYW5kIE1pdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGRlYWw6IEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgenN3YXAgY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGVycm9ycyBkdXJpbmcgd3JpdGViYWNrLiBJdCBzZWVtcyB0aGVyZSB3YXMgYSBmbGF3IGluIHRoZSBlcnJvciByZXBvcnRpbmcgZnJvbSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gUHJldmlvdXNseSwgaWYgYGdldF9zd2FwX2RldmljZShzd3BlbnRyeSlgIHJldHVybmVkIE5VTEwsIGluZGljYXRpbmcgYSBzd2FwIGRldmljZSBpc3N1ZSAob3IgYW4gaW52YWxpZCBgc3dwZW50cnlgKSwgdGhlIGZ1bmN0aW9uIHdvdWxkIHJldHVybiBgLUVFWElTVGAuIFRoZSBwcm9ibGVtPyBgLUVFWElTVGAgd2FzIG1pc2ludGVycHJldGVkIGJ5IHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBgc2hyaW5rX21lbWNnX2NiYCwgYXMgbWVhbmluZyB0aGUgcGFnZSB3YXMgKmFscmVhZHkqIGluIHRoZSBzd2FwIGNhY2hlLiBUaGlzIGxlZCB0byBwcmVtYXR1cmUgdGVybWluYXRpb24gb2YgdGhlIHNocmlua2luZyBwcm9jZXNzLCB3aGljaCBpcyBjbGVhcmx5IGluY29ycmVjdCBiZWhhdmlvci4gVGhlIHJldHVybiBjb2RlIHNob3VsZCBpbmRpY2F0ZSB0aGF0IHdlICpjb3VsZG4ndCogd3JpdGUgaXQgYmFjaywgbm90IHRoYXQgaXQgYWxyZWFkeSBleGlzdGVkLiBTbywgdGhlIHBhdGNoIGNvcnJlY3RseSBjaGFuZ2VzIHRoZSByZXR1cm4gY29kZSB0byBgLUVOT0VOVGAsIHdoaWNoIGlzIGZhciBtb3JlIGFwcHJvcHJpYXRlIGluIHRoaXMgc2NlbmFyaW8uXG5cbk15IHByaW1hcnkgY29uY2VybiBub3cgaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIGJyZWFrIGl0IGRvd246XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBOb3BlLiBObyBkYXRhIGlzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBJIGRvdWJsZS1jaGVja2VkIHRoZSByZWxhdGVkIGZ1bmN0aW9ucywgYHNocmlua19tZW1jZ19jYmAgYW5kIGB6c3dhcF9zaHJpbmtlcl9zY2FuYC4gSW4gYHpzd2FwX3Nocmlua2VyX3NjYW5gIHRoZSBgZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGVgIHZhcmlhYmxlLCB3aGljaCBpcyBjcnVjaWFsIGhlcmUsIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAgKHBoZXchKS5cbjMuICAqKk5ldyBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBpbml0aWFsaXphdGlvbnM/KiogTm8gYWRkaXRpb25zIG9yIG1vZGlmaWNhdGlvbnMuXG40LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyoqIE5vcGUuIE5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNrcy5cblxuRXNzZW50aWFsbHksIGFsbCB0aGlzIHBhdGNoIGRvZXMgaXMgbW9kaWZ5IGFuIGVycm9yIGNvZGUgYmVpbmcgcmV0dXJuZWQgZnJvbSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gSXQgZG9lc24ndCBtb2RpZnkgYW55IGRhdGEgYnVmZmVycywgc3RhY2sgdmFyaWFibGVzLCBoZWFwIGFsbG9jYXRpb25zLCB1c2VyIGNvcHkgb3BlcmF0aW9ucywgb3IgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBnaXZlbiB0aGUgZ3VpZGVsaW5lcywgSSBkb24ndCBzZWUgYW55IHJlYXNvbiB0byB0cmlnZ2VyIGEgS01TQU4gcnVuLiBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgaXNzdWVzIGhlcmUuIEluIGZhY3QsIGlmIHNvbWV0aGluZyBsaWtlIHRoaXMgd2VyZSBjYXVnaHQgYnkgS01TQU4sIHRoZW4gd2UnZCBoYXZlIGEgKnNlcmlvdXMqIHByb2JsZW0gaW4gdGhlIGNvZGUsIGFuZCBhIHJlZGVzaWduIHdvdWxkIGJlIG5lZWRlZC4gVGhpcyBpcyBub3QgdGhlIGNhc2UuXG5cbioqTmVlZHNLTVNBTj1mYWxzZS4gTGV0J3MgY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtb3ZlIG9uLioqXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTcsIk91dHB1dFRva2VucyI6MTcwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDc6MDM6NDYuNDQ5MTU2Mzg5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgdGhlIGVycm9yIHJldHVybiB2YWx1ZSBpbiBgenN3YXBfd3JpdGViYWNrX2VudHJ5KClgIGZyb20gYC1FRVhJU1RgIHRvIGAtRU5PRU5UYCB3aGVuIGBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpYCByZXR1cm5zIE5VTEwuIFRoaXMgcHJldmVudHMgdGhlIHpzd2FwIHNocmlua2VyIChgc2hyaW5rX21lbWNnX2NiYCkgZnJvbSBmYWxzZWx5IGFzc3VtaW5nIHRoZSBwYWdlIGlzIGFscmVhZHkgaW4gdGhlIHN3YXAgY2FjaGUgKHdoaWNoIGNoZWNrcyBmb3IgYHdyaXRlYmFja19yZXN1bHQgPT0gLUVFWElTVGAgdG8gYWJvcnQgc2hyaW5raW5nKS4gVGhlIGNoYW5nZSBpcyBzdHJpY3RseSBhIGxvZ2ljL2Vycm9yIGNvZGUgZml4IGluIHRoZSBzd2FwIHJlY2xhaW0gcGF0aDsgaXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIENvbnNlcXVlbnRseSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBjaGFuZ2VzIHRoZSBlcnJvciByZXR1cm4gdmFsdWUgaW4gYHpzd2FwX3dyaXRlYmFja19lbnRyeSgpYCBmcm9tIGAtRUVYSVNUYCB0byBgLUVOT0VOVGAgd2hlbiBgZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KWAgcmV0dXJucyBOVUxMLiBUaGlzIHByZXZlbnRzIHRoZSB6c3dhcCBzaHJpbmtlciAoYHNocmlua19tZW1jZ19jYmApIGZyb20gZmFsc2VseSBhc3N1bWluZyB0aGUgcGFnZSBpcyBhbHJlYWR5IGluIHRoZSBzd2FwIGNhY2hlICh3aGljaCBjaGVja3MgZm9yIGB3cml0ZWJhY2tfcmVzdWx0ID09IC1FRVhJU1RgIHRvIGFib3J0IHNocmlua2luZykuIFRoZSBjaGFuZ2UgaXMgc3RyaWN0bHkgYSBsb2dpYy9lcnJvciBjb2RlIGZpeCBpbiB0aGUgc3dhcCByZWNsYWltIHBhdGg7IGl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVycywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr8mv7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 06:44:33 +0000 UTC FinishedAt: 2026-09-13 07:03:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "32b2f3801ba5c772b5be4c0f17fffc0f911241d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "ZSWAP_DEFAULT_ON", "ZSWAP_SHRINKER_DEFAULT_ON" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "32b2f3801ba5c772b5be4c0f17fffc0f911241d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "ZSWAP_DEFAULT_ON", "ZSWAP_SHRINKER_DEFAULT_ON" ], "series_id": "a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_writeback_entry", "shrink_memcg_cb", "zswap_shrinker_scan", "shrink_memcg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "32b2f3801ba5c772b5be4c0f17fffc0f911241d3", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7LAogICAgJiMzNDtaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfd3JpdGViYWNrX2VudHJ5JiMzNDssCiAgICAmIzM0O3Nocmlua19tZW1jZ19jYiYjMzQ7LAogICAgJiMzNDt6c3dhcF9zaHJpbmtlcl9zY2FuJiMzNDssCiAgICAmIzM0O3Nocmlua19tZW1jZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGluIGB6c3dhcF93cml0ZWJhY2tfZW50cnkoKWAgZnJvbSBgLUVFWElTVGAgdG8gYC1FTk9FTlRgIHdoZW4gYGdldF9zd2FwX2RldmljZShzd3BlbnRyeSlgIHJldHVybnMgTlVMTC4gVGhpcyBwcmV2ZW50cyB0aGUgenN3YXAgc2hyaW5rZXIgKGBzaHJpbmtfbWVtY2dfY2JgKSBmcm9tIGZhbHNlbHkgYXNzdW1pbmcgdGhlIHBhZ2UgaXMgYWxyZWFkeSBpbiB0aGUgc3dhcCBjYWNoZSAod2hpY2ggY2hlY2tzIGZvciBgd3JpdGViYWNrX3Jlc3VsdCA9PSAtRUVYSVNUYCB0byBhYm9ydCBzaHJpbmtpbmcpLiBUaGUgY2hhbmdlIGlzIHN0cmljdGx5IGEgbG9naWMvZXJyb3IgY29kZSBmaXggaW4gdGhlIHN3YXAgcmVjbGFpbSBwYXRoOyBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlcnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQ29uc2VxdWVudGx5LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgaW4gbW0venN3YXAuYyB0byByZXR1cm4gLUVOT0VOVCBpbnN0ZWFkIG9mIC1FRVhJU1Qgd2hlbiBnZXRfc3dhcF9kZXZpY2UoKSBmYWlscy4gSW4gc2hyaW5rX21lbWNnX2NiKCksIC1FRVhJU1QgaXMgc3BlY2lmaWNhbGx5IGNoZWNrZWQgdG8gZGV0ZWN0IHBhZ2VzIGFscmVhZHkgY2FjaGVkIGluIHN3YXAgY2FjaGUsIHdoaWNoIHRyaWdnZXJzIExSVV9TVE9QIHRvIHRlcm1pbmF0ZSBzaHJpbmtpbmcuIENoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgYWx0ZXJzIHRoZSBzaHJpbmtlciYjMzk7cyBlcnJvciBoYW5kbGluZyBhbmQgcmV0cnkgbG9vcCBiZWhhdmlvciB1bmRlciBjb25jdXJyZW50IHN3YXBvZmYvZGV2aWNlIHJlbW92YWwuIEFzIHRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiB6c3dhcCB3cml0ZWJhY2sgYW5kIExSVSByZWNsYW1hdGlvbiwgaXQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFkNGJiNzE5ZmNhNWZlYzUyYjc2NjM2ODhkNzAwZDE4ODk4MzlmMTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAwNzowMTo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggMzdmMzRlNDA2YzhlMy4uYjk5NDhkNDY1N2QyNiAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmNcbkBAIC05OTgsNyAmIzQzOzk5OCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqL1xuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpO1xuIFx0aWYgKCFzaSlcbi1cdFx0cmV0dXJuIC1FRVhJU1Q7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4gXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQX0RFRkFVTFRfT04mIzM0OywKICAgICYjMzQ7WlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19lbnRyeSYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbWVtY2dfY2ImIzM0OywKICAgICYjMzQ7enN3YXBfc2hyaW5rZXJfc2NhbiYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbWVtY2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgaW4gbW0venN3YXAuYyB0byByZXR1cm4gLUVOT0VOVCBpbnN0ZWFkIG9mIC1FRVhJU1Qgd2hlbiBnZXRfc3dhcF9kZXZpY2UoKSBmYWlscy4gSW4gc2hyaW5rX21lbWNnX2NiKCksIC1FRVhJU1QgaXMgc3BlY2lmaWNhbGx5IGNoZWNrZWQgdG8gZGV0ZWN0IHBhZ2VzIGFscmVhZHkgY2FjaGVkIGluIHN3YXAgY2FjaGUsIHdoaWNoIHRyaWdnZXJzIExSVV9TVE9QIHRvIHRlcm1pbmF0ZSBzaHJpbmtpbmcuIENoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgYWx0ZXJzIHRoZSBzaHJpbmtlciYjMzk7cyBlcnJvciBoYW5kbGluZyBhbmQgcmV0cnkgbG9vcCBiZWhhdmlvciB1bmRlciBjb25jdXJyZW50IHN3YXBvZmYvZGV2aWNlIHJlbW92YWwuIEFzIHRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiB6c3dhcCB3cml0ZWJhY2sgYW5kIExSVSByZWNsYW1hdGlvbiwgaXQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkNGJiNzE5ZmNhNWZlYzUyYjc2NjM2ODhkNzAwZDE4ODk4MzlmMTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCAxMyAwNzowMTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLmI5OTQ4ZDQ2NTdkMjYgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtOTk4LDcgJiM0Mzs5OTgsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCS8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpOwogCWlmICghc2kpCi0JCXJldHVybiAtRUVYSVNUOwomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiAKIAltcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpOwogCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgWnN3YXAgQ29tbWl0KioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGFuYWx5emUgYSBzcGVjaWZpYyBnaXQgY29tbWl0IGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSBhIGNoYW5nZSBpbiBgbW0venN3YXAuY2AuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgdHJpYWdlIHRhc2sgcmVsYXRlZCB0byBmdXp6aW5nLCBwcm9iYWJseSBmb3Igc3l6a2FsbGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNoYW5nZSBpcyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBzcGVjaWZpYyBmdXp6aW5nIGF0dGVudGlvbiwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgcmVsZXZhbnQgY29kZSBhcmVhcywgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMsIGFuZCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSBhIGRlZmVuc2l2ZS9RQSB0eXBlIG9mIGFuYWx5c2lzIOKAkyBiZW5pZ24sIG5vIGltbWVkaWF0ZSBzZWN1cml0eSB0aHJlYXQuIEdvb2QsIHNhZmUgdG8gZGl2ZSBpbi4KCk15IHByb2Nlc3Mgc3RhcnRzIHdpdGggdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgZWl0aGVyIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCBvZiB0aGUgZW50aXJlIGZpbGUsIG9yIGBncmVwcGVyYCB0byBsb29rIGF0IHRoZSBjb2RlIG1vcmUgc2VsZWN0aXZlbHksIGFuZCBpZGVudGlmeSBzdXJyb3VuZGluZyBjb2RlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJlYXNvbiBmb3IgdGhpcyBjb21taXQuIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL3pzd2FwLmNgLCBsb29raW5nIGZvciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtb2RpZmljYXRpb24uIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHRoYXQgY291bGQgbGVhZCB0byBuZXcgb3IgY2hhbmdlZCBiZWhhdmlvdXIuIEZyb20gd2hhdCBJIHNlZSwgaXQgbG9va3MgbGlrZSBhIGNoYW5nZSBmcm9tIGAtRUVYSVNUYCB0byBgLUVOT0VOVGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCBhbmQgd2hhdCB0aGUgb3JpZ2luYWwgYmVoYXZpb3Igd2FzLCBzaW5jZSB0aGUgZnVuY3Rpb24gbmFtZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBzZWVtcyBpbXBvcnRhbnQuCgpFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBvcmlnaW5hbCBjb2RlIGRpZCwgd2hhdCB0aGUgbmV3IGNvZGUgZG9lcywgYW5kIHdoeSB0aGUgZGV2ZWxvcGVycyBkZWNpZGVkIHRvIG1ha2UgdGhpcyBzcGVjaWZpYyBjaGFuZ2UuIEkmIzM5O2xsIGxldmVyYWdlIHRvb2xzIGxpa2UgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCB0byBjaGVjayBob3cgdGhlIGVycm9yIGNvZGUgaXMgYmVpbmcgaGFuZGxlZCBpbiBvdGhlciBwbGFjZXMgaW4gdGhlIGNvZGUsIGFuZCBob3cgdGhlc2UgY2hhbmdlcyBtaWdodCBiZSByZWxldmFudCBpbiBmdXp6aW5nLCBhbmQgSSBtaWdodCBuZWVkIHRvIGBzZXQtcmVzdWx0c2AgdG8gc3VtbWFyaXplIG15IGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTg1Olx0ICogZnJlZWQuXG4gOTg2Olx0ICovXG4gOTg3Olx0c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiA5ODg6XHRcdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbiA5ODk6XHR7XG4gOTkwOlx0XHRzdHJ1Y3QgeGFycmF5ICp0cmVlO1xuIDk5MTpcdFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cGVudHJ5KTtcbiA5OTI6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gOTkzOlx0XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xuIDk5NDpcdFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpO1xuIDk5NTpcdFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xuIDk5NjpcdFx0aW50IHJldCA9IDA7XG4gOTk3Olx0XG4gOTk4Olx0XHQvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqL1xuIDk5OTpcdFx0c2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpO1xuMTAwMDpcdFx0aWYgKCFzaSlcbjEwMDE6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xMDAyOlx0XG4xMDAzOlx0XHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuMTAwNDpcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4xMDA1Olx0XHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4xMDA2Olx0XHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuMTAwNzpcdFxuMTAwODpcdFx0LypcbjEwMDk6XHRcdCAqIFN3YXAgY2FjaGUgYWxsb2NhdGlvbiBtaWdodCBmYWlsIGR1ZSB0byBPT00sIG9yIHRoZSBlbnRyeVxuMTAxMDpcdFx0ICogbWF5IGFscmVhZHkgYmUgY2FjaGVkIGR1ZSB0byBjb25jdXJyZW50IHN3YXBpbiBvciBoYXZlIGJlZW5cbjEwMTE6XHRcdCAqIGZyZWVkLiBJZiBhbHJlYWR5IGNhY2hlZCwgYSBjb25jdXJyZW50IHN3YXBpbiBtYWRlIHRoZSBmb2xpb1xuMTAxMjpcdFx0ICogaG90LCBzbyBza2lwIGl0LiBGb3IgdGhlIHVubGlrZWx5IGNvbmN1cnJlbnQgc2hyaW5rZXIgY2FzZSxcbjEwMTM6XHRcdCAqIGl0IHdpbGwgYmUgdW5saW5rZWQgYW5kIGZyZWVkIHdoZW4gaW52YWxpZGF0ZWQgYW55d2F5LlxuMTAxNDpcdFx0ICovXG4xMDE1Olx0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbjEwMTY6XHRcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuMTAxNzpcdFxuMTAxODpcdFx0LypcbjEwMTk6XHRcdCAqIGZvbGlvIGlzIGxvY2tlZCwgYW5kIHRoZSBzd2FwY2FjaGUgaXMgbm93IHNlY3VyZWQgYWdhaW5zdFxuMTAyMDpcdFx0ICogY29uY3VycmVudCBzd2FwcGluZyB0byBhbmQgZnJvbSB0aGUgc2xvdCwgYW5kIGNvbmN1cnJlbnRcbjEwMjE6XHRcdCAqIHN3YXBvZmYgc28gd2UgY2FuIHNhZmVseSBkZXJlZmVyZW5jZSB0aGUgenN3YXAgdHJlZSBoZXJlLlxuMTAyMjpcdFx0ICogVmVyaWZ5IHRoYXQgdGhlIHN3YXAgZW50cnkgaGFzbiYjMzk7dCBiZWVuIGludmFsaWRhdGVkIGFuZCByZWN5Y2xlZFxuMTAyMzpcdFx0ICogYmVoaW5kIG91ciBiYWNrcywgdG8gYXZvaWQgb3ZlcndyaXRpbmcgYSBuZXcgc3dhcCBmb2xpbyB3aXRoXG4xMDI0Olx0XHQgKiBvbGQgY29tcHJlc3NlZCBkYXRhLiBPbmx5IHdoZW4gdGhpcyBpcyBzdWNjZXNzZnVsIGNhbiB0aGUgZW50cnlcbjEwMjU6XHRcdCAqIGJlIGRlcmVmZXJlbmNlZC5cbjEwMjY6XHRcdCAqL1xuMTAyNzpcdFx0dHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3BlbnRyeSk7XG4xMDI4Olx0XHRpZiAoZW50cnkgIT0geGFfbG9hZCh0cmVlLCBvZmZzZXQpKSB7XG4xMDI5Olx0XHRcdHJldCA9IC1FTk9NRU07XG4xMDMwOlx0XHRcdGdvdG8gb3V0O1xuMTAzMTpcdFx0fVxuMTAzMjpcdFxuMTAzMzpcdFx0aWYgKCF6c3dhcF9kZWNvbXByZXNzKGVudHJ5LCBmb2xpbykpIHtcbjEwMzQ6XHRcdFx0cmV0ID0gLUVJTztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDI2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8genN3YXBfd3JpdGViYWNrX2VudHJ5KioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gTXkgb2JqZWN0aXZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gcGlucG9pbnQgZXZlcnkgY2FsbCBzaXRlIGFuZCBkaXNzZWN0IGhvdyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gaXMgbWFuYWdlZC4gVW5kZXJzdGFuZGluZyBob3cgdGhlIHJldHVybiBjb2RlIGlzIHVzZWQgY2FuIHRlbGwgbWUgdGhlIGZhaWx1cmUgbW9kZXMgb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgZXhwZWN0ZWQgZXJyb3IgaGFuZGxpbmcuCgpUaW1lIHRvIGNyYWNrIG9wZW4gYG1tL3pzd2FwLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDEwMzAgdG8gMTEwMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgd2luZG93IHRvIHNwb3QgdGhlIGNhbGxzLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYSBrZWVuIGV5ZSBvdXQuIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aGluZ3Mgd2UgY2FuIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDM1Olx0XHRcdGdvdG8gb3V0O1xuMTAzNjpcdFx0fVxuMTAzNzpcdFxuMTAzODpcdFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcbjEwMzk6XHRcbjEwNDA6XHRcdGNvdW50X3ZtX2V2ZW50KFpTV1BXQik7XG4xMDQxOlx0XHRpZiAoZW50cnktXHUwMDNlb2JqY2cpXG4xMDQyOlx0XHRcdGNvdW50X29iamNnX2V2ZW50cyhlbnRyeS1cdTAwM2VvYmpjZywgWlNXUFdCLCAxKTtcbjEwNDM6XHRcbjEwNDQ6XHRcdHpzd2FwX2VudHJ5X2ZyZWUoZW50cnkpO1xuMTA0NTpcdFxuMTA0NjpcdFx0LyogZm9saW8gaXMgdXAgdG8gZGF0ZSAqL1xuMTA0NzpcdFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4xMDQ4Olx0XG4xMDQ5Olx0XHQvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi9cbjEwNTA6XHRcdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcbjEwNTE6XHRcbjEwNTI6XHRcdC8qIHN0YXJ0IHdyaXRlYmFjayAqL1xuMTA1MzpcdFx0X19zd2FwX3dyaXRlcGFnZShcdTAwMjZjdHgsIGZvbGlvKTtcbjEwNTQ6XHRcdHN3YXBfd3JpdGVfc3VibWl0KFx1MDAyNmN0eCk7XG4xMDU1Olx0XG4xMDU2Olx0b3V0OlxuMTA1NzpcdFx0aWYgKHJldCkge1xuMTA1ODpcdFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4xMDU5Olx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4xMDYwOlx0XHR9XG4xMDYxOlx0XHRmb2xpb19wdXQoZm9saW8pO1xuMTA2MjpcdFx0cmV0dXJuIHJldDtcbjEwNjM6XHR9XG4xMDY0Olx0XG4xMDY1Olx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuMTA2NjpcdCogc2hyaW5rZXIgZnVuY3Rpb25zXG4xMDY3Olx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbjEwNjg6XHQvKlxuMTA2OTpcdCAqIFRoZSBkeW5hbWljIHNocmlua2VyIGlzIG1vZHVsYXRlZCBieSB0aGUgZm9sbG93aW5nIGZhY3RvcnM6XG4xMDcwOlx0ICpcbjEwNzE6XHQgKiAxLiBFYWNoIHpzd2FwIGVudHJ5IGhhcyBhIHJlZmVyZW5jZWQgYml0LCB3aGljaCB0aGUgc2hyaW5rZXIgdW5zZXRzIChnaXZpbmdcbjEwNzI6XHQgKiAgICB0aGUgZW50cnkgYSBzZWNvbmQgY2hhbmNlKSBiZWZvcmUgcm90YXRpbmcgaXQgaW4gdGhlIExSVSBsaXN0LiBJZiB0aGVcbjEwNzM6XHQgKiAgICBlbnRyeSBpcyBjb25zaWRlcmVkIGFnYWluIGJ5IHRoZSBzaHJpbmtlciwgd2l0aCBpdHMgcmVmZXJlbmNlZCBiaXQgdW5zZXQsXG4xMDc0Olx0ICogICAgaXQgaXMgd3JpdHRlbiBiYWNrLiBUaGUgd3JpdGViYWNrIHJhdGUgYXMgYSByZXN1bHQgaXMgZHluYW1pY2FsbHlcbjEwNzU6XHQgKiAgICBhZGp1c3RlZCBieSB0aGUgcG9vbCBhY3Rpdml0aWVzIC0gaWYgdGhlIHBvb2wgaXMgZG9taW5hdGVkIGJ5IG5ldyBlbnRyaWVzXG4xMDc2Olx0ICogICAgKGkuZSBsb3RzIG9mIHJlY2VudCB6c3dhcG91dHMpLCB0aGVzZSBlbnRyaWVzIHdpbGwgYmUgcHJvdGVjdGVkIGFuZFxuMTA3NzpcdCAqICAgIHRoZSB3cml0ZWJhY2sgcmF0ZSB3aWxsIHNsb3cgZG93bi4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSBwb29sIGhhcyBhXG4xMDc4Olx0ICogICAgbG90IG9mIHN0YWduYW50IGVudHJpZXMsIHRoZXNlIGVudHJpZXMgd2lsbCBiZSByZWNsYWltZWQgaW1tZWRpYXRlbHksXG4xMDc5Olx0ICogICAgZWZmZWN0aXZlbHkgaW5jcmVhc2luZyB0aGUgd3JpdGViYWNrIHJhdGUuXG4xMDgwOlx0ICpcbjEwODE6XHQgKiAyLiBTd2FwaW5zIGNvdW50ZXI6IElmIHdlIG9ic2VydmUgc3dhcGlucywgaXQgaXMgYSBzaWduIHRoYXQgd2UgYXJlXG4xMDgyOlx0ICogICAgb3ZlcnNocmlua2luZyBhbmQgc2hvdWxkIHNsb3cgZG93bi4gV2UgbWFpbnRhaW4gYSBzd2FwaW5zIGNvdW50ZXIsIHdoaWNoXG4xMDgzOlx0ICogICAgaXMgY29uc3VtZWQgYW5kIHN1YnRyYWN0IGZyb20gdGhlIG51bWJlciBvZiBlbGlnaWJsZSBvYmplY3RzIG9uIHRoZSBMUlVcbjEwODQ6XHQgKiAgICBpbiB6c3dhcF9zaHJpbmtlcl9jb3VudCgpLlxuMTA4NTpcdCAqXG4xMDg2Olx0ICogMy4gQ29tcHJlc3Npb24gcmF0aW8uIFRoZSBiZXR0ZXIgdGhlIHdvcmtsb2FkIGNvbXByZXNzZXMsIHRoZSBsZXNzIGdhaW5zIHdlXG4xMDg3Olx0ICogICAgY2FuIGV4cGVjdCBmcm9tIHdyaXRlYmFjay4gV2Ugc2NhbGUgZG93biB0aGUgbnVtYmVyIG9mIG9iamVjdHMgYXZhaWxhYmxlXG4xMDg4Olx0ICogICAgZm9yIHJlY2xhaW0gYnkgdGhpcyByYXRpby5cbjEwODk6XHQgKi9cbjEwOTA6XHRzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxuMTA5MTpcdFx0XHRcdFx0ICAgICAgIHZvaWQgKmFyZylcbjEwOTI6XHR7XG4xMDkzOlx0XHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCB6c3dhcF9lbnRyeSwgbHJ1KTtcbjEwOTQ6XHRcdGJvb2wgKmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gKGJvb2wgKilhcmc7XG4xMDk1Olx0XHRzd3BfZW50cnlfdCBzd3BlbnRyeTtcbjEwOTY6XHRcdGVudW0gbHJ1X3N0YXR1cyByZXQgPSBMUlVfUkVNT1ZFRF9SRVRSWTtcbjEwOTc6XHRcdGludCB3cml0ZWJhY2tfcmVzdWx0O1xuMTA5ODpcdFxuMTA5OTpcdFx0LypcbjExMDA6XHRcdCAqIFNlY29uZCBjaGFuY2UgYWxnb3JpdGhtOiBpZiB0aGUgZW50cnkgaGFzIGl0cyByZWZlcmVuY2VkIGJpdCBzZXQsIGdpdmUgaXRcbjExMDE6XHRcdCAqIGEgc2Vjb25kIGNoYW5jZS4gT25seSBjbGVhciB0aGUgcmVmZXJlbmNlZCBiaXQgYW5kIHJvdGF0ZSBpdCBpbiB0aGVcbjExMDI6XHRcdCAqIHpzd2FwJiMzOTtzIExSVSBsaXN0LlxuMTEwMzpcdFx0ICovXG4xMTA0Olx0XHRpZiAoZW50cnktXHUwMDNlcmVmZXJlbmNlZCkge1xuMTEwNTpcdFx0XHRlbnRyeS1cdTAwM2VyZWZlcmVuY2VkID0gZmFsc2U7XG4xMTA2Olx0XHRcdHJldHVybiBMUlVfUk9UQVRFO1xuMTEwNzpcdFx0fVxuMTEwODpcdFxuMTEwOTpcdFx0LypcbjExMTA6XHRcdCAqIEFzIHNvb24gYXMgd2UgZHJvcCB0aGUgTFJVIGxvY2ssIHRoZSBlbnRyeSBjYW4gYmUgZnJlZWQgYnlcbjExMTE6XHRcdCAqIGEgY29uY3VycmVudCBpbnZhbGlkYXRpb24uIFRoaXMgbWVhbnMgdGhlIGZvbGxvd2luZzpcbjExMTI6XHRcdCAqXG4xMTEzOlx0XHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXG4xMTE0Olx0XHQgKiAgICB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSB0byBwaW4gdGhlIHN3YXAgZW50cnkgYW5kXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkyNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyBgd3JpdGViYWNrX3Jlc3VsdGAgSGFuZGxpbmcqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBzZWN0aW9uIG5vdywgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExMTUuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgd3JpdGViYWNrX3Jlc3VsdGAgdmFyaWFibGUgaXMgYmVpbmcgbWFuYWdlZCBhbmQgd2hhdCBvcGVyYXRpb25zIGFyZSBiZWluZyBwZXJmb3JtZWQgb24gaXQuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBjZXJ0YWluIHBhdHRlcm5zIGFuZCBwb3RlbnRpYWwgY29tcGxleGl0aWVzIGluIGRhdGEgY29uc2lzdGVuY3kgb3IgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byB0aGlzIHJlc3VsdC4gSSB3YW50IHRvIHNlZSBpZiBhbnkgY29uY3VycmVuY3kgaXNzdWVzIG1pZ2h0IGJlIGludm9sdmVkLCBvciBwZXJoYXBzIGhvdyB0aGUgcmVzdWx0IGludGVyYWN0cyB3aXRoIG90aGVyIGNydWNpYWwgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGZsb3cgb2YgZGF0YSBhbmQgZGV0ZXJtaW5lIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBhc3NpZ25tZW50IGFuZCBvcGVyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExNTpcdFx0ICogICAgdGhlbiB2YWxpZGF0ZSB0aGUgenN3YXAgZW50cnkgYWdhaW5zdCB0aGF0IHN3YXAgZW50cnkmIzM5O3NcbjExMTY6XHRcdCAqICAgIHRyZWUgdXNpbmcgcG9pbnRlciB2YWx1ZSBjb21wYXJpc29uLiBPbmx5IHdoZW4gdGhhdFxuMTExNzpcdFx0ICogICAgaXMgc3VjY2Vzc2Z1bCBjYW4gdGhlIGVudHJ5IGJlIGRlcmVmZXJlbmNlZC5cbjExMTg6XHRcdCAqXG4xMTE5Olx0XHQgKiAyLiBVc3VhbGx5LCBvYmplY3RzIGFyZSB0YWtlbiBvZmYgdGhlIExSVSBmb3IgcmVjbGFpbS4gSW5cbjExMjA6XHRcdCAqICAgIHRoaXMgY2FzZSB0aGlzIGlzbiYjMzk7dCBwb3NzaWJsZSwgYmVjYXVzZSBpZiByZWNsYWltIGZhaWxzXG4xMTIxOlx0XHQgKiAgICBmb3Igd2hhdGV2ZXIgcmVhc29uLCB3ZSBoYXZlIG5vIG1lYW5zIG9mIGtub3dpbmcgaWYgdGhlXG4xMTIyOlx0XHQgKiAgICBlbnRyeSBpcyBhbGl2ZSB0byBwdXQgaXQgYmFjayBvbiB0aGUgTFJVLlxuMTEyMzpcdFx0ICpcbjExMjQ6XHRcdCAqICAgIFNvIHJvdGF0ZSBpdCBiZWZvcmUgZHJvcHBpbmcgdGhlIGxvY2suIElmIHRoZSBlbnRyeSBpc1xuMTEyNTpcdFx0ICogICAgd3JpdHRlbiBiYWNrIG9yIGludmFsaWRhdGVkLCB0aGUgZnJlZSBwYXRoIHdpbGwgdW5saW5rXG4xMTI2Olx0XHQgKiAgICBpdC4gRm9yIGZhaWx1cmVzLCByb3RhdGlvbiBpcyB0aGUgcmlnaHQgdGhpbmcgYXMgd2VsbC5cbjExMjc6XHRcdCAqXG4xMTI4Olx0XHQgKiAgICBUZW1wb3JhcnkgZmFpbHVyZXMsIHdoZXJlIHRoZSBzYW1lIGVudHJ5IHNob3VsZCBiZSB0cmllZFxuMTEyOTpcdFx0ICogICAgYWdhaW4gaW1tZWRpYXRlbHksIGFsbW9zdCBuZXZlciBoYXBwZW4gZm9yIHRoaXMgc2hyaW5rZXIuXG4xMTMwOlx0XHQgKiAgICBXZSBkb24mIzM5O3QgZG8gYW55IHRyeWxvY2tpbmc7IC1FTk9NRU0gY29tZXMgY2xvc2VzdCxcbjExMzE6XHRcdCAqICAgIGJ1dCB0aGF0JiMzOTtzIGV4dHJlbWVseSByYXJlIGFuZCBkb2VzbiYjMzk7dCBoYXBwZW4gc3B1cmlvdXNseVxuMTEzMjpcdFx0ICogICAgZWl0aGVyLiBEb24mIzM5O3QgYm90aGVyIGRpc3Rpbmd1aXNoaW5nIHRoaXMgY2FzZS5cbjExMzM6XHRcdCAqL1xuMTEzNDpcdFx0bGlzdF9tb3ZlX3RhaWwoaXRlbSwgXHUwMDI2bC1cdTAwM2VsaXN0KTtcbjExMzU6XHRcbjExMzY6XHRcdC8qXG4xMTM3Olx0XHQgKiBPbmNlIHRoZSBscnUgbG9jayBpcyBkcm9wcGVkLCB0aGUgZW50cnkgbWlnaHQgZ2V0IGZyZWVkLiBUaGVcbjExMzg6XHRcdCAqIHN3cGVudHJ5IGlzIGNvcGllZCB0byB0aGUgc3RhY2ssIGFuZCBlbnRyeSBpc24mIzM5O3QgZGVyZWYmIzM5O2QgYWdhaW5cbjExMzk6XHRcdCAqIHVudGlsIHRoZSBlbnRyeSBpcyB2ZXJpZmllZCB0byBzdGlsbCBiZSBhbGl2ZSBpbiB0aGUgdHJlZS5cbjExNDA6XHRcdCAqL1xuMTE0MTpcdFx0c3dwZW50cnkgPSBlbnRyeS1cdTAwM2Vzd3BlbnRyeTtcbjExNDI6XHRcbjExNDM6XHRcdC8qXG4xMTQ0Olx0XHQgKiBJdCYjMzk7cyBzYWZlIHRvIGRyb3AgdGhlIGxvY2sgaGVyZSBiZWNhdXNlIHdlIHJldHVybiBlaXRoZXJcbjExNDU6XHRcdCAqIExSVV9SRU1PVkVEX1JFVFJZLCBMUlVfUkVUUlkgb3IgTFJVX1NUT1AuXG4xMTQ2Olx0XHQgKi9cbjExNDc6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmwtXHUwMDNlbG9jayk7XG4xMTQ4Olx0XG4xMTQ5Olx0XHR3cml0ZWJhY2tfcmVzdWx0ID0genN3YXBfd3JpdGViYWNrX2VudHJ5KGVudHJ5LCBzd3BlbnRyeSk7XG4xMTUwOlx0XG4xMTUxOlx0XHRpZiAod3JpdGViYWNrX3Jlc3VsdCkge1xuMTE1MjpcdFx0XHR6c3dhcF9yZWplY3RfcmVjbGFpbV9mYWlsJiM0MzsmIzQzOztcbjExNTM6XHRcdFx0cmV0ID0gTFJVX1JFVFJZO1xuMTE1NDpcdFxuMTE1NTpcdFx0XHQvKlxuMTE1NjpcdFx0XHQgKiBFbmNvdW50ZXJpbmcgYSBwYWdlIGFscmVhZHkgaW4gc3dhcCBjYWNoZSBpcyBhIHNpZ24gdGhhdCB3ZSBhcmUgc2hyaW5raW5nXG4xMTU3Olx0XHRcdCAqIGludG8gdGhlIHdhcm1lciByZWdpb24uIFdlIHNob3VsZCB0ZXJtaW5hdGUgc2hyaW5raW5nIChpZiB3ZSYjMzk7cmUgaW4gdGhlIGR5bmFtaWNcbjExNTg6XHRcdFx0ICogc2hyaW5rZXIgY29udGV4dCkuXG4xMTU5Olx0XHRcdCAqL1xuMTE2MDpcdFx0XHRpZiAod3JpdGViYWNrX3Jlc3VsdCA9PSAtRUVYSVNUIFx1MDAyNlx1MDAyNiBlbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSkge1xuMTE2MTpcdFx0XHRcdHJldCA9IExSVV9TVE9QO1xuMTE2MjpcdFx0XHRcdCplbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IHRydWU7XG4xMTYzOlx0XHRcdH1cbjExNjQ6XHRcdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDYxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBac3dhcCBXcml0ZWJhY2sgT3B0aW1pemF0aW9uKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZy4gVGhpcyBpcyBpbnRlcmVzdGluZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gYHpzd2FwLmNgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaGFuZGxlcyBlcnJvcnMgd2hlbiB0cnlpbmcgdG8gd3JpdGUgYSBwYWdlIGJhY2sgdG8gc3dhcC4gVGhlIGtleSBpcyBpbiB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIGBnZXRfc3dhcF9kZXZpY2VgLiBQcmV2aW91c2x5LCBhIE5VTEwgcmV0dXJuIGZyb20gYGdldF9zd2FwX2RldmljZShzd3BlbnRyeSlgIC0gaW5kaWNhdGluZyB0aGUgc3dhcCBkZXZpY2UgaXMgZ29uZSBvciB0aGUgZW50cnkgaXMgaW52YWxpZCAtIHJlc3VsdGVkIGluIGAtRUVYSVNUYCBiZWluZyByZXR1cm5lZC4KClRoaXMsIGhvd2V2ZXIsIHdhcyBwcm9ibGVtYXRpYy4gVGhlIGZ1bmN0aW9uIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIHdhcyBiZWluZyBtaXNpbnRlcnByZXRlZCBieSBpdHMgY2FsbGVycywgc3BlY2lmaWNhbGx5IGluIHRoZSBgc2hyaW5rX21lbWNnX2NiYCBjb250ZXh0LiBBIHJldHVybiBvZiBgLUVFWElTVGAgZnJvbSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCB3YXMgaW5jb3JyZWN0bHkgdHJpZ2dlcmluZyBhIHNwZWNpZmljIGNvZGUgcGF0aCB3aXRoaW4gYHNocmlua19tZW1jZ19jYmAuIFRoZSBsb2dpYyBhc3N1bWVkIHRoYXQgYC1FRVhJU1RgIG1lYW50IHRoZSBwYWdlICphbHJlYWR5KiBleGlzdGVkIGluIHRoZSBzd2FwIGNhY2hlLCB3aGljaCBpcyB3aGF0IGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKClgIHJldHVybnMgd2hlbiBhIHBhZ2UgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGNhY2hlLiBUaGlzLCB0aGVuLCBsZWQgdG8gcHJlbWF0dXJlIHRlcm1pbmF0aW9uIG9mIHRoZSByZWNsYWltIHByb2Nlc3MgKHJldHVybmluZyBgTFJVX1NUT1BgKSwgd3JvbmdseSBhc3N1bWluZyB0aGF0IHdlIHdlcmUgc2hyaW5raW5nIGludG8gdGhlIHdhcm1lciByZWdpb24uCgpUaGUgZml4LCBhcyBJIHNlZSBpdCwgaXMgZWxlZ2FudC4gIFRoZXkmIzM5O3ZlIGNoYW5nZWQgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGAtRUVYSVNUYCB0byBgLUVOT0VOVGAuIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiB0d28gc2VwYXJhdGUgZmFpbHVyZSBzY2VuYXJpb3M6ICBhIGdlbnVpbmUgJiMzNDtwYWdlIGFscmVhZHkgaW4gc3dhcCBjYWNoZSYjMzQ7IHNpdHVhdGlvbiAod2hlcmUgYC1FRVhJU1RgIGlzIGNvcnJlY3QpLCBhbmQgdGhlICYjMzQ7c3dhcCBkZXZpY2UgdW5hdmFpbGFibGUvZW50cnkgaW52YWxpZCYjMzQ7IGNvbmRpdGlvbiAod2hlcmUgYC1FTk9FTlRgIGlzIHRoZSBtb3JlIGFjY3VyYXRlIGVycm9yIGNvZGUpLiBUaGlzIGRpZmZlcmVudGlhdGlvbiBwcmV2ZW50cyB0aGUgc3B1cmlvdXMgYExSVV9TVE9QYCBzaWduYWwsIGVuc3VyaW5nIHRoZSByZWNsYWltIHByb2Nlc3MgcHJvY2VlZHMgY29ycmVjdGx5IHVubGVzcyBhIGxlZ2l0aW1hdGUgc3dhcCBjYWNoZSBjb25mbGljdCBpcyBlbmNvdW50ZXJlZC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSBpZiB0aGlzIGNoYW5nZSBhZmZlY3RzIGFueSBvdGhlciBjYWxsZXJzIG9mIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfd3JpdGViYWNrX2VudHJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9OTI0PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTk4Ni0gKi9cbm1tL3pzd2FwLmM6OTg3OnN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG5tbS96c3dhcC5jLTk4OC1cdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbi0tXG5tbS96c3dhcC5jPTEwOTA9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbi0tXG5tbS96c3dhcC5jLTExMTMtXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXG5tbS96c3dhcC5jOjExMTQ6XHQgKiAgICB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSB0byBwaW4gdGhlIHN3YXAgZW50cnkgYW5kXG5tbS96c3dhcC5jLTExMTUtXHQgKiAgICB0aGVuIHZhbGlkYXRlIHRoZSB6c3dhcCBlbnRyeSBhZ2FpbnN0IHRoYXQgc3dhcCBlbnRyeSYjMzk7c1xuLS1cbm1tL3pzd2FwLmMtMTE0OC1cbm1tL3pzd2FwLmM6MTE0OTpcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcbm1tL3pzd2FwLmMtMTE1MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IENHIFNocmlua2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBtZW1jZyBzaHJpbmtpbmcgYmVoYXZpb3IgYW5kIHNwZWNpZmljYWxseSB1bmRlcnN0YW5kIGhvdyB0aGUgYHNocmlua19tZW1jZ19jYmAgY2FsbGJhY2sgaXMgYmVpbmcgaW52b2tlZCBhbmQgd2hlcmUgdGhlIHpzd2FwIGNvbXBvbmVudCBnZXRzIGludm9sdmVkIGluIHRoaXMgcHJvY2Vzcy4gVGltZSB0byB0cmFjZSB0aGUgY2FsbHMuIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBjb2RlIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBpbnRlcmFjdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBjYWxscyB0byB0aGF0IHNwZWNpZmljIGNhbGxiYWNrIGZ1bmN0aW9uLiBUaGVuIEkmIzM5O2xsIHdvcmsgZnJvbSB0aGVyZSB0byBmaWd1cmUgb3V0IHRoZSBwYXRoIHRvIHpzd2FwIGludGVyYWN0aW9uIGluIG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfbWVtY2dfY2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbi0tXG5tbS96c3dhcC5jLTEwODktICovXG5tbS96c3dhcC5jOjEwOTA6c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbm1tL3pzd2FwLmMtMTA5MS1cdFx0XHRcdCAgICAgICB2b2lkICphcmcpXG4tLVxubW0venN3YXAuYz0xMTcxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS96c3dhcC5jLTExODItXG5tbS96c3dhcC5jOjExODM6XHRzaHJpbmtfcmV0ID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoXHUwMDI2enN3YXBfbGlzdF9scnUsIHNjLCBcdTAwMjZzaHJpbmtfbWVtY2dfY2IsXG5tbS96c3dhcC5jLTExODQtXHRcdFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcbi0tXG5tbS96c3dhcC5jPTEyODg9c3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3pzd2FwLmMtMTMwNS1cdFx0c2hydW5rICYjNDM7PSBsaXN0X2xydV93YWxrX29uZShcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZyxcbm1tL3pzd2FwLmM6MTMwNjpcdFx0XHRcdFx0ICAgIFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXHUwMDI2bnJfdG9fd2Fsayk7XG5tbS96c3dhcC5jLTEzMDctXHRcdHNjYW5uZWQgJiM0Mzs9IFNXQVBfQ0xVU1RFUl9NQVggLSBucl90b193YWxrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODY4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRob3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczoKCioqQ2hlY2tpbmcgYG1tL0tjb25maWdgIGZvciBac3dhcCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBac3dhcCBvcHRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBwYXJ0aWN1bGFybHkgdGhpcyBzd2FwIGNvbXByZXNzaW9uIGZlYXR1cmUuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHdoaWNoIG9wdGlvbnMgY29udHJvbCB0aGluZ3MgbGlrZSB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLCB0aGUgc2l6ZSBsaW1pdGF0aW9ucywgbWF5YmUgZXZlbiBzb21lIHBlcmZvcm1hbmNlIHR1bmluZyBwYXJhbWV0ZXJzLiBJIGFsc28gd2FudCB0byBzZWUgaWYgYW55IG5ldyBvcHRpb25zIGhhdmUgYmVlbiBhZGRlZCBzaW5jZSBteSBsYXN0IGRlZXAgZGl2ZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaWYgdGhlcmUgYXJlIG5ldyB3YXlzIHRvIHNwZWNpZnkgY2FjaGUgc2l6ZXMgYW5kIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgZGlmZmVyZW50IGhhcmR3YXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGVhY2ggb3B0aW9uIGFuZCB0aGUgaW1wYWN0IG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGVtIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcbi0tXG5tbS9LY29uZmlnLTIxLVxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM0LVxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy03Ni1cbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG5tbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWZsYXRlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04Mi1cbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbm1tL0tjb25maWctODQtXHRib29sIFwmIzM0O0xaT1wmIzM0O1xuLS1cbm1tL0tjb25maWctODgtXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXG5tbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0LVxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxubW0vS2NvbmZpZy05Ni1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDAtXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXG5tbS9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7TFo0SENcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNi1cbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxubW0vS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2Vcbm1tL0tjb25maWctMTEzLVxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjMwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgQ09ORklHX1pTV0FQIERlcGVuZGVuY2llcyBpbiBtbS9LY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19aU1dBUGAuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUsIHNvIEkga25vdyBpdCYjMzk7cyBnb2luZyB0byBiZSBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUg4oCTIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgcmVsZXZhbnQgZW50cmllcyBkaXJlY3RseS4gSSB3YW50IHRvIHNlZSB3aGF0IG90aGVyIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgYENPTkZJR19aU1dBUGAgY2FuIGV2ZW4gYmUgY29uc2lkZXJlZC4gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzPyBEb2VzIGl0IHJlcXVpcmUgc3BlY2lmaWMgTlVNQSBjb25maWd1cmF0aW9ucywgb3IgY2VydGFpbiBibG9jayBkZXZpY2UgZmVhdHVyZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBaU1dBUCBmaXRzIGludG8gdGhlIGxhcmdlciBtZW1vcnkgbWFuYWdlbWVudCBwaWN0dXJlLiBJdCYjMzk7bGwgYWxzbyBoZWxwIG1lIHRyb3VibGVzaG9vdCBhbnkgcG90ZW50aWFsIGJ1aWxkIGlzc3VlcyBpZiBJJiMzOTttIGVuYWJsaW5nIG9yIGRpc2FibGluZyBaU1dBUCwgb3IgZGVidWdnaW5nIHJlbGF0ZWQga2VybmVsIGlzc3Vlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XG4gIDE4Olx0XHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcbiAgMTk6XHRcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XG4gIDIwOlx0XHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFpTV0FQXG4gIDIzOlx0XHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gU1dBUFxuICAyNTpcdFx0c2VsZWN0IENSWVBUT1xuICAyNjpcdFx0c2VsZWN0IFpTTUFMTE9DXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXG4gIDI5Olx0XHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xuICAzMDpcdFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxuICAzMTpcdFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcbiAgMzI6XHRcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxuICAzMzpcdFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXG4gIDQwOlx0XHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxuICA0MTpcdFxuICA0MjpcdFx0ICBUaGUgc2VsZWN0aW9uIG1hZGUgaGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUga2VybmVsXG4gIDQzOlx0XHQgIGNvbW1hbmQgbGluZSAmIzM5O3pzd2FwLmVuYWJsZWQ9JiMzOTsgb3B0aW9uLlxuICA0NDpcdFxuICA0NTpcdGNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG4gIDQ2Olx0XHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbiAgNDc6XHRcdGRlcGVuZHMgb24gWlNXQVBcbiAgNDg6XHRcdGRlZmF1bHQgblxuICA0OTpcdFx0aGVscFxuICA1MDpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIHpzd2FwIHNocmlua2VyIHdpbGwgYmUgZW5hYmxlZCwgYW5kIHRoZSBwYWdlc1xuICA1MTpcdFx0ICBzdG9yZWQgaW4gdGhlIHpzd2FwIHBvb2wgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGZvciByZWNsYWltIChpLmVcbiAgNTI6XHRcdCAgd3JpdHRlbiBiYWNrIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlKSBvbiBtZW1vcnkgcHJlc3N1cmUuXG4gIDUzOlx0XG4gIDU0Olx0XHQgIFRoaXMgbWVhbnMgdGhhdCB6c3dhcCB3cml0ZWJhY2sgY291bGQgaGFwcGVuIGV2ZW4gaWYgdGhlIHBvb2wgaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXM6IHpzd2FwIFdyaXRlYmFjayBSZXR1cm4gQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGRldGVybWluaW5nIGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIFRoZSBjaGFuZ2UgaXMgaW4gYG1tL3pzd2FwLmNgLCB3aGljaCBpcyBkZWZpbml0ZWx5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIHRoYXQmIzM5O3MgYSBwb3NpdGl2ZSByaWdodCBvZmYgdGhlIGJhdC4gSXQgbG9va3MgbGlrZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBub3cgcmV0dXJucyBgLUVOT0VOVGAgaW5zdGVhZCBvZiBgLUVFWElTVGAgd2hlbiBgZ2V0X3N3YXBfZGV2aWNlKClgIGZhaWxzLgoKSSBjYW4gc2VlIHRoYXQsIHByZXZpb3VzbHksIGEgZmFpbHVyZSB3b3VsZCBsZWFkIHRvIGBzaHJpbmtfbWVtY2dfY2JgIHJldHVybmluZyBgTFJVX1NUT1BgIHByZW1hdHVyZWx5LiBUaGUgY2hhbmdlIHRvIGAtRU5PRU5UYCBjYXVzZXMgYExSVV9SRVRSWWAgdG8gYmUgcmV0dXJuZWQuIFRoaXMgaXMgY2xlYXJseSBhIGNoYW5nZSBpbiBjb250cm9sIGZsb3cgd2l0aGluIHRoZSB6c3dhcCBzaHJpbmtlciwgc28geWVzLCBhY2NvcmRpbmcgdG8gdGhlIGNyaXRlcmlhLCB0aGlzIHdhcnJhbnRzIGZ1enppbmc6IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gaW5jbHVkZSBhbnkgdWJpcXVpdG91cyBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBhcmUgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgKHRoZSBvbmUgSSYjMzk7bSBjaGFuZ2luZyksIGBzaHJpbmtfbWVtY2dfY2JgICh0aGUgY2FsbGVyKSwgYHpzd2FwX3Nocmlua2VyX3NjYW5gIGFuZCBgc2hyaW5rX21lbWNnYC4KCkhtbSwgYXJlIGFueSBvZiB0aGVzZSBzdGF0aWM/IFllcywgdGhleSBhcmUgYWxsIHN0YXRpYyEgSSB0aG91Z2h0IEkgbWlnaHQgcnVuIGludG8gdGhlICYjMzQ7c3RhdGljIGlubGluZSBmdW5jdGlvbiYjMzQ7IHRyYXAsIGJ1dCBzaW5jZSB0aGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucyBpbiBhIC5jIGZpbGUgYW5kIG5vdCBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBhIGhlYWRlciwgdGhleSAqc2hvdWxkKiBoYXZlIGRpc3RpbmN0IHN5bWJvbHMgaW4gdGhlIGtlcm5lbC4gYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgY2FsbGVkIG9uY2UgaW4gYHNocmlua19tZW1jZ19jYmAsIHNvIGl0IG1pZ2h0IGJlIGlubGluZWQuIEJ1dCBgc2hyaW5rX21lbWNnX2NiYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGBsaXN0X2xydV9zaHJpbmtfd2Fsa2AsIGFuZCBpdCBpcyB0aHVzIGltcG9zc2libGUgdG8gYmUgaW5saW5lZCEgYHpzd2FwX3Nocmlua2VyX3NjYW5gIGlzIGFsc28gcGFzc2VkIGEgZnVuY3Rpb24gcG9pbnRlciAoaXRzIGFkZHJlc3MgaXMgdGFrZW4pLCBzbyBpdCBtdXN0IGJlIGEgZnVuY3Rpb24gc3ltYm9sLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgcmVmbGVjdCB0aGUgYWx0ZXJlZCBsb2dpYyBhcmUgdGhlIHN5bWJvbHMgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGBzaHJpbmtfbWVtY2dfY2JgIGFuZCBgenN3YXBfc2hyaW5rZXJfc2NhbmAuIEkmIzM5O2xsIGZvY3VzIG9uIHRob3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9zaHJpbmtlcl9zY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS96c3dhcC5jPTEwOTA9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbi0tXG5tbS96c3dhcC5jLTExNzAtXG5tbS96c3dhcC5jOjExNzE6c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxubW0venN3YXAuYy0xMTcyLVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3pzd2FwLmM9MTI2ND1zdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxuLS1cbm1tL3pzd2FwLmMtMTI3Mi1cbm1tL3pzd2FwLmM6MTI3MzpcdHNocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0cyA9IHpzd2FwX3Nocmlua2VyX3NjYW47XG5tbS96c3dhcC5jLTEyNzQtXHRzaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0genN3YXBfc2hyaW5rZXJfY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzIxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb2RlIENoYW5nZXMgUmVsYXRlZCB0byBac3dhcCBhbmQgTWVtb3J5IFNocmlua2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBzaHJpbmtfbWVtY2dfY2JgIGFuZCBgenN3YXBfc2hyaW5rZXJfc2NhbmAgYXJlIGZ1bmN0aW9uIHBvaW50ZXJzLiBSaWdodCBhd2F5LCB0aGF0IHRlbGxzIG1lIHRoZXkgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgcHJlc2VudCBhcyBzeW1ib2xzIGluIHRoZSB2bWxpbnV4IGltYWdlLiBHb29kIHRvIGtub3csIGtlZXBzIHRoaW5ncyBjbGVhbmVyLiBBbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIG1vZGlmaWVkIGlzIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3ZlIGluY2x1ZGVkIGJvdGggYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGBzaHJpbmtfbWVtY2dfY2JgIGFuZCBwb3RlbnRpYWxseSBldmVuIGB6c3dhcF9zaHJpbmtlcl9zY2FuYCBpbiB0aGUgYnVpbGQgcHJvY2VzcyBpcyBleGNlbGxlbnQsIGRlbW9uc3RyYXRpbmcgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIHRoZSBiZXN0IHdheSB0byBkbyBpdC4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzOiB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBhY3R1YWxseSByZXF1aXJlZCBmb3IgenN3YXAgYW5kIGZvciB0aGUgc2hyaW5rZXIgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGNoZWNrIHRob3NlIGBFbmFibGVDb25maWdzYCB0byBiZSBzdXJlLiBJJiMzOTtsbCBwcm9iYWJseSBmaW5kIHNvbWUgY2x1ZXMgaW4gYG1tL3pzd2FwLmNgIHRvby4gSXQmIzM5O3MgYSBjbGFzc2ljIHBsYWNlIHRvIGxvb2sgZm9yIHRob3NlIGNvbmRpdGlvbmFsIGlmZGVmcyB0aGF0JiMzOTtsbCB0ZWxsIG1lIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZnwjaWYgSVNfRU5BQkxFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz02MTc9c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsXG4tLVxubW0venN3YXAuYy02NTAtLyogc2hvdWxkIGJlIGNhbGxlZCB1bmRlciBSQ1UgKi9cbm1tL3pzd2FwLmM6NjUxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3pzd2FwLmMtNjUyLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuLS1cbm1tL3pzd2FwLmM9MTY4MT12b2lkIHpzd2FwX3N3YXBvZmYoaW50IHR5cGUpXG4tLVxubW0venN3YXAuYy0xNzAwLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5tbS96c3dhcC5jOjE3MDE6I2lmZGVmIENPTkZJR19ERUJVR19GU1xubW0venN3YXAuYy0xNzAyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMyNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgbW0venN3YXAuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlbiBgbW0venN3YXAuY2AgZ2V0cyBjb21waWxlZC4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBtbS9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBidWlsZCBpbnN0cnVjdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgc2hvdWxkIHJlc2lkZS4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgbG9vayBmb3IgZGlyZWN0aXZlcyBvciBkZXBlbmRlbmNpZXMgdGhhdCByZWxhdGUgdG8gYHpzd2FwLmNgLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHRoaXMgc3BlY2lmaWMgZmlsZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBkaXJlY3QgcmVmZXJlbmNlIHRvIGl0LCBvciBpbmRpcmVjdCBpbmNsdXNpb24gdmlhIGEgbGFyZ2VyIG1vZHVsZS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Nzg9b2JqLSQoQ09ORklHX1NXQVApXHQmIzQzOz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfWlNXQVApXHQmIzQzOz0genN3YXAub1xubW0vTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX0hBU19ETUEpXHQmIzQzOz0gZG1hcG9vbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjI1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlpzd2FwIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGxpbmU6IGBvYmotJChDT05GSUdfWlNXQVApICYjNDM7PSB6c3dhcC5vYC4gVGhhdCB0ZWxscyBtZSB0aGUgenN3YXAgbW9kdWxlIGlzIGJlaW5nIGNvbXBpbGVkLCBidXQgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGBDT05GSUdfWlNXQVBgLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBpbiBgbW0vS2NvbmZpZ2A6IFllcCwgYENPTkZJR19aU1dBUGAgcmVxdWlyZXMgYFNXQVBgLCBzZWxlY3RzIGBDUllQVE9gIGFuZCBgWlNNQUxMT0NgLiBTdGFuZGFyZCBzdHVmZi4KCk5vdywgSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgdGhlIGRlZmF1bHQgc3RhdGUgb2YgenN3YXAuIFRoZSBjb2RlIG1lbnRpb25zIGBDT05GSUdfWlNXQVBfREVGQVVMVF9PTmAuIFRoYXQgbWFrZXMgaXQgc291bmQgbGlrZSB6c3dhcCBpcyBlbmFibGVkIGF0IGJvb3QgaWYgdGhpcyBjb25maWcgb3B0aW9uIGlzIHNldC4gT3RoZXJ3aXNlLCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBpdCBleHBsaWNpdGx5IHRocm91Z2ggYSBjb21tYW5kLWxpbmUgYXJndW1lbnQgb3Igc3lzZnMuIEkgbmVlZCB0byBrbm93IGhvdyBzeXprYWxsZXIgaXMgZW5hYmxpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LCBkb2VzIGl0IHBhc3MgYHpzd2FwLmVuYWJsZWQ9MWAgdG8gdGhlIGtlcm5lbD8gT3IgZG9lcyBpdCByZWx5IG9uIGBaU1dBUF9ERUZBVUxUX09OYCBiZWluZyBlbmFibGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gaGVyZSBpcyBrZXkgdG8gaW50ZXJwcmV0aW5nIHRoZSBmdXp6ZXIgcmVzdWx0cy4KCkFuZCB3aGF0IGFib3V0IHRoaXMgYENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYD8gV2hlcmUgaXMgdGhhdCBldmVuIHVzZWQ/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUuIExldCYjMzk7cyBmaW5kIG91dCBleGFjdGx5IHdoZXJlIGBDT05GSUdfWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAgc2hvd3MgdXAgaW4gYG1tL3pzd2FwLmNgLiBHb3R0YSB0cmFjZSB0aGUgbG9naWMgb2YgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MzU9Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL3pzd2FwLmM9MTIxPXN0YXRpYyBib29sIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQgPSBJU19FTkFCTEVEKFxubW0venN3YXAuYzoxMjI6XHRcdENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OKTtcbm1tL3pzd2FwLmMtMTIzLW1vZHVsZV9wYXJhbV9uYW1lZChzaHJpbmtlcl9lbmFibGVkLCB6c3dhcF9zaHJpbmtlcl9lbmFibGVkLCBib29sLCAwNjQ0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNzAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBac3dhcCBTaHJpbmtlciBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB6c3dhcF9zaHJpbmtlcl9lbmFibGVkYCBmbGFnLiBJIHNlZSBpdCYjMzk7cyBpbml0aWFsaXplZCB3aXRoIGBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OKWAuIEludGVyZXN0aW5nLiBUaGF0IG1lYW5zIGl0IGRlZmF1bHRzIHRvIHdoYXRldmVyIHRoZSBjb25maWcgc2V0dGluZyBpcy4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0IHNocmlua2VyIGlzIGVuYWJsZWQsIHRob3VnaCwgcmlnaHQ/CgpXYWl0IGEgbWludXRlLCBJIHNlZSB0aGF0IGBzaHJpbmtfbWVtY2dfY2JgIGlzIGV4ZWN1dGVkIHdoZW4gdGhlIHNocmlua2VyIGFjdHVhbGx5ICpydW5zKi4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gSSBoYXZlIHRvIHNlZSB3aGVyZSB0aGF0IGlzIHVzZWQuIFRoYXQgaXMgdGhlIGNyaXRpY2FsIHBhcnQgdG8gdW5kZXJzdGFuZCBub3csIHRvIHNlZSAqaG93KiB0aGlzIGZsYWcgYWN0dWFsbHkgYWZmZWN0cyBiZWhhdmlvci4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGB6c3dhcF9zaHJpbmtlcl9lbmFibGVkYCB2YXJpYWJsZSBpcyAqYWN0dWFsbHkqIGJlaW5nIGNoZWNrZWQuIEdvdHRhIHRyYWNlIHRoZSBjb2RlIGFuZCBzZWUgd2hlcmUgaXQgbWF0dGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfc2hyaW5rZXJfZW5hYmxlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz0xMTc9bW9kdWxlX3BhcmFtX25hbWVkKGFjY2VwdF90aHJlc2hvbGRfcGVyY2VudCwgenN3YXBfYWNjZXB0X3Rocl9wZXJjZW50LFxuLS1cbm1tL3pzd2FwLmMtMTIwLS8qIEVuYWJsZS9kaXNhYmxlIG1lbW9yeSBwcmVzc3VyZS1iYXNlZCBzaHJpbmtlci4gKi9cbm1tL3pzd2FwLmM6MTIxOnN0YXRpYyBib29sIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQgPSBJU19FTkFCTEVEKFxubW0venN3YXAuYy0xMjItXHRcdENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OKTtcbm1tL3pzd2FwLmM6MTIzOm1vZHVsZV9wYXJhbV9uYW1lZChzaHJpbmtlcl9lbmFibGVkLCB6c3dhcF9zaHJpbmtlcl9lbmFibGVkLCBib29sLCAwNjQ0KTtcbm1tL3pzd2FwLmMtMTI0LVxuLS1cbm1tL3pzd2FwLmM9MTE3MT1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4tLVxubW0venN3YXAuYy0xMTc2LVxubW0venN3YXAuYzoxMTc3Olx0aWYgKCF6c3dhcF9zaHJpbmtlcl9lbmFibGVkIHx8XG5tbS96c3dhcC5jLTExNzgtXHRcdFx0IW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc2MtXHUwMDNlbWVtY2cpKSB7XG4tLVxubW0venN3YXAuYz0xMTkyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4tLVxubW0venN3YXAuYy0xMjAxLVxubW0venN3YXAuYzoxMjAyOlx0aWYgKCF6c3dhcF9zaHJpbmtlcl9lbmFibGVkIHx8ICFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSlcbm1tL3pzd2FwLmMtMTIwMy1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDQ1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBac3dhcCBTaHJpbmtlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgenN3YXBfc2hyaW5rZXJfc2NhbmAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgdGhpcyBjb25kaXRpb25hbDogYGlmICghenN3YXBfc2hyaW5rZXJfZW5hYmxlZCB8fCAhbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzYy0mZ3Q7bWVtY2cpKWAuIFRoYXQmIzM5O3MgdGhlIGNydXggb2YgaG93IHRoZSBzaHJpbmtlciBiZWhhdmVzLiBOb3csIEkgcmVtZW1iZXIgdGhhdCBgQ09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gIGRlZmF1bHRzIHRvICYjMzk7biYjMzk7LiBSaWdodCwgc28gaWYgdGhhdCBpc24mIzM5O3Qgc2V0LCBgenN3YXBfc2hyaW5rZXJfZW5hYmxlZGAgaXMgZ29pbmcgdG8gYmUgZmFsc2UgdW5sZXNzIHNvbWVvbmUmIzM5O3MgZXhwbGljaXRseSBlbmFibGVkIGl0IHRocm91Z2ggc3lzZnMuCgpBbHJpZ2h0LCBzbyB0aGUgaW1wbGljYXRpb25zIGhlcmUgYXJlIHByZXR0eSBjbGVhci4gYFpTV0FQYCwgYFpTV0FQX0RFRkFVTFRfT05gLCBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAsIGFuZCBvZiBjb3Vyc2UgYFNXQVBgLCBhcmUgdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhdCBwbGF5LiBUaGV5IGVzc2VudGlhbGx5IGRldGVybWluZSBpZiBhbmQgaG93IHRoZSBzaHJpbmtlciBldmVuIHJ1bnMuIFRoZXNlIGFyZSB0aGUga2V5IGxldmVycy4KCkhvbGQgb24gYSBzZWNvbmQsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcuLi4gSSYjMzk7bSBnb2luZyB0byBsb29rIGRlZXBlciBpbnRvIGBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkYC4gV2hlcmUgaXMgdGhhdCBmdW5jdGlvbmFsaXR5IGRlZmluZWQ/IEdvdHRhIGJlIHN1cmUgSSYjMzk7bSBjbGVhciBvbiBob3cgdGhhdCBwbGF5cyBpbnRvIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODk2PXZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4OTc6Ym9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODk4LSNlbHNlXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkwNz1zdGF0aWMgaW5saW5lIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTkxMC19XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTExOnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MTIte1xuLS1cbm1tL21lbWNvbnRyb2wuYz02MDU5PXZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxuLS1cbm1tL21lbWNvbnRyb2wuYy02MDc5LVxubW0vbWVtY29udHJvbC5jOjYwODA6Ym9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL21lbWNvbnRyb2wuYy02MDgxLXtcbi0tXG5tbS9wYWdlX2lvLmM9MjA0PWludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3BhZ2VfaW8uYy0yNDMtXHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9wYWdlX2lvLmM6MjQ0Olx0aWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKGZvbGlvX21lbWNnKGZvbGlvKSkpIHtcbm1tL3BhZ2VfaW8uYy0yNDUtXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm1tL3pzd2FwLmM9ODQwPXN0YXRpYyBib29sIHpzd2FwX2NvbXByZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuLS1cbm1tL3pzd2FwLmMtODg1LVx0XHRyY3VfcmVhZF9sb2NrKCk7XG5tbS96c3dhcC5jOjg4NjpcdFx0aWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKFxubW0venN3YXAuYy04ODctXHRcdFx0XHRcdGZvbGlvX21lbWNnKHBhZ2VfZm9saW8ocGFnZSkpKSkge1xuLS1cbm1tL3pzd2FwLmM9MTE3MT1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4tLVxubW0venN3YXAuYy0xMTc3LVx0aWYgKCF6c3dhcF9zaHJpbmtlcl9lbmFibGVkIHx8XG5tbS96c3dhcC5jOjExNzg6XHRcdFx0IW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc2MtXHUwMDNlbWVtY2cpKSB7XG5tbS96c3dhcC5jLTExNzktXHRcdHNjLVx1MDAzZW5yX3NjYW5uZWQgPSAwO1xuLS1cbm1tL3pzd2FwLmM9MTE5Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuLS1cbm1tL3pzd2FwLmMtMTIwMS1cbm1tL3pzd2FwLmM6MTIwMjpcdGlmICghenN3YXBfc2hyaW5rZXJfZW5hYmxlZCB8fCAhbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChtZW1jZykpXG5tbS96c3dhcC5jLTEyMDMtXHRcdHJldHVybiAwO1xuLS1cbm1tL3pzd2FwLmM9MTI4OD1zdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0venN3YXAuYy0xMjkxLVxubW0venN3YXAuYzoxMjkyOlx0aWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSlcbm1tL3pzd2FwLmMtMTI5My1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzkxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZGAgVW5kZXIgU2NydXRpbnkqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWRgIGZ1bmN0aW9uLCBwYXJ0aWN1bGFybHkgd2hlbiBgQ09ORklHX01FTUNHYCAqaXNuJiMzOTt0KiBlbmFibGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgaW4gdGhpcyBzcGVjaWZpYyBzY2VuYXJpby4gVGhlIGluY2x1ZGUgZmlsZSBgbGludXgvbWVtY29udHJvbC5oYCBzZWVtcyB0byBoYXZlIHRoZSBhbnN3ZXI6IGEgc2ltcGxlIGlubGluZSBmdW5jdGlvbiB0aGF0ICphbHdheXMqIHJldHVybnMgYHRydWVgIGlmIGBDT05GSUdfTUVNQ0dgIGlzIG9mZi4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIOKAkyBpdCBlZmZlY3RpdmVseSBtYWtlcyB6c3dhcCB3cml0ZWJhY2sgYWx3YXlzIGVuYWJsZWQgaW4gdGhlIGFic2VuY2Ugb2YgbWVtb3J5IGNncm91cHMuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBtbS9tZW1jb250cm9sLmM6NjA4MGAgdG8gc2VlIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBmbGFnICppcyogc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjA4MDpcdGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG42MDgxOlx0e1xuNjA4MjpcdFx0LyogaWYgenN3YXAgaXMgZGlzYWJsZWQsIGRvIG5vdCBibG9jayBwYWdlcyBnb2luZyB0byB0aGUgc3dhcHBpbmcgZGV2aWNlICovXG42MDgzOlx0XHRpZiAoIXpzd2FwX2lzX2VuYWJsZWQoKSlcbjYwODQ6XHRcdFx0cmV0dXJuIHRydWU7XG42MDg1Olx0XG42MDg2Olx0XHRmb3IgKDsgbWVtY2c7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKVxuNjA4NzpcdFx0XHRpZiAoIVJFQURfT05DRShtZW1jZy1cdTAwM2V6c3dhcF93cml0ZWJhY2spKVxuNjA4ODpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjYwODk6XHRcbjYwOTA6XHRcdHJldHVybiB0cnVlO1xuNjA5MTpcdH1cbjYwOTI6XHRcbjYwOTM6XHRzdGF0aWMgdTY0IHpzd2FwX2N1cnJlbnRfcmVhZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxuNjA5NDpcdFx0XHRcdCAgICAgIHN0cnVjdCBjZnR5cGUgKmNmdClcbjYwOTU6XHR7XG42MDk2Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNzcyk7XG42MDk3Olx0XG42MDk4Olx0XHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnKTtcbjYwOTk6XHRcdHJldHVybiBtZW1jZ19wYWdlX3N0YXRlKG1lbWNnLCBNRU1DR19aU1dBUF9CKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMzcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCAmYW1wOyBac3dhcCBXcml0ZWJhY2sqKgoKQWxyaWdodCwgc28gdGhlIGRlZmF1bHQgc3RhdGUgZm9yIGBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkYCBpcyBzZXQgdG8gdHJ1ZS4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cg4oCTIGl0IG1lYW5zIHdlJiMzOTtyZSBwcm9iYWJseSBhbHJlYWR5IGxldmVyYWdpbmcgenN3YXAgd3JpdGViYWNrIGluIG1hbnkgY29tbW9uIGNvbmZpZ3VyYXRpb25zLiBCdXQgdGhhdCBicmluZ3MgdXAgYW4gaW1wb3J0YW50IHF1ZXN0aW9uOiBXaGF0IHNwZWNpZmljYWxseSAqdHJpZ2dlcnMqIHRoZSBgc2hyaW5rX21lbWNnKClgIGZ1bmN0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBtZW1vcnkgY2dyb3VwIHNocmlua2luZyBpcyBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIG91ciBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvciwgZXNwZWNpYWxseSBpbiByZXNvdXJjZS1jb25zdHJhaW5lZCBlbnZpcm9ubWVudHMgb3Igd2hlbiBkZWFsaW5nIHdpdGggY29udGFpbmVyaXphdGlvbi4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hhdCBjb25kaXRpb25zIGNhdXNlIHRoYXQgc2hyaW5rIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyBsaWUsIGFuZCB0aGF0IHdpbGwgdWx0aW1hdGVseSBoZWxwIG1lIGRlY2lkZSBob3cgdG8gb3B0aW1pemUgbXkgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19tZW1jZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbi0tXG5tbS96c3dhcC5jLTEwODktICovXG5tbS96c3dhcC5jOjEwOTA6c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbm1tL3pzd2FwLmMtMTA5MS1cdFx0XHRcdCAgICAgICB2b2lkICphcmcpXG4tLVxubW0venN3YXAuYz0xMTcxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS96c3dhcC5jLTExODItXG5tbS96c3dhcC5jOjExODM6XHRzaHJpbmtfcmV0ID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoXHUwMDI2enN3YXBfbGlzdF9scnUsIHNjLCBcdTAwMjZzaHJpbmtfbWVtY2dfY2IsXG5tbS96c3dhcC5jLTExODQtXHRcdFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcbi0tXG5tbS96c3dhcC5jPTEyNjQ9c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcbi0tXG5tbS96c3dhcC5jLTEyODctICovXG5tbS96c3dhcC5jOjEyODg6c3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0venN3YXAuYy0xMjg5LXtcbi0tXG5tbS96c3dhcC5jLTEzMDUtXHRcdHNocnVuayAmIzQzOz0gbGlzdF9scnVfd2Fsa19vbmUoXHUwMDI2enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2csXG5tbS96c3dhcC5jOjEzMDY6XHRcdFx0XHRcdCAgICBcdTAwMjZzaHJpbmtfbWVtY2dfY2IsIE5VTEwsIFx1MDAyNm5yX3RvX3dhbGspO1xubW0venN3YXAuYy0xMzA3LVx0XHRzY2FubmVkICYjNDM7PSBTV0FQX0NMVVNURVJfTUFYIC0gbnJfdG9fd2Fsaztcbi0tXG5tbS96c3dhcC5jPTEzMTc9c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxubW0venN3YXAuYy0xMzgyLVxubW0venN3YXAuYzoxMzgzOlx0XHRyZXQgPSBzaHJpbmtfbWVtY2cobWVtY2cpO1xubW0venN3YXAuYy0xMzg0LVx0XHQvKiBkcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgKi9cbi0tXG5tbS96c3dhcC5jPTE0ODg9Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtMTUwNi1cdFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbm1tL3pzd2FwLmM6MTUwNzpcdFx0aWYgKHNocmlua19tZW1jZyhtZW1jZykpIHtcbm1tL3pzd2FwLmMtMTUwOC1cdFx0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTE5CgkJCQkJCQlvdXRwdXQ6IDIxOAoJCQkJCQkJdGhvdWdodHM6IDczNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBac3dhcCBTaHJpbmtpbmcgYW5kIFdyaXRlYmFjayBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHRoZSBvcHRpbWFsIGFwcHJvYWNoIGZvciBmdXp6aW5nIGEgcmVjZW50IHBhdGNoIHJlbGF0ZWQgdG8genN3YXAgd3JpdGViYWNrIGFuZCBzaHJpbmtpbmcuCgpGaXJzdCwgSSBpZGVudGlmaWVkIHRoYXQgdGhlIGZ1bmN0aW9ucyBgc2hyaW5rX21lbWNnYCAoY2FsbGVkIGZyb20gYHpzd2FwX3N0b3JlYCBhbmQgYHNocmlua193b3JrZXJgKSBhbmQgYHpzd2FwX3Nocmlua2VyX3NjYW5gIChjYWxsZWQgYnkgdGhlIHNocmlua2VyIHN1YnN5c3RlbSkgYXJlIGtleSBlbnRyeSBwb2ludHMuIFRoZSBsYXR0ZXIgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgY29ubmVjdHMgdG8gYHNocmlua19tZW1jZ19jYmAuIE5vdywgSSBuZWVkIHRvIGtub3cgd2hpY2gga2VybmVsIGNvbmZpZ3MgY29udHJvbCB0aGlzIGZ1bmN0aW9uYWxpdHkuIExvb2tpbmcgaW50byBgbW0vS2NvbmZpZ2AsIGl0JiMzOTtzIGNsZWFyIHRoYXQgYFNXQVBgLCBgWlNXQVBgLCBgWlNXQVBfREVGQVVMVF9PTmAsIGFuZCBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAgYXJlIHRoZSByZWxldmFudCBmbGFncy4gYE1FTUNHYCBpcyBpbmRpcmVjdGx5IHJlbGF0ZWQsIGdpdmVuIHpzd2FwJiMzOTtzIHVzZSBvZiBtZW1jZyBsaXN0X2xydSwgYWx0aG91Z2ggbGlzdF9scnUgaXRzZWxmIGRvZXNuJiMzOTt0IHJlcXVpcmUgTUVNQ0cuCgpOZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCBieSB0aGUgcGF0Y2guIEkmIzM5O3ZlIGZvY3VzZWQgb24gYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGNoYW5nZWQuIFRoZW4gSSB6ZXJvZWQgaW4gb24gYHNocmlua19tZW1jZ19jYmAsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSByZXR1cm4gdmFsdWUgb2YgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgYW5kIGJyYW5jaGVzIGJhc2VkIG9uIHRoZSByZXR1cm5lZCBlcnJvciBjb2RlLCBlc3BlY2lhbGx5IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIGAtRUVYSVNUYCBhbmQgb3RoZXIgZXJyb3IgY29kZXMsIGFuZCB0aGUgYHpzd2FwX3Nocmlua2VyX3NjYW5gIGZ1bmN0aW9uIHdoaWNoIGNhbGxzIGBzaHJpbmtfbWVtY2dfY2JgLiBBbmQgb2YgY291cnNlLCBgc2hyaW5rX21lbWNnYCBpdHNlbGYsIGFzIGl0IGNhbGxzIGBsaXN0X2xydV93YWxrX29uZWAgd2l0aCBgc2hyaW5rX21lbWNnX2NiYC4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3BlY2lmaWMgdG8genN3YXAsIHNvIHRoZSBtb2RpZmljYXRpb24gaXMgbm90IHViaXF1aXRvdXMuIFRoZXkgYWxsIHJlbGF0ZSB0byB6c3dhcCB3cml0ZWJhY2sgYW5kIHNocmlua2luZyB3aGVuIHN3YXBwaW5nLgoKU28sIGZvciBgc2V0LXJlc3VsdHNgLCBJIGNhbiBjb25maWRlbnRseSBpbmNsdWRlOgoKKiAgICoqYEVuYWJsZUNvbmZpZ3NgOioqIGBbJiMzNDtTV0FQJiMzNDssICYjMzQ7WlNXQVAmIzM0OywgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDssICYjMzQ7WlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTiYjMzQ7XWAKKiAgICoqYEZvY3VzU3ltYm9sc2A6KiogYFsmIzM0O3pzd2FwX3dyaXRlYmFja19lbnRyeSYjMzQ7LCAmIzM0O3Nocmlua19tZW1jZ19jYiYjMzQ7LCAmIzM0O3pzd2FwX3Nocmlua2VyX3NjYW4mIzM0OywgJiMzNDtzaHJpbmtfbWVtY2cmIzM0O11gCiogICAqKmBSZWFzb25pbmdgOioqIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgYHpzd2FwX3dyaXRlYmFja19lbnRyeSgpYCB3aGVuIHN3YXAgZGV2aWNlIHJldHJpZXZhbCBmYWlscy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGlzIGNvZGUgZnJvbSBgLUVFWElTVGAgdG8gYC1FTk9FTlRgLiBJbiBgc2hyaW5rX21lbWNnX2NiKClgLCBgLUVFWElTVGAgY2F1c2VkIHRoZSBzaHJpbmtlciB0byBzdG9wLCBpbnRlcnByZXRpbmcgdGhpcyBhcyBmaW5kaW5nIGEgc3dhcHBlZCBwYWdlLiBOb3cgdGhlIGNoYW5nZWQgZXJyb3IgY29kZSB3aWxsIGxlYWQgdG8gdGhlIHNocmlua2luZyBjb250aW51ZS4gVGhpcyBkaXJlY3RseSBhbHRlcnMgdGhlIGNvbnRyb2wgZmxvdyBhbmQgdGVybWluYXRpb24gYmVoYXZpb3Igb2YgenN3YXAgc2hyaW5rZXIgaXRlcmF0aW9ucyBkdXJpbmcgd3JpdGViYWNrLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIHdhcnJhbnRzIGZ1enppbmcuCiogICAqKmBXb3J0aEZ1enppbmdgOioqIGB0cnVlYAoKSSYjMzk7bSBzYXRpc2ZpZWQgd2l0aCB0aGlzIGFuYWx5c2lzLCB3aGljaCBwcm92aWRlcyBhIGNvbmNpc2UgeWV0IHRob3JvdWdoIGp1c3RpZmljYXRpb24gZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQX0RFRkFVTFRfT04mIzM0OywKICAgICYjMzQ7WlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19lbnRyeSYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbWVtY2dfY2ImIzM0OywKICAgICYjMzQ7enN3YXBfc2hyaW5rZXJfc2NhbiYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbWVtY2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgaW4gbW0venN3YXAuYyB0byByZXR1cm4gLUVOT0VOVCBpbnN0ZWFkIG9mIC1FRVhJU1Qgd2hlbiBnZXRfc3dhcF9kZXZpY2UoKSBmYWlscy4gSW4gc2hyaW5rX21lbWNnX2NiKCksIC1FRVhJU1QgaXMgc3BlY2lmaWNhbGx5IGNoZWNrZWQgdG8gZGV0ZWN0IHBhZ2VzIGFscmVhZHkgY2FjaGVkIGluIHN3YXAgY2FjaGUsIHdoaWNoIHRyaWdnZXJzIExSVV9TVE9QIHRvIHRlcm1pbmF0ZSBzaHJpbmtpbmcuIENoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgYWx0ZXJzIHRoZSBzaHJpbmtlciYjMzk7cyBlcnJvciBoYW5kbGluZyBhbmQgcmV0cnkgbG9vcCBiZWhhdmlvciB1bmRlciBjb25jdXJyZW50IHN3YXBvZmYvZGV2aWNlIHJlbW92YWwuIEFzIHRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiB6c3dhcCB3cml0ZWJhY2sgYW5kIExSVSByZWNsYW1hdGlvbiwgaXQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OywKICAgICYjMzQ7c2hyaW5rX21lbWNnX2NiJiMzNDssCiAgICAmIzM0O3pzd2FwX3Nocmlua2VyX3NjYW4mIzM0OywKICAgICYjMzQ7c2hyaW5rX21lbWNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHpzd2FwX3dyaXRlYmFja19lbnRyeSgpIGluIG1tL3pzd2FwLmMgdG8gcmV0dXJuIC1FTk9FTlQgaW5zdGVhZCBvZiAtRUVYSVNUIHdoZW4gZ2V0X3N3YXBfZGV2aWNlKCkgZmFpbHMuIEluIHNocmlua19tZW1jZ19jYigpLCAtRUVYSVNUIGlzIHNwZWNpZmljYWxseSBjaGVja2VkIHRvIGRldGVjdCBwYWdlcyBhbHJlYWR5IGNhY2hlZCBpbiBzd2FwIGNhY2hlLCB3aGljaCB0cmlnZ2VycyBMUlVfU1RPUCB0byB0ZXJtaW5hdGUgc2hyaW5raW5nLiBDaGFuZ2luZyB0aGUgcmV0dXJuIHZhbHVlIGFsdGVycyB0aGUgc2hyaW5rZXImIzM5O3MgZXJyb3IgaGFuZGxpbmcgYW5kIHJldHJ5IGxvb3AgYmVoYXZpb3IgdW5kZXIgY29uY3VycmVudCBzd2Fwb2ZmL2RldmljZSByZW1vdmFsLiBBcyB0aGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4genN3YXAgd3JpdGViYWNrIGFuZCBMUlUgcmVjbGFtYXRpb24sIGl0IHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGNoYW5nZXMgdGhlIGVycm9yIHJldHVybiB2YWx1ZSBpbiBgenN3YXBfd3JpdGViYWNrX2VudHJ5KClgIGZyb20gYC1FRVhJU1RgIHRvIGAtRU5PRU5UYCB3aGVuIGBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpYCByZXR1cm5zIE5VTEwuIFRoaXMgcHJldmVudHMgdGhlIHpzd2FwIHNocmlua2VyIChgc2hyaW5rX21lbWNnX2NiYCkgZnJvbSBmYWxzZWx5IGFzc3VtaW5nIHRoZSBwYWdlIGlzIGFscmVhZHkgaW4gdGhlIHN3YXAgY2FjaGUgKHdoaWNoIGNoZWNrcyBmb3IgYHdyaXRlYmFja19yZXN1bHQgPT0gLUVFWElTVGAgdG8gYWJvcnQgc2hyaW5raW5nKS4gVGhlIGNoYW5nZSBpcyBzdHJpY3RseSBhIGxvZ2ljL2Vycm9yIGNvZGUgZml4IGluIHRoZSBzd2FwIHJlY2xhaW0gcGF0aDsgaXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIENvbnNlcXVlbnRseSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZDRiYjcxOWZjYTVmZWM1MmI3NjYzNjg4ZDcwMGQxODg5ODM5ZjE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMDc6MDE6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCAzN2YzNGU0MDZjOGUzLi5iOTk0OGQ0NjU3ZDI2IDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTk5OCw3ICYjNDM7OTk4LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAkvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqLwogCXNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTsKIAlpZiAoIXNpKQotCQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJCXJldHVybiAtRU5PRU5UOwogCiAJbXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKIAlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgTmVlZCBmb3IgYSBLTVNBTiBGdXp6aW5nIFNlc3Npb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgTGludXgga2VybmVsIHBhdGNoIGZvciBgbW0venN3YXAuY2AgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhpcyBpcyBzdGFuZGFyZCBkZXZlbG9wZXIgUUEsIHJpZ2h0PyBKdXN0IGRvaW5nIG15IGR1ZSBkaWxpZ2VuY2UsIGV2YWx1YXRpbmcgdGhlIHBvdGVudGlhbCBmb3Igc2FuaXRpemVyIGFwcGxpY2FiaWxpdHkg4oCTIEtBU0FOIHZlcnN1cyBLTVNBTiwgaW4gdGhpcyBjYXNlLiBObyBtYWxpY2lvdXMgaW50ZW50LCBubyBleHBsb2l0IGdlbmVyYXRpb24sIGp1c3QgdGhlIHVzdWFsIFFBIHByb2Nlc3MuIFNldmVyaXR5LXdpc2UsIEkmIzM5O2Qgc2F5IHRoaXMgaXMgcHJldHR5IGJlbmlnbiwgbm90aGluZyB0byByYWlzZSBhbnkgYWxhcm1zLgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGY6IGl0IHNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLiBUaGUgZGlmZiBzaG93cyBhIHNpbXBsZSByZXBsYWNlbWVudCBvZiBgLUVFWElTVGAgd2l0aCBgLUVOT0VOVGAgd2l0aGluIHRoZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBmdW5jdGlvbi4gTm93LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyByZXR1cm4gdmFsdWUgbWF0dGVycy4gVGhlIGNvbnRleHQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBzd2FwIGNhY2hlIGZvbGlvIGFsbG9jYXRpb24uCgpTbywgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBgbW0venN3YXAuY2AgYXJvdW5kIGxpbmUgOTk4LCBzZWUgd2hlcmUgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgY2FsbGVkLCBhbmQgdGhlbiBmaWd1cmUgb3V0IGhvdyB0aGF0IHJldHVybiB2YWx1ZSBpcyB1c2VkIHVwc3RyZWFtLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGFjdCBvZiB0aGUgcmV0dXJuIHZhbHVlIGNoYW5nZS4gTG9va3MgbGlrZSBpdCYjMzk7cyB0aW1lIHRvIGZpcmUgdXAgYGdyZXBwZXJgIChvciB1c2UgYHJlYWQtZmlsZWApIHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugb24gZXJyb3IgaGFuZGxpbmcgYW5kIGNvbnRyb2wgZmxvdy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIGRlY2lkZSBpZiBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeSBvciBpZiB0aGUgZXhpc3RpbmcgS0FTQU4gY292ZXJhZ2UgaXMgc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHQgKiBUaGlzIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGEgXCYjMzQ7cmVzdW1lZCB3cml0ZWJhY2tcJiMzNDsgb2YgdGhlIGZvbGlvXG4gOTgxOlx0ICogdG8gdGhlIHN3YXAgZGV2aWNlLiAgV2UgYXJlIGJhc2ljYWxseSByZXN1bWluZyB0aGUgc2FtZSBzd2FwXG4gOTgyOlx0ICogd3JpdGViYWNrIHBhdGggdGhhdCB3YXMgaW50ZXJjZXB0ZWQgd2l0aCB0aGUgenN3YXBfc3RvcmUoKVxuIDk4MzpcdCAqIGluIHRoZSBmaXJzdCBwbGFjZS4gIEFmdGVyIHRoZSBmb2xpbyBoYXMgYmVlbiBkZWNvbXByZXNzZWQgaW50b1xuIDk4NDpcdCAqIHRoZSBzd2FwIGNhY2hlLCB0aGUgY29tcHJlc3NlZCB2ZXJzaW9uIHN0b3JlZCBieSB6c3dhcCBjYW4gYmVcbiA5ODU6XHQgKiBmcmVlZC5cbiA5ODY6XHQgKi9cbiA5ODc6XHRzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIDk4ODpcdFx0XHRcdFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxuIDk4OTpcdHtcbiA5OTA6XHRcdHN0cnVjdCB4YXJyYXkgKnRyZWU7XG4gOTkxOlx0XHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwZW50cnkpO1xuIDk5MjpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiA5OTM6XHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XG4gOTk0Olx0XHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XG4gOTk1Olx0XHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XG4gOTk2Olx0XHRpbnQgcmV0ID0gMDtcbiA5OTc6XHRcbiA5OTg6XHRcdC8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovXG4gOTk5Olx0XHRzaSA9IGdldF9zd2FwX2RldmljZShzd3BlbnRyeSk7XG4xMDAwOlx0XHRpZiAoIXNpKVxuMTAwMTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbjEwMDI6XHRcbjEwMDM6XHRcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4xMDA0Olx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbjEwMDU6XHRcdFx0XHRcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcbjEwMDY6XHRcdHB1dF9zd2FwX2RldmljZShzaSk7XG4xMDA3Olx0XG4xMDA4Olx0XHQvKlxuMTAwOTpcdFx0ICogU3dhcCBjYWNoZSBhbGxvY2F0aW9uIG1pZ2h0IGZhaWwgZHVlIHRvIE9PTSwgb3IgdGhlIGVudHJ5XG4xMDEwOlx0XHQgKiBtYXkgYWxyZWFkeSBiZSBjYWNoZWQgZHVlIHRvIGNvbmN1cnJlbnQgc3dhcGluIG9yIGhhdmUgYmVlblxuMTAxMTpcdFx0ICogZnJlZWQuIElmIGFscmVhZHkgY2FjaGVkLCBhIGNvbmN1cnJlbnQgc3dhcGluIG1hZGUgdGhlIGZvbGlvXG4xMDEyOlx0XHQgKiBob3QsIHNvIHNraXAgaXQuIEZvciB0aGUgdW5saWtlbHkgY29uY3VycmVudCBzaHJpbmtlciBjYXNlLFxuMTAxMzpcdFx0ICogaXQgd2lsbCBiZSB1bmxpbmtlZCBhbmQgZnJlZWQgd2hlbiBpbnZhbGlkYXRlZCBhbnl3YXkuXG4xMDE0Olx0XHQgKi9cbjEwMTU6XHRcdGlmIChJU19FUlIoZm9saW8pKVxuMTAxNjpcdFx0XHRyZXR1cm4gUFRSX0VSUihmb2xpbyk7XG4xMDE3Olx0XG4xMDE4Olx0XHQvKlxuMTAxOTpcdFx0ICogZm9saW8gaXMgbG9ja2VkLCBhbmQgdGhlIHN3YXBjYWNoZSBpcyBub3cgc2VjdXJlZCBhZ2FpbnN0XG4xMDIwOlx0XHQgKiBjb25jdXJyZW50IHN3YXBwaW5nIHRvIGFuZCBmcm9tIHRoZSBzbG90LCBhbmQgY29uY3VycmVudFxuMTAyMTpcdFx0ICogc3dhcG9mZiBzbyB3ZSBjYW4gc2FmZWx5IGRlcmVmZXJlbmNlIHRoZSB6c3dhcCB0cmVlIGhlcmUuXG4xMDIyOlx0XHQgKiBWZXJpZnkgdGhhdCB0aGUgc3dhcCBlbnRyeSBoYXNuJiMzOTt0IGJlZW4gaW52YWxpZGF0ZWQgYW5kIHJlY3ljbGVkXG4xMDIzOlx0XHQgKiBiZWhpbmQgb3VyIGJhY2tzLCB0byBhdm9pZCBvdmVyd3JpdGluZyBhIG5ldyBzd2FwIGZvbGlvIHdpdGhcbjEwMjQ6XHRcdCAqIG9sZCBjb21wcmVzc2VkIGRhdGEuIE9ubHkgd2hlbiB0aGlzIGlzIHN1Y2Nlc3NmdWwgY2FuIHRoZSBlbnRyeVxuMTAyNTpcdFx0ICogYmUgZGVyZWZlcmVuY2VkLlxuMTAyNjpcdFx0ICovXG4xMDI3Olx0XHR0cmVlID0gc3dhcF96c3dhcF90cmVlKHN3cGVudHJ5KTtcbjEwMjg6XHRcdGlmIChlbnRyeSAhPSB4YV9sb2FkKHRyZWUsIG9mZnNldCkpIHtcbjEwMjk6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjEwMzA6XHRcdFx0Z290byBvdXQ7XG4xMDMxOlx0XHR9XG4xMDMyOlx0XG4xMDMzOlx0XHRpZiAoIXpzd2FwX2RlY29tcHJlc3MoZW50cnksIGZvbGlvKSkge1xuMTAzNDpcdFx0XHRyZXQgPSAtRUlPO1xuMTAzNTpcdFx0XHRnb3RvIG91dDtcbjEwMzY6XHRcdH1cbjEwMzc6XHRcbjEwMzg6XHRcdHhhX2VyYXNlKHRyZWUsIG9mZnNldCk7XG4xMDM5Olx0XG4xMDQwOlx0XHRjb3VudF92bV9ldmVudChaU1dQV0IpO1xuMTA0MTpcdFx0aWYgKGVudHJ5LVx1MDAzZW9iamNnKVxuMTA0MjpcdFx0XHRjb3VudF9vYmpjZ19ldmVudHMoZW50cnktXHUwMDNlb2JqY2csIFpTV1BXQiwgMSk7XG4xMDQzOlx0XG4xMDQ0Olx0XHR6c3dhcF9lbnRyeV9mcmVlKGVudHJ5KTtcbjEwNDU6XHRcbjEwNDY6XHRcdC8qIGZvbGlvIGlzIHVwIHRvIGRhdGUgKi9cbjEwNDc6XHRcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuMTA0ODpcdFxuMTA0OTpcdFx0LyogbW92ZSBpdCB0byB0aGUgdGFpbCBvZiB0aGUgaW5hY3RpdmUgbGlzdCBhZnRlciBlbmRfd3JpdGViYWNrICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NzUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgQ2FsbCBTaXRlcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIFRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgYSBxdWljayBjb2RlIHNlYXJjaC4gTGV0JiMzOTtzIGZpcmUgdXAgYSBncmVwIGNvbW1hbmQgYW5kIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nIGludm9rZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIHBpY3R1cmUgb2YgdGhlIHJlbGV2YW50IGFyZWFzLCBhbGxvd2luZyBtZSB0byBxdWlja2x5IG5hcnJvdyBkb3duIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IG9wZXJhdGVzLCBob3BlZnVsbHkgaGVscGluZyBtZSBmaWd1cmUgb3V0IHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfd3JpdGViYWNrX2VudHJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9OTI0PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTk4Ni0gKi9cbm1tL3pzd2FwLmM6OTg3OnN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG5tbS96c3dhcC5jLTk4OC1cdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbi0tXG5tbS96c3dhcC5jPTEwOTA9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbi0tXG5tbS96c3dhcC5jLTExMTMtXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXG5tbS96c3dhcC5jOjExMTQ6XHQgKiAgICB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSB0byBwaW4gdGhlIHN3YXAgZW50cnkgYW5kXG5tbS96c3dhcC5jLTExMTUtXHQgKiAgICB0aGVuIHZhbGlkYXRlIHRoZSB6c3dhcCBlbnRyeSBhZ2FpbnN0IHRoYXQgc3dhcCBlbnRyeSYjMzk7c1xuLS1cbm1tL3pzd2FwLmMtMTE0OC1cbm1tL3pzd2FwLmM6MTE0OTpcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcbm1tL3pzd2FwLmMtMTE1MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhvc2UgbGluZXMgb2YgYG1tL3pzd2FwLmNgOgoKKipEaXZpbmcgaW50byB0aGUgWnN3YXAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIGxpbmVzIDExNDAtMTIwMCBvZiBgbW0venN3YXAuY2AuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3Qgd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIGtleSBwaWVjZSBvZiB0aGUgenN3YXAgcHJvY2VzcyBsb2dpYywgbWF5YmUgcmVsYXRlZCB0byBwYWdlIGluc2VydGlvbiwgZXZpY3Rpb24sIG9yIHBlcmhhcHMgc29tZSBzb3J0IG9mIG1ldGFkYXRhIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgZ2l2ZW4gdGhhdCB3ZSBhcmUgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBJIHdpbGwgdHJ5IHRvIGlkZW50aWZ5IGlmIHRoZSBjb2RlIGlzIGZvY3VzZWQgb24gZGF0YSBzdHJ1Y3R1cmVzLCBsb2NraW5nLCBvciB0aGUgaW50ZXJmYWNlIHdpdGggdGhlIGFjdHVhbCBjb21wcmVzc2lvbiBhbmQgc3dhcCBsYXllcnMuIEkgaGF2ZSBhIGh1bmNoIGl0IHdpbGwgcmVsYXRlIHRvIGhvdyB3ZSBkZWNpZGUgKndoZXJlKiB0byBzdG9yZSBhIGNvbXByZXNzZWQgcGFnZSB0aGF0JiMzOTtzIGRlc3RpbmVkIGZvciBzd2FwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVjaXNpb24tbWFraW5nIHByb2Nlc3MgaGVyZS4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhbiBhbGdvcml0aG0gb3IgYSBzZXQgb2YgaGV1cmlzdGljcyBpbiBwbGFjZSB0byBvcHRpbWl6ZSBzd2FwIHNwYWNlIHV0aWxpemF0aW9uLiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHNvbWUga2luZCBvZiBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIGJsb2NrLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIHpzd2FwIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgcG90ZW50aWFsIGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaXNzdWVzIHdpdGggdGhlIHVuZGVybHlpbmcgc3dhcCBkZXZpY2UuIEkgYWxzbyBwbGFuIHRvIG5vdGUgdGhlIGV4YWN0IHVzZSBvZiBhbnkga2V5IGRhdGEgc3RydWN0dXJlcywgbGlrZSBgenN3YXBfZW50cnlgLCBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQgdG8gdHJhY2sgYW5kIG1hbmFnZSB0aGUgY29tcHJlc3NlZCBwYWdlcy4gV2l0aCBhIGRlZXAgYnJlYXRoIGFuZCBhIGNsb3NlIGxvb2ssIEkgc2hvdWxkIGdldCBhIGZpcm0gZ3Jhc3Agb2YgdGhlIGNvcmUgZnVuY3Rpb24gb2YgdGhpcyBwb3J0aW9uIG9mIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE0MDpcdFx0ICovXG4xMTQxOlx0XHRzd3BlbnRyeSA9IGVudHJ5LVx1MDAzZXN3cGVudHJ5O1xuMTE0MjpcdFxuMTE0MzpcdFx0LypcbjExNDQ6XHRcdCAqIEl0JiMzOTtzIHNhZmUgdG8gZHJvcCB0aGUgbG9jayBoZXJlIGJlY2F1c2Ugd2UgcmV0dXJuIGVpdGhlclxuMTE0NTpcdFx0ICogTFJVX1JFTU9WRURfUkVUUlksIExSVV9SRVRSWSBvciBMUlVfU1RPUC5cbjExNDY6XHRcdCAqL1xuMTE0NzpcdFx0c3Bpbl91bmxvY2soXHUwMDI2bC1cdTAwM2Vsb2NrKTtcbjExNDg6XHRcbjExNDk6XHRcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcbjExNTA6XHRcbjExNTE6XHRcdGlmICh3cml0ZWJhY2tfcmVzdWx0KSB7XG4xMTUyOlx0XHRcdHpzd2FwX3JlamVjdF9yZWNsYWltX2ZhaWwmIzQzOyYjNDM7O1xuMTE1MzpcdFx0XHRyZXQgPSBMUlVfUkVUUlk7XG4xMTU0Olx0XG4xMTU1Olx0XHRcdC8qXG4xMTU2Olx0XHRcdCAqIEVuY291bnRlcmluZyBhIHBhZ2UgYWxyZWFkeSBpbiBzd2FwIGNhY2hlIGlzIGEgc2lnbiB0aGF0IHdlIGFyZSBzaHJpbmtpbmdcbjExNTc6XHRcdFx0ICogaW50byB0aGUgd2FybWVyIHJlZ2lvbi4gV2Ugc2hvdWxkIHRlcm1pbmF0ZSBzaHJpbmtpbmcgKGlmIHdlJiMzOTtyZSBpbiB0aGUgZHluYW1pY1xuMTE1ODpcdFx0XHQgKiBzaHJpbmtlciBjb250ZXh0KS5cbjExNTk6XHRcdFx0ICovXG4xMTYwOlx0XHRcdGlmICh3cml0ZWJhY2tfcmVzdWx0ID09IC1FRVhJU1QgXHUwMDI2XHUwMDI2IGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKSB7XG4xMTYxOlx0XHRcdFx0cmV0ID0gTFJVX1NUT1A7XG4xMTYyOlx0XHRcdFx0KmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gdHJ1ZTtcbjExNjM6XHRcdFx0fVxuMTE2NDpcdFx0fSBlbHNlIHtcbjExNjU6XHRcdFx0enN3YXBfd3JpdHRlbl9iYWNrX3BhZ2VzJiM0MzsmIzQzOztcbjExNjY6XHRcdH1cbjExNjc6XHRcbjExNjg6XHRcdHJldHVybiByZXQ7XG4xMTY5Olx0fVxuMTE3MDpcdFxuMTE3MTpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbjExNzI6XHRcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcbjExNzM6XHR7XG4xMTc0Olx0XHR1bnNpZ25lZCBsb25nIHNocmlua19yZXQ7XG4xMTc1Olx0XHRib29sIGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gZmFsc2U7XG4xMTc2Olx0XG4xMTc3Olx0XHRpZiAoIXpzd2FwX3Nocmlua2VyX2VuYWJsZWQgfHxcbjExNzg6XHRcdFx0XHQhbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzYy1cdTAwM2VtZW1jZykpIHtcbjExNzk6XHRcdFx0c2MtXHUwMDNlbnJfc2Nhbm5lZCA9IDA7XG4xMTgwOlx0XHRcdHJldHVybiBTSFJJTktfU1RPUDtcbjExODE6XHRcdH1cbjExODI6XHRcbjExODM6XHRcdHNocmlua19yZXQgPSBsaXN0X2xydV9zaHJpbmtfd2FsayhcdTAwMjZ6c3dhcF9saXN0X2xydSwgc2MsIFx1MDAyNnNocmlua19tZW1jZ19jYixcbjExODQ6XHRcdFx0XHUwMDI2ZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpO1xuMTE4NTpcdFxuMTE4NjpcdFx0aWYgKGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKVxuMTE4NzpcdFx0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4xMTg4Olx0XG4xMTg5Olx0XHRyZXR1cm4gc2hyaW5rX3JldCA/IHNocmlua19yZXQgOiBTSFJJTktfU1RPUDtcbjExOTA6XHR9XG4xMTkxOlx0XG4xMTkyOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbjExOTM6XHRcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcbjExOTQ6XHR7XG4xMTk1Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBzYy1cdTAwM2VtZW1jZztcbjExOTY6XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBOT0RFX0RBVEEoc2MtXHUwMDNlbmlkKSk7XG4xMTk3Olx0XHRhdG9taWNfbG9uZ190ICpucl9kaXNrX3N3YXBpbnMgPVxuMTE5ODpcdFx0XHRcdTAwMjZscnV2ZWMtXHUwMDNlenN3YXBfbHJ1dmVjX3N0YXRlLm5yX2Rpc2tfc3dhcGlucztcbjExOTk6XHRcdHVuc2lnbmVkIGxvbmcgbnJfYmFja2luZywgbnJfc3RvcmVkLCBucl9mcmVlYWJsZSwgbnJfZGlza19zd2FwaW5zX2N1cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY1NwoJCQkJCQkJb3V0cHV0OiAxNzAKCQkJCQkJCXRob3VnaHRzOiA4OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgWnN3YXAgU2hyaW5rZXIgQnVnIGFuZCBNaXRpZ2F0aW9uKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGRlYWw6IEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHpzd2FwIGNvZGUsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBlcnJvcnMgZHVyaW5nIHdyaXRlYmFjay4gSXQgc2VlbXMgdGhlcmUgd2FzIGEgZmxhdyBpbiB0aGUgZXJyb3IgcmVwb3J0aW5nIGZyb20gYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIFByZXZpb3VzbHksIGlmIGBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpYCByZXR1cm5lZCBOVUxMLCBpbmRpY2F0aW5nIGEgc3dhcCBkZXZpY2UgaXNzdWUgKG9yIGFuIGludmFsaWQgYHN3cGVudHJ5YCksIHRoZSBmdW5jdGlvbiB3b3VsZCByZXR1cm4gYC1FRVhJU1RgLiBUaGUgcHJvYmxlbT8gYC1FRVhJU1RgIHdhcyBtaXNpbnRlcnByZXRlZCBieSB0aGUgY2FsbGluZyBmdW5jdGlvbiwgYHNocmlua19tZW1jZ19jYmAsIGFzIG1lYW5pbmcgdGhlIHBhZ2Ugd2FzICphbHJlYWR5KiBpbiB0aGUgc3dhcCBjYWNoZS4gVGhpcyBsZWQgdG8gcHJlbWF0dXJlIHRlcm1pbmF0aW9uIG9mIHRoZSBzaHJpbmtpbmcgcHJvY2Vzcywgd2hpY2ggaXMgY2xlYXJseSBpbmNvcnJlY3QgYmVoYXZpb3IuIFRoZSByZXR1cm4gY29kZSBzaG91bGQgaW5kaWNhdGUgdGhhdCB3ZSAqY291bGRuJiMzOTt0KiB3cml0ZSBpdCBiYWNrLCBub3QgdGhhdCBpdCBhbHJlYWR5IGV4aXN0ZWQuIFNvLCB0aGUgcGF0Y2ggY29ycmVjdGx5IGNoYW5nZXMgdGhlIHJldHVybiBjb2RlIHRvIGAtRU5PRU5UYCwgd2hpY2ggaXMgZmFyIG1vcmUgYXBwcm9wcmlhdGUgaW4gdGhpcyBzY2VuYXJpby4KCk15IHByaW1hcnkgY29uY2VybiBub3cgaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCYjMzk7cyBicmVhayBpdCBkb3duOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vcGUuIE5vIGRhdGEgaXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgYmUgdW5pbml0aWFsaXplZC4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogSSBkb3VibGUtY2hlY2tlZCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMsIGBzaHJpbmtfbWVtY2dfY2JgIGFuZCBgenN3YXBfc2hyaW5rZXJfc2NhbmAuIEluIGB6c3dhcF9zaHJpbmtlcl9zY2FuYCB0aGUgYGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlYCB2YXJpYWJsZSwgd2hpY2ggaXMgY3J1Y2lhbCBoZXJlLCBpcyBpbml0aWFsaXplZCB0byBgZmFsc2VgIChwaGV3ISkuCjMuICAqKk5ldyBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBpbml0aWFsaXphdGlvbnM/KiogTm8gYWRkaXRpb25zIG9yIG1vZGlmaWNhdGlvbnMuCjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm9wZS4gTm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzLgoKRXNzZW50aWFsbHksIGFsbCB0aGlzIHBhdGNoIGRvZXMgaXMgbW9kaWZ5IGFuIGVycm9yIGNvZGUgYmVpbmcgcmV0dXJuZWQgZnJvbSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gSXQgZG9lc24mIzM5O3QgbW9kaWZ5IGFueSBkYXRhIGJ1ZmZlcnMsIHN0YWNrIHZhcmlhYmxlcywgaGVhcCBhbGxvY2F0aW9ucywgdXNlciBjb3B5IG9wZXJhdGlvbnMsIG9yIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBnaXZlbiB0aGUgZ3VpZGVsaW5lcywgSSBkb24mIzM5O3Qgc2VlIGFueSByZWFzb24gdG8gdHJpZ2dlciBhIEtNU0FOIHJ1bi4gS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyBoZXJlLiBJbiBmYWN0LCBpZiBzb21ldGhpbmcgbGlrZSB0aGlzIHdlcmUgY2F1Z2h0IGJ5IEtNU0FOLCB0aGVuIHdlJiMzOTtkIGhhdmUgYSAqc2VyaW91cyogcHJvYmxlbSBpbiB0aGUgY29kZSwgYW5kIGEgcmVkZXNpZ24gd291bGQgYmUgbmVlZGVkLiBUaGlzIGlzIG5vdCB0aGUgY2FzZS4KCioqTmVlZHNLTVNBTj1mYWxzZS4gTGV0JiMzOTtzIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi4qKgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGNoYW5nZXMgdGhlIGVycm9yIHJldHVybiB2YWx1ZSBpbiBgenN3YXBfd3JpdGViYWNrX2VudHJ5KClgIGZyb20gYC1FRVhJU1RgIHRvIGAtRU5PRU5UYCB3aGVuIGBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpYCByZXR1cm5zIE5VTEwuIFRoaXMgcHJldmVudHMgdGhlIHpzd2FwIHNocmlua2VyIChgc2hyaW5rX21lbWNnX2NiYCkgZnJvbSBmYWxzZWx5IGFzc3VtaW5nIHRoZSBwYWdlIGlzIGFscmVhZHkgaW4gdGhlIHN3YXAgY2FjaGUgKHdoaWNoIGNoZWNrcyBmb3IgYHdyaXRlYmFja19yZXN1bHQgPT0gLUVFWElTVGAgdG8gYWJvcnQgc2hyaW5raW5nKS4gVGhlIGNoYW5nZSBpcyBzdHJpY3RseSBhIGxvZ2ljL2Vycm9yIGNvZGUgZml4IGluIHRoZSBzd2FwIHJlY2xhaW0gcGF0aDsgaXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIENvbnNlcXVlbnRseSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGNoYW5nZXMgdGhlIGVycm9yIHJldHVybiB2YWx1ZSBpbiBgenN3YXBfd3JpdGViYWNrX2VudHJ5KClgIGZyb20gYC1FRVhJU1RgIHRvIGAtRU5PRU5UYCB3aGVuIGBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpYCByZXR1cm5zIE5VTEwuIFRoaXMgcHJldmVudHMgdGhlIHpzd2FwIHNocmlua2VyIChgc2hyaW5rX21lbWNnX2NiYCkgZnJvbSBmYWxzZWx5IGFzc3VtaW5nIHRoZSBwYWdlIGlzIGFscmVhZHkgaW4gdGhlIHN3YXAgY2FjaGUgKHdoaWNoIGNoZWNrcyBmb3IgYHdyaXRlYmFja19yZXN1bHQgPT0gLUVFWElTVGAgdG8gYWJvcnQgc2hyaW5raW5nKS4gVGhlIGNoYW5nZSBpcyBzdHJpY3RseSBhIGxvZ2ljL2Vycm9yIGNvZGUgZml4IGluIHRoZSBzd2FwIHJlY2xhaW0gcGF0aDsgaXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIENvbnNlcXVlbnRseSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAxOjU1LjAzMTYzMjU4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQxNzU4MjM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3dyaXRlYmFja19lbnRyeVwiLFxuICAgIFwic2hyaW5rX21lbWNnX2NiXCIsXG4gICAgXCJ6c3dhcF9zaHJpbmtlcl9zY2FuXCIsXG4gICAgXCJzaHJpbmtfbWVtY2dcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGluIGB6c3dhcF93cml0ZWJhY2tfZW50cnkoKWAgZnJvbSBgLUVFWElTVGAgdG8gYC1FTk9FTlRgIHdoZW4gYGdldF9zd2FwX2RldmljZShzd3BlbnRyeSlgIHJldHVybnMgTlVMTC4gVGhpcyBwcmV2ZW50cyB0aGUgenN3YXAgc2hyaW5rZXIgKGBzaHJpbmtfbWVtY2dfY2JgKSBmcm9tIGZhbHNlbHkgYXNzdW1pbmcgdGhlIHBhZ2UgaXMgYWxyZWFkeSBpbiB0aGUgc3dhcCBjYWNoZSAod2hpY2ggY2hlY2tzIGZvciBgd3JpdGViYWNrX3Jlc3VsdCA9PSAtRUVYSVNUYCB0byBhYm9ydCBzaHJpbmtpbmcpLiBUaGUgY2hhbmdlIGlzIHN0cmljdGx5IGEgbG9naWMvZXJyb3IgY29kZSBmaXggaW4gdGhlIHN3YXAgcmVjbGFpbSBwYXRoOyBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlcnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQ29uc2VxdWVudGx5LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSBpbiBtbS96c3dhcC5jIHRvIHJldHVybiAtRU5PRU5UIGluc3RlYWQgb2YgLUVFWElTVCB3aGVuIGdldF9zd2FwX2RldmljZSgpIGZhaWxzLiBJbiBzaHJpbmtfbWVtY2dfY2IoKSwgLUVFWElTVCBpcyBzcGVjaWZpY2FsbHkgY2hlY2tlZCB0byBkZXRlY3QgcGFnZXMgYWxyZWFkeSBjYWNoZWQgaW4gc3dhcCBjYWNoZSwgd2hpY2ggdHJpZ2dlcnMgTFJVX1NUT1AgdG8gdGVybWluYXRlIHNocmlua2luZy4gQ2hhbmdpbmcgdGhlIHJldHVybiB2YWx1ZSBhbHRlcnMgdGhlIHNocmlua2VyJ3MgZXJyb3IgaGFuZGxpbmcgYW5kIHJldHJ5IGxvb3AgYmVoYXZpb3IgdW5kZXIgY29uY3VycmVudCBzd2Fwb2ZmL2RldmljZSByZW1vdmFsLiBBcyB0aGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4genN3YXAgd3JpdGViYWNrIGFuZCBMUlUgcmVjbGFtYXRpb24sIGl0IHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAxOjU1LjAzMTYzNzEzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MTE4MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWQ0YmI3MTlmY2E1ZmVjNTJiNzY2MzY4OGQ3MDBkMTg4OTgzOWYxNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCAxMyAwNzowMTo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xcbmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLmI5OTQ4ZDQ2NTdkMjYgMTAwNjQ0XFxuLS0tIGEvbW0venN3YXAuY1xcbisrKyBiL21tL3pzd2FwLmNcXG5AQCAtOTk4LDcgKzk5OCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuIFxcdC8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovXFxuIFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcXG4gXFx0aWYgKCFzaSlcXG4tXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4gXFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG4gXFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAxOjU1LjUwNjMzMTUyOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODg3MDU1MzEwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIixcbiAgICBcIlpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIixcbiAgICBcInNocmlua19tZW1jZ19jYlwiLFxuICAgIFwienN3YXBfc2hyaW5rZXJfc2NhblwiLFxuICAgIFwic2hyaW5rX21lbWNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgaW4gbW0venN3YXAuYyB0byByZXR1cm4gLUVOT0VOVCBpbnN0ZWFkIG9mIC1FRVhJU1Qgd2hlbiBnZXRfc3dhcF9kZXZpY2UoKSBmYWlscy4gSW4gc2hyaW5rX21lbWNnX2NiKCksIC1FRVhJU1QgaXMgc3BlY2lmaWNhbGx5IGNoZWNrZWQgdG8gZGV0ZWN0IHBhZ2VzIGFscmVhZHkgY2FjaGVkIGluIHN3YXAgY2FjaGUsIHdoaWNoIHRyaWdnZXJzIExSVV9TVE9QIHRvIHRlcm1pbmF0ZSBzaHJpbmtpbmcuIENoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgYWx0ZXJzIHRoZSBzaHJpbmtlcidzIGVycm9yIGhhbmRsaW5nIGFuZCByZXRyeSBsb29wIGJlaGF2aW9yIHVuZGVyIGNvbmN1cnJlbnQgc3dhcG9mZi9kZXZpY2UgcmVtb3ZhbC4gQXMgdGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIHpzd2FwIHdyaXRlYmFjayBhbmQgTFJVIHJlY2xhbWF0aW9uLCBpdCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFkNGJiNzE5ZmNhNWZlYzUyYjc2NjM2ODhkNzAwZDE4ODk4MzlmMTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAwNzowMTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCAzN2YzNGU0MDZjOGUzLi5iOTk0OGQ0NjU3ZDI2IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTk5OCw3ICs5OTgsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcbiBcdGlmICghc2kpXG4tXHRcdHJldHVybiAtRUVYSVNUO1xuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4gXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAxOjU1LjUwNjMzMzA4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExOTI2MzAzMDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgWnN3YXAgQ29tbWl0KipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gYW5hbHl6ZSBhIHNwZWNpZmljIGdpdCBjb21taXQgaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IGEgY2hhbmdlIGluIGBtbS96c3dhcC5jYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSB0cmlhZ2UgdGFzayByZWxhdGVkIHRvIGZ1enppbmcsIHByb2JhYmx5IGZvciBzeXprYWxsZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY2hhbmdlIGlzIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIHNwZWNpZmljIGZ1enppbmcgYXR0ZW50aW9uLCBhbmQgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHJlbGV2YW50IGNvZGUgYXJlYXMsIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzLCBhbmQgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgYSBkZWZlbnNpdmUvUUEgdHlwZSBvZiBhbmFseXNpcyDigJMgYmVuaWduLCBubyBpbW1lZGlhdGUgc2VjdXJpdHkgdGhyZWF0LiBHb29kLCBzYWZlIHRvIGRpdmUgaW4uXG5cbk15IHByb2Nlc3Mgc3RhcnRzIHdpdGggdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlIGl0c2VsZi4gSSdsbCBuZWVkIHRvIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0IG9mIHRoZSBlbnRpcmUgZmlsZSwgb3IgYGdyZXBwZXJgIHRvIGxvb2sgYXQgdGhlIGNvZGUgbW9yZSBzZWxlY3RpdmVseSwgYW5kIGlkZW50aWZ5IHN1cnJvdW5kaW5nIGNvZGUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdW5kZXJzdGFuZGluZyB0aGUgcmVhc29uIGZvciB0aGlzIGNvbW1pdC4gSSdsbCBwYXkgYXR0ZW50aW9uIHRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS96c3dhcC5jYCwgbG9va2luZyBmb3IgaW1wbGljYXRpb25zIG9mIHRoaXMgbW9kaWZpY2F0aW9uLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHRoYXQgY291bGQgbGVhZCB0byBuZXcgb3IgY2hhbmdlZCBiZWhhdmlvdXIuIEZyb20gd2hhdCBJIHNlZSwgaXQgbG9va3MgbGlrZSBhIGNoYW5nZSBmcm9tIGAtRUVYSVNUYCB0byBgLUVOT0VOVGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCBhbmQgd2hhdCB0aGUgb3JpZ2luYWwgYmVoYXZpb3Igd2FzLCBzaW5jZSB0aGUgZnVuY3Rpb24gbmFtZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBzZWVtcyBpbXBvcnRhbnQuXG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlIG9yaWdpbmFsIGNvZGUgZGlkLCB3aGF0IHRoZSBuZXcgY29kZSBkb2VzLCBhbmQgd2h5IHRoZSBkZXZlbG9wZXJzIGRlY2lkZWQgdG8gbWFrZSB0aGlzIHNwZWNpZmljIGNoYW5nZS4gSSdsbCBsZXZlcmFnZSB0b29scyBsaWtlIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgdG8gY2hlY2sgaG93IHRoZSBlcnJvciBjb2RlIGlzIGJlaW5nIGhhbmRsZWQgaW4gb3RoZXIgcGxhY2VzIGluIHRoZSBjb2RlLCBhbmQgaG93IHRoZXNlIGNoYW5nZXMgbWlnaHQgYmUgcmVsZXZhbnQgaW4gZnV6emluZywgYW5kIEkgbWlnaHQgbmVlZCB0byBgc2V0LXJlc3VsdHNgIHRvIHN1bW1hcml6ZSBteSBmaW5kaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjA3LjQzMjYzOTA2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk4NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk4NTpcXHQgKiBmcmVlZC5cXG4gOTg2OlxcdCAqL1xcbiA5ODc6XFx0c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gOTg4OlxcdFxcdFxcdFxcdFxcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcXG4gOTg5OlxcdHtcXG4gOTkwOlxcdFxcdHN0cnVjdCB4YXJyYXkgKnRyZWU7XFxuIDk5MTpcXHRcXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwZW50cnkpO1xcbiA5OTI6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gOTkzOlxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XFxuIDk5NDpcXHRcXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XFxuIDk5NTpcXHRcXHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XFxuIDk5NjpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gOTk3OlxcdFxcbiA5OTg6XFx0XFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cXG4gOTk5OlxcdFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcXG4xMDAwOlxcdFxcdGlmICghc2kpXFxuMTAwMTpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4xMDAyOlxcdFxcbjEwMDM6XFx0XFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG4xMDA0OlxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxcbjEwMDU6XFx0XFx0XFx0XFx0XFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xcbjEwMDY6XFx0XFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcXG4xMDA3OlxcdFxcbjEwMDg6XFx0XFx0LypcXG4xMDA5OlxcdFxcdCAqIFN3YXAgY2FjaGUgYWxsb2NhdGlvbiBtaWdodCBmYWlsIGR1ZSB0byBPT00sIG9yIHRoZSBlbnRyeVxcbjEwMTA6XFx0XFx0ICogbWF5IGFscmVhZHkgYmUgY2FjaGVkIGR1ZSB0byBjb25jdXJyZW50IHN3YXBpbiBvciBoYXZlIGJlZW5cXG4xMDExOlxcdFxcdCAqIGZyZWVkLiBJZiBhbHJlYWR5IGNhY2hlZCwgYSBjb25jdXJyZW50IHN3YXBpbiBtYWRlIHRoZSBmb2xpb1xcbjEwMTI6XFx0XFx0ICogaG90LCBzbyBza2lwIGl0LiBGb3IgdGhlIHVubGlrZWx5IGNvbmN1cnJlbnQgc2hyaW5rZXIgY2FzZSxcXG4xMDEzOlxcdFxcdCAqIGl0IHdpbGwgYmUgdW5saW5rZWQgYW5kIGZyZWVkIHdoZW4gaW52YWxpZGF0ZWQgYW55d2F5LlxcbjEwMTQ6XFx0XFx0ICovXFxuMTAxNTpcXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4xMDE2OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcXG4xMDE3OlxcdFxcbjEwMTg6XFx0XFx0LypcXG4xMDE5OlxcdFxcdCAqIGZvbGlvIGlzIGxvY2tlZCwgYW5kIHRoZSBzd2FwY2FjaGUgaXMgbm93IHNlY3VyZWQgYWdhaW5zdFxcbjEwMjA6XFx0XFx0ICogY29uY3VycmVudCBzd2FwcGluZyB0byBhbmQgZnJvbSB0aGUgc2xvdCwgYW5kIGNvbmN1cnJlbnRcXG4xMDIxOlxcdFxcdCAqIHN3YXBvZmYgc28gd2UgY2FuIHNhZmVseSBkZXJlZmVyZW5jZSB0aGUgenN3YXAgdHJlZSBoZXJlLlxcbjEwMjI6XFx0XFx0ICogVmVyaWZ5IHRoYXQgdGhlIHN3YXAgZW50cnkgaGFzbid0IGJlZW4gaW52YWxpZGF0ZWQgYW5kIHJlY3ljbGVkXFxuMTAyMzpcXHRcXHQgKiBiZWhpbmQgb3VyIGJhY2tzLCB0byBhdm9pZCBvdmVyd3JpdGluZyBhIG5ldyBzd2FwIGZvbGlvIHdpdGhcXG4xMDI0OlxcdFxcdCAqIG9sZCBjb21wcmVzc2VkIGRhdGEuIE9ubHkgd2hlbiB0aGlzIGlzIHN1Y2Nlc3NmdWwgY2FuIHRoZSBlbnRyeVxcbjEwMjU6XFx0XFx0ICogYmUgZGVyZWZlcmVuY2VkLlxcbjEwMjY6XFx0XFx0ICovXFxuMTAyNzpcXHRcXHR0cmVlID0gc3dhcF96c3dhcF90cmVlKHN3cGVudHJ5KTtcXG4xMDI4OlxcdFxcdGlmIChlbnRyeSAhPSB4YV9sb2FkKHRyZWUsIG9mZnNldCkpIHtcXG4xMDI5OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTAzMDpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDMxOlxcdFxcdH1cXG4xMDMyOlxcdFxcbjEwMzM6XFx0XFx0aWYgKCF6c3dhcF9kZWNvbXByZXNzKGVudHJ5LCBmb2xpbykpIHtcXG4xMDM0OlxcdFxcdFxcdHJldCA9IC1FSU87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjA3LjQzMjc0MjM5MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwNjA0NjY2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8genN3YXBfd3JpdGViYWNrX2VudHJ5KipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIE15IG9iamVjdGl2ZSBpcyBjbGVhcjogSSBuZWVkIHRvIHBpbnBvaW50IGV2ZXJ5IGNhbGwgc2l0ZSBhbmQgZGlzc2VjdCBob3cgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIG1hbmFnZWQuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSByZXR1cm4gY29kZSBpcyB1c2VkIGNhbiB0ZWxsIG1lIHRoZSBmYWlsdXJlIG1vZGVzIG9mIHRoZSBmdW5jdGlvbiBhbmQgdGhlIGV4cGVjdGVkIGVycm9yIGhhbmRsaW5nLlxuXG5UaW1lIHRvIGNyYWNrIG9wZW4gYG1tL3pzd2FwLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDEwMzAgdG8gMTEwMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgd2luZG93IHRvIHNwb3QgdGhlIGNhbGxzLiBJJ2xsIG5lZWQgdG8ga2VlcCBhIGtlZW4gZXllIG91dC4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGhpbmdzIHdlIGNhbiBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDI2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMjowOS40OTMyMTEwMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMzUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMzU6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTAzNjpcXHRcXHR9XFxuMTAzNzpcXHRcXG4xMDM4OlxcdFxcdHhhX2VyYXNlKHRyZWUsIG9mZnNldCk7XFxuMTAzOTpcXHRcXG4xMDQwOlxcdFxcdGNvdW50X3ZtX2V2ZW50KFpTV1BXQik7XFxuMTA0MTpcXHRcXHRpZiAoZW50cnktXFx1MDAzZW9iamNnKVxcbjEwNDI6XFx0XFx0XFx0Y291bnRfb2JqY2dfZXZlbnRzKGVudHJ5LVxcdTAwM2VvYmpjZywgWlNXUFdCLCAxKTtcXG4xMDQzOlxcdFxcbjEwNDQ6XFx0XFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XFxuMTA0NTpcXHRcXG4xMDQ2OlxcdFxcdC8qIGZvbGlvIGlzIHVwIHRvIGRhdGUgKi9cXG4xMDQ3OlxcdFxcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xcbjEwNDg6XFx0XFxuMTA0OTpcXHRcXHQvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi9cXG4xMDUwOlxcdFxcdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcXG4xMDUxOlxcdFxcbjEwNTI6XFx0XFx0Lyogc3RhcnQgd3JpdGViYWNrICovXFxuMTA1MzpcXHRcXHRfX3N3YXBfd3JpdGVwYWdlKFxcdTAwMjZjdHgsIGZvbGlvKTtcXG4xMDU0OlxcdFxcdHN3YXBfd3JpdGVfc3VibWl0KFxcdTAwMjZjdHgpO1xcbjEwNTU6XFx0XFxuMTA1NjpcXHRvdXQ6XFxuMTA1NzpcXHRcXHRpZiAocmV0KSB7XFxuMTA1ODpcXHRcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxuMTA1OTpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjEwNjA6XFx0XFx0fVxcbjEwNjE6XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4xMDYyOlxcdFxcdHJldHVybiByZXQ7XFxuMTA2MzpcXHR9XFxuMTA2NDpcXHRcXG4xMDY1OlxcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4xMDY2OlxcdCogc2hyaW5rZXIgZnVuY3Rpb25zXFxuMTA2NzpcXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbjEwNjg6XFx0LypcXG4xMDY5OlxcdCAqIFRoZSBkeW5hbWljIHNocmlua2VyIGlzIG1vZHVsYXRlZCBieSB0aGUgZm9sbG93aW5nIGZhY3RvcnM6XFxuMTA3MDpcXHQgKlxcbjEwNzE6XFx0ICogMS4gRWFjaCB6c3dhcCBlbnRyeSBoYXMgYSByZWZlcmVuY2VkIGJpdCwgd2hpY2ggdGhlIHNocmlua2VyIHVuc2V0cyAoZ2l2aW5nXFxuMTA3MjpcXHQgKiAgICB0aGUgZW50cnkgYSBzZWNvbmQgY2hhbmNlKSBiZWZvcmUgcm90YXRpbmcgaXQgaW4gdGhlIExSVSBsaXN0LiBJZiB0aGVcXG4xMDczOlxcdCAqICAgIGVudHJ5IGlzIGNvbnNpZGVyZWQgYWdhaW4gYnkgdGhlIHNocmlua2VyLCB3aXRoIGl0cyByZWZlcmVuY2VkIGJpdCB1bnNldCxcXG4xMDc0OlxcdCAqICAgIGl0IGlzIHdyaXR0ZW4gYmFjay4gVGhlIHdyaXRlYmFjayByYXRlIGFzIGEgcmVzdWx0IGlzIGR5bmFtaWNhbGx5XFxuMTA3NTpcXHQgKiAgICBhZGp1c3RlZCBieSB0aGUgcG9vbCBhY3Rpdml0aWVzIC0gaWYgdGhlIHBvb2wgaXMgZG9taW5hdGVkIGJ5IG5ldyBlbnRyaWVzXFxuMTA3NjpcXHQgKiAgICAoaS5lIGxvdHMgb2YgcmVjZW50IHpzd2Fwb3V0cyksIHRoZXNlIGVudHJpZXMgd2lsbCBiZSBwcm90ZWN0ZWQgYW5kXFxuMTA3NzpcXHQgKiAgICB0aGUgd3JpdGViYWNrIHJhdGUgd2lsbCBzbG93IGRvd24uIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgcG9vbCBoYXMgYVxcbjEwNzg6XFx0ICogICAgbG90IG9mIHN0YWduYW50IGVudHJpZXMsIHRoZXNlIGVudHJpZXMgd2lsbCBiZSByZWNsYWltZWQgaW1tZWRpYXRlbHksXFxuMTA3OTpcXHQgKiAgICBlZmZlY3RpdmVseSBpbmNyZWFzaW5nIHRoZSB3cml0ZWJhY2sgcmF0ZS5cXG4xMDgwOlxcdCAqXFxuMTA4MTpcXHQgKiAyLiBTd2FwaW5zIGNvdW50ZXI6IElmIHdlIG9ic2VydmUgc3dhcGlucywgaXQgaXMgYSBzaWduIHRoYXQgd2UgYXJlXFxuMTA4MjpcXHQgKiAgICBvdmVyc2hyaW5raW5nIGFuZCBzaG91bGQgc2xvdyBkb3duLiBXZSBtYWludGFpbiBhIHN3YXBpbnMgY291bnRlciwgd2hpY2hcXG4xMDgzOlxcdCAqICAgIGlzIGNvbnN1bWVkIGFuZCBzdWJ0cmFjdCBmcm9tIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgb2JqZWN0cyBvbiB0aGUgTFJVXFxuMTA4NDpcXHQgKiAgICBpbiB6c3dhcF9zaHJpbmtlcl9jb3VudCgpLlxcbjEwODU6XFx0ICpcXG4xMDg2OlxcdCAqIDMuIENvbXByZXNzaW9uIHJhdGlvLiBUaGUgYmV0dGVyIHRoZSB3b3JrbG9hZCBjb21wcmVzc2VzLCB0aGUgbGVzcyBnYWlucyB3ZVxcbjEwODc6XFx0ICogICAgY2FuIGV4cGVjdCBmcm9tIHdyaXRlYmFjay4gV2Ugc2NhbGUgZG93biB0aGUgbnVtYmVyIG9mIG9iamVjdHMgYXZhaWxhYmxlXFxuMTA4ODpcXHQgKiAgICBmb3IgcmVjbGFpbSBieSB0aGlzIHJhdGlvLlxcbjEwODk6XFx0ICovXFxuMTA5MDpcXHRzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxcbjEwOTE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmFyZylcXG4xMDkyOlxcdHtcXG4xMDkzOlxcdFxcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IHpzd2FwX2VudHJ5LCBscnUpO1xcbjEwOTQ6XFx0XFx0Ym9vbCAqZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSAoYm9vbCAqKWFyZztcXG4xMDk1OlxcdFxcdHN3cF9lbnRyeV90IHN3cGVudHJ5O1xcbjEwOTY6XFx0XFx0ZW51bSBscnVfc3RhdHVzIHJldCA9IExSVV9SRU1PVkVEX1JFVFJZO1xcbjEwOTc6XFx0XFx0aW50IHdyaXRlYmFja19yZXN1bHQ7XFxuMTA5ODpcXHRcXG4xMDk5OlxcdFxcdC8qXFxuMTEwMDpcXHRcXHQgKiBTZWNvbmQgY2hhbmNlIGFsZ29yaXRobTogaWYgdGhlIGVudHJ5IGhhcyBpdHMgcmVmZXJlbmNlZCBiaXQgc2V0LCBnaXZlIGl0XFxuMTEwMTpcXHRcXHQgKiBhIHNlY29uZCBjaGFuY2UuIE9ubHkgY2xlYXIgdGhlIHJlZmVyZW5jZWQgYml0IGFuZCByb3RhdGUgaXQgaW4gdGhlXFxuMTEwMjpcXHRcXHQgKiB6c3dhcCdzIExSVSBsaXN0LlxcbjExMDM6XFx0XFx0ICovXFxuMTEwNDpcXHRcXHRpZiAoZW50cnktXFx1MDAzZXJlZmVyZW5jZWQpIHtcXG4xMTA1OlxcdFxcdFxcdGVudHJ5LVxcdTAwM2VyZWZlcmVuY2VkID0gZmFsc2U7XFxuMTEwNjpcXHRcXHRcXHRyZXR1cm4gTFJVX1JPVEFURTtcXG4xMTA3OlxcdFxcdH1cXG4xMTA4OlxcdFxcbjExMDk6XFx0XFx0LypcXG4xMTEwOlxcdFxcdCAqIEFzIHNvb24gYXMgd2UgZHJvcCB0aGUgTFJVIGxvY2ssIHRoZSBlbnRyeSBjYW4gYmUgZnJlZWQgYnlcXG4xMTExOlxcdFxcdCAqIGEgY29uY3VycmVudCBpbnZhbGlkYXRpb24uIFRoaXMgbWVhbnMgdGhlIGZvbGxvd2luZzpcXG4xMTEyOlxcdFxcdCAqXFxuMTExMzpcXHRcXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXFxuMTExNDpcXHRcXHQgKiAgICB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSB0byBwaW4gdGhlIHN3YXAgZW50cnkgYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjA5LjQ5MzM3MDQ5MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2MTk3ODA1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyBgd3JpdGViYWNrX3Jlc3VsdGAgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgc2VjdGlvbiBub3csIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMTE1LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHdyaXRlYmFja19yZXN1bHRgIHZhcmlhYmxlIGlzIGJlaW5nIG1hbmFnZWQgYW5kIHdoYXQgb3BlcmF0aW9ucyBhcmUgYmVpbmcgcGVyZm9ybWVkIG9uIGl0LiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBjZXJ0YWluIHBhdHRlcm5zIGFuZCBwb3RlbnRpYWwgY29tcGxleGl0aWVzIGluIGRhdGEgY29uc2lzdGVuY3kgb3IgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byB0aGlzIHJlc3VsdC4gSSB3YW50IHRvIHNlZSBpZiBhbnkgY29uY3VycmVuY3kgaXNzdWVzIG1pZ2h0IGJlIGludm9sdmVkLCBvciBwZXJoYXBzIGhvdyB0aGUgcmVzdWx0IGludGVyYWN0cyB3aXRoIG90aGVyIGNydWNpYWwgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGZsb3cgb2YgZGF0YSBhbmQgZGV0ZXJtaW5lIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBhc3NpZ25tZW50IGFuZCBvcGVyYXRpb24uIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjExLjExMzE1MzMxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMTU6XFx0XFx0ICogICAgdGhlbiB2YWxpZGF0ZSB0aGUgenN3YXAgZW50cnkgYWdhaW5zdCB0aGF0IHN3YXAgZW50cnknc1xcbjExMTY6XFx0XFx0ICogICAgdHJlZSB1c2luZyBwb2ludGVyIHZhbHVlIGNvbXBhcmlzb24uIE9ubHkgd2hlbiB0aGF0XFxuMTExNzpcXHRcXHQgKiAgICBpcyBzdWNjZXNzZnVsIGNhbiB0aGUgZW50cnkgYmUgZGVyZWZlcmVuY2VkLlxcbjExMTg6XFx0XFx0ICpcXG4xMTE5OlxcdFxcdCAqIDIuIFVzdWFsbHksIG9iamVjdHMgYXJlIHRha2VuIG9mZiB0aGUgTFJVIGZvciByZWNsYWltLiBJblxcbjExMjA6XFx0XFx0ICogICAgdGhpcyBjYXNlIHRoaXMgaXNuJ3QgcG9zc2libGUsIGJlY2F1c2UgaWYgcmVjbGFpbSBmYWlsc1xcbjExMjE6XFx0XFx0ICogICAgZm9yIHdoYXRldmVyIHJlYXNvbiwgd2UgaGF2ZSBubyBtZWFucyBvZiBrbm93aW5nIGlmIHRoZVxcbjExMjI6XFx0XFx0ICogICAgZW50cnkgaXMgYWxpdmUgdG8gcHV0IGl0IGJhY2sgb24gdGhlIExSVS5cXG4xMTIzOlxcdFxcdCAqXFxuMTEyNDpcXHRcXHQgKiAgICBTbyByb3RhdGUgaXQgYmVmb3JlIGRyb3BwaW5nIHRoZSBsb2NrLiBJZiB0aGUgZW50cnkgaXNcXG4xMTI1OlxcdFxcdCAqICAgIHdyaXR0ZW4gYmFjayBvciBpbnZhbGlkYXRlZCwgdGhlIGZyZWUgcGF0aCB3aWxsIHVubGlua1xcbjExMjY6XFx0XFx0ICogICAgaXQuIEZvciBmYWlsdXJlcywgcm90YXRpb24gaXMgdGhlIHJpZ2h0IHRoaW5nIGFzIHdlbGwuXFxuMTEyNzpcXHRcXHQgKlxcbjExMjg6XFx0XFx0ICogICAgVGVtcG9yYXJ5IGZhaWx1cmVzLCB3aGVyZSB0aGUgc2FtZSBlbnRyeSBzaG91bGQgYmUgdHJpZWRcXG4xMTI5OlxcdFxcdCAqICAgIGFnYWluIGltbWVkaWF0ZWx5LCBhbG1vc3QgbmV2ZXIgaGFwcGVuIGZvciB0aGlzIHNocmlua2VyLlxcbjExMzA6XFx0XFx0ICogICAgV2UgZG9uJ3QgZG8gYW55IHRyeWxvY2tpbmc7IC1FTk9NRU0gY29tZXMgY2xvc2VzdCxcXG4xMTMxOlxcdFxcdCAqICAgIGJ1dCB0aGF0J3MgZXh0cmVtZWx5IHJhcmUgYW5kIGRvZXNuJ3QgaGFwcGVuIHNwdXJpb3VzbHlcXG4xMTMyOlxcdFxcdCAqICAgIGVpdGhlci4gRG9uJ3QgYm90aGVyIGRpc3Rpbmd1aXNoaW5nIHRoaXMgY2FzZS5cXG4xMTMzOlxcdFxcdCAqL1xcbjExMzQ6XFx0XFx0bGlzdF9tb3ZlX3RhaWwoaXRlbSwgXFx1MDAyNmwtXFx1MDAzZWxpc3QpO1xcbjExMzU6XFx0XFxuMTEzNjpcXHRcXHQvKlxcbjExMzc6XFx0XFx0ICogT25jZSB0aGUgbHJ1IGxvY2sgaXMgZHJvcHBlZCwgdGhlIGVudHJ5IG1pZ2h0IGdldCBmcmVlZC4gVGhlXFxuMTEzODpcXHRcXHQgKiBzd3BlbnRyeSBpcyBjb3BpZWQgdG8gdGhlIHN0YWNrLCBhbmQgZW50cnkgaXNuJ3QgZGVyZWYnZCBhZ2FpblxcbjExMzk6XFx0XFx0ICogdW50aWwgdGhlIGVudHJ5IGlzIHZlcmlmaWVkIHRvIHN0aWxsIGJlIGFsaXZlIGluIHRoZSB0cmVlLlxcbjExNDA6XFx0XFx0ICovXFxuMTE0MTpcXHRcXHRzd3BlbnRyeSA9IGVudHJ5LVxcdTAwM2Vzd3BlbnRyeTtcXG4xMTQyOlxcdFxcbjExNDM6XFx0XFx0LypcXG4xMTQ0OlxcdFxcdCAqIEl0J3Mgc2FmZSB0byBkcm9wIHRoZSBsb2NrIGhlcmUgYmVjYXVzZSB3ZSByZXR1cm4gZWl0aGVyXFxuMTE0NTpcXHRcXHQgKiBMUlVfUkVNT1ZFRF9SRVRSWSwgTFJVX1JFVFJZIG9yIExSVV9TVE9QLlxcbjExNDY6XFx0XFx0ICovXFxuMTE0NzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bC1cXHUwMDNlbG9jayk7XFxuMTE0ODpcXHRcXG4xMTQ5OlxcdFxcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcXG4xMTUwOlxcdFxcbjExNTE6XFx0XFx0aWYgKHdyaXRlYmFja19yZXN1bHQpIHtcXG4xMTUyOlxcdFxcdFxcdHpzd2FwX3JlamVjdF9yZWNsYWltX2ZhaWwrKztcXG4xMTUzOlxcdFxcdFxcdHJldCA9IExSVV9SRVRSWTtcXG4xMTU0OlxcdFxcbjExNTU6XFx0XFx0XFx0LypcXG4xMTU2OlxcdFxcdFxcdCAqIEVuY291bnRlcmluZyBhIHBhZ2UgYWxyZWFkeSBpbiBzd2FwIGNhY2hlIGlzIGEgc2lnbiB0aGF0IHdlIGFyZSBzaHJpbmtpbmdcXG4xMTU3OlxcdFxcdFxcdCAqIGludG8gdGhlIHdhcm1lciByZWdpb24uIFdlIHNob3VsZCB0ZXJtaW5hdGUgc2hyaW5raW5nIChpZiB3ZSdyZSBpbiB0aGUgZHluYW1pY1xcbjExNTg6XFx0XFx0XFx0ICogc2hyaW5rZXIgY29udGV4dCkuXFxuMTE1OTpcXHRcXHRcXHQgKi9cXG4xMTYwOlxcdFxcdFxcdGlmICh3cml0ZWJhY2tfcmVzdWx0ID09IC1FRVhJU1QgXFx1MDAyNlxcdTAwMjYgZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpIHtcXG4xMTYxOlxcdFxcdFxcdFxcdHJldCA9IExSVV9TVE9QO1xcbjExNjI6XFx0XFx0XFx0XFx0KmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gdHJ1ZTtcXG4xMTYzOlxcdFxcdFxcdH1cXG4xMTY0OlxcdFxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjExLjExMzM4OTA0NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyNTQ4MDkzODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgWnN3YXAgV3JpdGViYWNrIE9wdGltaXphdGlvbioqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSBzZWVpbmcuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIFdlJ3JlIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gYHpzd2FwLmNgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaGFuZGxlcyBlcnJvcnMgd2hlbiB0cnlpbmcgdG8gd3JpdGUgYSBwYWdlIGJhY2sgdG8gc3dhcC4gVGhlIGtleSBpcyBpbiB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIGBnZXRfc3dhcF9kZXZpY2VgLiBQcmV2aW91c2x5LCBhIE5VTEwgcmV0dXJuIGZyb20gYGdldF9zd2FwX2RldmljZShzd3BlbnRyeSlgIC0gaW5kaWNhdGluZyB0aGUgc3dhcCBkZXZpY2UgaXMgZ29uZSBvciB0aGUgZW50cnkgaXMgaW52YWxpZCAtIHJlc3VsdGVkIGluIGAtRUVYSVNUYCBiZWluZyByZXR1cm5lZC5cblxuVGhpcywgaG93ZXZlciwgd2FzIHByb2JsZW1hdGljLiBUaGUgZnVuY3Rpb24gYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgd2FzIGJlaW5nIG1pc2ludGVycHJldGVkIGJ5IGl0cyBjYWxsZXJzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBzaHJpbmtfbWVtY2dfY2JgIGNvbnRleHQuIEEgcmV0dXJuIG9mIGAtRUVYSVNUYCBmcm9tIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIHdhcyBpbmNvcnJlY3RseSB0cmlnZ2VyaW5nIGEgc3BlY2lmaWMgY29kZSBwYXRoIHdpdGhpbiBgc2hyaW5rX21lbWNnX2NiYC4gVGhlIGxvZ2ljIGFzc3VtZWQgdGhhdCBgLUVFWElTVGAgbWVhbnQgdGhlIHBhZ2UgKmFscmVhZHkqIGV4aXN0ZWQgaW4gdGhlIHN3YXAgY2FjaGUsIHdoaWNoIGlzIHdoYXQgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oKWAgcmV0dXJucyB3aGVuIGEgcGFnZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgY2FjaGUuIFRoaXMsIHRoZW4sIGxlZCB0byBwcmVtYXR1cmUgdGVybWluYXRpb24gb2YgdGhlIHJlY2xhaW0gcHJvY2VzcyAocmV0dXJuaW5nIGBMUlVfU1RPUGApLCB3cm9uZ2x5IGFzc3VtaW5nIHRoYXQgd2Ugd2VyZSBzaHJpbmtpbmcgaW50byB0aGUgd2FybWVyIHJlZ2lvbi5cblxuVGhlIGZpeCwgYXMgSSBzZWUgaXQsIGlzIGVsZWdhbnQuICBUaGV5J3ZlIGNoYW5nZWQgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGAtRUVYSVNUYCB0byBgLUVOT0VOVGAuIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiB0d28gc2VwYXJhdGUgZmFpbHVyZSBzY2VuYXJpb3M6ICBhIGdlbnVpbmUgXCJwYWdlIGFscmVhZHkgaW4gc3dhcCBjYWNoZVwiIHNpdHVhdGlvbiAod2hlcmUgYC1FRVhJU1RgIGlzIGNvcnJlY3QpLCBhbmQgdGhlIFwic3dhcCBkZXZpY2UgdW5hdmFpbGFibGUvZW50cnkgaW52YWxpZFwiIGNvbmRpdGlvbiAod2hlcmUgYC1FTk9FTlRgIGlzIHRoZSBtb3JlIGFjY3VyYXRlIGVycm9yIGNvZGUpLiBUaGlzIGRpZmZlcmVudGlhdGlvbiBwcmV2ZW50cyB0aGUgc3B1cmlvdXMgYExSVV9TVE9QYCBzaWduYWwsIGVuc3VyaW5nIHRoZSByZWNsYWltIHByb2Nlc3MgcHJvY2VlZHMgY29ycmVjdGx5IHVubGVzcyBhIGxlZ2l0aW1hdGUgc3dhcCBjYWNoZSBjb25mbGljdCBpcyBlbmNvdW50ZXJlZC5cblxuTm93LCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgdGhpcyBjaGFuZ2UgYWZmZWN0cyBhbnkgb3RoZXIgY2FsbGVycyBvZiBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gSXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk2NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjE1LjM2ODIwMDUyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NDQ4ODI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz05MjQ9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy05ODYtICovXFxubW0venN3YXAuYzo5ODc6c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTk4OC1cXHRcXHRcXHRcXHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jPTEwOTA9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG4tLVxcbm1tL3pzd2FwLmMtMTExMy1cXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXFxubW0venN3YXAuYzoxMTE0OlxcdCAqICAgIHpzd2FwX3dyaXRlYmFja19lbnRyeSgpIHRvIHBpbiB0aGUgc3dhcCBlbnRyeSBhbmRcXG5tbS96c3dhcC5jLTExMTUtXFx0ICogICAgdGhlbiB2YWxpZGF0ZSB0aGUgenN3YXAgZW50cnkgYWdhaW5zdCB0aGF0IHN3YXAgZW50cnknc1xcbi0tXFxubW0venN3YXAuYy0xMTQ4LVxcbm1tL3pzd2FwLmM6MTE0OTpcXHR3cml0ZWJhY2tfcmVzdWx0ID0genN3YXBfd3JpdGViYWNrX2VudHJ5KGVudHJ5LCBzd3BlbnRyeSk7XFxubW0venN3YXAuYy0xMTUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMjoxNi45NTI2OTgxMjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAxMzA5NzM0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IENHIFNocmlua2FnZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG1lbWNnIHNocmlua2luZyBiZWhhdmlvciBhbmQgc3BlY2lmaWNhbGx5IHVuZGVyc3RhbmQgaG93IHRoZSBgc2hyaW5rX21lbWNnX2NiYCBjYWxsYmFjayBpcyBiZWluZyBpbnZva2VkIGFuZCB3aGVyZSB0aGUgenN3YXAgY29tcG9uZW50IGdldHMgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzLiBUaW1lIHRvIHRyYWNlIHRoZSBjYWxscy4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgY29kZSB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgaW50ZXJhY3Rpb25zLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGNhbGxzIHRvIHRoYXQgc3BlY2lmaWMgY2FsbGJhY2sgZnVuY3Rpb24uIFRoZW4gSSdsbCB3b3JrIGZyb20gdGhlcmUgdG8gZmlndXJlIG91dCB0aGUgcGF0aCB0byB6c3dhcCBpbnRlcmFjdGlvbiBpbiBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMyNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjI3LjA4MzY3MzkxOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3ODE3MDA2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfbWVtY2dfY2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4tLVxcbm1tL3pzd2FwLmMtMTA4OS0gKi9cXG5tbS96c3dhcC5jOjEwOTA6c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG5tbS96c3dhcC5jLTEwOTEtXFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmFyZylcXG4tLVxcbm1tL3pzd2FwLmM9MTE3MT1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuLS1cXG5tbS96c3dhcC5jLTExODItXFxubW0venN3YXAuYzoxMTgzOlxcdHNocmlua19yZXQgPSBsaXN0X2xydV9zaHJpbmtfd2FsayhcXHUwMDI2enN3YXBfbGlzdF9scnUsIHNjLCBcXHUwMDI2c2hyaW5rX21lbWNnX2NiLFxcbm1tL3pzd2FwLmMtMTE4NC1cXHRcXHRcXHUwMDI2ZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpO1xcbi0tXFxubW0venN3YXAuYz0xMjg4PXN0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3pzd2FwLmMtMTMwNS1cXHRcXHRzaHJ1bmsgKz0gbGlzdF9scnVfd2Fsa19vbmUoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnLFxcbm1tL3pzd2FwLmM6MTMwNjpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXFx1MDAyNm5yX3RvX3dhbGspO1xcbm1tL3pzd2FwLmMtMTMwNy1cXHRcXHRzY2FubmVkICs9IFNXQVBfQ0xVU1RFUl9NQVggLSBucl90b193YWxrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMjoyOC45NjE4NDk0NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDc4MTI2NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRob3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczpcblxuKipDaGVja2luZyBgbW0vS2NvbmZpZ2AgZm9yIFpzd2FwIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgWnN3YXAgb3B0aW9ucy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbW0vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSB0aGlzIHN3YXAgY29tcHJlc3Npb24gZmVhdHVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hpY2ggb3B0aW9ucyBjb250cm9sIHRoaW5ncyBsaWtlIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0sIHRoZSBzaXplIGxpbWl0YXRpb25zLCBtYXliZSBldmVuIHNvbWUgcGVyZm9ybWFuY2UgdHVuaW5nIHBhcmFtZXRlcnMuIEkgYWxzbyB3YW50IHRvIHNlZSBpZiBhbnkgbmV3IG9wdGlvbnMgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIG15IGxhc3QgZGVlcCBkaXZlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGlmIHRoZXJlIGFyZSBuZXcgd2F5cyB0byBzcGVjaWZ5IGNhY2hlIHNpemVzIGFuZCBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIGRpZmZlcmVudCBoYXJkd2FyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBlYWNoIG9wdGlvbiBhbmQgdGhlIGltcGFjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhlbSB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg2OCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjMxLjAzOTk3OTI4N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2MTAzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMjozMS4wODc1OTI2ODdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjEyMjUwNjM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgQ09ORklHX1pTV0FQIERlcGVuZGVuY2llcyBpbiBtbS9LY29uZmlnKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX1pTV0FQYC4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZSwgc28gSSBrbm93IGl0J3MgZ29pbmcgdG8gYmUgaW4gdGhlIGBtbS9LY29uZmlnYCBmaWxlIOKAkyB0aGF0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSByZWxldmFudCBlbnRyaWVzIGRpcmVjdGx5LiBJIHdhbnQgdG8gc2VlIHdoYXQgb3RoZXIgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgQ09ORklHX1pTV0FQYCBjYW4gZXZlbiBiZSBjb25zaWRlcmVkLiBBcmUgdGhlcmUgYW55IHByZXJlcXVpc2l0ZXM/IERvZXMgaXQgcmVxdWlyZSBzcGVjaWZpYyBOVU1BIGNvbmZpZ3VyYXRpb25zLCBvciBjZXJ0YWluIGJsb2NrIGRldmljZSBmZWF0dXJlcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIFpTV0FQIGZpdHMgaW50byB0aGUgbGFyZ2VyIG1lbW9yeSBtYW5hZ2VtZW50IHBpY3R1cmUuIEl0J2xsIGFsc28gaGVscCBtZSB0cm91Ymxlc2hvb3QgYW55IHBvdGVudGlhbCBidWlsZCBpc3N1ZXMgaWYgSSdtIGVuYWJsaW5nIG9yIGRpc2FibGluZyBaU1dBUCwgb3IgZGVidWdnaW5nIHJlbGF0ZWQga2VybmVsIGlzc3Vlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYzMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjMzLjIxMDEwMjAyNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcXG4gIDE4OlxcdFxcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxcbiAgMTk6XFx0XFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcXG4gIDIwOlxcdFxcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIFpTV0FQXFxuICAyMzpcXHRcXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBTV0FQXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAyNjpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcXG4gIDI5OlxcdFxcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXFxuICAzMDpcXHRcXHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXFxuICAzMTpcXHRcXHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxcbiAgMzI6XFx0XFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXFxuICAzMzpcXHRcXHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIFpTV0FQXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcXG4gIDQwOlxcdFxcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdCAgVGhlIHNlbGVjdGlvbiBtYWRlIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGtlcm5lbFxcbiAgNDM6XFx0XFx0ICBjb21tYW5kIGxpbmUgJ3pzd2FwLmVuYWJsZWQ9JyBvcHRpb24uXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxuICA0NjpcXHRcXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbiAgNDc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgNDg6XFx0XFx0ZGVmYXVsdCBuXFxuICA0OTpcXHRcXHRoZWxwXFxuICA1MDpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgenN3YXAgc2hyaW5rZXIgd2lsbCBiZSBlbmFibGVkLCBhbmQgdGhlIHBhZ2VzXFxuICA1MTpcXHRcXHQgIHN0b3JlZCBpbiB0aGUgenN3YXAgcG9vbCB3aWxsIGJlY29tZSBhdmFpbGFibGUgZm9yIHJlY2xhaW0gKGkuZVxcbiAgNTI6XFx0XFx0ICB3cml0dGVuIGJhY2sgdG8gdGhlIGJhY2tpbmcgc3dhcCBkZXZpY2UpIG9uIG1lbW9yeSBwcmVzc3VyZS5cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0ICBUaGlzIG1lYW5zIHRoYXQgenN3YXAgd3JpdGViYWNrIGNvdWxkIGhhcHBlbiBldmVuIGlmIHRoZSBwb29sIGlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjMzLjIxMDIwNjM2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDYwMzA1Njg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEFuYWx5c2lzOiB6c3dhcCBXcml0ZWJhY2sgUmV0dXJuIENvZGUgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5pbmcgaWYgaXQncyB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIGluIGBtbS96c3dhcC5jYCwgd2hpY2ggaXMgZGVmaW5pdGVseSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyB0aGF0J3MgYSBwb3NpdGl2ZSByaWdodCBvZmYgdGhlIGJhdC4gSXQgbG9va3MgbGlrZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBub3cgcmV0dXJucyBgLUVOT0VOVGAgaW5zdGVhZCBvZiBgLUVFWElTVGAgd2hlbiBgZ2V0X3N3YXBfZGV2aWNlKClgIGZhaWxzLlxuXG5JIGNhbiBzZWUgdGhhdCwgcHJldmlvdXNseSwgYSBmYWlsdXJlIHdvdWxkIGxlYWQgdG8gYHNocmlua19tZW1jZ19jYmAgcmV0dXJuaW5nIGBMUlVfU1RPUGAgcHJlbWF0dXJlbHkuIFRoZSBjaGFuZ2UgdG8gYC1FTk9FTlRgIGNhdXNlcyBgTFJVX1JFVFJZYCB0byBiZSByZXR1cm5lZC4gVGhpcyBpcyBjbGVhcmx5IGEgY2hhbmdlIGluIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhlIHpzd2FwIHNocmlua2VyLCBzbyB5ZXMsIGFjY29yZGluZyB0byB0aGUgY3JpdGVyaWEsIHRoaXMgd2FycmFudHMgZnV6emluZzogYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Ob3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBgRm9jdXNTeW1ib2xzYC4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGluY2x1ZGUgYW55IHViaXF1aXRvdXMgZnVuY3Rpb25zLiBMZXQncyBzZWUuLi4gdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBhcmUgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgKHRoZSBvbmUgSSdtIGNoYW5naW5nKSwgYHNocmlua19tZW1jZ19jYmAgKHRoZSBjYWxsZXIpLCBgenN3YXBfc2hyaW5rZXJfc2NhbmAgYW5kIGBzaHJpbmtfbWVtY2dgLlxuXG5IbW0sIGFyZSBhbnkgb2YgdGhlc2Ugc3RhdGljPyBZZXMsIHRoZXkgYXJlIGFsbCBzdGF0aWMhIEkgdGhvdWdodCBJIG1pZ2h0IHJ1biBpbnRvIHRoZSBcInN0YXRpYyBpbmxpbmUgZnVuY3Rpb25cIiB0cmFwLCBidXQgc2luY2UgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYSAuYyBmaWxlIGFuZCBub3Qgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gYSBoZWFkZXIsIHRoZXkgKnNob3VsZCogaGF2ZSBkaXN0aW5jdCBzeW1ib2xzIGluIHRoZSBrZXJuZWwuIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIGNhbGxlZCBvbmNlIGluIGBzaHJpbmtfbWVtY2dfY2JgLCBzbyBpdCBtaWdodCBiZSBpbmxpbmVkLiBCdXQgYHNocmlua19tZW1jZ19jYmAgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgbGlzdF9scnVfc2hyaW5rX3dhbGtgLCBhbmQgaXQgaXMgdGh1cyBpbXBvc3NpYmxlIHRvIGJlIGlubGluZWQhIGB6c3dhcF9zaHJpbmtlcl9zY2FuYCBpcyBhbHNvIHBhc3NlZCBhIGZ1bmN0aW9uIHBvaW50ZXIgKGl0cyBhZGRyZXNzIGlzIHRha2VuKSwgc28gaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIHN5bWJvbC5cblxuU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgcmVmbGVjdCB0aGUgYWx0ZXJlZCBsb2dpYyBhcmUgdGhlIHN5bWJvbHMgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGBzaHJpbmtfbWVtY2dfY2JgIGFuZCBgenN3YXBfc2hyaW5rZXJfc2NhbmAuIEknbGwgZm9jdXMgb24gdGhvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjQzLjgxMzI2NTUyM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzNDM2NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX3Nocmlua2VyX3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTEwOTA9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG4tLVxcbm1tL3pzd2FwLmMtMTE3MC1cXG5tbS96c3dhcC5jOjExNzE6c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbm1tL3pzd2FwLmMtMTE3Mi1cXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0venN3YXAuYz0xMjY0PXN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX2FsbG9jX3Nocmlua2VyKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTEyNzItXFxubW0venN3YXAuYzoxMjczOlxcdHNocmlua2VyLVxcdTAwM2VzY2FuX29iamVjdHMgPSB6c3dhcF9zaHJpbmtlcl9zY2FuO1xcbm1tL3pzd2FwLmMtMTI3NC1cXHRzaHJpbmtlci1cXHUwMDNlY291bnRfb2JqZWN0cyA9IHpzd2FwX3Nocmlua2VyX2NvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMjo0NC4wMTY3MTAxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTMwMDA2NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb2RlIENoYW5nZXMgUmVsYXRlZCB0byBac3dhcCBhbmQgTWVtb3J5IFNocmlua2luZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBgc2hyaW5rX21lbWNnX2NiYCBhbmQgYHpzd2FwX3Nocmlua2VyX3NjYW5gIGFyZSBmdW5jdGlvbiBwb2ludGVycy4gUmlnaHQgYXdheSwgdGhhdCB0ZWxscyBtZSB0aGV5IGFyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIHByZXNlbnQgYXMgc3ltYm9scyBpbiB0aGUgdm1saW51eCBpbWFnZS4gR29vZCB0byBrbm93LCBrZWVwcyB0aGluZ3MgY2xlYW5lci4gQW5kIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBtb2RpZmllZCBpcyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gVGhlIGZhY3QgdGhhdCB0aGV5J3ZlIGluY2x1ZGVkIGJvdGggYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGBzaHJpbmtfbWVtY2dfY2JgIGFuZCBwb3RlbnRpYWxseSBldmVuIGB6c3dhcF9zaHJpbmtlcl9zY2FuYCBpbiB0aGUgYnVpbGQgcHJvY2VzcyBpcyBleGNlbGxlbnQsIGRlbW9uc3RyYXRpbmcgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIEl0J3MgdGhlIGJlc3Qgd2F5IHRvIGRvIGl0LlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzOiB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBhY3R1YWxseSByZXF1aXJlZCBmb3IgenN3YXAgYW5kIGZvciB0aGUgc2hyaW5rZXIgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGNoZWNrIHRob3NlIGBFbmFibGVDb25maWdzYCB0byBiZSBzdXJlLiBJJ2xsIHByb2JhYmx5IGZpbmQgc29tZSBjbHVlcyBpbiBgbW0venN3YXAuY2AgdG9vLiBJdCdzIGEgY2xhc3NpYyBwbGFjZSB0byBsb29rIGZvciB0aG9zZSBjb25kaXRpb25hbCBpZmRlZnMgdGhhdCdsbCB0ZWxsIG1lIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDc6MDI6NDYuNTQ2NzIxMDAxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA5OTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZ8I2lmIElTX0VOQUJMRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTYxNz1zdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCxcXG4tLVxcbm1tL3pzd2FwLmMtNjUwLS8qIHNob3VsZCBiZSBjYWxsZWQgdW5kZXIgUkNVICovXFxubW0venN3YXAuYzo2NTE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3pzd2FwLmMtNjUyLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxcbi0tXFxubW0venN3YXAuYz0xNjgxPXZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSlcXG4tLVxcbm1tL3pzd2FwLmMtMTcwMC0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbm1tL3pzd2FwLmM6MTcwMTojaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxubW0venN3YXAuYy0xNzAyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAyOjQ2LjU5MTgyMzY3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwNDM5NzIwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgbW0venN3YXAuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVuIGBtbS96c3dhcC5jYCBnZXRzIGNvbXBpbGVkLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYG1tL2AgZGlyZWN0b3J5LiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgYnVpbGQgaW5zdHJ1Y3Rpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHNob3VsZCByZXNpZGUuIEknbGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgbG9vayBmb3IgZGlyZWN0aXZlcyBvciBkZXBlbmRlbmNpZXMgdGhhdCByZWxhdGUgdG8gYHpzd2FwLmNgLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHRoaXMgc3BlY2lmaWMgZmlsZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIGRpcmVjdCByZWZlcmVuY2UgdG8gaXQsIG9yIGluZGlyZWN0IGluY2x1c2lvbiB2aWEgYSBsYXJnZXIgbW9kdWxlLiBMZXQncyBkaWcgaW4gYW5kIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMjcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMjo0OC42MzU3OTc5OThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTY0OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcbm1tL01ha2VmaWxlLTgwLW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMjo0OC42ODY3NzA1MzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA4MjQzMDU0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWnN3YXAgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGxpbmU6IGBvYmotJChDT05GSUdfWlNXQVApICs9IHpzd2FwLm9gLiBUaGF0IHRlbGxzIG1lIHRoZSB6c3dhcCBtb2R1bGUgaXMgYmVpbmcgY29tcGlsZWQsIGJ1dCBpdCdzIGRlcGVuZGVudCBvbiBgQ09ORklHX1pTV0FQYC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgaW4gYG1tL0tjb25maWdgOiBZZXAsIGBDT05GSUdfWlNXQVBgIHJlcXVpcmVzIGBTV0FQYCwgc2VsZWN0cyBgQ1JZUFRPYCBhbmQgYFpTTUFMTE9DYC4gU3RhbmRhcmQgc3R1ZmYuXG5cbk5vdywgSSdtIHdvbmRlcmluZyBhYm91dCB0aGUgZGVmYXVsdCBzdGF0ZSBvZiB6c3dhcC4gVGhlIGNvZGUgbWVudGlvbnMgYENPTkZJR19aU1dBUF9ERUZBVUxUX09OYC4gVGhhdCBtYWtlcyBpdCBzb3VuZCBsaWtlIHpzd2FwIGlzIGVuYWJsZWQgYXQgYm9vdCBpZiB0aGlzIGNvbmZpZyBvcHRpb24gaXMgc2V0LiBPdGhlcndpc2UsIEknbGwgbmVlZCB0byBlbmFibGUgaXQgZXhwbGljaXRseSB0aHJvdWdoIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50IG9yIHN5c2ZzLiBJIG5lZWQgdG8ga25vdyBob3cgc3l6a2FsbGVyIGlzIGVuYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSwgZG9lcyBpdCBwYXNzIGB6c3dhcC5lbmFibGVkPTFgIHRvIHRoZSBrZXJuZWw/IE9yIGRvZXMgaXQgcmVseSBvbiBgWlNXQVBfREVGQVVMVF9PTmAgYmVpbmcgZW5hYmxlZD8gVW5kZXJzdGFuZGluZyB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGhlcmUgaXMga2V5IHRvIGludGVycHJldGluZyB0aGUgZnV6emVyIHJlc3VsdHMuXG5cbkFuZCB3aGF0IGFib3V0IHRoaXMgYENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYD8gV2hlcmUgaXMgdGhhdCBldmVuIHVzZWQ/IEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZS4gTGV0J3MgZmluZCBvdXQgZXhhY3RseSB3aGVyZSBgQ09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gIHNob3dzIHVwIGluIGBtbS96c3dhcC5jYC4gR290dGEgdHJhY2UgdGhlIGxvZ2ljIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MjUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDc6MDI6NTkuNTExMDc5MjQ0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzI4NDQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTM1PWNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS96c3dhcC5jPTEyMT1zdGF0aWMgYm9vbCB6c3dhcF9zaHJpbmtlcl9lbmFibGVkID0gSVNfRU5BQkxFRChcXG5tbS96c3dhcC5jOjEyMjpcXHRcXHRDT05GSUdfWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTik7XFxubW0venN3YXAuYy0xMjMtbW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMjo1OS41NjgzNjk0MTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDYwNTA1MDU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBac3dhcCBTaHJpbmtlciBNdXNpbmdzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgenN3YXBfc2hyaW5rZXJfZW5hYmxlZGAgZmxhZy4gSSBzZWUgaXQncyBpbml0aWFsaXplZCB3aXRoIGBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OKWAuIEludGVyZXN0aW5nLiBUaGF0IG1lYW5zIGl0IGRlZmF1bHRzIHRvIHdoYXRldmVyIHRoZSBjb25maWcgc2V0dGluZyBpcy4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0IHNocmlua2VyIGlzIGVuYWJsZWQsIHRob3VnaCwgcmlnaHQ/XG5cbldhaXQgYSBtaW51dGUsIEkgc2VlIHRoYXQgYHNocmlua19tZW1jZ19jYmAgaXMgZXhlY3V0ZWQgd2hlbiB0aGUgc2hyaW5rZXIgYWN0dWFsbHkgKnJ1bnMqLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBJIGhhdmUgdG8gc2VlIHdoZXJlIHRoYXQgaXMgdXNlZC4gVGhhdCBpcyB0aGUgY3JpdGljYWwgcGFydCB0byB1bmRlcnN0YW5kIG5vdywgdG8gc2VlICpob3cqIHRoaXMgZmxhZyBhY3R1YWxseSBhZmZlY3RzIGJlaGF2aW9yLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBgenN3YXBfc2hyaW5rZXJfZW5hYmxlZGAgdmFyaWFibGUgaXMgKmFjdHVhbGx5KiBiZWluZyBjaGVja2VkLiBHb3R0YSB0cmFjZSB0aGUgY29kZSBhbmQgc2VlIHdoZXJlIGl0IG1hdHRlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzcwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDc6MDM6MDQuMTczNDIyNzQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU0OTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF9zaHJpbmtlcl9lbmFibGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz0xMTc9bW9kdWxlX3BhcmFtX25hbWVkKGFjY2VwdF90aHJlc2hvbGRfcGVyY2VudCwgenN3YXBfYWNjZXB0X3Rocl9wZXJjZW50LFxcbi0tXFxubW0venN3YXAuYy0xMjAtLyogRW5hYmxlL2Rpc2FibGUgbWVtb3J5IHByZXNzdXJlLWJhc2VkIHNocmlua2VyLiAqL1xcbm1tL3pzd2FwLmM6MTIxOnN0YXRpYyBib29sIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQgPSBJU19FTkFCTEVEKFxcbm1tL3pzd2FwLmMtMTIyLVxcdFxcdENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OKTtcXG5tbS96c3dhcC5jOjEyMzptb2R1bGVfcGFyYW1fbmFtZWQoc2hyaW5rZXJfZW5hYmxlZCwgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCwgYm9vbCwgMDY0NCk7XFxubW0venN3YXAuYy0xMjQtXFxuLS1cXG5tbS96c3dhcC5jPTExNzE9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbi0tXFxubW0venN3YXAuYy0xMTc2LVxcbm1tL3pzd2FwLmM6MTE3NzpcXHRpZiAoIXpzd2FwX3Nocmlua2VyX2VuYWJsZWQgfHxcXG5tbS96c3dhcC5jLTExNzgtXFx0XFx0XFx0IW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc2MtXFx1MDAzZW1lbWNnKSkge1xcbi0tXFxubW0venN3YXAuYz0xMTkyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuLS1cXG5tbS96c3dhcC5jLTEyMDEtXFxubW0venN3YXAuYzoxMjAyOlxcdGlmICghenN3YXBfc2hyaW5rZXJfZW5hYmxlZCB8fCAhbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChtZW1jZykpXFxubW0venN3YXAuYy0xMjAzLVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzowNC4yMTg5NzgxMzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQ3Mjc3MzE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgWnN3YXAgU2hyaW5rZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGB6c3dhcF9zaHJpbmtlcl9zY2FuYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyB0aGlzIGNvbmRpdGlvbmFsOiBgaWYgKCF6c3dhcF9zaHJpbmtlcl9lbmFibGVkIHx8ICFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHNjLVx1MDAzZW1lbWNnKSlgLiBUaGF0J3MgdGhlIGNydXggb2YgaG93IHRoZSBzaHJpbmtlciBiZWhhdmVzLiBOb3csIEkgcmVtZW1iZXIgdGhhdCBgQ09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gIGRlZmF1bHRzIHRvICduJy4gUmlnaHQsIHNvIGlmIHRoYXQgaXNuJ3Qgc2V0LCBgenN3YXBfc2hyaW5rZXJfZW5hYmxlZGAgaXMgZ29pbmcgdG8gYmUgZmFsc2UgdW5sZXNzIHNvbWVvbmUncyBleHBsaWNpdGx5IGVuYWJsZWQgaXQgdGhyb3VnaCBzeXNmcy5cblxuQWxyaWdodCwgc28gdGhlIGltcGxpY2F0aW9ucyBoZXJlIGFyZSBwcmV0dHkgY2xlYXIuIGBaU1dBUGAsIGBaU1dBUF9ERUZBVUxUX09OYCwgYFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gLCBhbmQgb2YgY291cnNlIGBTV0FQYCwgYXJlIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXQgcGxheS4gVGhleSBlc3NlbnRpYWxseSBkZXRlcm1pbmUgaWYgYW5kIGhvdyB0aGUgc2hyaW5rZXIgZXZlbiBydW5zLiBUaGVzZSBhcmUgdGhlIGtleSBsZXZlcnMuXG5cbkhvbGQgb24gYSBzZWNvbmQsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcuLi4gSSdtIGdvaW5nIHRvIGxvb2sgZGVlcGVyIGludG8gYG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWRgLiBXaGVyZSBpcyB0aGF0IGZ1bmN0aW9uYWxpdHkgZGVmaW5lZD8gR290dGEgYmUgc3VyZSBJJ20gY2xlYXIgb24gaG93IHRoYXQgcGxheXMgaW50byB0aGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDQ1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAzOjA2LjY5MTc1MzYzNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMDM4MjE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4OTY9dm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4OTc6Ym9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg5OC0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkwNz1zdGF0aWMgaW5saW5lIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTEwLX1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTExOnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTEyLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz02MDU5PXZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTYwNzktXFxubW0vbWVtY29udHJvbC5jOjYwODA6Ym9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtNjA4MS17XFxuLS1cXG5tbS9wYWdlX2lvLmM9MjA0PWludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vcGFnZV9pby5jLTI0My1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vcGFnZV9pby5jOjI0NDpcXHRpZiAoIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoZm9saW9fbWVtY2coZm9saW8pKSkge1xcbm1tL3BhZ2VfaW8uYy0yNDUtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5tbS96c3dhcC5jPTg0MD1zdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4tLVxcbm1tL3pzd2FwLmMtODg1LVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS96c3dhcC5jOjg4NjpcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoXFxubW0venN3YXAuYy04ODctXFx0XFx0XFx0XFx0XFx0Zm9saW9fbWVtY2cocGFnZV9mb2xpbyhwYWdlKSkpKSB7XFxuLS1cXG5tbS96c3dhcC5jPTExNzE9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbi0tXFxubW0venN3YXAuYy0xMTc3LVxcdGlmICghenN3YXBfc2hyaW5rZXJfZW5hYmxlZCB8fFxcbm1tL3pzd2FwLmM6MTE3ODpcXHRcXHRcXHQhbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzYy1cXHUwMDNlbWVtY2cpKSB7XFxubW0venN3YXAuYy0xMTc5LVxcdFxcdHNjLVxcdTAwM2Vucl9zY2FubmVkID0gMDtcXG4tLVxcbm1tL3pzd2FwLmM9MTE5Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbi0tXFxubW0venN3YXAuYy0xMjAxLVxcbm1tL3pzd2FwLmM6MTIwMjpcXHRpZiAoIXpzd2FwX3Nocmlua2VyX2VuYWJsZWQgfHwgIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQobWVtY2cpKVxcbm1tL3pzd2FwLmMtMTIwMy1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3pzd2FwLmM9MTI4OD1zdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS96c3dhcC5jLTEyOTEtXFxubW0venN3YXAuYzoxMjkyOlxcdGlmICghbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChtZW1jZykpXFxubW0venN3YXAuYy0xMjkzLVxcdFxcdHJldHVybiAtRU5PRU5UO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzowOC4yMjIxNDE2NjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM0MjkyMzc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWRgIFVuZGVyIFNjcnV0aW55KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZGAgZnVuY3Rpb24sIHBhcnRpY3VsYXJseSB3aGVuIGBDT05GSUdfTUVNQ0dgICppc24ndCogZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8uIFRoZSBpbmNsdWRlIGZpbGUgYGxpbnV4L21lbWNvbnRyb2wuaGAgc2VlbXMgdG8gaGF2ZSB0aGUgYW5zd2VyOiBhIHNpbXBsZSBpbmxpbmUgZnVuY3Rpb24gdGhhdCAqYWx3YXlzKiByZXR1cm5zIGB0cnVlYCBpZiBgQ09ORklHX01FTUNHYCBpcyBvZmYuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIOKAkyBpdCBlZmZlY3RpdmVseSBtYWtlcyB6c3dhcCB3cml0ZWJhY2sgYWx3YXlzIGVuYWJsZWQgaW4gdGhlIGFic2VuY2Ugb2YgbWVtb3J5IGNncm91cHMuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBtbS9tZW1jb250cm9sLmM6NjA4MGAgdG8gc2VlIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBmbGFnICppcyogc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM5MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzoxMC41NjUwNjkxNjVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MDgwOlxcdGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuNjA4MTpcXHR7XFxuNjA4MjpcXHRcXHQvKiBpZiB6c3dhcCBpcyBkaXNhYmxlZCwgZG8gbm90IGJsb2NrIHBhZ2VzIGdvaW5nIHRvIHRoZSBzd2FwcGluZyBkZXZpY2UgKi9cXG42MDgzOlxcdFxcdGlmICghenN3YXBfaXNfZW5hYmxlZCgpKVxcbjYwODQ6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNjA4NTpcXHRcXG42MDg2OlxcdFxcdGZvciAoOyBtZW1jZzsgbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpXFxuNjA4NzpcXHRcXHRcXHRpZiAoIVJFQURfT05DRShtZW1jZy1cXHUwMDNlenN3YXBfd3JpdGViYWNrKSlcXG42MDg4OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG42MDg5OlxcdFxcbjYwOTA6XFx0XFx0cmV0dXJuIHRydWU7XFxuNjA5MTpcXHR9XFxuNjA5MjpcXHRcXG42MDkzOlxcdHN0YXRpYyB1NjQgenN3YXBfY3VycmVudF9yZWFkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxuNjA5NDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgY2Z0eXBlICpjZnQpXFxuNjA5NTpcXHR7XFxuNjA5NjpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNzcyk7XFxuNjA5NzpcXHRcXG42MDk4OlxcdFxcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHMobWVtY2cpO1xcbjYwOTk6XFx0XFx0cmV0dXJuIG1lbWNnX3BhZ2Vfc3RhdGUobWVtY2csIE1FTUNHX1pTV0FQX0IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzoxMC41NjUyOTIzMTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDEwNjM3Njg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQgXHUwMDI2IFpzd2FwIFdyaXRlYmFjayoqXG5cbkFscmlnaHQsIHNvIHRoZSBkZWZhdWx0IHN0YXRlIGZvciBgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZGAgaXMgc2V0IHRvIHRydWUuIFRoYXQncyBnb29kIHRvIGtub3cg4oCTIGl0IG1lYW5zIHdlJ3JlIHByb2JhYmx5IGFscmVhZHkgbGV2ZXJhZ2luZyB6c3dhcCB3cml0ZWJhY2sgaW4gbWFueSBjb21tb24gY29uZmlndXJhdGlvbnMuIEJ1dCB0aGF0IGJyaW5ncyB1cCBhbiBpbXBvcnRhbnQgcXVlc3Rpb246IFdoYXQgc3BlY2lmaWNhbGx5ICp0cmlnZ2VycyogdGhlIGBzaHJpbmtfbWVtY2coKWAgZnVuY3Rpb24/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIG1lbW9yeSBjZ3JvdXAgc2hyaW5raW5nIGlzIGNydWNpYWwgZm9yIG9wdGltaXppbmcgb3VyIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGluIHJlc291cmNlLWNvbnN0cmFpbmVkIGVudmlyb25tZW50cyBvciB3aGVuIGRlYWxpbmcgd2l0aCBjb250YWluZXJpemF0aW9uLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQgY29uZGl0aW9ucyBjYXVzZSB0aGF0IHNocmluayBmdW5jdGlvbiB0byBiZSBjYWxsZWQuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyBsaWUsIGFuZCB0aGF0IHdpbGwgdWx0aW1hdGVseSBoZWxwIG1lIGRlY2lkZSBob3cgdG8gb3B0aW1pemUgbXkgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDM3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzoxNC42NzE2NzE3MjJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODYyMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19tZW1jZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9OTg3PXN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuLS1cXG5tbS96c3dhcC5jLTEwODktICovXFxubW0venN3YXAuYzoxMDkwOnN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxubW0venN3YXAuYy0xMDkxLVxcdFxcdFxcdFxcdCAgICAgICB2b2lkICphcmcpXFxuLS1cXG5tbS96c3dhcC5jPTExNzE9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbi0tXFxubW0venN3YXAuYy0xMTgyLVxcbm1tL3pzd2FwLmM6MTE4MzpcXHRzaHJpbmtfcmV0ID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBzYywgXFx1MDAyNnNocmlua19tZW1jZ19jYixcXG5tbS96c3dhcC5jLTExODQtXFx0XFx0XFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcXG4tLVxcbm1tL3pzd2FwLmM9MTI2ND1zdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxcbi0tXFxubW0venN3YXAuYy0xMjg3LSAqL1xcbm1tL3pzd2FwLmM6MTI4ODpzdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0venN3YXAuYy0xMjg5LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTMwNS1cXHRcXHRzaHJ1bmsgKz0gbGlzdF9scnVfd2Fsa19vbmUoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnLFxcbm1tL3pzd2FwLmM6MTMwNjpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXFx1MDAyNm5yX3RvX3dhbGspO1xcbm1tL3pzd2FwLmMtMTMwNy1cXHRcXHRzY2FubmVkICs9IFNXQVBfQ0xVU1RFUl9NQVggLSBucl90b193YWxrO1xcbi0tXFxubW0venN3YXAuYz0xMzE3PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxubW0venN3YXAuYy0xMzgyLVxcbm1tL3pzd2FwLmM6MTM4MzpcXHRcXHRyZXQgPSBzaHJpbmtfbWVtY2cobWVtY2cpO1xcbm1tL3pzd2FwLmMtMTM4NC1cXHRcXHQvKiBkcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgKi9cXG4tLVxcbm1tL3pzd2FwLmM9MTQ4OD1ib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTE1MDYtXFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcXG5tbS96c3dhcC5jOjE1MDc6XFx0XFx0aWYgKHNocmlua19tZW1jZyhtZW1jZykpIHtcXG5tbS96c3dhcC5jLTE1MDgtXFx0XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzoxNC43MTc1NDI3MzJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTQyNDE4ODI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBac3dhcCBTaHJpbmtpbmcgYW5kIFdyaXRlYmFjayBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSB0aGUgb3B0aW1hbCBhcHByb2FjaCBmb3IgZnV6emluZyBhIHJlY2VudCBwYXRjaCByZWxhdGVkIHRvIHpzd2FwIHdyaXRlYmFjayBhbmQgc2hyaW5raW5nLlxuXG5GaXJzdCwgSSBpZGVudGlmaWVkIHRoYXQgdGhlIGZ1bmN0aW9ucyBgc2hyaW5rX21lbWNnYCAoY2FsbGVkIGZyb20gYHpzd2FwX3N0b3JlYCBhbmQgYHNocmlua193b3JrZXJgKSBhbmQgYHpzd2FwX3Nocmlua2VyX3NjYW5gIChjYWxsZWQgYnkgdGhlIHNocmlua2VyIHN1YnN5c3RlbSkgYXJlIGtleSBlbnRyeSBwb2ludHMuIFRoZSBsYXR0ZXIgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgY29ubmVjdHMgdG8gYHNocmlua19tZW1jZ19jYmAuIE5vdywgSSBuZWVkIHRvIGtub3cgd2hpY2gga2VybmVsIGNvbmZpZ3MgY29udHJvbCB0aGlzIGZ1bmN0aW9uYWxpdHkuIExvb2tpbmcgaW50byBgbW0vS2NvbmZpZ2AsIGl0J3MgY2xlYXIgdGhhdCBgU1dBUGAsIGBaU1dBUGAsIGBaU1dBUF9ERUZBVUxUX09OYCwgYW5kIGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYCBhcmUgdGhlIHJlbGV2YW50IGZsYWdzLiBgTUVNQ0dgIGlzIGluZGlyZWN0bHkgcmVsYXRlZCwgZ2l2ZW4genN3YXAncyB1c2Ugb2YgbWVtY2cgbGlzdF9scnUsIGFsdGhvdWdoIGxpc3RfbHJ1IGl0c2VsZiBkb2Vzbid0IHJlcXVpcmUgTUVNQ0cuXG5cbk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gSSd2ZSBmb2N1c2VkIG9uIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCB0aGUgZnVuY3Rpb24gdGhhdCdzIGNoYW5nZWQuIFRoZW4gSSB6ZXJvZWQgaW4gb24gYHNocmlua19tZW1jZ19jYmAsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSByZXR1cm4gdmFsdWUgb2YgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgYW5kIGJyYW5jaGVzIGJhc2VkIG9uIHRoZSByZXR1cm5lZCBlcnJvciBjb2RlLCBlc3BlY2lhbGx5IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIGAtRUVYSVNUYCBhbmQgb3RoZXIgZXJyb3IgY29kZXMsIGFuZCB0aGUgYHpzd2FwX3Nocmlua2VyX3NjYW5gIGZ1bmN0aW9uIHdoaWNoIGNhbGxzIGBzaHJpbmtfbWVtY2dfY2JgLiBBbmQgb2YgY291cnNlLCBgc2hyaW5rX21lbWNnYCBpdHNlbGYsIGFzIGl0IGNhbGxzIGBsaXN0X2xydV93YWxrX29uZWAgd2l0aCBgc2hyaW5rX21lbWNnX2NiYC5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIHNwZWNpZmljIHRvIHpzd2FwLCBzbyB0aGUgbW9kaWZpY2F0aW9uIGlzIG5vdCB1YmlxdWl0b3VzLiBUaGV5IGFsbCByZWxhdGUgdG8genN3YXAgd3JpdGViYWNrIGFuZCBzaHJpbmtpbmcgd2hlbiBzd2FwcGluZy5cblxuU28sIGZvciBgc2V0LXJlc3VsdHNgLCBJIGNhbiBjb25maWRlbnRseSBpbmNsdWRlOlxuXG4qICAgKipgRW5hYmxlQ29uZmlnc2A6KiogYFtcIlNXQVBcIiwgXCJaU1dBUFwiLCBcIlpTV0FQX0RFRkFVTFRfT05cIiwgXCJaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXCJdYFxuKiAgICoqYEZvY3VzU3ltYm9sc2A6KiogYFtcInpzd2FwX3dyaXRlYmFja19lbnRyeVwiLCBcInNocmlua19tZW1jZ19jYlwiLCBcInpzd2FwX3Nocmlua2VyX3NjYW5cIiwgXCJzaHJpbmtfbWVtY2dcIl1gXG4qICAgKipgUmVhc29uaW5nYDoqKiBUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IGB6c3dhcF93cml0ZWJhY2tfZW50cnkoKWAgd2hlbiBzd2FwIGRldmljZSByZXRyaWV2YWwgZmFpbHMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGNoYW5nZXMgdGhpcyBjb2RlIGZyb20gYC1FRVhJU1RgIHRvIGAtRU5PRU5UYC4gSW4gYHNocmlua19tZW1jZ19jYigpYCwgYC1FRVhJU1RgIGNhdXNlZCB0aGUgc2hyaW5rZXIgdG8gc3RvcCwgaW50ZXJwcmV0aW5nIHRoaXMgYXMgZmluZGluZyBhIHN3YXBwZWQgcGFnZS4gTm93IHRoZSBjaGFuZ2VkIGVycm9yIGNvZGUgd2lsbCBsZWFkIHRvIHRoZSBzaHJpbmtpbmcgY29udGludWUuIFRoaXMgZGlyZWN0bHkgYWx0ZXJzIHRoZSBjb250cm9sIGZsb3cgYW5kIHRlcm1pbmF0aW9uIGJlaGF2aW9yIG9mIHpzd2FwIHNocmlua2VyIGl0ZXJhdGlvbnMgZHVyaW5nIHdyaXRlYmFjay4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCB3YXJyYW50cyBmdXp6aW5nLlxuKiAgICoqYFdvcnRoRnV6emluZ2A6KiogYHRydWVgXG5cbkknbSBzYXRpc2ZpZWQgd2l0aCB0aGlzIGFuYWx5c2lzLCB3aGljaCBwcm92aWRlcyBhIGNvbmNpc2UgeWV0IHRob3JvdWdoIGp1c3RpZmljYXRpb24gZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTE5LCJPdXRwdXRUb2tlbnMiOjIxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzoyNC4xNDE3MzM1N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMTI1MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3dyaXRlYmFja19lbnRyeVwiLFxuICAgIFwic2hyaW5rX21lbWNnX2NiXCIsXG4gICAgXCJ6c3dhcF9zaHJpbmtlcl9zY2FuXCIsXG4gICAgXCJzaHJpbmtfbWVtY2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSBpbiBtbS96c3dhcC5jIHRvIHJldHVybiAtRU5PRU5UIGluc3RlYWQgb2YgLUVFWElTVCB3aGVuIGdldF9zd2FwX2RldmljZSgpIGZhaWxzLiBJbiBzaHJpbmtfbWVtY2dfY2IoKSwgLUVFWElTVCBpcyBzcGVjaWZpY2FsbHkgY2hlY2tlZCB0byBkZXRlY3QgcGFnZXMgYWxyZWFkeSBjYWNoZWQgaW4gc3dhcCBjYWNoZSwgd2hpY2ggdHJpZ2dlcnMgTFJVX1NUT1AgdG8gdGVybWluYXRlIHNocmlua2luZy4gQ2hhbmdpbmcgdGhlIHJldHVybiB2YWx1ZSBhbHRlcnMgdGhlIHNocmlua2VyJ3MgZXJyb3IgaGFuZGxpbmcgYW5kIHJldHJ5IGxvb3AgYmVoYXZpb3IgdW5kZXIgY29uY3VycmVudCBzd2Fwb2ZmL2RldmljZSByZW1vdmFsLiBBcyB0aGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4genN3YXAgd3JpdGViYWNrIGFuZCBMUlUgcmVjbGFtYXRpb24sIGl0IHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIixcbiAgICBcIlpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIixcbiAgICBcInNocmlua19tZW1jZ19jYlwiLFxuICAgIFwienN3YXBfc2hyaW5rZXJfc2NhblwiLFxuICAgIFwic2hyaW5rX21lbWNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgaW4gbW0venN3YXAuYyB0byByZXR1cm4gLUVOT0VOVCBpbnN0ZWFkIG9mIC1FRVhJU1Qgd2hlbiBnZXRfc3dhcF9kZXZpY2UoKSBmYWlscy4gSW4gc2hyaW5rX21lbWNnX2NiKCksIC1FRVhJU1QgaXMgc3BlY2lmaWNhbGx5IGNoZWNrZWQgdG8gZGV0ZWN0IHBhZ2VzIGFscmVhZHkgY2FjaGVkIGluIHN3YXAgY2FjaGUsIHdoaWNoIHRyaWdnZXJzIExSVV9TVE9QIHRvIHRlcm1pbmF0ZSBzaHJpbmtpbmcuIENoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgYWx0ZXJzIHRoZSBzaHJpbmtlcidzIGVycm9yIGhhbmRsaW5nIGFuZCByZXRyeSBsb29wIGJlaGF2aW9yIHVuZGVyIGNvbmN1cnJlbnQgc3dhcG9mZi9kZXZpY2UgcmVtb3ZhbC4gQXMgdGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIHpzd2FwIHdyaXRlYmFjayBhbmQgTFJVIHJlY2xhbWF0aW9uLCBpdCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzoyNC4yMTE4NjY4NzlaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjM3MzI3NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDc6MDM6MjQuMjEyMzI2NTY5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjIyMzY4NjI3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGluIGB6c3dhcF93cml0ZWJhY2tfZW50cnkoKWAgZnJvbSBgLUVFWElTVGAgdG8gYC1FTk9FTlRgIHdoZW4gYGdldF9zd2FwX2RldmljZShzd3BlbnRyeSlgIHJldHVybnMgTlVMTC4gVGhpcyBwcmV2ZW50cyB0aGUgenN3YXAgc2hyaW5rZXIgKGBzaHJpbmtfbWVtY2dfY2JgKSBmcm9tIGZhbHNlbHkgYXNzdW1pbmcgdGhlIHBhZ2UgaXMgYWxyZWFkeSBpbiB0aGUgc3dhcCBjYWNoZSAod2hpY2ggY2hlY2tzIGZvciBgd3JpdGViYWNrX3Jlc3VsdCA9PSAtRUVYSVNUYCB0byBhYm9ydCBzaHJpbmtpbmcpLiBUaGUgY2hhbmdlIGlzIHN0cmljdGx5IGEgbG9naWMvZXJyb3IgY29kZSBmaXggaW4gdGhlIHN3YXAgcmVjbGFpbSBwYXRoOyBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlcnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQ29uc2VxdWVudGx5LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZDRiYjcxOWZjYTVmZWM1MmI3NjYzNjg4ZDcwMGQxODg5ODM5ZjE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMDc6MDE6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggMzdmMzRlNDA2YzhlMy4uYjk5NDhkNDY1N2QyNiAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC05OTgsNyArOTk4LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdC8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShzd3BlbnRyeSk7XG4gXHRpZiAoIXNpKVxuLVx0XHRyZXR1cm4gLUVFWElTVDtcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuIFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzoyNC4yMTIzMjc1NTlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAwNDI5OTk3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgTmVlZCBmb3IgYSBLTVNBTiBGdXp6aW5nIFNlc3Npb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaCBmb3IgYG1tL3pzd2FwLmNgIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoaXMgaXMgc3RhbmRhcmQgZGV2ZWxvcGVyIFFBLCByaWdodD8gSnVzdCBkb2luZyBteSBkdWUgZGlsaWdlbmNlLCBldmFsdWF0aW5nIHRoZSBwb3RlbnRpYWwgZm9yIHNhbml0aXplciBhcHBsaWNhYmlsaXR5IOKAkyBLQVNBTiB2ZXJzdXMgS01TQU4sIGluIHRoaXMgY2FzZS4gTm8gbWFsaWNpb3VzIGludGVudCwgbm8gZXhwbG9pdCBnZW5lcmF0aW9uLCBqdXN0IHRoZSB1c3VhbCBRQSBwcm9jZXNzLiBTZXZlcml0eS13aXNlLCBJJ2Qgc2F5IHRoaXMgaXMgcHJldHR5IGJlbmlnbiwgbm90aGluZyB0byByYWlzZSBhbnkgYWxhcm1zLlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmOiBpdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZS4gVGhlIGRpZmYgc2hvd3MgYSBzaW1wbGUgcmVwbGFjZW1lbnQgb2YgYC1FRVhJU1RgIHdpdGggYC1FTk9FTlRgIHdpdGhpbiB0aGUgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgZnVuY3Rpb24uIE5vdywgdGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyByZXR1cm4gdmFsdWUgbWF0dGVycy4gVGhlIGNvbnRleHQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBzd2FwIGNhY2hlIGZvbGlvIGFsbG9jYXRpb24uXG5cblNvLCBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGBtbS96c3dhcC5jYCBhcm91bmQgbGluZSA5OTgsIHNlZSB3aGVyZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBpcyBjYWxsZWQsIGFuZCB0aGVuIGZpZ3VyZSBvdXQgaG93IHRoYXQgcmV0dXJuIHZhbHVlIGlzIHVzZWQgdXBzdHJlYW0uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBhY3Qgb2YgdGhlIHJldHVybiB2YWx1ZSBjaGFuZ2UuIExvb2tzIGxpa2UgaXQncyB0aW1lIHRvIGZpcmUgdXAgYGdyZXBwZXJgIChvciB1c2UgYHJlYWQtZmlsZWApIHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugb24gZXJyb3IgaGFuZGxpbmcgYW5kIGNvbnRyb2wgZmxvdy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIGRlY2lkZSBpZiBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeSBvciBpZiB0aGUgZXhpc3RpbmcgS0FTQU4gY292ZXJhZ2UgaXMgc3VmZmljaWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA3OjAzOjM0LjI1NTMyOTY1OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0venN3YXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5ODA6XFx0ICogVGhpcyBjYW4gYmUgdGhvdWdodCBvZiBhcyBhIFxcXCJyZXN1bWVkIHdyaXRlYmFja1xcXCIgb2YgdGhlIGZvbGlvXFxuIDk4MTpcXHQgKiB0byB0aGUgc3dhcCBkZXZpY2UuICBXZSBhcmUgYmFzaWNhbGx5IHJlc3VtaW5nIHRoZSBzYW1lIHN3YXBcXG4gOTgyOlxcdCAqIHdyaXRlYmFjayBwYXRoIHRoYXQgd2FzIGludGVyY2VwdGVkIHdpdGggdGhlIHpzd2FwX3N0b3JlKClcXG4gOTgzOlxcdCAqIGluIHRoZSBmaXJzdCBwbGFjZS4gIEFmdGVyIHRoZSBmb2xpbyBoYXMgYmVlbiBkZWNvbXByZXNzZWQgaW50b1xcbiA5ODQ6XFx0ICogdGhlIHN3YXAgY2FjaGUsIHRoZSBjb21wcmVzc2VkIHZlcnNpb24gc3RvcmVkIGJ5IHpzd2FwIGNhbiBiZVxcbiA5ODU6XFx0ICogZnJlZWQuXFxuIDk4NjpcXHQgKi9cXG4gOTg3OlxcdHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuIDk4ODpcXHRcXHRcXHRcXHRcXHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXFxuIDk4OTpcXHR7XFxuIDk5MDpcXHRcXHRzdHJ1Y3QgeGFycmF5ICp0cmVlO1xcbiA5OTE6XFx0XFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cGVudHJ5KTtcXG4gOTkyOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDk5MzpcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xcbiA5OTQ6XFx0XFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpO1xcbiA5OTU6XFx0XFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xcbiA5OTY6XFx0XFx0aW50IHJldCA9IDA7XFxuIDk5NzpcXHRcXG4gOTk4OlxcdFxcdC8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovXFxuIDk5OTpcXHRcXHRzaSA9IGdldF9zd2FwX2RldmljZShzd3BlbnRyeSk7XFxuMTAwMDpcXHRcXHRpZiAoIXNpKVxcbjEwMDE6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTAwMjpcXHRcXG4xMDAzOlxcdFxcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XFxuMTAwNDpcXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcXG4xMDA1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcXG4xMDA2OlxcdFxcdHB1dF9zd2FwX2RldmljZShzaSk7XFxuMTAwNzpcXHRcXG4xMDA4OlxcdFxcdC8qXFxuMTAwOTpcXHRcXHQgKiBTd2FwIGNhY2hlIGFsbG9jYXRpb24gbWlnaHQgZmFpbCBkdWUgdG8gT09NLCBvciB0aGUgZW50cnlcXG4xMDEwOlxcdFxcdCAqIG1heSBhbHJlYWR5IGJlIGNhY2hlZCBkdWUgdG8gY29uY3VycmVudCBzd2FwaW4gb3IgaGF2ZSBiZWVuXFxuMTAxMTpcXHRcXHQgKiBmcmVlZC4gSWYgYWxyZWFkeSBjYWNoZWQsIGEgY29uY3VycmVudCBzd2FwaW4gbWFkZSB0aGUgZm9saW9cXG4xMDEyOlxcdFxcdCAqIGhvdCwgc28gc2tpcCBpdC4gRm9yIHRoZSB1bmxpa2VseSBjb25jdXJyZW50IHNocmlua2VyIGNhc2UsXFxuMTAxMzpcXHRcXHQgKiBpdCB3aWxsIGJlIHVubGlua2VkIGFuZCBmcmVlZCB3aGVuIGludmFsaWRhdGVkIGFueXdheS5cXG4xMDE0OlxcdFxcdCAqL1xcbjEwMTU6XFx0XFx0aWYgKElTX0VSUihmb2xpbykpXFxuMTAxNjpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihmb2xpbyk7XFxuMTAxNzpcXHRcXG4xMDE4OlxcdFxcdC8qXFxuMTAxOTpcXHRcXHQgKiBmb2xpbyBpcyBsb2NrZWQsIGFuZCB0aGUgc3dhcGNhY2hlIGlzIG5vdyBzZWN1cmVkIGFnYWluc3RcXG4xMDIwOlxcdFxcdCAqIGNvbmN1cnJlbnQgc3dhcHBpbmcgdG8gYW5kIGZyb20gdGhlIHNsb3QsIGFuZCBjb25jdXJyZW50XFxuMTAyMTpcXHRcXHQgKiBzd2Fwb2ZmIHNvIHdlIGNhbiBzYWZlbHkgZGVyZWZlcmVuY2UgdGhlIHpzd2FwIHRyZWUgaGVyZS5cXG4xMDIyOlxcdFxcdCAqIFZlcmlmeSB0aGF0IHRoZSBzd2FwIGVudHJ5IGhhc24ndCBiZWVuIGludmFsaWRhdGVkIGFuZCByZWN5Y2xlZFxcbjEwMjM6XFx0XFx0ICogYmVoaW5kIG91ciBiYWNrcywgdG8gYXZvaWQgb3ZlcndyaXRpbmcgYSBuZXcgc3dhcCBmb2xpbyB3aXRoXFxuMTAyNDpcXHRcXHQgKiBvbGQgY29tcHJlc3NlZCBkYXRhLiBPbmx5IHdoZW4gdGhpcyBpcyBzdWNjZXNzZnVsIGNhbiB0aGUgZW50cnlcXG4xMDI1OlxcdFxcdCAqIGJlIGRlcmVmZXJlbmNlZC5cXG4xMDI2OlxcdFxcdCAqL1xcbjEwMjc6XFx0XFx0dHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3BlbnRyeSk7XFxuMTAyODpcXHRcXHRpZiAoZW50cnkgIT0geGFfbG9hZCh0cmVlLCBvZmZzZXQpKSB7XFxuMTAyOTpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjEwMzA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTAzMTpcXHRcXHR9XFxuMTAzMjpcXHRcXG4xMDMzOlxcdFxcdGlmICghenN3YXBfZGVjb21wcmVzcyhlbnRyeSwgZm9saW8pKSB7XFxuMTAzNDpcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbjEwMzU6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTAzNjpcXHRcXHR9XFxuMTAzNzpcXHRcXG4xMDM4OlxcdFxcdHhhX2VyYXNlKHRyZWUsIG9mZnNldCk7XFxuMTAzOTpcXHRcXG4xMDQwOlxcdFxcdGNvdW50X3ZtX2V2ZW50KFpTV1BXQik7XFxuMTA0MTpcXHRcXHRpZiAoZW50cnktXFx1MDAzZW9iamNnKVxcbjEwNDI6XFx0XFx0XFx0Y291bnRfb2JqY2dfZXZlbnRzKGVudHJ5LVxcdTAwM2VvYmpjZywgWlNXUFdCLCAxKTtcXG4xMDQzOlxcdFxcbjEwNDQ6XFx0XFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XFxuMTA0NTpcXHRcXG4xMDQ2OlxcdFxcdC8qIGZvbGlvIGlzIHVwIHRvIGRhdGUgKi9cXG4xMDQ3OlxcdFxcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xcbjEwNDg6XFx0XFxuMTA0OTpcXHRcXHQvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDc6MDM6MzQuMjU1NDM2MDM5WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NzAzODk4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBDYWxsIFNpdGVzKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBUaGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIGEgcXVpY2sgY29kZSBzZWFyY2guIExldCdzIGZpcmUgdXAgYSBncmVwIGNvbW1hbmQgYW5kIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nIGludm9rZWQuIEknbSBleHBlY3RpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgYXJlYXMsIGFsbG93aW5nIG1lIHRvIHF1aWNrbHkgbmFycm93IGRvd24gdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgb3BlcmF0ZXMsIGhvcGVmdWxseSBoZWxwaW5nIG1lIGZpZ3VyZSBvdXQgd2hlcmUgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODc1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzozNi4yMjU4Mjk5NzlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzYwMTAzNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfd3JpdGViYWNrX2VudHJ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9OTI0PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtOTg2LSAqL1xcbm1tL3pzd2FwLmM6OTg3OnN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxubW0venN3YXAuYy05ODgtXFx0XFx0XFx0XFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxcbi0tXFxubW0venN3YXAuYz0xMDkwPXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxuLS1cXG5tbS96c3dhcC5jLTExMTMtXFx0ICogMS4gV2UgZXh0cmFjdCB0aGUgc3dwX2VudHJ5X3QgdG8gdGhlIHN0YWNrLCBhbGxvd2luZ1xcbm1tL3pzd2FwLmM6MTExNDpcXHQgKiAgICB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSB0byBwaW4gdGhlIHN3YXAgZW50cnkgYW5kXFxubW0venN3YXAuYy0xMTE1LVxcdCAqICAgIHRoZW4gdmFsaWRhdGUgdGhlIHpzd2FwIGVudHJ5IGFnYWluc3QgdGhhdCBzd2FwIGVudHJ5J3NcXG4tLVxcbm1tL3pzd2FwLmMtMTE0OC1cXG5tbS96c3dhcC5jOjExNDk6XFx0d3JpdGViYWNrX3Jlc3VsdCA9IHpzd2FwX3dyaXRlYmFja19lbnRyeShlbnRyeSwgc3dwZW50cnkpO1xcbm1tL3pzd2FwLmMtMTE1MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDc6MDM6MzcuNzYxODQ1ODM2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3ODYwMDI5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRob3NlIGxpbmVzIG9mIGBtbS96c3dhcC5jYDpcblxuKipEaXZpbmcgaW50byB0aGUgWnN3YXAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBnZXQgaW50byBsaW5lcyAxMTQwLTEyMDAgb2YgYG1tL3pzd2FwLmNgLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3Qgd2hhdCdzIGdvaW5nIG9uIGhlcmUuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBrZXkgcGllY2Ugb2YgdGhlIHpzd2FwIHByb2Nlc3MgbG9naWMsIG1heWJlIHJlbGF0ZWQgdG8gcGFnZSBpbnNlcnRpb24sIGV2aWN0aW9uLCBvciBwZXJoYXBzIHNvbWUgc29ydCBvZiBtZXRhZGF0YSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIGdpdmVuIHRoYXQgd2UgYXJlIHdpdGhpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBJIHdpbGwgdHJ5IHRvIGlkZW50aWZ5IGlmIHRoZSBjb2RlIGlzIGZvY3VzZWQgb24gZGF0YSBzdHJ1Y3R1cmVzLCBsb2NraW5nLCBvciB0aGUgaW50ZXJmYWNlIHdpdGggdGhlIGFjdHVhbCBjb21wcmVzc2lvbiBhbmQgc3dhcCBsYXllcnMuIEkgaGF2ZSBhIGh1bmNoIGl0IHdpbGwgcmVsYXRlIHRvIGhvdyB3ZSBkZWNpZGUgKndoZXJlKiB0byBzdG9yZSBhIGNvbXByZXNzZWQgcGFnZSB0aGF0J3MgZGVzdGluZWQgZm9yIHN3YXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZWNpc2lvbi1tYWtpbmcgcHJvY2VzcyBoZXJlLiBQZXJoYXBzIHRoZXJlJ3MgYW4gYWxnb3JpdGhtIG9yIGEgc2V0IG9mIGhldXJpc3RpY3MgaW4gcGxhY2UgdG8gb3B0aW1pemUgc3dhcCBzcGFjZSB1dGlsaXphdGlvbi4gSSdtIGFsc28gYW50aWNpcGF0aW5nIHNvbWUga2luZCBvZiBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIGJsb2NrLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgenN3YXAgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBwb3RlbnRpYWwgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpc3N1ZXMgd2l0aCB0aGUgdW5kZXJseWluZyBzd2FwIGRldmljZS4gSSBhbHNvIHBsYW4gdG8gbm90ZSB0aGUgZXhhY3QgdXNlIG9mIGFueSBrZXkgZGF0YSBzdHJ1Y3R1cmVzLCBsaWtlIGB6c3dhcF9lbnRyeWAsIGFuZCBob3cgdGhleSdyZSB1c2VkIHRvIHRyYWNrIGFuZCBtYW5hZ2UgdGhlIGNvbXByZXNzZWQgcGFnZXMuIFdpdGggYSBkZWVwIGJyZWF0aCBhbmQgYSBjbG9zZSBsb29rLCBJIHNob3VsZCBnZXQgYSBmaXJtIGdyYXNwIG9mIHRoZSBjb3JlIGZ1bmN0aW9uIG9mIHRoaXMgcG9ydGlvbiBvZiBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzY2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDc6MDM6NDAuNTQ3ODUwODc1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0XFx0ICovXFxuMTE0MTpcXHRcXHRzd3BlbnRyeSA9IGVudHJ5LVxcdTAwM2Vzd3BlbnRyeTtcXG4xMTQyOlxcdFxcbjExNDM6XFx0XFx0LypcXG4xMTQ0OlxcdFxcdCAqIEl0J3Mgc2FmZSB0byBkcm9wIHRoZSBsb2NrIGhlcmUgYmVjYXVzZSB3ZSByZXR1cm4gZWl0aGVyXFxuMTE0NTpcXHRcXHQgKiBMUlVfUkVNT1ZFRF9SRVRSWSwgTFJVX1JFVFJZIG9yIExSVV9TVE9QLlxcbjExNDY6XFx0XFx0ICovXFxuMTE0NzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bC1cXHUwMDNlbG9jayk7XFxuMTE0ODpcXHRcXG4xMTQ5OlxcdFxcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcXG4xMTUwOlxcdFxcbjExNTE6XFx0XFx0aWYgKHdyaXRlYmFja19yZXN1bHQpIHtcXG4xMTUyOlxcdFxcdFxcdHpzd2FwX3JlamVjdF9yZWNsYWltX2ZhaWwrKztcXG4xMTUzOlxcdFxcdFxcdHJldCA9IExSVV9SRVRSWTtcXG4xMTU0OlxcdFxcbjExNTU6XFx0XFx0XFx0LypcXG4xMTU2OlxcdFxcdFxcdCAqIEVuY291bnRlcmluZyBhIHBhZ2UgYWxyZWFkeSBpbiBzd2FwIGNhY2hlIGlzIGEgc2lnbiB0aGF0IHdlIGFyZSBzaHJpbmtpbmdcXG4xMTU3OlxcdFxcdFxcdCAqIGludG8gdGhlIHdhcm1lciByZWdpb24uIFdlIHNob3VsZCB0ZXJtaW5hdGUgc2hyaW5raW5nIChpZiB3ZSdyZSBpbiB0aGUgZHluYW1pY1xcbjExNTg6XFx0XFx0XFx0ICogc2hyaW5rZXIgY29udGV4dCkuXFxuMTE1OTpcXHRcXHRcXHQgKi9cXG4xMTYwOlxcdFxcdFxcdGlmICh3cml0ZWJhY2tfcmVzdWx0ID09IC1FRVhJU1QgXFx1MDAyNlxcdTAwMjYgZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpIHtcXG4xMTYxOlxcdFxcdFxcdFxcdHJldCA9IExSVV9TVE9QO1xcbjExNjI6XFx0XFx0XFx0XFx0KmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gdHJ1ZTtcXG4xMTYzOlxcdFxcdFxcdH1cXG4xMTY0OlxcdFxcdH0gZWxzZSB7XFxuMTE2NTpcXHRcXHRcXHR6c3dhcF93cml0dGVuX2JhY2tfcGFnZXMrKztcXG4xMTY2OlxcdFxcdH1cXG4xMTY3OlxcdFxcbjExNjg6XFx0XFx0cmV0dXJuIHJldDtcXG4xMTY5OlxcdH1cXG4xMTcwOlxcdFxcbjExNzE6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbjExNzI6XFx0XFx0XFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4xMTczOlxcdHtcXG4xMTc0OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2hyaW5rX3JldDtcXG4xMTc1OlxcdFxcdGJvb2wgZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSBmYWxzZTtcXG4xMTc2OlxcdFxcbjExNzc6XFx0XFx0aWYgKCF6c3dhcF9zaHJpbmtlcl9lbmFibGVkIHx8XFxuMTE3ODpcXHRcXHRcXHRcXHQhbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzYy1cXHUwMDNlbWVtY2cpKSB7XFxuMTE3OTpcXHRcXHRcXHRzYy1cXHUwMDNlbnJfc2Nhbm5lZCA9IDA7XFxuMTE4MDpcXHRcXHRcXHRyZXR1cm4gU0hSSU5LX1NUT1A7XFxuMTE4MTpcXHRcXHR9XFxuMTE4MjpcXHRcXG4xMTgzOlxcdFxcdHNocmlua19yZXQgPSBsaXN0X2xydV9zaHJpbmtfd2FsayhcXHUwMDI2enN3YXBfbGlzdF9scnUsIHNjLCBcXHUwMDI2c2hyaW5rX21lbWNnX2NiLFxcbjExODQ6XFx0XFx0XFx0XFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcXG4xMTg1OlxcdFxcbjExODY6XFx0XFx0aWYgKGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKVxcbjExODc6XFx0XFx0XFx0cmV0dXJuIFNIUklOS19TVE9QO1xcbjExODg6XFx0XFxuMTE4OTpcXHRcXHRyZXR1cm4gc2hyaW5rX3JldCA/IHNocmlua19yZXQgOiBTSFJJTktfU1RPUDtcXG4xMTkwOlxcdH1cXG4xMTkxOlxcdFxcbjExOTI6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4xMTkzOlxcdFxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuMTE5NDpcXHR7XFxuMTE5NTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBzYy1cXHUwMDNlbWVtY2c7XFxuMTE5NjpcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKHNjLVxcdTAwM2VuaWQpKTtcXG4xMTk3OlxcdFxcdGF0b21pY19sb25nX3QgKm5yX2Rpc2tfc3dhcGlucyA9XFxuMTE5ODpcXHRcXHRcXHRcXHUwMDI2bHJ1dmVjLVxcdTAwM2V6c3dhcF9scnV2ZWNfc3RhdGUubnJfZGlza19zd2FwaW5zO1xcbjExOTk6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9iYWNraW5nLCBucl9zdG9yZWQsIG5yX2ZyZWVhYmxlLCBucl9kaXNrX3N3YXBpbnNfY3VyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNzowMzo0MC41NDc5OTU0MDVaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTkwMTE1ODE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBac3dhcCBTaHJpbmtlciBCdWcgYW5kIE1pdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGRlYWw6IEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgenN3YXAgY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGVycm9ycyBkdXJpbmcgd3JpdGViYWNrLiBJdCBzZWVtcyB0aGVyZSB3YXMgYSBmbGF3IGluIHRoZSBlcnJvciByZXBvcnRpbmcgZnJvbSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gUHJldmlvdXNseSwgaWYgYGdldF9zd2FwX2RldmljZShzd3BlbnRyeSlgIHJldHVybmVkIE5VTEwsIGluZGljYXRpbmcgYSBzd2FwIGRldmljZSBpc3N1ZSAob3IgYW4gaW52YWxpZCBgc3dwZW50cnlgKSwgdGhlIGZ1bmN0aW9uIHdvdWxkIHJldHVybiBgLUVFWElTVGAuIFRoZSBwcm9ibGVtPyBgLUVFWElTVGAgd2FzIG1pc2ludGVycHJldGVkIGJ5IHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBgc2hyaW5rX21lbWNnX2NiYCwgYXMgbWVhbmluZyB0aGUgcGFnZSB3YXMgKmFscmVhZHkqIGluIHRoZSBzd2FwIGNhY2hlLiBUaGlzIGxlZCB0byBwcmVtYXR1cmUgdGVybWluYXRpb24gb2YgdGhlIHNocmlua2luZyBwcm9jZXNzLCB3aGljaCBpcyBjbGVhcmx5IGluY29ycmVjdCBiZWhhdmlvci4gVGhlIHJldHVybiBjb2RlIHNob3VsZCBpbmRpY2F0ZSB0aGF0IHdlICpjb3VsZG4ndCogd3JpdGUgaXQgYmFjaywgbm90IHRoYXQgaXQgYWxyZWFkeSBleGlzdGVkLiBTbywgdGhlIHBhdGNoIGNvcnJlY3RseSBjaGFuZ2VzIHRoZSByZXR1cm4gY29kZSB0byBgLUVOT0VOVGAsIHdoaWNoIGlzIGZhciBtb3JlIGFwcHJvcHJpYXRlIGluIHRoaXMgc2NlbmFyaW8uXG5cbk15IHByaW1hcnkgY29uY2VybiBub3cgaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIGJyZWFrIGl0IGRvd246XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBOb3BlLiBObyBkYXRhIGlzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBJIGRvdWJsZS1jaGVja2VkIHRoZSByZWxhdGVkIGZ1bmN0aW9ucywgYHNocmlua19tZW1jZ19jYmAgYW5kIGB6c3dhcF9zaHJpbmtlcl9zY2FuYC4gSW4gYHpzd2FwX3Nocmlua2VyX3NjYW5gIHRoZSBgZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGVgIHZhcmlhYmxlLCB3aGljaCBpcyBjcnVjaWFsIGhlcmUsIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAgKHBoZXchKS5cbjMuICAqKk5ldyBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBpbml0aWFsaXphdGlvbnM/KiogTm8gYWRkaXRpb25zIG9yIG1vZGlmaWNhdGlvbnMuXG40LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyoqIE5vcGUuIE5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNrcy5cblxuRXNzZW50aWFsbHksIGFsbCB0aGlzIHBhdGNoIGRvZXMgaXMgbW9kaWZ5IGFuIGVycm9yIGNvZGUgYmVpbmcgcmV0dXJuZWQgZnJvbSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gSXQgZG9lc24ndCBtb2RpZnkgYW55IGRhdGEgYnVmZmVycywgc3RhY2sgdmFyaWFibGVzLCBoZWFwIGFsbG9jYXRpb25zLCB1c2VyIGNvcHkgb3BlcmF0aW9ucywgb3IgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBnaXZlbiB0aGUgZ3VpZGVsaW5lcywgSSBkb24ndCBzZWUgYW55IHJlYXNvbiB0byB0cmlnZ2VyIGEgS01TQU4gcnVuLiBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgaXNzdWVzIGhlcmUuIEluIGZhY3QsIGlmIHNvbWV0aGluZyBsaWtlIHRoaXMgd2VyZSBjYXVnaHQgYnkgS01TQU4sIHRoZW4gd2UnZCBoYXZlIGEgKnNlcmlvdXMqIHByb2JsZW0gaW4gdGhlIGNvZGUsIGFuZCBhIHJlZGVzaWduIHdvdWxkIGJlIG5lZWRlZC4gVGhpcyBpcyBub3QgdGhlIGNhc2UuXG5cbioqTmVlZHNLTVNBTj1mYWxzZS4gTGV0J3MgY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtb3ZlIG9uLioqXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTcsIk91dHB1dFRva2VucyI6MTcwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDc6MDM6NDYuNDQ5MTU2Mzg5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgdGhlIGVycm9yIHJldHVybiB2YWx1ZSBpbiBgenN3YXBfd3JpdGViYWNrX2VudHJ5KClgIGZyb20gYC1FRVhJU1RgIHRvIGAtRU5PRU5UYCB3aGVuIGBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpYCByZXR1cm5zIE5VTEwuIFRoaXMgcHJldmVudHMgdGhlIHpzd2FwIHNocmlua2VyIChgc2hyaW5rX21lbWNnX2NiYCkgZnJvbSBmYWxzZWx5IGFzc3VtaW5nIHRoZSBwYWdlIGlzIGFscmVhZHkgaW4gdGhlIHN3YXAgY2FjaGUgKHdoaWNoIGNoZWNrcyBmb3IgYHdyaXRlYmFja19yZXN1bHQgPT0gLUVFWElTVGAgdG8gYWJvcnQgc2hyaW5raW5nKS4gVGhlIGNoYW5nZSBpcyBzdHJpY3RseSBhIGxvZ2ljL2Vycm9yIGNvZGUgZml4IGluIHRoZSBzd2FwIHJlY2xhaW0gcGF0aDsgaXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIENvbnNlcXVlbnRseSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBjaGFuZ2VzIHRoZSBlcnJvciByZXR1cm4gdmFsdWUgaW4gYHpzd2FwX3dyaXRlYmFja19lbnRyeSgpYCBmcm9tIGAtRUVYSVNUYCB0byBgLUVOT0VOVGAgd2hlbiBgZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KWAgcmV0dXJucyBOVUxMLiBUaGlzIHByZXZlbnRzIHRoZSB6c3dhcCBzaHJpbmtlciAoYHNocmlua19tZW1jZ19jYmApIGZyb20gZmFsc2VseSBhc3N1bWluZyB0aGUgcGFnZSBpcyBhbHJlYWR5IGluIHRoZSBzd2FwIGNhY2hlICh3aGljaCBjaGVja3MgZm9yIGB3cml0ZWJhY2tfcmVzdWx0ID09IC1FRVhJU1RgIHRvIGFib3J0IHNocmlua2luZykuIFRoZSBjaGFuZ2UgaXMgc3RyaWN0bHkgYSBsb2dpYy9lcnJvciBjb2RlIGZpeCBpbiB0aGUgc3dhcCByZWNsYWltIHBhdGg7IGl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVycywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr8mv7[1] Phase: Succeeded StartedAt: 2026-09-13 07:03:57 +0000 UTC FinishedAt: 2026-09-13 07:03:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-13 07:03:57 +0000 UTC FinishedAt: 2026-09-13 07:03:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2] Phase: Succeeded StartedAt: 2026-09-13 07:03:57 +0000 UTC FinishedAt: 2026-09-13 10:43:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-13 07:03:57 +0000 UTC FinishedAt: 2026-09-13 10:43:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-13 07:03:57 +0000 UTC FinishedAt: 2026-09-13 07:04:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-13 07:03:57 +0000 UTC FinishedAt: 2026-09-13 07:04:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowr8mv7/series-workflowr8mv7-convert-artifact-3431499430/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-13 07:04:07 +0000 UTC FinishedAt: 2026-09-13 07:20:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-13 07:04:07 +0000 UTC FinishedAt: 2026-09-13 07:20:05 +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:*b5095193-708b-4835-8cf0-2b3710a4c494,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-workflowr8mv7/series-workflowr8mv7-convert-artifact-3431499430/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": "f999bd77-9492-4983-8a0d-eb27eb0daccf", "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-workflowr8mv7/series-workflowr8mv7-build-action-4266567484/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-13 07:04:07 +0000 UTC FinishedAt: 2026-09-13 07:19:55 +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:*b5095193-708b-4835-8cf0-2b3710a4c494,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-workflowr8mv7/series-workflowr8mv7-convert-artifact-3431499430/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": "f999bd77-9492-4983-8a0d-eb27eb0daccf", "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-workflowr8mv7/series-workflowr8mv7-build-action-4266567484/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-13 07:20:05 +0000 UTC FinishedAt: 2026-09-13 07:20:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-13 07:20:05 +0000 UTC FinishedAt: 2026-09-13 07:20:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-13 07:20:05 +0000 UTC FinishedAt: 2026-09-13 07:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-13 07:20:05 +0000 UTC FinishedAt: 2026-09-13 07:20:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowr8mv7/series-workflowr8mv7-convert-artifact-1337009913/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-13 07:20:15 +0000 UTC FinishedAt: 2026-09-13 07:22:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-13 07:20:15 +0000 UTC FinishedAt: 2026-09-13 07:22:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f999bd77-9492-4983-8a0d-eb27eb0daccf,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-workflowr8mv7/series-workflowr8mv7-build-action-4266567484/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-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-13 07:22:14 +0000 UTC FinishedAt: 2026-09-13 07:22:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-13 07:22:14 +0000 UTC FinishedAt: 2026-09-13 07:22:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-13 07:22:14 +0000 UTC FinishedAt: 2026-09-13 07:38:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-13 07:22:14 +0000 UTC FinishedAt: 2026-09-13 07:38:09 +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:*b5095193-708b-4835-8cf0-2b3710a4c494,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-workflowr8mv7/series-workflowr8mv7-convert-artifact-1337009913/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": "87ae5697-ad48-45d9-8ec9-f51d263e2d27", "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-workflowr8mv7/series-workflowr8mv7-build-action-319613141/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-13 07:22:14 +0000 UTC FinishedAt: 2026-09-13 07:37:57 +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:*b5095193-708b-4835-8cf0-2b3710a4c494,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-workflowr8mv7/series-workflowr8mv7-convert-artifact-1337009913/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": "87ae5697-ad48-45d9-8ec9-f51d263e2d27", "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-workflowr8mv7/series-workflowr8mv7-build-action-319613141/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-13 07:38:09 +0000 UTC FinishedAt: 2026-09-13 07:38:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-13 07:38:09 +0000 UTC FinishedAt: 2026-09-13 07:38:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-13 07:38:09 +0000 UTC FinishedAt: 2026-09-13 07:39:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-13 07:38:09 +0000 UTC FinishedAt: 2026-09-13 07:39:49 +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:*87ae5697-ad48-45d9-8ec9-f51d263e2d27,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-workflowr8mv7/series-workflowr8mv7-build-action-319613141/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-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-13 07:39:59 +0000 UTC FinishedAt: 2026-09-13 10:43:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-13 07:39:59 +0000 UTC FinishedAt: 2026-09-13 10:43:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*f999bd77-9492-4983-8a0d-eb27eb0daccf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*87ae5697-ad48-45d9-8ec9-f51d263e2d27,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-workflowr8mv7/series-workflowr8mv7-build-action-4266567484/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-workflowr8mv7/series-workflowr8mv7-build-action-319613141/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-13 07:39:59 +0000 UTC FinishedAt: 2026-09-13 07:40:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-13 07:39:59 +0000 UTC FinishedAt: 2026-09-13 07:40:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr8mv7/series-workflowr8mv7-convert-artifact-710990446/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-13 07:39:59 +0000 UTC FinishedAt: 2026-09-13 07:39:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-13 07:39:59 +0000 UTC FinishedAt: 2026-09-13 07:39:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-13 07:39:59 +0000 UTC FinishedAt: 2026-09-13 07:39:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-13 07:40:09 +0000 UTC FinishedAt: 2026-09-13 10:43:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_writeback_entry","shrink_memcg_cb","zswap_shrinker_scan","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32b2f3801ba5c772b5be4c0f17fffc0f911241d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"a6b84d65-7e8f-4f60-be31-2e2d2db5ebd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-13 07:40:09 +0000 UTC FinishedAt: 2026-09-13 10:43:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f999bd77-9492-4983-8a0d-eb27eb0daccf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*87ae5697-ad48-45d9-8ec9-f51d263e2d27,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-workflowr8mv7/series-workflowr8mv7-build-action-4266567484/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-workflowr8mv7/series-workflowr8mv7-build-action-319613141/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-workflowr8mv7/series-workflowr8mv7-convert-artifact-710990446/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,}