Name: series-workflowpfkxd Phase: Succeeded StartedAt: 2026-09-07 11:18:09 +0000 UTC FinishedAt: 2026-09-07 13:33:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[0] Phase: Succeeded StartedAt: 2026-09-07 11:18:09 +0000 UTC FinishedAt: 2026-09-07 11:57:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 11:18:09 +0000 UTC FinishedAt: 2026-09-07 11:57:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_AX8817X", "USB_USBNET", "USB_NET_DRIVERS", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_AX8817X", "USB_USBNET", "USB_NET_DRIVERS", "USB" ], "series_id": "4b4febd4-92d5-4e65-9fec-ca613725699c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "asix_rx_fixup_internal", "asix_rx_fixup_common", "ax88172a_rx_fixup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQVg4ODE3WCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthc2l4X3J4X2ZpeHVwX2ludGVybmFsJiMzNDssCiAgICAmIzM0O2FzaXhfcnhfZml4dXBfY29tbW9uJiMzNDssCiAgICAmIzM0O2F4ODgxNzJhX3J4X2ZpeHVwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSBieSBjb3JyZWN0bHkgYWNjb3VudGluZyBmb3IgMi1ieXRlIGFsaWdubWVudCB3aGVuIGNoZWNraW5nIGlmIHRoZSBzb2NrZXQgYnVmZmVyIGhhcyBlbm91Z2ggcmVtYWluaW5nIGJ5dGVzIGZvciB0aGUgMzItYml0IGhlYWRlciByZWFkIChgKChyeC1cdTAwM2VyZW1haW5pbmcgJiM0MzsgMSkgXHUwMDI2IDB4ZmZmZSkgJiM0Mzsgc2l6ZW9mKHUzMikgXHUwMDNjPSBza2ItXHUwMDNlbGVuYCkuXG5cblRoaXMgaXNzdWUgaXMgYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBvbiBza2ItXHUwMDNlZGF0YSwgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBoZWFkZXIgYm91bmRzIGNoZWNraW5nIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSB0byBhY2NvdW50IGZvciAyLWJ5dGUgYWxpZ25tZW50IHdoZW4gY2hlY2tpbmcgcmVtYWluaW5nIHBhY2tldCBidWZmZXIgbGVuZ3RoLiBUaGlzIGNvZGUgcnVucyBpbiB0aGUgQVNJWCBVU0IgZXRoZXJuZXQgZHJpdmVyJiMzOTtzIFJYIHBhdGggYW5kIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbi9mdXp6aW5nIChlLmcuLCBVU0IgcmF3LWdhZGdldCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhZjUwMzA2MmNlN2M3MDQzNzY3MmEzOTUxMTQ2ZWZjN2ExZGI3NzljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMTo1NjowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG5pbmRleCA0ZjAzZjRlNTc2NTVkLi5jNTA2NDZlYTM1YzdlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG5AQCAtMTQ4LDcgJiM0MzsxNDgsNyBAQCBpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKiBBbHNvIGF2b2lkIHVubmVjZXNzYXJpbHkgZGlzY2FyZGluZyBhIGdvb2QgY3VycmVudCBuZXRkZXYgc29ja2V0XG4gXHQgKiBidWZmZXIuXG4gXHQgKi9cbi1cdGlmIChyeC1cdTAwM2VyZW1haW5pbmcgXHUwMDI2XHUwMDI2IChyeC1cdTAwM2VyZW1haW5pbmcgJiM0Mzsgc2l6ZW9mKHUzMikgXHUwMDNjPSBza2ItXHUwMDNlbGVuKSkge1xuJiM0MztcdGlmIChyeC1cdTAwM2VyZW1haW5pbmcgXHUwMDI2XHUwMDI2ICgoKHJ4LVx1MDAzZXJlbWFpbmluZyAmIzQzOyAxKSBcdTAwMjYgMHhmZmZlKSAmIzQzOyBzaXplb2YodTMyKSBcdTAwM2M9IHNrYi1cdTAwM2VsZW4pKSB7XG4gXHRcdG9mZnNldCA9ICgocngtXHUwMDNlcmVtYWluaW5nICYjNDM7IDEpIFx1MDAyNiAweGZmZmUpO1xuIFx0XHRyeC1cdTAwM2VoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0KTtcbiBcdFx0b2Zmc2V0ID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfTkVUX0FYODgxN1gmIzM0OywKICAgICYjMzQ7VVNCX1VTQk5FVCYjMzQ7LAogICAgJiMzNDtVU0JfTkVUX0RSSVZFUlMmIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXNpeF9yeF9maXh1cF9pbnRlcm5hbCYjMzQ7LAogICAgJiMzNDthc2l4X3J4X2ZpeHVwX2NvbW1vbiYjMzQ7LAogICAgJiMzNDtheDg4MTcyYV9yeF9maXh1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgaGVhZGVyIGJvdW5kcyBjaGVja2luZyBpbiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgdG8gYWNjb3VudCBmb3IgMi1ieXRlIGFsaWdubWVudCB3aGVuIGNoZWNraW5nIHJlbWFpbmluZyBwYWNrZXQgYnVmZmVyIGxlbmd0aC4gVGhpcyBjb2RlIHJ1bnMgaW4gdGhlIEFTSVggVVNCIGV0aGVybmV0IGRyaXZlciYjMzk7cyBSWCBwYXRoIGFuZCBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24vZnV6emluZyAoZS5nLiwgVVNCIHJhdy1nYWRnZXQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWY1MDMwNjJjZTdjNzA0Mzc2NzJhMzk1MTE0NmVmYzdhMWRiNzc5YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMTE6NTY6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jCmluZGV4IDRmMDNmNGU1NzY1NWQuLmM1MDY0NmVhMzVjN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jCkBAIC0xNDgsNyAmIzQzOzE0OCw3IEBAIGludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKiBBbHNvIGF2b2lkIHVubmVjZXNzYXJpbHkgZGlzY2FyZGluZyBhIGdvb2QgY3VycmVudCBuZXRkZXYgc29ja2V0CiAJICogYnVmZmVyLgogCSAqLwotCWlmIChyeC0mZ3Q7cmVtYWluaW5nICZhbXA7JmFtcDsgKHJ4LSZndDtyZW1haW5pbmcgJiM0Mzsgc2l6ZW9mKHUzMikgJmx0Oz0gc2tiLSZndDtsZW4pKSB7CiYjNDM7CWlmIChyeC0mZ3Q7cmVtYWluaW5nICZhbXA7JmFtcDsgKCgocngtJmd0O3JlbWFpbmluZyAmIzQzOyAxKSAmYW1wOyAweGZmZmUpICYjNDM7IHNpemVvZih1MzIpICZsdDs9IHNrYi0mZ3Q7bGVuKSkgewogCQlvZmZzZXQgPSAoKHJ4LSZndDtyZW1haW5pbmcgJiM0MzsgMSkgJmFtcDsgMHhmZmZlKTsKIAkJcngtJmd0O2hlYWRlciA9IGdldF91bmFsaWduZWRfbGUzMihza2ItJmd0O2RhdGEgJiM0Mzsgb2Zmc2V0KTsKIAkJb2Zmc2V0ID0gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzOAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFTSVggVVNCIE5ldHdvcmsgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoLCBhbmQgaXQgc2VlbXMgdG8gdGFyZ2V0IGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AuIEFscmlnaHQsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBkaWZmLiBJdCYjMzk7cyBhIGZhaXJseSBzbWFsbCBjaGFuZ2UsIHRoYW5rZnVsbHkuIExvb2tpbmcgYXQgaXQsIGl0IHNlZW1zIHRvIGJlIGNoYW5naW5nIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgd2l0aGluIHRoZSBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhlIGNoZWNrIGludm9sdmluZyBgcngtJmd0O3JlbWFpbmluZ2AgYW5kIGBza2ItJmd0O2xlbmAuIEkgc2VlIGEgc2xpZ2h0IG1vZGlmaWNhdGlvbiB0byB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9uLiBJdCBhcHBlYXJzIHRoYXQgYChyeC0mZ3Q7cmVtYWluaW5nICYjNDM7IDEpICZhbXA7IDB4ZmZmZWAgaGFzIGJlZW4gYWRkZWQuIFRoYXQgbGlrZWx5IG1lYW5zIHRoZXkmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbGlnbm1lbnQuIEl0JiMzOTtzIHByb2JhYmx5IHRvIGhhbmRsZSBzb21lIHNwZWNpZmljIGhhcmR3YXJlIHF1aXJrIG9yIGEgc3BlY2lmaWMgZGF0YSBsYXlvdXQgZnJvbSB0aGUgVVNCIGRldmljZSwgcmlnaHQ/IEl0IGNvdWxkIGJlIHJlbGF0ZWQgdG8gc29tZSBwYWRkaW5nIG9yIGFsaWdubWVudCByZXF1aXJlbWVudCBvZiB0aGUgUlggYnVmZmVyLgoKVG8gY29uZmlybSBteSBpbml0aWFsIHRob3VnaHRzLCBJJiMzOTtsbCBxdWlja2x5IHVzZSBgcmVhZC1maWxlYCB0byBncmFiIHRoZSBjb250ZXh0IGFyb3VuZCBsaW5lIDE0OCBvZiBgZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNgLiBJIG5lZWQgYSBmdWxsZXIgcGljdHVyZSBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIExldCYjMzk7cyBzZWUgaWYgdGhlIGNvbnRleHQgd2lsbCBoZWxwIG1lIHdpdGggdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcdCAqL1xuIDEzMTpcdFx0cngtXHUwMDNlcmVtYWluaW5nID0gMDtcbiAxMzI6XHRcdHJ4LVx1MDAzZXNwbGl0X2hlYWQgPSBmYWxzZTtcbiAxMzM6XHRcdHJ4LVx1MDAzZWhlYWRlciA9IDA7XG4gMTM0Olx0fVxuIDEzNTpcdFxuIDEzNjpcdGludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAxMzc6XHRcdFx0XHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeClcbiAxMzg6XHR7XG4gMTM5Olx0XHRpbnQgb2Zmc2V0ID0gMDtcbiAxNDA6XHRcdHUxNiBzaXplO1xuIDE0MTpcdFxuIDE0MjpcdFx0LyogV2hlbiBhbiBFdGhlcm5ldCBmcmFtZSBzcGFucyBtdWx0aXBsZSBVUkIgc29ja2V0IGJ1ZmZlcnMsXG4gMTQzOlx0XHQgKiBkbyBhIHNhbml0eSB0ZXN0IGZvciB0aGUgRGF0YSBoZWFkZXIgc3luY2hyb25pc2F0aW9uLlxuIDE0NDpcdFx0ICogQXR0ZW1wdCB0byBkZXRlY3QgdGhlIHNpdHVhdGlvbiBvZiB0aGUgcHJldmlvdXMgc29ja2V0IGJ1ZmZlciBoYXZpbmdcbiAxNDU6XHRcdCAqIGJlZW4gdHJ1bmNhdGVkIG9yIGEgc29ja2V0IGJ1ZmZlciB3YXMgbWlzc2luZy4gVGhlc2Ugc2l0dWF0aW9uc1xuIDE0NjpcdFx0ICogY2F1c2UgYSBkaXNjb250aW51aXR5IGluIHRoZSBkYXRhIHN0cmVhbSBhbmQgdGhlcmVmb3JlIG5lZWQgdG8gYXZvaWRcbiAxNDc6XHRcdCAqIGFwcGVuZGluZyBiYWQgZGF0YSB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IG5ldGRldiBzb2NrZXQgYnVmZmVyLlxuIDE0ODpcdFx0ICogQWxzbyBhdm9pZCB1bm5lY2Vzc2FyaWx5IGRpc2NhcmRpbmcgYSBnb29kIGN1cnJlbnQgbmV0ZGV2IHNvY2tldFxuIDE0OTpcdFx0ICogYnVmZmVyLlxuIDE1MDpcdFx0ICovXG4gMTUxOlx0XHRpZiAocngtXHUwMDNlcmVtYWluaW5nIFx1MDAyNlx1MDAyNiAoKChyeC1cdTAwM2VyZW1haW5pbmcgJiM0MzsgMSkgXHUwMDI2IDB4ZmZmZSkgJiM0Mzsgc2l6ZW9mKHUzMikgXHUwMDNjPSBza2ItXHUwMDNlbGVuKSkge1xuIDE1MjpcdFx0XHRvZmZzZXQgPSAoKHJ4LVx1MDAzZXJlbWFpbmluZyAmIzQzOyAxKSBcdTAwMjYgMHhmZmZlKTtcbiAxNTM6XHRcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldCk7XG4gMTU0Olx0XHRcdG9mZnNldCA9IDA7XG4gMTU1Olx0XG4gMTU2Olx0XHRcdHNpemUgPSAodTE2KShyeC1cdTAwM2VoZWFkZXIgXHUwMDI2IDB4N2ZmKTtcbiAxNTc6XHRcdFx0aWYgKHNpemUgIT0gKCh+cngtXHUwMDNlaGVhZGVyIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4N2ZmKSkge1xuIDE1ODpcdFx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7YXNpeF9yeF9maXh1cCgpIERhdGEgSGVhZGVyIHN5bmNocm9uaXNhdGlvbiB3YXMgbG9zdCwgcmVtYWluaW5nICVkXFxuXCYjMzQ7LFxuIDE1OTpcdFx0XHRcdFx0ICAgcngtXHUwMDNlcmVtYWluaW5nKTtcbiAxNjA6XHRcdFx0XHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xuIDE2MTpcdFx0XHR9XG4gMTYyOlx0XHR9XG4gMTYzOlx0XG4gMTY0Olx0XHR3aGlsZSAob2Zmc2V0ICYjNDM7IHNpemVvZih1MTYpIFx1MDAzYz0gc2tiLVx1MDAzZWxlbikge1xuIDE2NTpcdFx0XHR1MTYgY29weV9sZW5ndGg7XG4gMTY2Olx0XG4gMTY3Olx0XHRcdGlmICghcngtXHUwMDNlcmVtYWluaW5nKSB7XG4gMTY4Olx0XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQgPT0gc2l6ZW9mKHUxNikpIHtcbiAxNjk6XHRcdFx0XHRcdHJ4LVx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUxNihcbiAxNzA6XHRcdFx0XHRcdFx0XHRza2ItXHUwMDNlZGF0YSAmIzQzOyBvZmZzZXQpO1xuIDE3MTpcdFx0XHRcdFx0cngtXHUwMDNlc3BsaXRfaGVhZCA9IHRydWU7XG4gMTcyOlx0XHRcdFx0XHRvZmZzZXQgJiM0Mzs9IHNpemVvZih1MTYpO1xuIDE3MzpcdFx0XHRcdFx0YnJlYWs7XG4gMTc0Olx0XHRcdFx0fVxuIDE3NTpcdFxuIDE3NjpcdFx0XHRcdGlmIChyeC1cdTAwM2VzcGxpdF9oZWFkID09IHRydWUpIHtcbiAxNzc6XHRcdFx0XHRcdHJ4LVx1MDAzZWhlYWRlciB8PSAoZ2V0X3VuYWxpZ25lZF9sZTE2KFxuIDE3ODpcdFx0XHRcdFx0XHRcdHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldCkgXHUwMDNjXHUwMDNjIDE2KTtcbiAxNzk6XHRcdFx0XHRcdHJ4LVx1MDAzZXNwbGl0X2hlYWQgPSBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDI3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQVNJWCBVU0IgTmV0d29yayBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNgLiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoaXMgaXMgY29yZSBjb2RlIGZvciB0aGUgVVNCIG5ldHdvcmsgZHJpdmVycyBzcGVjaWZpY2FsbHkgZm9yIEFTSVggQVg4OHh4eCBkZXZpY2VzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBrbm93IHRoYXQgc3l6a2FsbGVyIGlzIGFuIG9idmlvdXMgY2FuZGlkYXRlIGZvciB0aGlzLiBTcGVjaWZpY2FsbHksIGl0cyBVU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcyDigJMgdGhlIGdhZGdldCBtb2RlLCByYXctZ2FkZ2V0IG1vZGUsIG9yIGV2ZW4gdmhjaSDigJMgYXJlIGV4dHJlbWVseSByZWxldmFudCBoZXJlLgoKVGhlIGtleSBpcyBpZiBzeXprYWxsZXIgY2FuIHByb2JlIHRoZSBVU0IgbmV0d29yayBkcml2ZXJzIGVmZmVjdGl2ZWx5LiBBbmQgdGhlIGFuc3dlciBpcyB5ZXMuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIHByb2JlIHRoZXNlIHR5cGVzIG9mIGRyaXZlcnMuIEkgY2FuIGxldmVyYWdlIGl0IHRvIGVtdWxhdGUgVVNCIGRldmljZXMgYW5kIHNlbmQgdGhlIHJpZ2h0IHR5cGUgb2YgVVJCcyBhbmQgcGFja2V0cyB0byB0aGUgZHJpdmVyLCBwb3RlbnRpYWxseSBoaXR0aW5nIHRoZSBgcnhfZml4dXBgIGNhbGxiYWNrcy4gVGhhdCYjMzk7cyB3aGVyZSBpbnRlcmVzdGluZyBidWdzIG9mdGVuIGx1cmsuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGVudHJ5IG5leHQgdG8gY29uZmlybSBpdCBpcyBlbmFibGVkIG9uIHRoZSB0YXJnZXQgc3lzdGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthc2l4X2NvbW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX1VTQl9ORVRfQVg4ODE3WClcdCYjNDM7PSBhc2l4Lm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZToxNDphc2l4LXkgOj0gYXNpeF9kZXZpY2VzLm8gYXNpeF9jb21tb24ubyBheDg4MTcyYS5vXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtMTUtb2JqLSQoQ09ORklHX1VTQl9ORVRfQVg4ODE3OV8xNzhBKSAgICAgICYjNDM7PSBheDg4MTc5XzE3OGEub1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg9MTcxPXN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMTc3LVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoxNzg6c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUge1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0xNzktXHR2b2lkICgqcmVzdW1lKShzdHJ1Y3QgdXNibmV0ICpkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg9MjExPWludCBhc2l4X3J4X2ZpeHVwX2NvbW1vbihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTI6dm9pZCBhc2l4X3J4X2ZpeHVwX2NvbW1vbl9mcmVlKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIxMy1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz0yNDI9aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0My17XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoyNDQ6XHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqZHAgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNDUtXHRzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeCA9IFx1MDAyNmRwLVx1MDAzZXJ4X2ZpeHVwX2luZm87XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjQ5LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjUwOnZvaWQgYXNpeF9yeF9maXh1cF9jb21tb25fZnJlZShzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqZHApXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNTEte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0yOTQ9c3RhdGljIHZvaWQgYXg4ODc3Ml9ldGh0b29sX2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0yOTctXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoyOTg6XHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0yOTktXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTMwMz1zdGF0aWMgaW50IGF4ODg3NzJfZXRodG9vbF9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMzA2LVx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MzA3Olx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMzA4LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0zMzI9c3RhdGljIGludCBheDg4NzcyX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMzM0LVx0c3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopXHUwMDI2ZGV2LVx1MDAzZWRhdGE7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MzM1Olx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMzM2LVx0aW50IHJldDtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MzYyPXN0YXRpYyBpbnQgYXg4ODc3Ml9od19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBpbl9wbSlcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMzY0LVx0c3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopXHUwMDI2ZGV2LVx1MDAzZWRhdGE7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MzY1Olx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMzY2LVx0dTE2IHJ4X2N0bDtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NDU2PXN0YXRpYyBpbnQgYXg4ODc3MmFfaHdfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgaW5fcG0pXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTQ1OC1cdHN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKVx1MDAyNmRldi1cdTAwM2VkYXRhO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjQ1OTpcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTQ2MC1cdHUxNiByeF9jdGwsIHBoeTE0aCwgcGh5MTVoLCBwaHkxNmg7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTU5Nj1zdGF0aWMgdm9pZCBheDg4NzcyX3N1c3BlbmQoc3RydWN0IHVzYm5ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTU5Ny17XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NTk4Olx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNTk5LVx0dTE2IG1lZGl1bTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjMxPXN0YXRpYyBpbnQgYXNpeF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjMzLVx0c3RydWN0IHVzYm5ldCAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2MzQ6XHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02MzUtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTY0Mj1zdGF0aWMgdm9pZCBheDg4NzcyX3Jlc3VtZShzdHJ1Y3QgdXNibmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjQzLXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2NDQ6XHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02NDUtXHRpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjU4PXN0YXRpYyBpbnQgYXNpeF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY2MC1cdHN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NjYxOlx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjYyLVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz02Njk9c3RhdGljIGludCBheDg4NzcyX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjcwLXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2NzE6XHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02NzItXHRpbnQgcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02OTYtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njk3OnN0YXRpYyB2b2lkIGF4ODg3NzJfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2KVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY5OC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTcwMz1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9waHkoc3RydWN0IHVzYm5ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcwNC17XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzA1Olx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNzA2LVx0aW50IHJldDtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9Nzk5PXN0YXRpYyBpbnQgYXg4ODc3Ml9waHlsaW5rX3NldHVwKHN0cnVjdCB1c2JuZXQgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy04MDAte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjgwMTpcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTgwMi1cdHBoeV9pbnRlcmZhY2VfdCBwaHlfaWZfbW9kZTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9ODI5PXN0YXRpYyBpbnQgYXg4ODc3Ml9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtODMwLXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo4MzE6XHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy04MzItXHR1OCBidWZbRVRIX0FMRU5dID0gezB9O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz05NDY9c3RhdGljIGludCBheDg4NzcyX3N0b3Aoc3RydWN0IHVzYm5ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTk0Ny17XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6OTQ4Olx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtOTQ5LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz05NTU9c3RhdGljIHZvaWQgYXg4ODc3Ml91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy05NTYte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjk1NzpcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTk1OC1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MTI3MT1zdGF0aWMgaW50IGF4ODgxNzhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMzE4LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEzMTk6XHRkZXYtXHUwMDNlZHJpdmVyX3ByaXYgPSBremFsbG9jX29iaihzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTMyMC1cdGlmICghZGV2LVx1MDAzZWRyaXZlcl9wcml2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYy00LSAqXG5kcml2ZXJzL25ldC91c2Ivc3I5ODAwLmM6NTogKiBCYXNlZCBvbiBhc2l4X2NvbW1vbi5jLCBhc2l4X2RldmljZXMuY1xuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jLTYtICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTIyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIHF1ZXN0aW9uLCB0aGlua2luZyB0aHJvdWdoIGl0IHN0ZXAtYnktc3RlcDoKCioqQ2hlY2tpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEFYODgxN1ggVVNCIE5ldHdvcmtpbmcgU3VwcG9ydCoqCgpBbHJpZ2h0LCBzbyBzb21lb25lJiMzOTtzIGFza2luZyBhYm91dCBob3cgdG8gZW5hYmxlIHRoZSBBWDg4MTdYIFVTQiBuZXR3b3JraW5nIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGJlaW5nIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBjb25maWd1cmF0aW9uLCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGl0JiMzOTtzIHdoZXJlIHRoZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgY29uZmlndXJhdGlvbnMgdXN1YWxseSBsaXZlLiBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgbWU7IGl0JiMzOTtzIHByYWN0aWNhbGx5IG11c2NsZSBtZW1vcnkgYXQgdGhpcyBwb2ludC4KCk15IHRoaW5raW5nIGlzLCB3aXRoaW4gdGhhdCBgS2NvbmZpZ2AgZmlsZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgbGlrZSBgQ09ORklHX1VTQl9ORVRfQVg4ODE3WGAuIFRoZSBrZXkgaXMgdG8gZmluZCB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKVGhlbiwgb25jZSBJJiMzOTt2ZSBsb2NhdGVkIGl0LCB0aGUgKnJlYWwqIHdvcmsgYmVnaW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBEb2VzIGl0IHJlbHkgb24gYENPTkZJR19VU0JfTkVUYCBiZWluZyBlbmFibGVkPyBEb2VzIGl0IGRlcGVuZCBvbiBzcGVjaWZpYyBVU0IgY29udHJvbGxlciBzdXBwb3J0PyBNYXliZSBhIGdlbmVyYWwgVVNCIG5ldHdvcmtpbmcgZnJhbWV3b3JrPyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSB0byBzZWUgd2hhdCBvdGhlciBvcHRpb25zIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhpcyBvbmUgdG8gYmUgYXZhaWxhYmxlLCB0byB1bmRlcnN0YW5kIHRoZSBjaGFpbiBvZiBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIG5vdCBqdXN0IGFib3V0IGZsaXBwaW5nIGEgc3dpdGNoOyBpdCYjMzk7cyBhYm91dCBtYWtpbmcgc3VyZSBhbGwgdGhlIHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgaW4gcGxhY2UuIEkgaGF2ZSB0byBsb29rIGZvciBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBvciBvdGhlciBjb25kaXRpb25zLgoKRXNzZW50aWFsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyB3aXRoaW4gYEtjb25maWdgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBuZWVkZWQgZm9yIHRoZSBBWDg4MTdYIGRyaXZlciB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgaXMgYnJlYWQgYW5kIGJ1dHRlciBmb3IgbWUsIGVuc3VyaW5nIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QgaXMgYW4gaW1wb3J0YW50IHBhcnQgb2YgdGhlIGpvYi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtVU0JfTkVUX0FYODgxN1gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTMyPWNvbmZpZyBVU0JfVVNCTkVUXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTY1LVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTY2OmNvbmZpZyBVU0JfTkVUX0FYODgxN1hcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2Ny1cdHRyaXN0YXRlIFwmIzM0O0FTSVggQVg4OHh4eCBCYXNlZCBVU0IgMi4wIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTEyPW9iai0kKENPTkZJR19VU0JfTEFONzhYWClcdCYjNDM7PSBsYW43OHh4Lm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfVVNCX05FVF9BWDg4MTdYKVx0JiM0Mzs9IGFzaXgub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTE0LWFzaXgteSA6PSBhc2l4X2RldmljZXMubyBhc2l4X2NvbW1vbi5vIGF4ODgxNzJhLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTcxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipEZWx2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBVU0IgTmV0d29ya2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE2Ni4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFVTQiBuZXR3b3JraW5nIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY2llcywgb3B0aW9ucywgYW5kIGRlZmF1bHRzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBmZWF0dXJlIG9yIGRyaXZlci4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgdGhpcyBzZWN0aW9uIG9mIHRoZSBLY29uZmlnIGhvbGRzLiBUaGlzIGlzIGdvaW5nIHRvIGdpdmUgbWUgc29tZSB2YWx1YWJsZSBjb250ZXh0IGFzIEkgYW0gZGVidWdnaW5nIGEgcHJvYmxlbSBpbiB0aGlzIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MDpcdFxuIDE2MTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgXHUwMDNjaHR0cDovL3d3dy5saW51eC11c2Iub3JnL3VzYm5ldC9cdTAwM2UuXG4gMTYyOlx0XG4gMTYzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDE2NDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNibmV0LlxuIDE2NTpcdFxuIDE2NjpcdGNvbmZpZyBVU0JfTkVUX0FYODgxN1hcbiAxNjc6XHRcdHRyaXN0YXRlIFwmIzM0O0FTSVggQVg4OHh4eCBCYXNlZCBVU0IgMi4wIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4gMTY4Olx0XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbiAxNjk6XHRcdHNlbGVjdCBDUkMzMlxuIDE3MDpcdFx0c2VsZWN0IFBIWUxJTktcbiAxNzE6XHRcdHNlbGVjdCBBWDg4Nzk2Ql9QSFlcbiAxNzI6XHRcdGltcGx5IE5FVF9TRUxGVEVTVFNcbiAxNzM6XHRcdGRlZmF1bHQgeVxuIDE3NDpcdFx0aGVscFxuIDE3NTpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIEFTSVggQVg4OHh4eCBiYXNlZCBVU0IgMi4wXG4gMTc2Olx0XHQgIDEwLzEwMCBFdGhlcm5ldCBhZGFwdGVycy5cbiAxNzc6XHRcbiAxNzg6XHRcdCAgVGhpcyBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGRldmljZXM6XG4gMTc5Olx0XHQgICAgKiBBdGVuIFVDMjEwVFxuIDE4MDpcdFx0ICAgICogQVNJWCBBWDg4MTcyXG4gMTgxOlx0XHQgICAgKiBCaWxsaW9udG9uIFN5c3RlbXMsIFVTQjJBUlxuIDE4MjpcdFx0ICAgICogQmlsbGlvbnRvbiBTeXN0ZW1zLCBHVVNCMkFNLTFHLUJcbiAxODM6XHRcdCAgICAqIEJ1ZmZhbG8gTFVBLVUyLUtUWFxuIDE4NDpcdFx0ICAgICogQ29yZWdhIEZFdGhlciBVU0IyLVRYXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NTQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqQW5hbHl6aW5nIFVTQiBOZXR3b3JrIERyaXZlciBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIFVTQiBuZXR3b3JrIGRyaXZlciBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIEFYODgxN1ggZHJpdmVyLiBGaXJzdCB0aGluZyYjMzk7cyBmaXJzdDogYFVTQl9ORVRfQVg4ODE3WGAgcmVsaWVzIG9uIHRoZSBgVVNCX1VTQk5FVGAgY29uZmlndXJhdGlvbiBvcHRpb24sIHdoaWNoLCBpbiB0dXJuLCBoaW5nZXMgb24gdGhlIG1vcmUgZ2VuZXJhbCBgVVNCX05FVF9EUklWRVJTYCBhbmQgdGhlIGJhc2UgYFVTQmAgb3B0aW9uLiBHb3QgaXQsIHRoaXMgaXMgc3RhbmRhcmQgZGVwZW5kZW5jeSB0cmFja2luZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNoYWluIGNvcnJlY3RseS4KCk5vdywgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBhc2l4IGRyaXZlciwgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjYWxsaW5nIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYC4gSSB3YW50IHRvIHRyYWNrIGRvd24gZXZlcnl3aGVyZSBpdCBpcyBjYWxsZWQuIFRoYXQgbWVhbnMgbG9va2luZyBpbiBgYXNpeF9jb21tb24uY2AgZmlyc3QsIG9idmlvdXNseSwgYnV0IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZWxzZXdoZXJlIHRvbywganVzdCBpbiBjYXNlIHRoZXJlIGFyZSBvdGhlciBtb2R1bGVzIGludm9sdmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGJyb2FkZXIgZHJpdmVyIGFyY2hpdGVjdHVyZSwgc28gdW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgaXMgY3JpdGljYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FzaXhfcnhfZml4dXBfaW50ZXJuYWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXguaD0yMDY9dm9pZCBhc2l4X3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA4LVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMDk6aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTAtXHRcdFx0ICAgc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTExNT1zdGF0aWMgdm9pZCByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8oc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTE3LVx0LyogUmVzZXQgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYSBsaWZldGltZSBvdXRzaWRlIG9mXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxMTg6XHQgKiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgc28gdGhhdCBmdXR1cmUgcHJvY2Vzc2luZyBzdGFydHMgZnJvbSBhXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTktXHQgKiBrbm93biBzZXQgb2YgaW5pdGlhbCBjb25kaXRpb25zLlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzNS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjEzNjppbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMzctXHRcdFx0ICAgc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9MjQyPWludCBhc2l4X3J4X2ZpeHVwX2NvbW1vbihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjQ2LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjQ3Olx0cmV0dXJuIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoZGV2LCBza2IsIHJ4KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0OC19XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MzM5PXN0YXRpYyBpbnQgYXg4ODE3MmFfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTM0My1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjM0NDpcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzExCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBVU0IgRHJpdmVyIEJ1ZyBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiB0aGUgQVNJWCBBWDg4eHh4IFVTQiBuZXR3b3JraW5nIGRyaXZlci4gSSBzZWUgdGhhdCBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgYnkgYGFzaXhfcnhfZml4dXBfY29tbW9uYCBhbmQgYGF4ODgxNzJhX3J4X2ZpeHVwYC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IGNoYW5nZWQuCgpBaGEhIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCBsaWVzIHdpdGhpbiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAuIEl0JiMzOTtzIGEgc3VidGxlIGJ1dCBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIG9mZnNldCBjYWxjdWxhdGlvbjoKCmBgYGMKLQlpZiAocngtJmd0O3JlbWFpbmluZyAmYW1wOyZhbXA7IChyeC0mZ3Q7cmVtYWluaW5nICYjNDM7IHNpemVvZih1MzIpICZsdDs9IHNrYi0mZ3Q7bGVuKSkgewomIzQzOwlpZiAocngtJmd0O3JlbWFpbmluZyAmYW1wOyZhbXA7ICgoKHJ4LSZndDtyZW1haW5pbmcgJiM0MzsgMSkgJmFtcDsgMHhmZmZlKSAmIzQzOyBzaXplb2YodTMyKSAmbHQ7PSBza2ItJmd0O2xlbikpIHsKIAkJb2Zmc2V0ID0gKChyeC0mZ3Q7cmVtYWluaW5nICYjNDM7IDEpICZhbXA7IDB4ZmZmZSk7CiAJCXJ4LSZndDtoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLSZndDtkYXRhICYjNDM7IG9mZnNldCk7CiAJCW9mZnNldCA9IDA7CmBgYAoKUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIHZ1bG5lcmFibGUgdG8gYSBidWZmZXIgb3ZlcnJ1biwgdHJpZ2dlcmVkIGJ5IGFuIG9kZCB2YWx1ZSBmb3IgYHJ4LSZndDtyZW1haW5pbmdgIGFuZCBhIHNwZWNpZmljIGBza2ItJmd0O2xlbmAuIEZvciBleGFtcGxlLCB3aXRoIGByeC0mZ3Q7cmVtYWluaW5nID0gMWAgYW5kIGBza2ItJmd0O2xlbiA9IDVgLCB0aGUgb3JpZ2luYWwgY2hlY2sgcGFzc2VkIGJlY2F1c2UgYDEgJiM0MzsgNCAmbHQ7PSA1YC4gSG93ZXZlciwgdGhlIHN1YnNlcXVlbnQgYG9mZnNldGAgY2FsY3VsYXRpb24gcmVzdWx0ZWQgaW4gcmVhZGluZyBmb3VyIGJ5dGVzIGZyb20gYW4gb2Zmc2V0IG9mIDIsIGxlYWRpbmcgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9uIGEgNS1ieXRlIGJ1ZmZlci4gVGhpcyBpcyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBhIHN1YnRsZSBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIHRoYXQmIzM5O3MgcmlwZSBmb3IgZXhwbG9pdGF0aW9uLgoKU28sIHRoaXMgcGF0Y2ggZml4ZXMgdGhpcyBmbGF3IGJ5IGNvcnJlY3RseSBjYWxjdWxhdGluZyB0aGUgb2Zmc2V0IHRvIHByZXZlbnQgdGhpcyBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBwYXJzaW5nIGluY29taW5nIFVTQiBwYWNrZXQgc3RyZWFtcy4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBleHBsb2l0YWJpbGl0eSBhbmQgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gVGhpcyBidWcgaXMgY2VydGFpbmx5IHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gYSBrZXJuZWwgVVNCIG5ldHdvcmtpbmcgZHJpdmVyIChBU0lYIEFYODh4eHgpLCB3aGljaCBtYWtlcyBpdCBhIHZlcnkgYXBwZWFsaW5nIHRhcmdldC4gSXQgY2FuIGJlIHN0aW11bGF0ZWQgdmlhIFVTQiBnYWRnZXQsIHJhdy1nYWRnZXQsIG9yIGV2ZW4gcGFja2V0IGZ1enppbmcgdmlhIHN5emthbGxlciwgd2hpY2ggbWVhbnMgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHRyaWdnZXIgdGhlIHZ1bG5lcmFiaWxpdHkuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgdHJ1ZS4KCk5vdyBmb3IgRm9jdXNTeW1ib2xzOgoKKiAgIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCAobm9uLXN0YXRpYyBmdW5jdGlvbiBpbiBhc2l4XF9jb21tb24uYykKKiAgIGBhc2l4X3J4X2ZpeHVwX2NvbW1vbmAgKGluIGFzaXhcX2NvbW1vbi5jKQoqICAgYGF4ODgxNzJhX3J4X2ZpeHVwYCAoaW4gYXg4ODE3MmEuYykKCk5leHQgc3RlcCwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxsZXJzIG9mIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCBvciBgYXNpeF9yeF9maXh1cF9jb21tb25gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthc2l4X3J4X2ZpeHVwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4Lmg9MTYzPXN0cnVjdCBhc2l4X2RhdGEge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMTcwLVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoxNzE6c3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyB7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTE3Mi1cdHN0cnVjdCBza19idWZmICpheF9za2I7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaD0xNzg9c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMTgzLVx0dTE2IHByZXN2ZF9waHlfYm1jcjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MTg0Olx0c3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyByeF9maXh1cF9pbmZvO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0xODUtXHRzdHJ1Y3QgbWlpX2J1cyAqbWRpbztcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oPTIwNj12b2lkIGFzaXhfd3JpdGVfY21kX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMDgtXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIwOTppbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIxMDpcdFx0XHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIxMTppbnQgYXNpeF9yeF9maXh1cF9jb21tb24oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjEyOnZvaWQgYXNpeF9yeF9maXh1cF9jb21tb25fZnJlZShzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqZHApO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTMtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9OTI9c3RhdGljIGludCBhc2l4X2NoZWNrX2hvc3RfZW5hYmxlKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTExNC1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjExNTpzdGF0aWMgdm9pZCByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8oc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTYte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTE3LVx0LyogUmVzZXQgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYSBsaWZldGltZSBvdXRzaWRlIG9mXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxMTg6XHQgKiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgc28gdGhhdCBmdXR1cmUgcHJvY2Vzc2luZyBzdGFydHMgZnJvbSBhXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTktXHQgKiBrbm93biBzZXQgb2YgaW5pdGlhbCBjb25kaXRpb25zLlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzNS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjEzNjppbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxMzc6XHRcdFx0ICAgc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMzgte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTE1Ny1cdFx0aWYgKHNpemUgIT0gKCh+cngtXHUwMDNlaGVhZGVyIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4N2ZmKSkge1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTU4Olx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7YXNpeF9yeF9maXh1cCgpIERhdGEgSGVhZGVyIHN5bmNocm9uaXNhdGlvbiB3YXMgbG9zdCwgcmVtYWluaW5nICVkXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTU5LVx0XHRcdFx0ICAgcngtXHUwMDNlcmVtYWluaW5nKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjE2MDpcdFx0XHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTYxLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTg5LVx0XHRcdGlmIChzaXplICE9ICgofnJ4LVx1MDAzZWhlYWRlciBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweDdmZikpIHtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjE5MDpcdFx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7YXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIDB4JXgsIG9mZnNldCAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTE5MS1cdFx0XHRcdFx0ICAgcngtXHUwMDNlaGVhZGVyLCBvZmZzZXQpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTkyOlx0XHRcdFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTE5My1cdFx0XHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTE5NS1cdFx0XHRpZiAoc2l6ZSBcdTAwM2UgZGV2LVx1MDAzZW5ldC1cdTAwM2VtdHUgJiM0MzsgRVRIX0hMRU4gJiM0MzsgVkxBTl9ITEVOKSB7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxOTY6XHRcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2FzaXhfcnhfZml4dXAoKSBCYWQgUlggTGVuZ3RoICVkXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTk3LVx0XHRcdFx0XHQgICBzaXplKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjE5ODpcdFx0XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xOTktXHRcdFx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yMzItXHRpZiAoc2tiLVx1MDAzZWxlbiAhPSBvZmZzZXQpIHtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjIzMzpcdFx0bmV0ZGV2X2VycihkZXYtXHUwMDNlbmV0LCBcJiMzNDthc2l4X3J4X2ZpeHVwKCkgQmFkIFNLQiBMZW5ndGggJWQsICVkXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjM0LVx0XHRcdCAgIHNrYi1cdTAwM2VsZW4sIG9mZnNldCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoyMzU6XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yMzYtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0MS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI0MjppbnQgYXNpeF9yeF9maXh1cF9jb21tb24oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjQzLXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0NC1cdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcCA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI0NTpcdHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4ID0gXHUwMDI2ZHAtXHUwMDNlcnhfZml4dXBfaW5mbztcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0Ni1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI0NzpcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNDgtfVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjQ5LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjUwOnZvaWQgYXNpeF9yeF9maXh1cF9jb21tb25fZnJlZShzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqZHApXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNTEte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjUyOlx0c3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcng7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNTMtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTk1NT1zdGF0aWMgdm9pZCBheDg4NzcyX3VuYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy05NjMtXHRheDg4NzcyX21kaW9fdW5yZWdpc3Rlcihwcml2KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo5NjQ6XHRhc2l4X3J4X2ZpeHVwX2NvbW1vbl9mcmVlKGRldi1cdTAwM2Vkcml2ZXJfcHJpdik7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtOTY1LVx0LyogRHJvcCB0aGUgUE0gdXNhZ2UgcmVmIHRha2VuIGluIGJpbmQoKSAqL1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz05Njk9c3RhdGljIHZvaWQgYXg4ODE3OF91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy05NzAte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjk3MTpcdGFzaXhfcnhfZml4dXBfY29tbW9uX2ZyZWUoZGV2LVx1MDAzZWRyaXZlcl9wcml2KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy05NzItXHRrZnJlZShkZXYtXHUwMDNlZHJpdmVyX3ByaXYpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0xMzY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODc3Ml9pbmZvID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMzcyLVx0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VULFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEzNzM6XHQucnhfZml4dXAgPSBhc2l4X3J4X2ZpeHVwX2NvbW1vbixcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMzc0LVx0LnR4X2ZpeHVwID0gYXNpeF90eF9maXh1cCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MTM3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODg3NzJiX2luZm8gPSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTEzODMtXHQuZmxhZ3MgPSBGTEFHX0VUSEVSIHwgRkxBR19GUkFNSU5HX0FYIHwgRkxBR19NVUxUSV9QQUNLRVQsXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MTM4NDpcdC5yeF9maXh1cCA9IGFzaXhfcnhfZml4dXBfY29tbW9uLFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTEzODUtXHQudHhfZml4dXAgPSBhc2l4X3R4X2ZpeHVwLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0xMzg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gbHhhdXNiX3QxbF9pbmZvID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMzk1LVx0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VULFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEzOTY6XHQucnhfZml4dXAgPSBhc2l4X3J4X2ZpeHVwX2NvbW1vbixcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMzk3LVx0LnR4X2ZpeHVwID0gYXNpeF90eF9maXh1cCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MTQwMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxNzhfaW5mbyA9IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTQwOS1cdFx0IEZMQUdfTVVMVElfUEFDS0VULFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjE0MTA6XHQucnhfZml4dXAgPSBhc2l4X3J4X2ZpeHVwX2NvbW1vbixcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xNDExLVx0LnR4X2ZpeHVwID0gYXNpeF90eF9maXh1cCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MTQyMz1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGhnMjBmOV9pbmZvID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xNDI4LVx0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VULFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjE0Mjk6XHQucnhfZml4dXAgPSBhc2l4X3J4X2ZpeHVwX2NvbW1vbixcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xNDMwLVx0LnR4X2ZpeHVwID0gYXNpeF90eF9maXh1cCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MTQzND1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGx5Y29uc3lzX2ZpYmVyZ2Vja28xMDBfaW5mbyA9IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTQ0MS1cdFx0IEZMQUdfTVVMVElfUEFDS0VULFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjE0NDI6XHQucnhfZml4dXAgPSBhc2l4X3J4X2ZpeHVwX2NvbW1vbixcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xNDQzLVx0LnR4X2ZpeHVwID0gYXNpeF90eF9maXh1cCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0xOD1zdHJ1Y3QgYXg4ODE3MmFfcHJpdmF0ZSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMjQtXHRpbnQgdXNlX2VtYmRwaHk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzoyNTpcdHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gcnhfZml4dXBfaW5mbztcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTI2LX07XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MzM5PXN0YXRpYyBpbnQgYXg4ODE3MmFfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTM0MS1cdHN0cnVjdCBheDg4MTcyYV9wcml2YXRlICpkcCA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjM0MjpcdHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4ID0gXHUwMDI2ZHAtXHUwMDNlcnhfZml4dXBfaW5mbztcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTM0My1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjM0NDpcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMzMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvbmZpZ3VyYXRpb24gc2l0dWF0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgVVNCX05FVF9BWDg4MTdYYC4gVGhhdCBvbmUgaXMgYSBrZXkgZHJpdmVyLCBidXQgaXQgaGFzIGEgZmV3IGxheWVycy4gSXQgcmVsaWVzIG9uIGBVU0JfVVNCTkVUYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGFuZCB0aGUgYmFzZSBgVVNCYCBjb25maWd1cmF0aW9uLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGwgb2YgdGhvc2UgYXJlIHByb3Blcmx5IHNldCwgYW5kIHRoYXQgdGhleSBhcmUgY29ycmVjdGx5IGVuYWJsZWQgZm9yIHRoaXMgc2NlbmFyaW8uCgpOb3csIGxldCYjMzk7cyBzcGVjaWZpY2FsbHkgbG9vayBhdCBgVVNCX1VTQk5FVGAuIFNpbmNlIGBVU0JfTkVUX0FYODgxN1hgIGRlcGVuZHMgb24gaXQsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZW50cnkgZm9yIGl0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiBpdCYjMzk7cyBuZWVkZWQgaW4gdGhpcyBzcGVjaWZpYyBjYXNlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmZXJlbmNlIHRoZSBLY29uZmlnOgoKYGBga2NvbmZpZwpjb25maWcgVVNCX05FVF9BWDg4MTdYCgl0cmlzdGF0ZSAmIzM0O0FTSVggQVg4OHh4eCBCYXNlZCBVU0IgMi4wIEV0aGVybmV0IEFkYXB0ZXJzJiMzNDsKCWRlcGVuZHMgb24gVVNCX1VTQk5FVApgYGAKCkFscmlnaHQsIHRoZSBLY29uZmlnIGNvbmZpcm1zIHRoZSBkaXJlY3QgZGVwZW5kZW5jeSBvZiBgVVNCX05FVF9BWDg4MTdYYCBvbiBgVVNCX1VTQk5FVGAuIFRoYXQmIzM5O3MgZ29vZCBhbmQgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGBVU0JfVVNCTkVUYCBpcyBwcm9wZXJseSBzZXQuIEkga25vdyB0aGF0LCBpbiBtYW55IGtlcm5lbCBjb25maWd1cmF0aW9ucywgYFVTQl9VU0JORVRgIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgZnJhbWV3b3JrIGZvciBVU0IgRXRoZXJuZXQgZGV2aWNlcy4gSSBuZWVkIHRvIG5vdyBmb2N1cyBvbiBjaGVja2luZyB0aGF0IHNwZWNpZmljIGNvbmZpZyBzZXR0aW5nIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfVVNCTkVUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTExMz1jb25maWcgVVNCX0xBTjc4WFhcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzEtXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoxMzI6Y29uZmlnIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTEzMy1cdHRyaXN0YXRlIFwmIzM0O011bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTAxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgVVNCX1VTQk5FVCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBhc3Nlc3MgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgYFVTQl9VU0JORVRgIGNvbXBvbmVudC4gSSYjMzk7bSB0aGlua2luZywgdGhpcyBpc24mIzM5O3QganVzdCBhIHNpbXBsZSBtb2R1bGU7IGl0JiMzOTtzIGEgbmV0d29yay1yZWxhdGVkIHN1YnN5c3RlbSwgc28gaXQgbGlrZWx5IHJlbGllcyBvbiBhIGZldyBrZXkgYnVpbGRpbmcgYmxvY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBjYXRlZ29yaXplIHRoZXNlIGRlcGVuZGVuY2llcyBpbnRvIHNldmVyYWwgdHlwZXM6CgoqICAgKipIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllciAoSEFMKToqKiBPYnZpb3VzbHksIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGhhcmR3YXJlIGludGVyZmFjZXMgaXQgaW50ZXJhY3RzIHdpdGgg4oCTIHRoZSBVU0IgY29udHJvbGxlciBpdHNlbGYsIG9mIGNvdXJzZSwgYnV0IGFsc28gcG90ZW50aWFsIFBIWSBjb21wb25lbnRzLCBhbnkgRE1BIGVuZ2luZXMgaW52b2x2ZWQsIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcgbWVjaGFuaXNtcy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBzcGVjaWZpYyByZWdpc3RlciBkZWZpbml0aW9ucyBhbmQgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgdGhlc2UgcGVyaXBoZXJhbHMuIFRoZSBoYXJkd2FyZSBpcyBhbHdheXMgdGhlIHN0YXJ0aW5nIHBvaW50LgoKKiAgICoqVVNCIFN0YWNrIExheWVyOioqIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIG9mIHRoZSBVU0Igc3RhY2sgYFVTQl9VU0JORVRgIGxldmVyYWdlcy4gSXMgaXQgYSBmdWxsIFVTQiBzdGFjaywgb3IgYSBzdHJpcHBlZC1kb3duIHZlcnNpb24sIHBlcmhhcHMgYSBjdXN0b20gaW1wbGVtZW50YXRpb24/IEFyZSB0aGVyZSBzcGVjaWZpYyBjbGFzcyBkcml2ZXJzIChDREMtRUNNLCBSTkRJUywgZXRjLikgaW52b2x2ZWQgYW5kIGhvdyBhcmUgdGhleSBpbnRlZ3JhdGVkPyBIb3cgZG9lcyBpdCBoYW5kbGUgZW51bWVyYXRpb24sIGVuZHBvaW50IG1hbmFnZW1lbnQsIGFuZCBkYXRhIHRyYW5zZmVyPwoKKiAgICoqTmV0d29yayBTdGFjayBJbnRlZ3JhdGlvbjoqKiBUaGlzIGlzIGtleS4gSG93IGlzIHRoaXMgbW9kdWxlIGhvb2tlZCBpbnRvIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2s/IElzIGl0IHVzaW5nIGEgc3RhbmRhcmQgbmV0d29yayBpbnRlcmZhY2UgZHJpdmVyIChlLmcuLCBORElTLCBhIFRVTi9UQVAtbGlrZSBpbnRlcmZhY2UsIG9yIHNvbWV0aGluZyBwcm9wcmlldGFyeSk/IFdoYXQgYXJlIHRoZSBkYXRhIHBhdGggY29uc2lkZXJhdGlvbnM/IElzIGl0IG9wdGltaXplZCBmb3IgbG93IGxhdGVuY3kgYW5kIGhpZ2ggdGhyb3VnaHB1dCwgb3IgaXMgaXQgZGVzaWduZWQgd2l0aCBvdGhlciB0cmFkZS1vZmZzIGluIG1pbmQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBuZXR3b3JrIHByb3RvY29sIGl0IGhhbmRsZXM/CgoqICAgKipNZW1vcnkgTWFuYWdlbWVudDoqKiBHaXZlbiB0aGF0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBsYXJnZSBkYXRhIHRyYW5zZmVycywgbWVtb3J5IGFsbG9jYXRpb24gYW5kIERNQSBidWZmZXIgbWFuYWdlbWVudCBhcmUgY3JpdGljYWxseSBpbXBvcnRhbnQuIFdoYXQgbWVtb3J5IHBvb2xzIG9yIGFsbG9jYXRvcnMgYXJlIGJlaW5nIHVzZWQ/IEhvdyBhcmUgdGhleSBjb25maWd1cmVkIHRvIGF2b2lkIGZyYWdtZW50YXRpb24gYW5kIGVuc3VyZSBlZmZpY2llbnQgcmVzb3VyY2UgdXRpbGl6YXRpb24/CgoqICAgKipDb25jdXJyZW5jeSAmYW1wOyBUaHJlYWRpbmc6KiogSSYjMzk7bGwgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSB0aHJlYWRpbmcgbW9kZWwgZW1wbG95ZWQgYnkgYFVTQl9VU0JORVRgIOKAkyBpcyBpdCBpbnRlcnJ1cHQtZHJpdmVuLCB1c2luZyB0YXNrcywgb3IgYm90aD8gSG93IGFyZSBjcml0aWNhbCBzZWN0aW9ucyBhbmQgc2hhcmVkIHJlc291cmNlcyBwcm90ZWN0ZWQgZnJvbSByYWNlIGNvbmRpdGlvbnM/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgbG9ja2luZyBhbmQgaW50ZXJydXB0LW1hc2tpbmcgY2hhbGxlbmdlcyBpbiBhIHJlYWwtdGltZSBlbnZpcm9ubWVudD8KCiogICAqKkNvbmZpZ3VyYXRpb24gJmFtcDsgQnVpbGQtVGltZSBPcHRpb25zOioqIEZpbmFsbHksIEkgbmVlZCB0byBtYXAgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHdoaWNoIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYW55IHJlYWwgYW5hbHlzaXMuIFdoYXQgY29tcGlsZS10aW1lIGZsYWdzIGFmZmVjdCB0aGUgYmVoYXZpb3IgYW5kIGZlYXR1cmVzIG9mIHRoZSBtb2R1bGU/IFdoYXQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGNvbnRyb2wgaXRzIG9wZXJhdGlvbmFsIGNoYXJhY3RlcmlzdGljcz8KCk15IGdlbmVyYWwgcHJvY2VzcyB3aWxsIGJlIHRvIGV4cGxvcmUgdGhlc2UgZGVwZW5kZW5jaWVzOiB0aGUgaGVhZGVyIGZpbGVzLCBjb25maWd1cmF0aW9uIHNjcmlwdHMsIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIHRvIGZvcm0gYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbGFuNzh4eC5cbiAxMzE6XHRcbiAxMzI6XHRjb25maWcgVVNCX1VTQk5FVFxuIDEzMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TXVsdGktcHVycG9zZSBVU0IgTmV0d29ya2luZyBGcmFtZXdvcmtcJiMzNDtcbiAxMzQ6XHRcdHNlbGVjdCBNSUlcbiAxMzU6XHRcdGhlbHBcbiAxMzY6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgc2V2ZXJhbCBraW5kcyBvZiBuZXR3b3JrIGxpbmtzIG92ZXIgVVNCLFxuIDEzNzpcdFx0ICB3aXRoIFwmIzM0O21pbmlkcml2ZXJzXCYjMzQ7IGJ1aWx0IGFyb3VuZCBhIGNvbW1vbiBuZXR3b3JrIGRyaXZlciBjb3JlXG4gMTM4Olx0XHQgIHRoYXQgc3VwcG9ydHMgZGVlcCBxdWV1ZXMgZm9yIGVmZmljaWVudCB0cmFuc2ZlcnMuICAoVGhpcyBnaXZlc1xuIDEzOTpcdFx0ICBiZXR0ZXIgcGVyZm9ybWFuY2Ugd2l0aCBzbWFsbCBwYWNrZXRzIGFuZCBhdCBoaWdoIHNwZWVkcykuXG4gMTQwOlx0XG4gMTQxOlx0XHQgIFRoZSBVU0IgaG9zdCBydW5zIFwmIzM0O3VzYm5ldFwmIzM0OywgYW5kIHRoZSBvdGhlciBlbmQgb2YgdGhlIGxpbmsgbWlnaHQgYmU6XG4gMTQyOlx0XG4gMTQzOlx0XHQgIC0gQW5vdGhlciBVU0IgaG9zdCwgd2hlbiB1c2luZyBVU0IgXCYjMzQ7bmV0d29ya1wmIzM0OyBvciBcJiMzNDtkYXRhIHRyYW5zZmVyXCYjMzQ7XG4gMTQ0Olx0XHQgICAgY2FibGVzLiAgVGhlc2UgYXJlIG9mdGVuIHVzZWQgdG8gbmV0d29yayBsYXB0b3BzIHRvIFBDcywgbGlrZVxuIDE0NTpcdFx0ICAgIFwmIzM0O0xhcGxpbmtcJiMzNDsgcGFyYWxsZWwgY2FibGVzIG9yIHNvbWUgbW90aGVyYm9hcmRzLiAgVGhlc2UgcmVseVxuIDE0NjpcdFx0ICAgIG9uIHNwZWNpYWxpemVkIGNoaXBzIGZyb20gbWFueSBzdXBwbGllcnMuXG4gMTQ3Olx0XG4gMTQ4Olx0XHQgIC0gQW4gaW50ZWxsaWdlbnQgVVNCIGdhZGdldCwgcGVyaGFwcyBlbWJlZGRpbmcgYSBMaW51eCBzeXN0ZW0uXG4gMTQ5Olx0XHQgICAgVGhlc2UgaW5jbHVkZSBQREFzIHJ1bm5pbmcgTGludXggKGlQYXEsIFlvcHksIFphdXJ1cywgYW5kXG4gMTUwOlx0XHQgICAgb3RoZXJzKSwgYW5kIGRldmljZXMgdGhhdCBpbnRlcm9wZXJhdGUgdXNpbmcgdGhlIHN0YW5kYXJkXG4gMTUxOlx0XHQgICAgQ0RDLUV0aGVybmV0IHNwZWNpZmljYXRpb24gKGluY2x1ZGluZyBtYW55IGNhYmxlIG1vZGVtcykuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIC0gTmV0d29yayBhZGFwdGVyIGhhcmR3YXJlIChsaWtlIHRob3NlIGZvciAxMC8xMDAgRXRoZXJuZXQpIHdoaWNoXG4gMTU0Olx0XHQgICAgdXNlcyB0aGlzIGRyaXZlciBmcmFtZXdvcmsuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTM3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNoZWNraW5nIFVTQiBOZXR3b3JrIERyaXZlcnMqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgY2hlY2sgYFVTQl9ORVRfRFJJVkVSU2AuJiMzNDsgSSBrbm93IHRoaXMgaXMgdGhlIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBVU0IgbmV0d29ya2luZyBpbnZlc3RpZ2F0aW9uLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlcjsgaXQgZGljdGF0ZXMgd2hldGhlciB0aGUga2VybmVsIGV2ZW4gKmNvbnNpZGVycyogdGhlIHBvc3NpYmlsaXR5IG9mIHV0aWxpemluZyBVU0IgZm9yIG5ldHdvcmsgY29ubmVjdGl2aXR5LiBTbywgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGN1cnJlbnQgc3RhdGUg4oCTIGlzIGl0IGVuYWJsZWQsIGRpc2FibGVkLCBvciBzZXQgYXMgYSBtb2R1bGU/IFRoZSBhbnN3ZXIgaGVyZSB3aWxsIGltbWVkaWF0ZWx5IG5hcnJvdyB0aGUgc2NvcGUgb2YgdGhlIHByb2JsZW0uIElmIGl0JiMzOTtzIGRpc2FibGVkLCB0aGVuIHRoZXJlJiMzOTtzIG5vIHBvaW50IGluIGZ1cnRoZXIgZXhwbG9yYXRpb24gZG93biB0aGlzIHJhYmJpdCBob2xlIHVudGlsIHRoZSBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3RlZC4gSWYgaXTigJlzIGEgbW9kdWxlLCBJJiMzOTtsbCBjaGVjayBpdHMgbG9hZGluZyBzdGF0dXMgYW5kIGFueSBhc3NvY2lhdGVkIGVycm9yIG1lc3NhZ2VzLiBJZiBpdCYjMzk7cyBidWlsdC1pbiwgdGhlbiB0aGUgaGFyZHdhcmUgaXNzdWVzIGFyZSB0aGUgaW1tZWRpYXRlIGNvbmNlcm4uIEZ1cnRoZXJtb3JlLCBJIHdpbGwgY2hlY2sgd2hhdCBzcGVjaWZpYyBkcml2ZXJzIGFyZSBhdmFpbGFibGUgYW5kIGVuYWJsZWQsIGtub3dpbmcgdGhhdCBzdXBwb3J0IGZvciB2YXJpb3VzIFVTQiBuZXR3b3JrIGFkYXB0ZXJzIGNhbiBiZSBmcmFnbWVudGVkLCBhbmQgdGhhdCB0aGUgYXBwcm9wcmlhdGUgZHJpdmVyIG11c3QgYmUgc2VsZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgVVNCX05FVF9EUklWRVJTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTU9Y29tbWVudCBcJiMzNDtIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy03LVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6ODptZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWctOS1cdHRyaXN0YXRlIFwmIzM0O1VTQiBOZXR3b3JrIEFkYXB0ZXJzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqS2NvbmZpZyBJbnNwZWN0aW9uOiBVU0IgTmV0d29ya2luZyBEcml2ZXIgT3B0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gbGluZXMgMSB0aHJvdWdoIDI1IG9mIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gYmVnaW4sIHNpbmNlIEtjb25maWcgZmlsZXMgdHlwaWNhbGx5IHN0cnVjdHVyZSB0aGVpciBvcHRpb25zIGluIGEgbG9naWNhbCBtYW5uZXIsIGFuZCB0aGF0IGluaXRpYWwgc2VjdGlvbiBvZnRlbiBjb3ZlcnMgdGhlIG92ZXJhbGwgZHJpdmVyIG1vZHVsZSBvciBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIGF2YWlsYWJsZSBjaG9pY2VzLgoKSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjb3JlIG1vZHVsZSBkZWZpbml0aW9uIGluIHRoYXQgcmFuZ2UsIGFuZCBob3BlZnVsbHkgc29tZSBiYXNpYyBkZXBlbmRlbmNpZXMuIEl0IGNvdWxkIG91dGxpbmUgdGhlIGVzc2VudGlhbCBjb21wb25lbnRzIHRoYXQgZ2V0IGxvYWRlZCwgYW5kIHBlcmhhcHMgc29tZSBkZWZhdWx0IHN0YXRlcyBmb3IgdGhlIGRldmljZSBvcHRpb25zLiBIb3BlZnVsbHkgaXQmIzM5O3Mgd2VsbC1jb21tZW50ZWQsIGFzIGlzIHVzdWFsbHkgdGhlIHN0YW5kYXJkIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgZHJpdmVyIG5hbWUsIGEgZ2VuZXJhbCBkZXNjcmlwdGlvbiwgYW5kIHBlcmhhcHMgdGhlIGluaXRpYWwgYHNlbGVjdGAgc3RhdGVtZW50cyB0aGF0IHB1bGwgaW4gYW55IGNvcmUgVVNCIG9yIG5ldHdvcmtpbmcgcHJlcmVxdWlzaXRlcy4gSWYgaXQmIzM5O3MgYSB3ZWxsLW9yZ2FuaXplZCBmaWxlLCB0aGlzIHNlY3Rpb24gc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCBhIHNvbGlkIGZvdW5kYXRpb24gYmVmb3JlIEkgZGVsdmUgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljcyBvZiBpbmRpdmlkdWFsIGRldmljZSBzdXBwb3J0IG9yIGFkdmFuY2VkIGZlYXR1cmVzLiBJIGhvcGUgaXQgY2xlYXJseSBvdXRsaW5lcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdGNvbW1lbnQgXCYjMzQ7SG9zdC1zaWRlIFVTQiBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XCYjMzQ7XG4gICA2Olx0XHRkZXBlbmRzIG9uICFVU0IgXHUwMDI2XHUwMDI2IE5FVFxuICAgNzpcdFxuICAgODpcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXG4gICA5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgTmV0d29yayBBZGFwdGVyc1wmIzM0O1xuICAxMDpcdFx0ZGVmYXVsdCBVU0IgaWYgVVNCXG4gIDExOlx0XHRkZXBlbmRzIG9uIFVTQiBcdTAwMjZcdTAwMjYgTkVUXG4gIDEyOlx0XG4gIDEzOlx0aWYgVVNCX05FVF9EUklWRVJTXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIFVTQl9DQVRDXG4gIDE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgQ0FUQyBOZXRNYXRlLWJhc2VkIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBVU0IgRXRoZXJuZXRcbiAgMjA6XHRcdCAgZGV2aWNlIGJhc2VkIG9uIHRoZSBFTDEyMTBBIGNoaXAuIFN1cHBvcnRlZCBkZXZpY2VzIGFyZTpcbiAgMjE6XHRcdCAgQmVsa2luIEY1VTAxMVxuICAyMjpcdFx0ICBCZWxraW4gRjVVMTExXG4gIDIzOlx0XHQgIENBVEMgTmV0TWF0ZVxuICAyNDpcdFx0ICBDQVRDIE5ldE1hdGUgSUlcbiAgMjU6XHRcdCAgc21hcnRCcmlkZ2VzIHNtYXJ0TklDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTUwCgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDM5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQVNJWCBBWDg4eHh4IFVTQiBOZXR3b3JrIEFkYXB0ZXIgRHJpdmVyIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGVuYWJsZSBhIGZldyBjb25maWd1cmF0aW9uczogYFVTQl9ORVRfQVg4ODE3WGAsIGBVU0JfVVNCTkVUYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGFuZCwgb2YgY291cnNlLCBgVVNCYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOb3csIGxldCYjMzk7cyBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgYW5kIGZpbGVzLiBXZSYjMzk7cmUgbG9va2luZyBhdDogYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgLCB3aGljaCBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB3YXMgYWx0ZXJlZDsgYGFzaXhfcnhfZml4dXBfY29tbW9uYCwgd2hpY2ggaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgZml4dXAgcm91dGluZTsgYW5kIGBheDg4MTcyYV9yeF9maXh1cGAsIGFsc28gYW4gZW50cnkgcG9pbnQgdG8gdGhlIGZpeHVwIHJvdXRpbmUuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBnaXQgZGlmZiByZXZpZXcganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJdCBsb29rcyBsaWtlIHRoZSBjb21taXQgKm9ubHkqIG1vZGlmaWVzIGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2Agd2l0aGluIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYC4gR29vZCwgdGhhdCYjMzk7cyBjbGVhbiBhbmQgZm9jdXNlZC4KCk5vdywgdG8gc3VtbWFyaXplIG15IHJlYXNvbmluZyBjb25jaXNlbHk6IHRoZSBmaXggaXMgaW4gYGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKWAgd2l0aGluIGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AsIGFuZCBpdCYjMzk7cyBhbGwgYWJvdXQgcGFyc2luZyBVU0IgcGFja2V0cyBmb3IgQVNJWCBBWDg4eHh4IG5ldHdvcmsgYWRhcHRlcnMuIEl0IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSBib3VuZHMtY2hlY2tpbmcgdnVsbmVyYWJpbGl0eSBpbiBhIGNhbGN1bGF0aW9uIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLVVSQiBmcmFtZXMuIFdoZW4gYHJ4LSZndDtyZW1haW5pbmdgIGlzIG9kZCwgdGhpcyBjb2RlIHdhcyBwcm9uZSB0byBvdXQtb2YtYm91bmRzIGhlYWRlciByZWFkcy4gVGhlIHZ1bG5lcmFiaWxpdHkgY291bGQgZXhpc3QgaW4gdmlydHVhbGl6ZWQvZW11bGF0ZWQgZW52aXJvbm1lbnRzIChlLmcuLCBzeXprYWxsZXIgVVNCIHJhdy1nYWRnZXQgLyBuZXRkZXYgZnV6emluZykgd2hpY2ggbWVhbnMgdGhpcyBzaG91bGQgYmUgZnV6eiB0ZXN0ZWQuCgpUaGUga2V5IGNvbmZpZ3MgcmVtYWluOiBgVVNCX05FVF9BWDg4MTdYYCwgYFVTQl9VU0JORVRgLCBgVVNCX05FVF9EUklWRVJTYCwgYFVTQmAuCgpBbmQgdGhlIGZvY3VzZWQgc3ltYm9sczogYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgLCBgYXNpeF9yeF9maXh1cF9jb21tb25gLCBhbmQgYGF4ODgxNzJhX3J4X2ZpeHVwYC4KCkZpbmFsbHksIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBteSB0b29sIGNhbGwgcGFyYW1ldGVycyBhbmQgZm9ybWF0dGluZy4gVGhpcyBsb29rcyBzb2xpZDsgcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHRoZSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQVg4ODE3WCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthc2l4X3J4X2ZpeHVwX2ludGVybmFsJiMzNDssCiAgICAmIzM0O2FzaXhfcnhfZml4dXBfY29tbW9uJiMzNDssCiAgICAmIzM0O2F4ODgxNzJhX3J4X2ZpeHVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBoZWFkZXIgYm91bmRzIGNoZWNraW5nIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSB0byBhY2NvdW50IGZvciAyLWJ5dGUgYWxpZ25tZW50IHdoZW4gY2hlY2tpbmcgcmVtYWluaW5nIHBhY2tldCBidWZmZXIgbGVuZ3RoLiBUaGlzIGNvZGUgcnVucyBpbiB0aGUgQVNJWCBVU0IgZXRoZXJuZXQgZHJpdmVyJiMzOTtzIFJYIHBhdGggYW5kIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbi9mdXp6aW5nIChlLmcuLCBVU0IgcmF3LWdhZGdldCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQVg4ODE3WCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthc2l4X3J4X2ZpeHVwX2ludGVybmFsJiMzNDssCiAgICAmIzM0O2FzaXhfcnhfZml4dXBfY29tbW9uJiMzNDssCiAgICAmIzM0O2F4ODgxNzJhX3J4X2ZpeHVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBoZWFkZXIgYm91bmRzIGNoZWNraW5nIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSB0byBhY2NvdW50IGZvciAyLWJ5dGUgYWxpZ25tZW50IHdoZW4gY2hlY2tpbmcgcmVtYWluaW5nIHBhY2tldCBidWZmZXIgbGVuZ3RoLiBUaGlzIGNvZGUgcnVucyBpbiB0aGUgQVNJWCBVU0IgZXRoZXJuZXQgZHJpdmVyJiMzOTtzIFJYIHBhdGggYW5kIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbi9mdXp6aW5nIChlLmcuLCBVU0IgcmF3LWdhZGdldCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIGJ5IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciAyLWJ5dGUgYWxpZ25tZW50IHdoZW4gY2hlY2tpbmcgaWYgdGhlIHNvY2tldCBidWZmZXIgaGFzIGVub3VnaCByZW1haW5pbmcgYnl0ZXMgZm9yIHRoZSAzMi1iaXQgaGVhZGVyIHJlYWQgKGAoKHJ4LVx1MDAzZXJlbWFpbmluZyAmIzQzOyAxKSBcdTAwMjYgMHhmZmZlKSAmIzQzOyBzaXplb2YodTMyKSBcdTAwM2M9IHNrYi1cdTAwM2VsZW5gKS5cblxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIChPT0IpIG1lbW9yeSByZWFkIG9uIHNrYi1cdTAwM2VkYXRhLCB3aGljaCBpcyBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzLCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFmNTAzMDYyY2U3YzcwNDM3NjcyYTM5NTExNDZlZmM3YTFkYjc3OWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDExOjU2OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYwppbmRleCA0ZjAzZjRlNTc2NTVkLi5jNTA2NDZlYTM1YzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYwpAQCAtMTQ4LDcgJiM0MzsxNDgsNyBAQCBpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJICogQWxzbyBhdm9pZCB1bm5lY2Vzc2FyaWx5IGRpc2NhcmRpbmcgYSBnb29kIGN1cnJlbnQgbmV0ZGV2IHNvY2tldAogCSAqIGJ1ZmZlci4KIAkgKi8KLQlpZiAocngtJmd0O3JlbWFpbmluZyAmYW1wOyZhbXA7IChyeC0mZ3Q7cmVtYWluaW5nICYjNDM7IHNpemVvZih1MzIpICZsdDs9IHNrYi0mZ3Q7bGVuKSkgewomIzQzOwlpZiAocngtJmd0O3JlbWFpbmluZyAmYW1wOyZhbXA7ICgoKHJ4LSZndDtyZW1haW5pbmcgJiM0MzsgMSkgJmFtcDsgMHhmZmZlKSAmIzQzOyBzaXplb2YodTMyKSAmbHQ7PSBza2ItJmd0O2xlbikpIHsKIAkJb2Zmc2V0ID0gKChyeC0mZ3Q7cmVtYWluaW5nICYjNDM7IDEpICZhbXA7IDB4ZmZmZSk7CiAJCXJ4LSZndDtoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLSZndDtkYXRhICYjNDM7IG9mZnNldCk7CiAJCW9mZnNldCA9IDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiAtIGFzaXhfY29tbW9uLmMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgcmVxdWVzdCBpcyB0byBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBwYXRjaCB3aXRoaW4gYGRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jYCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGNhbGwgaGVyZSwgY29uc2lkZXJpbmcgdGhpcyBmYWxscyB1bmRlciBkZWZlbnNpdmUgc2VjdXJpdHkgYW5kIGtlcm5lbCBzYW5pdGl6ZXIgYW5hbHlzaXMsIHNwZWNpZmljYWxseSBmb3Igc3l6a2FsbGVyL2Z1enppbmcgcHVycG9zZXMuIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIC0gaXQmIzM5O3MgYSBsb3ctc2V2ZXJpdHkgY29kZSByZXZpZXcgZm9yIHNhbml0aXplciBzZWxlY3Rpb24sIG5vIHJlZCBmbGFncyBhYm91dCBvZmZlbnNpdmUgYWN0aW9ucy4KCkZpcnN0IHN0ZXAsIEkmIzM5O2xsIHB1bGwgdXAgdGhlIGNvZGUgdXNpbmcgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIHBhdGNoIGlzIGFsdGVyaW5nLiBXaGF0JiMzOTtzIHRoZSBjaGFuZ2UgaW50cm9kdWNpbmc/IERhdGEgc3RydWN0dXJlcywgbmV3IGZ1bmN0aW9uIGNhbGxzLCBjb25kaXRpb25hbCBsb2dpYz8gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBldmFsdWF0aW9uIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHQgKi9cbiAxMjE6XHRcbiAxMjI6XHRcdGlmIChyeC1cdTAwM2VheF9za2IpIHtcbiAxMjM6XHRcdFx0LyogRGlzY2FyZCBhbnkgaW5jb21wbGV0ZSBFdGhlcm5ldCBmcmFtZSBpbiB0aGUgbmV0ZGV2IGJ1ZmZlciAqL1xuIDEyNDpcdFx0XHRrZnJlZV9za2IocngtXHUwMDNlYXhfc2tiKTtcbiAxMjU6XHRcdFx0cngtXHUwMDNlYXhfc2tiID0gTlVMTDtcbiAxMjY6XHRcdH1cbiAxMjc6XHRcbiAxMjg6XHRcdC8qIEFzc3VtZSB0aGUgRGF0YSBoZWFkZXIgMzItYml0IHdvcmQgaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50XG4gMTI5Olx0XHQgKiBvciBuZXh0IFVSQiBzb2NrZXQgYnVmZmVyIHNvIHJlc2V0IGFsbCB0aGUgc3RhdGUgdmFyaWFibGVzLlxuIDEzMDpcdFx0ICovXG4gMTMxOlx0XHRyeC1cdTAwM2VyZW1haW5pbmcgPSAwO1xuIDEzMjpcdFx0cngtXHUwMDNlc3BsaXRfaGVhZCA9IGZhbHNlO1xuIDEzMzpcdFx0cngtXHUwMDNlaGVhZGVyID0gMDtcbiAxMzQ6XHR9XG4gMTM1Olx0XG4gMTM2Olx0aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDEzNzpcdFx0XHRcdCAgIHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KVxuIDEzODpcdHtcbiAxMzk6XHRcdGludCBvZmZzZXQgPSAwO1xuIDE0MDpcdFx0dTE2IHNpemU7XG4gMTQxOlx0XG4gMTQyOlx0XHQvKiBXaGVuIGFuIEV0aGVybmV0IGZyYW1lIHNwYW5zIG11bHRpcGxlIFVSQiBzb2NrZXQgYnVmZmVycyxcbiAxNDM6XHRcdCAqIGRvIGEgc2FuaXR5IHRlc3QgZm9yIHRoZSBEYXRhIGhlYWRlciBzeW5jaHJvbmlzYXRpb24uXG4gMTQ0Olx0XHQgKiBBdHRlbXB0IHRvIGRldGVjdCB0aGUgc2l0dWF0aW9uIG9mIHRoZSBwcmV2aW91cyBzb2NrZXQgYnVmZmVyIGhhdmluZ1xuIDE0NTpcdFx0ICogYmVlbiB0cnVuY2F0ZWQgb3IgYSBzb2NrZXQgYnVmZmVyIHdhcyBtaXNzaW5nLiBUaGVzZSBzaXR1YXRpb25zXG4gMTQ2Olx0XHQgKiBjYXVzZSBhIGRpc2NvbnRpbnVpdHkgaW4gdGhlIGRhdGEgc3RyZWFtIGFuZCB0aGVyZWZvcmUgbmVlZCB0byBhdm9pZFxuIDE0NzpcdFx0ICogYXBwZW5kaW5nIGJhZCBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbmV0ZGV2IHNvY2tldCBidWZmZXIuXG4gMTQ4Olx0XHQgKiBBbHNvIGF2b2lkIHVubmVjZXNzYXJpbHkgZGlzY2FyZGluZyBhIGdvb2QgY3VycmVudCBuZXRkZXYgc29ja2V0XG4gMTQ5Olx0XHQgKiBidWZmZXIuXG4gMTUwOlx0XHQgKi9cbiAxNTE6XHRcdGlmIChyeC1cdTAwM2VyZW1haW5pbmcgXHUwMDI2XHUwMDI2ICgoKHJ4LVx1MDAzZXJlbWFpbmluZyAmIzQzOyAxKSBcdTAwMjYgMHhmZmZlKSAmIzQzOyBzaXplb2YodTMyKSBcdTAwM2M9IHNrYi1cdTAwM2VsZW4pKSB7XG4gMTUyOlx0XHRcdG9mZnNldCA9ICgocngtXHUwMDNlcmVtYWluaW5nICYjNDM7IDEpIFx1MDAyNiAweGZmZmUpO1xuIDE1MzpcdFx0XHRyeC1cdTAwM2VoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0KTtcbiAxNTQ6XHRcdFx0b2Zmc2V0ID0gMDtcbiAxNTU6XHRcbiAxNTY6XHRcdFx0c2l6ZSA9ICh1MTYpKHJ4LVx1MDAzZWhlYWRlciBcdTAwMjYgMHg3ZmYpO1xuIDE1NzpcdFx0XHRpZiAoc2l6ZSAhPSAoKH5yeC1cdTAwM2VoZWFkZXIgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHg3ZmYpKSB7XG4gMTU4Olx0XHRcdFx0bmV0ZGV2X2VycihkZXYtXHUwMDNlbmV0LCBcJiMzNDthc2l4X3J4X2ZpeHVwKCkgRGF0YSBIZWFkZXIgc3luY2hyb25pc2F0aW9uIHdhcyBsb3N0LCByZW1haW5pbmcgJWRcXG5cJiMzNDssXG4gMTU5Olx0XHRcdFx0XHQgICByeC1cdTAwM2VyZW1haW5pbmcpO1xuIDE2MDpcdFx0XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG4gMTYxOlx0XHRcdH1cbiAxNjI6XHRcdH1cbiAxNjM6XHRcbiAxNjQ6XHRcdHdoaWxlIChvZmZzZXQgJiM0Mzsgc2l6ZW9mKHUxNikgXHUwMDNjPSBza2ItXHUwMDNlbGVuKSB7XG4gMTY1Olx0XHRcdHUxNiBjb3B5X2xlbmd0aDtcbiAxNjY6XHRcbiAxNjc6XHRcdFx0aWYgKCFyeC1cdTAwM2VyZW1haW5pbmcpIHtcbiAxNjg6XHRcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiAtIG9mZnNldCA9PSBzaXplb2YodTE2KSkge1xuIDE2OTpcdFx0XHRcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFxuIDE3MDpcdFx0XHRcdFx0XHRcdHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldCk7XG4gMTcxOlx0XHRcdFx0XHRyeC1cdTAwM2VzcGxpdF9oZWFkID0gdHJ1ZTtcbiAxNzI6XHRcdFx0XHRcdG9mZnNldCAmIzQzOz0gc2l6ZW9mKHUxNik7XG4gMTczOlx0XHRcdFx0XHRicmVhaztcbiAxNzQ6XHRcdFx0XHR9XG4gMTc1Olx0XG4gMTc2Olx0XHRcdFx0aWYgKHJ4LVx1MDAzZXNwbGl0X2hlYWQgPT0gdHJ1ZSkge1xuIDE3NzpcdFx0XHRcdFx0cngtXHUwMDNlaGVhZGVyIHw9IChnZXRfdW5hbGlnbmVkX2xlMTYoXG4gMTc4Olx0XHRcdFx0XHRcdFx0c2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0KSBcdTAwM2NcdTAwM2MgMTYpO1xuIDE3OTpcdFx0XHRcdFx0cngtXHUwMDNlc3BsaXRfaGVhZCA9IGZhbHNlO1xuIDE4MDpcdFx0XHRcdFx0b2Zmc2V0ICYjNDM7PSBzaXplb2YodTE2KTtcbiAxODE6XHRcdFx0XHR9IGVsc2Uge1xuIDE4MjpcdFx0XHRcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICYjNDM7XG4gMTgzOlx0XHRcdFx0XHRcdFx0XHRcdG9mZnNldCk7XG4gMTg0Olx0XHRcdFx0XHRvZmZzZXQgJiM0Mzs9IHNpemVvZih1MzIpO1xuIDE4NTpcdFx0XHRcdH1cbiAxODY6XHRcbiAxODc6XHRcdFx0XHQvKiB0YWtlIGZyYW1lIGxlbmd0aCBmcm9tIERhdGEgaGVhZGVyIDMyLWJpdCB3b3JkICovXG4gMTg4Olx0XHRcdFx0c2l6ZSA9ICh1MTYpKHJ4LVx1MDAzZWhlYWRlciBcdTAwMjYgMHg3ZmYpO1xuIDE4OTpcdFx0XHRcdGlmIChzaXplICE9ICgofnJ4LVx1MDAzZWhlYWRlciBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweDdmZikpIHtcbiAxOTA6XHRcdFx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7YXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIDB4JXgsIG9mZnNldCAlZFxcblwmIzM0OyxcbiAxOTE6XHRcdFx0XHRcdFx0ICAgcngtXHUwMDNlaGVhZGVyLCBvZmZzZXQpO1xuIDE5MjpcdFx0XHRcdFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcbiAxOTM6XHRcdFx0XHRcdHJldHVybiAwO1xuIDE5NDpcdFx0XHRcdH1cbiAxOTU6XHRcdFx0XHRpZiAoc2l6ZSBcdTAwM2UgZGV2LVx1MDAzZW5ldC1cdTAwM2VtdHUgJiM0MzsgRVRIX0hMRU4gJiM0MzsgVkxBTl9ITEVOKSB7XG4gMTk2Olx0XHRcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2FzaXhfcnhfZml4dXAoKSBCYWQgUlggTGVuZ3RoICVkXFxuXCYjMzQ7LFxuIDE5NzpcdFx0XHRcdFx0XHQgICBzaXplKTtcbiAxOTg6XHRcdFx0XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG4gMTk5Olx0XHRcdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCB0YXJnZXRlZCB0b3dhcmRzIGFuIGV4cGVydCwgc3RhcnRpbmcgd2l0aCB0aGUgYm9sZGVkIGhlYWRlcjoKCioqRGl2aW5nIERlZXBlciBpbnRvIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgIGZ1bmN0aW9uLiBJJiMzOTt2ZSBnb3QgYSBkZWNlbnQgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgQVNJWCBkcml2ZXIgc3RydWN0dXJlLCBidXQgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4uLiBpdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIHJlY2VpdmUgcGF0aCYjMzk7cyBlcnJvciBoYW5kbGluZyBhbmQgcGFja2V0IGFkanVzdG1lbnQsIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQgY2xlYW5zIHVwIHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBkdXJpbmcgaGFyZHdhcmUgcmVjZXB0aW9uIG9yIGVhcmx5IGJ1ZmZlciBhbGxvY2F0aW9uLiBNeSBmb2N1cyBub3cgaXMgb24gdGhlICYjMzQ7cmVzdCBvZiBpdCYjMzQ7LgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29tbW9uIHBpdGZhbGxzIGhlcmU6IHBvdGVudGlhbCBhbGlnbm1lbnQgcHJvYmxlbXMsIGRlc2NyaXB0b3IgY29ycnVwdGlvbiwgbWF5YmUgZXZlbiBhIHJhY2UgY29uZGl0aW9uIHRoYXQgY291bGQgaGF2ZSBwb3BwZWQgdXAgZ2l2ZW4gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIFJYIERNQSBpbnRlcmFjdGlvbi4gQXJlIHdlIGRlYWxpbmcgd2l0aCBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MgdGhhdCBuZWNlc3NpdGF0ZSBwYWNrZXQgc2l6ZSBhZGp1c3RtZW50cz8gQXJlIHRoZXkgaGFuZGxpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBUQ1AvVURQIGNoZWNrc3VtIG9mZmxvYWQ/IFdoYXQgYWJvdXQganVtYm8gZnJhbWVzIGFuZCB0aGVpciBmcmFnbWVudGF0aW9uPyBXaGF0IGNoZWNrcyBhcmUgaW4gcGxhY2UgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3dzIG9yIHVuZGVyZmxvd3M/CgpTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3I6CgoqICAgKipFcnJvciBkZXRlY3Rpb246KiogSG93IGFyZSB0aGV5IGlkZW50aWZ5aW5nIGNvcnJ1cHRlZCBkYXRhIG9yIGJ1ZmZlciBpc3N1ZXM/CiogICAqKkJ1ZmZlciBtYW5pcHVsYXRpb246KiogSG93IGlzIHRoZSByZWNlaXZlZCBidWZmZXIgYmVpbmcgYWRqdXN0ZWQ/IEFyZSB0aGVyZSBjbGV2ZXIgdHJpY2tzIGZvciByZS1hbGlnbmluZyBkYXRhIG9yIGhhbmRsaW5nIHBhcnRpYWwgcGFja2V0IGZyYWdtZW50cz8KKiAgICoqRGVzY3JpcHRvciBpbnRlcmFjdGlvbjoqKiBXaGF0JiMzOTtzIHRoZSBkYW5jZSBiZXR3ZWVuIHRoZSBkZXNjcmlwdG9ycyBhbmQgdGhpcyBmaXh1cCBmdW5jdGlvbj8gQXJlIHRoZXkgcmUtdXNpbmcgZGVzY3JpcHRvcnMgc2FmZWx5LCBvciBhcmUgdGhlcmUgcG90ZW50aWFsIGhhemFyZHMgdGhlcmU/CiogICAqKlBlcmZvcm1hbmNlIGltcGxpY2F0aW9uczoqKiBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyBJIGNhbiBzcG90PwoKSSYjMzk7bSBnb2luZyB0byBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBiaXR3aXNlIG9wZXJhdGlvbnMgb3IgcG9pbnRlciBhcml0aG1ldGljLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBjYW4gZ2V0IGhhaXJ5IHJlYWwgcXVpY2suIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGFueSBhc3N1bXB0aW9ucyBtYWRlIGFib3V0IGhhcmR3YXJlIGJlaGF2aW9yIG9yIHJlZ2lzdGVyIHZhbHVlcy4gQW5kIHRoZW4sIEkgbmVlZCB0byBsb29rIGZvciBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyIG9yIGV2ZW4gdGhlIG5ldHdvcmsgc3RhY2sgaXRzZWxmLgoKTGV0JiMzOTtzIHNlZSB0aGUgcmVzdCBvZiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMDpcdFx0XHRcdH1cbiAyMDE6XHRcbiAyMDI6XHRcdFx0XHQvKiBTb21ldGltZXMgbWF5IGZhaWwgdG8gZ2V0IGEgbmV0ZGV2IHNvY2tldCBidWZmZXIgYnV0XG4gMjAzOlx0XHRcdFx0ICogY29udGludWUgdG8gcHJvY2VzcyB0aGUgVVJCIHNvY2tldCBidWZmZXIgc28gdGhhdFxuIDIwNDpcdFx0XHRcdCAqIHN5bmNocm9uaXNhdGlvbiBvZiB0aGUgRXRoZXJuZXQgZnJhbWUgRGF0YSBoZWFkZXJcbiAyMDU6XHRcdFx0XHQgKiB3b3JkIGlzIG1haW50YWluZWQuXG4gMjA2Olx0XHRcdFx0ICovXG4gMjA3Olx0XHRcdFx0cngtXHUwMDNlYXhfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbihkZXYtXHUwMDNlbmV0LCBzaXplKTtcbiAyMDg6XHRcbiAyMDk6XHRcdFx0XHRyeC1cdTAwM2VyZW1haW5pbmcgPSBzaXplO1xuIDIxMDpcdFx0XHR9XG4gMjExOlx0XG4gMjEyOlx0XHRcdGlmIChyeC1cdTAwM2VyZW1haW5pbmcgXHUwMDNlIHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQpIHtcbiAyMTM6XHRcdFx0XHRjb3B5X2xlbmd0aCA9IHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQ7XG4gMjE0Olx0XHRcdFx0cngtXHUwMDNlcmVtYWluaW5nIC09IGNvcHlfbGVuZ3RoO1xuIDIxNTpcdFx0XHR9IGVsc2Uge1xuIDIxNjpcdFx0XHRcdGNvcHlfbGVuZ3RoID0gcngtXHUwMDNlcmVtYWluaW5nO1xuIDIxNzpcdFx0XHRcdHJ4LVx1MDAzZXJlbWFpbmluZyA9IDA7XG4gMjE4Olx0XHRcdH1cbiAyMTk6XHRcbiAyMjA6XHRcdFx0aWYgKHJ4LVx1MDAzZWF4X3NrYikge1xuIDIyMTpcdFx0XHRcdHNrYl9wdXRfZGF0YShyeC1cdTAwM2VheF9za2IsIHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldCxcbiAyMjI6XHRcdFx0XHRcdCAgICAgY29weV9sZW5ndGgpO1xuIDIyMzpcdFx0XHRcdGlmICghcngtXHUwMDNlcmVtYWluaW5nKSB7XG4gMjI0Olx0XHRcdFx0XHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHJ4LVx1MDAzZWF4X3NrYik7XG4gMjI1Olx0XHRcdFx0XHRyeC1cdTAwM2VheF9za2IgPSBOVUxMO1xuIDIyNjpcdFx0XHRcdH1cbiAyMjc6XHRcdFx0fVxuIDIyODpcdFxuIDIyOTpcdFx0XHRvZmZzZXQgJiM0Mzs9IChjb3B5X2xlbmd0aCAmIzQzOyAxKSBcdTAwMjYgMHhmZmZlO1xuIDIzMDpcdFx0fVxuIDIzMTpcdFxuIDIzMjpcdFx0aWYgKHNrYi1cdTAwM2VsZW4gIT0gb2Zmc2V0KSB7XG4gMjMzOlx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7YXNpeF9yeF9maXh1cCgpIEJhZCBTS0IgTGVuZ3RoICVkLCAlZFxcblwmIzM0OyxcbiAyMzQ6XHRcdFx0XHQgICBza2ItXHUwMDNlbGVuLCBvZmZzZXQpO1xuIDIzNTpcdFx0XHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xuIDIzNjpcdFx0XHRyZXR1cm4gMDtcbiAyMzc6XHRcdH1cbiAyMzg6XHRcbiAyMzk6XHRcdHJldHVybiAxO1xuIDI0MDpcdH1cbiAyNDE6XHRcbiAyNDI6XHRpbnQgYXNpeF9yeF9maXh1cF9jb21tb24oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDI0MzpcdHtcbiAyNDQ6XHRcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcCA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiAyNDU6XHRcdHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4ID0gXHUwMDI2ZHAtXHUwMDNlcnhfZml4dXBfaW5mbztcbiAyNDY6XHRcbiAyNDc6XHRcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XG4gMjQ4Olx0fVxuIDI0OTpcdFxuIDI1MDpcdHZvaWQgYXNpeF9yeF9maXh1cF9jb21tb25fZnJlZShzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqZHApXG4gMjUxOlx0e1xuIDI1MjpcdFx0c3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcng7XG4gMjUzOlx0XG4gMjU0Olx0XHRpZiAoIWRwKVxuIDI1NTpcdFx0XHRyZXR1cm47XG4gMjU2Olx0XG4gMjU3Olx0XHRyeCA9IFx1MDAyNmRwLVx1MDAzZXJ4X2ZpeHVwX2luZm87XG4gMjU4Olx0XG4gMjU5Olx0XHRpZiAocngtXHUwMDNlYXhfc2tiKSB7XG4gMjYwOlx0XHRcdGtmcmVlX3NrYihyeC1cdTAwM2VheF9za2IpO1xuIDI2MTpcdFx0XHRyeC1cdTAwM2VheF9za2IgPSBOVUxMO1xuIDI2MjpcdFx0fVxuIDI2MzpcdH1cbiAyNjQ6XHRcbiAyNjU6XHRzdHJ1Y3Qgc2tfYnVmZiAqYXNpeF90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gMjY2Olx0XHRcdFx0ICAgICAgZ2ZwX3QgZmxhZ3MpXG4gMjY3Olx0e1xuIDI2ODpcdFx0aW50IHBhZGxlbjtcbiAyNjk6XHRcdGludCBoZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzY1CgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDgzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGFzaXhfY29tbW9uLmMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jYCBhbmQgaW1tZWRpYXRlbHksIEkgY2FuIHNlZSBhIGNyaXRpY2FsIGJvdW5kcyBjaGVjayBjaGFuZ2UuICBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSB0byBhbiBvdXQtb2YtYm91bmRzIChPT0IpIHJlYWQgaW4gdGhlIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKClgIGZ1bmN0aW9uLiAgVGhlIHByb2JsZW0sIGFzIEkgc2VlIGl0LCByZXZvbHZlZCBhcm91bmQgaG93IHRoZSBjb2RlIGhhbmRsZWQgYHJ4LSZndDtyZW1haW5pbmdgIHdoZW4gaXQgd2FzIGFuIG9kZCBudW1iZXIuCgpTcGVjaWZpY2FsbHksIHRoZSBvcmlnaW5hbCBjaGVjazogYHJ4LSZndDtyZW1haW5pbmcgJiM0Mzsgc2l6ZW9mKHUzMikgJmx0Oz0gc2tiLSZndDtsZW5gIHdhcyBpbnN1ZmZpY2llbnQuICBXaGVuIGByeC0mZ3Q7cmVtYWluaW5nYCB3YXMsIHNheSwgMywgYW5kIGBza2ItJmd0O2xlbmAgd2FzIDcsIHRoZSBjaGVjayBwYXNzZWQgKDMgJiM0MzsgNCAmbHQ7PSA3KS4gSG93ZXZlciwgYWZ0ZXIgY2FsY3VsYXRpbmcgdGhlIGBvZmZzZXRgIGFzIGAoKDMgJiM0MzsgMSkgJmFtcDsgMHhmZmZlKWAgd2hpY2ggcmVzdWx0cyBpbiA0LCB0aGUgYGdldF91bmFsaWduZWRfbGUzMihza2ItJmd0O2RhdGEgJiM0MzsgNClgIGNhbGwgd291bGQgcmVhZCBieXRlcyA0LCA1LCA2LCBhbmQgNyBmcm9tIHRoZSBgc2tiLSZndDtkYXRhYCBidWZmZXIsIGJ1dCB0aGUgYnVmZmVyIG9ubHkgaGFkIHZhbGlkIGRhdGEgdXAgdG8gaW5kZXggNi4gVGhpcyBtZWFudCBhIG9uZS1ieXRlIE9PQiByZWFkLCByaWdodCBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhhdC4KClRoZSBmaXggaXMgc21hcnQuIEJ5IG1vZGlmeWluZyB0aGUgY2hlY2sgdG8gYCgoKHJ4LSZndDtyZW1haW5pbmcgJiM0MzsgMSkgJmFtcDsgMHhmZmZlKSAmIzQzOyBzaXplb2YodTMyKSAmbHQ7PSBza2ItJmd0O2xlbilgLCB0aGUgYWxpZ25tZW50IGNhbGN1bGF0aW9uIGlzIG5vdyAqaW5jbHVkZWQqIGluIHRoZSBib3VuZHMgY2hlY2suIFNvIHRoZSBuZXcgY2hlY2sgbWFrZXMgc3VyZSB0aGF0IHRoZSBgb2Zmc2V0YCAqcGx1cyogdGhlIHNpemUgb2YgdGhlIDQgYnl0ZSByZWFkIGRvZXMgbm90IGV4Y2VlZCBgc2tiLSZndDtsZW5gLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcywgbGlrZSBpbmZvcm1hdGlvbiBsZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcz8gTm8uIFRoaXMgaXMgY3J1Y2lhbCB0byBlc3RhYmxpc2guIFRoaXMgaXMgcHVyZWx5IGEgKmJvdW5kcyBjaGVjayogY29ycmVjdGlvbi4gVGhlIGBza2ItJmd0O2RhdGFgIGJ1ZmZlciBjb21lcyBmcm9tIFVTQiBSWCwgbmV0d29yayBwYWNrZXQgZGF0YS4gVGhlIGZpeCBwcmV2ZW50cyB0aGUgT09CIHJlYWQuIFRoZXJlJiMzOTtzIG5vIG5ldyBhbGxvY2F0aW9uLCBubyB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vdGhpbmcgbGlrZSB0aGF0LiBUaGUgT09CIG5hdHVyZSBvZiB0aGUgaW5pdGlhbCBwcm9ibGVtIGlzIHRoZSByZWFzb24gS0FTQU4gZm91bmQgaXQgaW4gdGhlIGZpcnN0IHBsYWNlLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLiBBbmQgdGhlIGBLTVNBTlJlYXNvbmluZ2Agc2hvdWxkIGV4cGxpY2l0bHkgc3RhdGUgdGhhdCB0aGlzIHBhdGNoIGZpeGVzIHRoZSBPT0IgaGVhcCBtZW1vcnkgcmVhZCBpbiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpYCBieSBjb3JyZWN0bHkgYWxpZ25pbmcgYHJ4LSZndDtyZW1haW5pbmdgIGJlZm9yZSB0aGUgYm91bmRzIGNoZWNrLiBJdCYjMzk7cyBhIHRleHRib29rIEtBU0FOLWRldGVjdGVkIGlzc3VlLCBhbmQgdGhlIGZpeCBhZGRyZXNzZXMgdGhhdCBzcGVjaWZpYyBwcm9ibGVtIHdpdGhvdXQgaW50cm9kdWNpbmcgYW55IG5ldyBjb25jZXJucyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIDItYnl0ZSBhbGlnbm1lbnQgd2hlbiBjaGVja2luZyBpZiB0aGUgc29ja2V0IGJ1ZmZlciBoYXMgZW5vdWdoIHJlbWFpbmluZyBieXRlcyBmb3IgdGhlIDMyLWJpdCBoZWFkZXIgcmVhZCAoYCgocngtXHUwMDNlcmVtYWluaW5nICYjNDM7IDEpIFx1MDAyNiAweGZmZmUpICYjNDM7IHNpemVvZih1MzIpIFx1MDAzYz0gc2tiLVx1MDAzZWxlbmApLlxuXG5UaGlzIGlzc3VlIGlzIGFuIG91dC1vZi1ib3VuZHMgKE9PQikgbWVtb3J5IHJlYWQgb24gc2tiLVx1MDAzZWRhdGEsIHdoaWNoIGlzIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSBieSBjb3JyZWN0bHkgYWNjb3VudGluZyBmb3IgMi1ieXRlIGFsaWdubWVudCB3aGVuIGNoZWNraW5nIGlmIHRoZSBzb2NrZXQgYnVmZmVyIGhhcyBlbm91Z2ggcmVtYWluaW5nIGJ5dGVzIGZvciB0aGUgMzItYml0IGhlYWRlciByZWFkIChgKChyeC1cdTAwM2VyZW1haW5pbmcgJiM0MzsgMSkgXHUwMDI2IDB4ZmZmZSkgJiM0Mzsgc2l6ZW9mKHUzMikgXHUwMDNjPSBza2ItXHUwMDNlbGVuYCkuXG5cblRoaXMgaXNzdWUgaXMgYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBvbiBza2ItXHUwMDNlZGF0YSwgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU2OjA2LjYyMTE4NDE2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDI2OTY1OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9ORVRfQVg4ODE3WFwiLFxuICAgIFwiVVNCX1VTQk5FVFwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhc2l4X3J4X2ZpeHVwX2ludGVybmFsXCIsXG4gICAgXCJhc2l4X3J4X2ZpeHVwX2NvbW1vblwiLFxuICAgIFwiYXg4ODE3MmFfcnhfZml4dXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIDItYnl0ZSBhbGlnbm1lbnQgd2hlbiBjaGVja2luZyBpZiB0aGUgc29ja2V0IGJ1ZmZlciBoYXMgZW5vdWdoIHJlbWFpbmluZyBieXRlcyBmb3IgdGhlIDMyLWJpdCBoZWFkZXIgcmVhZCAoYCgocngtXFx1MDAzZXJlbWFpbmluZyArIDEpIFxcdTAwMjYgMHhmZmZlKSArIHNpemVvZih1MzIpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuYCkuXFxuXFxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIChPT0IpIG1lbW9yeSByZWFkIG9uIHNrYi1cXHUwMDNlZGF0YSwgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IGhlYWRlciBib3VuZHMgY2hlY2tpbmcgaW4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIHRvIGFjY291bnQgZm9yIDItYnl0ZSBhbGlnbm1lbnQgd2hlbiBjaGVja2luZyByZW1haW5pbmcgcGFja2V0IGJ1ZmZlciBsZW5ndGguIFRoaXMgY29kZSBydW5zIGluIHRoZSBBU0lYIFVTQiBldGhlcm5ldCBkcml2ZXIncyBSWCBwYXRoIGFuZCBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24vZnV6emluZyAoZS5nLiwgVVNCIHJhdy1nYWRnZXQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1NjowNi42MjExODg4MDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDcyMjkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFmNTAzMDYyY2U3YzcwNDM3NjcyYTM5NTExNDZlZmM3YTFkYjc3OWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAxMTo1NjowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXFxuaW5kZXggNGYwM2Y0ZTU3NjU1ZC4uYzUwNjQ2ZWEzNWM3ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXFxuQEAgLTE0OCw3ICsxNDgsNyBAQCBpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAqIEFsc28gYXZvaWQgdW5uZWNlc3NhcmlseSBkaXNjYXJkaW5nIGEgZ29vZCBjdXJyZW50IG5ldGRldiBzb2NrZXRcXG4gXFx0ICogYnVmZmVyLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHJ4LVxcdTAwM2VyZW1haW5pbmcgXFx1MDAyNlxcdTAwMjYgKHJ4LVxcdTAwM2VyZW1haW5pbmcgKyBzaXplb2YodTMyKSBcXHUwMDNjPSBza2ItXFx1MDAzZWxlbikpIHtcXG4rXFx0aWYgKHJ4LVxcdTAwM2VyZW1haW5pbmcgXFx1MDAyNlxcdTAwMjYgKCgocngtXFx1MDAzZXJlbWFpbmluZyArIDEpIFxcdTAwMjYgMHhmZmZlKSArIHNpemVvZih1MzIpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuKSkge1xcbiBcXHRcXHRvZmZzZXQgPSAoKHJ4LVxcdTAwM2VyZW1haW5pbmcgKyAxKSBcXHUwMDI2IDB4ZmZmZSk7XFxuIFxcdFxcdHJ4LVxcdTAwM2VoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KTtcXG4gXFx0XFx0b2Zmc2V0ID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6MDcuMTgyODU2MzYzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1OTYwMDAwOTczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfTkVUX0FYODgxN1hcIixcbiAgICBcIlVTQl9VU0JORVRcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXNpeF9yeF9maXh1cF9pbnRlcm5hbFwiLFxuICAgIFwiYXNpeF9yeF9maXh1cF9jb21tb25cIixcbiAgICBcImF4ODgxNzJhX3J4X2ZpeHVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IGhlYWRlciBib3VuZHMgY2hlY2tpbmcgaW4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIHRvIGFjY291bnQgZm9yIDItYnl0ZSBhbGlnbm1lbnQgd2hlbiBjaGVja2luZyByZW1haW5pbmcgcGFja2V0IGJ1ZmZlciBsZW5ndGguIFRoaXMgY29kZSBydW5zIGluIHRoZSBBU0lYIFVTQiBldGhlcm5ldCBkcml2ZXIncyBSWCBwYXRoIGFuZCBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24vZnV6emluZyAoZS5nLiwgVVNCIHJhdy1nYWRnZXQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFmNTAzMDYyY2U3YzcwNDM3NjcyYTM5NTExNDZlZmM3YTFkYjc3OWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDExOjU2OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY1xuaW5kZXggNGYwM2Y0ZTU3NjU1ZC4uYzUwNjQ2ZWEzNWM3ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY1xuQEAgLTE0OCw3ICsxNDgsNyBAQCBpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKiBBbHNvIGF2b2lkIHVubmVjZXNzYXJpbHkgZGlzY2FyZGluZyBhIGdvb2QgY3VycmVudCBuZXRkZXYgc29ja2V0XG4gXHQgKiBidWZmZXIuXG4gXHQgKi9cbi1cdGlmIChyeC1cdTAwM2VyZW1haW5pbmcgXHUwMDI2XHUwMDI2IChyeC1cdTAwM2VyZW1haW5pbmcgKyBzaXplb2YodTMyKSBcdTAwM2M9IHNrYi1cdTAwM2VsZW4pKSB7XG4rXHRpZiAocngtXHUwMDNlcmVtYWluaW5nIFx1MDAyNlx1MDAyNiAoKChyeC1cdTAwM2VyZW1haW5pbmcgKyAxKSBcdTAwMjYgMHhmZmZlKSArIHNpemVvZih1MzIpIFx1MDAzYz0gc2tiLVx1MDAzZWxlbikpIHtcbiBcdFx0b2Zmc2V0ID0gKChyeC1cdTAwM2VyZW1haW5pbmcgKyAxKSBcdTAwMjYgMHhmZmZlKTtcbiBcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICsgb2Zmc2V0KTtcbiBcdFx0b2Zmc2V0ID0gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU2OjA3LjE4Mjg1ODk3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDIxMjM5NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQVNJWCBVU0IgTmV0d29yayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoLCBhbmQgaXQgc2VlbXMgdG8gdGFyZ2V0IGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AuIEFscmlnaHQsIGxldCdzIGxvb2sgYXQgdGhlIGRpZmYuIEl0J3MgYSBmYWlybHkgc21hbGwgY2hhbmdlLCB0aGFua2Z1bGx5LiBMb29raW5nIGF0IGl0LCBpdCBzZWVtcyB0byBiZSBjaGFuZ2luZyB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50IHdpdGhpbiB0aGUgYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBjaGVjayBpbnZvbHZpbmcgYHJ4LVx1MDAzZXJlbWFpbmluZ2AgYW5kIGBza2ItXHUwMDNlbGVuYC4gSSBzZWUgYSBzbGlnaHQgbW9kaWZpY2F0aW9uIHRvIHRoZSBvZmZzZXQgY2FsY3VsYXRpb24uIEl0IGFwcGVhcnMgdGhhdCBgKHJ4LVx1MDAzZXJlbWFpbmluZyArIDEpIFx1MDAyNiAweGZmZmVgIGhhcyBiZWVuIGFkZGVkLiBUaGF0IGxpa2VseSBtZWFucyB0aGV5J3JlIGRlYWxpbmcgd2l0aCBhbGlnbm1lbnQuIEl0J3MgcHJvYmFibHkgdG8gaGFuZGxlIHNvbWUgc3BlY2lmaWMgaGFyZHdhcmUgcXVpcmsgb3IgYSBzcGVjaWZpYyBkYXRhIGxheW91dCBmcm9tIHRoZSBVU0IgZGV2aWNlLCByaWdodD8gSXQgY291bGQgYmUgcmVsYXRlZCB0byBzb21lIHBhZGRpbmcgb3IgYWxpZ25tZW50IHJlcXVpcmVtZW50IG9mIHRoZSBSWCBidWZmZXIuXG5cblRvIGNvbmZpcm0gbXkgaW5pdGlhbCB0aG91Z2h0cywgSSdsbCBxdWlja2x5IHVzZSBgcmVhZC1maWxlYCB0byBncmFiIHRoZSBjb250ZXh0IGFyb3VuZCBsaW5lIDE0OCBvZiBgZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNgLiBJIG5lZWQgYSBmdWxsZXIgcGljdHVyZSBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIExldCdzIHNlZSBpZiB0aGUgY29udGV4dCB3aWxsIGhlbHAgbWUgd2l0aCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTM4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6MjguMjA0MTAxMjg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHQgKi9cXG4gMTMxOlxcdFxcdHJ4LVxcdTAwM2VyZW1haW5pbmcgPSAwO1xcbiAxMzI6XFx0XFx0cngtXFx1MDAzZXNwbGl0X2hlYWQgPSBmYWxzZTtcXG4gMTMzOlxcdFxcdHJ4LVxcdTAwM2VoZWFkZXIgPSAwO1xcbiAxMzQ6XFx0fVxcbiAxMzU6XFx0XFxuIDEzNjpcXHRpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIDEzNzpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeClcXG4gMTM4OlxcdHtcXG4gMTM5OlxcdFxcdGludCBvZmZzZXQgPSAwO1xcbiAxNDA6XFx0XFx0dTE2IHNpemU7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdC8qIFdoZW4gYW4gRXRoZXJuZXQgZnJhbWUgc3BhbnMgbXVsdGlwbGUgVVJCIHNvY2tldCBidWZmZXJzLFxcbiAxNDM6XFx0XFx0ICogZG8gYSBzYW5pdHkgdGVzdCBmb3IgdGhlIERhdGEgaGVhZGVyIHN5bmNocm9uaXNhdGlvbi5cXG4gMTQ0OlxcdFxcdCAqIEF0dGVtcHQgdG8gZGV0ZWN0IHRoZSBzaXR1YXRpb24gb2YgdGhlIHByZXZpb3VzIHNvY2tldCBidWZmZXIgaGF2aW5nXFxuIDE0NTpcXHRcXHQgKiBiZWVuIHRydW5jYXRlZCBvciBhIHNvY2tldCBidWZmZXIgd2FzIG1pc3NpbmcuIFRoZXNlIHNpdHVhdGlvbnNcXG4gMTQ2OlxcdFxcdCAqIGNhdXNlIGEgZGlzY29udGludWl0eSBpbiB0aGUgZGF0YSBzdHJlYW0gYW5kIHRoZXJlZm9yZSBuZWVkIHRvIGF2b2lkXFxuIDE0NzpcXHRcXHQgKiBhcHBlbmRpbmcgYmFkIGRhdGEgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBuZXRkZXYgc29ja2V0IGJ1ZmZlci5cXG4gMTQ4OlxcdFxcdCAqIEFsc28gYXZvaWQgdW5uZWNlc3NhcmlseSBkaXNjYXJkaW5nIGEgZ29vZCBjdXJyZW50IG5ldGRldiBzb2NrZXRcXG4gMTQ5OlxcdFxcdCAqIGJ1ZmZlci5cXG4gMTUwOlxcdFxcdCAqL1xcbiAxNTE6XFx0XFx0aWYgKHJ4LVxcdTAwM2VyZW1haW5pbmcgXFx1MDAyNlxcdTAwMjYgKCgocngtXFx1MDAzZXJlbWFpbmluZyArIDEpIFxcdTAwMjYgMHhmZmZlKSArIHNpemVvZih1MzIpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuKSkge1xcbiAxNTI6XFx0XFx0XFx0b2Zmc2V0ID0gKChyeC1cXHUwMDNlcmVtYWluaW5nICsgMSkgXFx1MDAyNiAweGZmZmUpO1xcbiAxNTM6XFx0XFx0XFx0cngtXFx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUzMihza2ItXFx1MDAzZWRhdGEgKyBvZmZzZXQpO1xcbiAxNTQ6XFx0XFx0XFx0b2Zmc2V0ID0gMDtcXG4gMTU1OlxcdFxcbiAxNTY6XFx0XFx0XFx0c2l6ZSA9ICh1MTYpKHJ4LVxcdTAwM2VoZWFkZXIgXFx1MDAyNiAweDdmZik7XFxuIDE1NzpcXHRcXHRcXHRpZiAoc2l6ZSAhPSAoKH5yeC1cXHUwMDNlaGVhZGVyIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4N2ZmKSkge1xcbiAxNTg6XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBEYXRhIEhlYWRlciBzeW5jaHJvbmlzYXRpb24gd2FzIGxvc3QsIHJlbWFpbmluZyAlZFxcXFxuXFxcIixcXG4gMTU5OlxcdFxcdFxcdFxcdFxcdCAgIHJ4LVxcdTAwM2VyZW1haW5pbmcpO1xcbiAxNjA6XFx0XFx0XFx0XFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcXG4gMTYxOlxcdFxcdFxcdH1cXG4gMTYyOlxcdFxcdH1cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0d2hpbGUgKG9mZnNldCArIHNpemVvZih1MTYpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuKSB7XFxuIDE2NTpcXHRcXHRcXHR1MTYgY29weV9sZW5ndGg7XFxuIDE2NjpcXHRcXG4gMTY3OlxcdFxcdFxcdGlmICghcngtXFx1MDAzZXJlbWFpbmluZykge1xcbiAxNjg6XFx0XFx0XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0ID09IHNpemVvZih1MTYpKSB7XFxuIDE2OTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFxcbiAxNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KTtcXG4gMTcxOlxcdFxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VzcGxpdF9oZWFkID0gdHJ1ZTtcXG4gMTcyOlxcdFxcdFxcdFxcdFxcdG9mZnNldCArPSBzaXplb2YodTE2KTtcXG4gMTczOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNzQ6XFx0XFx0XFx0XFx0fVxcbiAxNzU6XFx0XFxuIDE3NjpcXHRcXHRcXHRcXHRpZiAocngtXFx1MDAzZXNwbGl0X2hlYWQgPT0gdHJ1ZSkge1xcbiAxNzc6XFx0XFx0XFx0XFx0XFx0cngtXFx1MDAzZWhlYWRlciB8PSAoZ2V0X3VuYWxpZ25lZF9sZTE2KFxcbiAxNzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KSBcXHUwMDNjXFx1MDAzYyAxNik7XFxuIDE3OTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlc3BsaXRfaGVhZCA9IGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1NjoyOC4yMDQyNzYzMDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjc3ODA3Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQVNJWCBVU0IgTmV0d29yayBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jYC4gSXQncyBjbGVhciB0aGF0IHRoaXMgaXMgY29yZSBjb2RlIGZvciB0aGUgVVNCIG5ldHdvcmsgZHJpdmVycyBzcGVjaWZpY2FsbHkgZm9yIEFTSVggQVg4OHh4eCBkZXZpY2VzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBrbm93IHRoYXQgc3l6a2FsbGVyIGlzIGFuIG9idmlvdXMgY2FuZGlkYXRlIGZvciB0aGlzLiBTcGVjaWZpY2FsbHksIGl0cyBVU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcyDigJMgdGhlIGdhZGdldCBtb2RlLCByYXctZ2FkZ2V0IG1vZGUsIG9yIGV2ZW4gdmhjaSDigJMgYXJlIGV4dHJlbWVseSByZWxldmFudCBoZXJlLlxuXG5UaGUga2V5IGlzIGlmIHN5emthbGxlciBjYW4gcHJvYmUgdGhlIFVTQiBuZXR3b3JrIGRyaXZlcnMgZWZmZWN0aXZlbHkuIEFuZCB0aGUgYW5zd2VyIGlzIHllcy4gSXQncyBkZXNpZ25lZCB0byBwcm9iZSB0aGVzZSB0eXBlcyBvZiBkcml2ZXJzLiBJIGNhbiBsZXZlcmFnZSBpdCB0byBlbXVsYXRlIFVTQiBkZXZpY2VzIGFuZCBzZW5kIHRoZSByaWdodCB0eXBlIG9mIFVSQnMgYW5kIHBhY2tldHMgdG8gdGhlIGRyaXZlciwgcG90ZW50aWFsbHkgaGl0dGluZyB0aGUgYHJ4X2ZpeHVwYCBjYWxsYmFja3MuIFRoYXQncyB3aGVyZSBpbnRlcmVzdGluZyBidWdzIG9mdGVuIGx1cmsuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZW50cnkgbmV4dCB0byBjb25maXJtIGl0IGlzIGVuYWJsZWQgb24gdGhlIHRhcmdldCBzeXN0ZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDI3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6MzAuODgyMDg3NTA4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MDE4MDc0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhc2l4X2NvbW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTEzPW9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxN1gpXFx0Kz0gYXNpeC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjE0OmFzaXgteSA6PSBhc2l4X2RldmljZXMubyBhc2l4X2NvbW1vbi5vIGF4ODgxNzJhLm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtMTUtb2JqLSQoQ09ORklHX1VTQl9ORVRfQVg4ODE3OV8xNzhBKSAgICAgICs9IGF4ODgxNzlfMTc4YS5vXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oPTE3MT1zdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMTc3LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MTc4OnN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlIHtcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTE3OS1cXHR2b2lkICgqcmVzdW1lKShzdHJ1Y3QgdXNibmV0ICpkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaD0yMTE9aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTI6dm9pZCBhc2l4X3J4X2ZpeHVwX2NvbW1vbl9mcmVlKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTMtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz0yNDI9aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNDMte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI0NDpcXHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqZHAgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0NS1cXHRzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeCA9IFxcdTAwMjZkcC1cXHUwMDNlcnhfZml4dXBfaW5mbztcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0OS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoyNTA6dm9pZCBhc2l4X3J4X2ZpeHVwX2NvbW1vbl9mcmVlKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcClcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNTEte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTI5ND1zdGF0aWMgdm9pZCBheDg4NzcyX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMjk3LVxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoyOTg6XFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0yOTktXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MzAzPXN0YXRpYyBpbnQgYXg4ODc3Ml9ldGh0b29sX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTMwNi1cXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MzA3OlxcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMzA4LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTMzMj1zdGF0aWMgaW50IGF4ODg3NzJfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTMzNC1cXHRzdHJ1Y3QgYXNpeF9kYXRhICpkYXRhID0gKHN0cnVjdCBhc2l4X2RhdGEgKilcXHUwMDI2ZGV2LVxcdTAwM2VkYXRhO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzozMzU6XFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0zMzYtXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0zNjI9c3RhdGljIGludCBheDg4NzcyX2h3X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTM2NC1cXHRzdHJ1Y3QgYXNpeF9kYXRhICpkYXRhID0gKHN0cnVjdCBhc2l4X2RhdGEgKilcXHUwMDI2ZGV2LVxcdTAwM2VkYXRhO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzozNjU6XFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0zNjYtXFx0dTE2IHJ4X2N0bDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz00NTY9c3RhdGljIGludCBheDg4NzcyYV9od19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBpbl9wbSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy00NTgtXFx0c3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopXFx1MDAyNmRldi1cXHUwMDNlZGF0YTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NDU5OlxcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNDYwLVxcdHUxNiByeF9jdGwsIHBoeTE0aCwgcGh5MTVoLCBwaHkxNmg7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NTk2PXN0YXRpYyB2b2lkIGF4ODg3NzJfc3VzcGVuZChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTU5Ny17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjU5ODpcXHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTU5OS1cXHR1MTYgbWVkaXVtO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTYzMT1zdGF0aWMgaW50IGFzaXhfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjMzLVxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjYzNDpcXHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTYzNS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz02NDI9c3RhdGljIHZvaWQgYXg4ODc3Ml9yZXN1bWUoc3RydWN0IHVzYm5ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02NDMte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2NDQ6XFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02NDUtXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjU4PXN0YXRpYyBpbnQgYXNpeF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjYwLVxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY2MTpcXHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY2Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz02Njk9c3RhdGljIGludCBheDg4NzcyX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY3MC17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY3MTpcXHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY3Mi1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY5Ni1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njk3OnN0YXRpYyB2b2lkIGF4ODg3NzJfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2KVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02OTgte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTcwMz1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9waHkoc3RydWN0IHVzYm5ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MDQte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo3MDU6XFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MDYtXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz03OTk9c3RhdGljIGludCBheDg4NzcyX3BoeWxpbmtfc2V0dXAoc3RydWN0IHVzYm5ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy04MDAte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo4MDE6XFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy04MDItXFx0cGh5X2ludGVyZmFjZV90IHBoeV9pZl9tb2RlO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTgyOT1zdGF0aWMgaW50IGF4ODg3NzJfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy04MzAte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo4MzE6XFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXY7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTgzMi1cXHR1OCBidWZbRVRIX0FMRU5dID0gezB9O1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTk0Nj1zdGF0aWMgaW50IGF4ODg3NzJfc3RvcChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTk0Ny17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjk0ODpcXHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTk0OS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz05NTU9c3RhdGljIHZvaWQgYXg4ODc3Ml91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtOTU2LXtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6OTU3OlxcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtOTU4LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTEyNzE9c3RhdGljIGludCBheDg4MTc4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMzE4LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxMzE5OlxcdGRldi1cXHUwMDNlZHJpdmVyX3ByaXYgPSBremFsbG9jX29iaihzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTEzMjAtXFx0aWYgKCFkZXYtXFx1MDAzZWRyaXZlcl9wcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jLTQtICpcXG5kcml2ZXJzL25ldC91c2Ivc3I5ODAwLmM6NTogKiBCYXNlZCBvbiBhc2l4X2NvbW1vbi5jLCBhc2l4X2RldmljZXMuY1xcbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYy02LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU2OjMxLjIyMjI3Nzg2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkwMDMyNzI4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvbmZpZ3VyYXRpb24gcXVlc3Rpb24sIHRoaW5raW5nIHRocm91Z2ggaXQgc3RlcC1ieS1zdGVwOlxuXG4qKkNoZWNraW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBBWDg4MTdYIFVTQiBOZXR3b3JraW5nIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCBzbyBzb21lb25lJ3MgYXNraW5nIGFib3V0IGhvdyB0byBlbmFibGUgdGhlIEFYODgxN1ggVVNCIG5ldHdvcmtpbmcgZHJpdmVyLiBNeSBmaXJzdCBpbnN0aW5jdCwgYmVpbmcgd2VsbC12ZXJzZWQgaW4ga2VybmVsIGNvbmZpZ3VyYXRpb24sIGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBpdCdzIHdoZXJlIHRoZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgY29uZmlndXJhdGlvbnMgdXN1YWxseSBsaXZlLiBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgbWU7IGl0J3MgcHJhY3RpY2FsbHkgbXVzY2xlIG1lbW9yeSBhdCB0aGlzIHBvaW50LlxuXG5NeSB0aGlua2luZyBpcywgd2l0aGluIHRoYXQgYEtjb25maWdgIGZpbGUsIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgbGlrZSBgQ09ORklHX1VTQl9ORVRfQVg4ODE3WGAuIFRoZSBrZXkgaXMgdG8gZmluZCB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5UaGVuLCBvbmNlIEkndmUgbG9jYXRlZCBpdCwgdGhlICpyZWFsKiB3b3JrIGJlZ2lucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gRG9lcyBpdCByZWx5IG9uIGBDT05GSUdfVVNCX05FVGAgYmVpbmcgZW5hYmxlZD8gRG9lcyBpdCBkZXBlbmQgb24gc3BlY2lmaWMgVVNCIGNvbnRyb2xsZXIgc3VwcG9ydD8gTWF5YmUgYSBnZW5lcmFsIFVTQiBuZXR3b3JraW5nIGZyYW1ld29yaz8gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgYEtjb25maWdgIGZpbGUgdG8gc2VlIHdoYXQgb3RoZXIgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoaXMgb25lIHRvIGJlIGF2YWlsYWJsZSwgdG8gdW5kZXJzdGFuZCB0aGUgY2hhaW4gb2YgZGVwZW5kZW5jaWVzLiBJdCdzIG5vdCBqdXN0IGFib3V0IGZsaXBwaW5nIGEgc3dpdGNoOyBpdCdzIGFib3V0IG1ha2luZyBzdXJlIGFsbCB0aGUgc3VwcG9ydGluZyBpbmZyYXN0cnVjdHVyZSBpcyBpbiBwbGFjZS4gSSBoYXZlIHRvIGxvb2sgZm9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIG9yIG90aGVyIGNvbmRpdGlvbnMuXG5cbkVzc2VudGlhbGx5LCBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyB3aXRoaW4gYEtjb25maWdgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCdzIG5lZWRlZCBmb3IgdGhlIEFYODgxN1ggZHJpdmVyIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpcyBicmVhZCBhbmQgYnV0dGVyIGZvciBtZSwgZW5zdXJpbmcgdGhlIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdCBpcyBhbiBpbXBvcnRhbnQgcGFydCBvZiB0aGUgam9iLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTIyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6MzQuMTIyNjA3OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODkzMjIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJVU0JfTkVUX0FYODgxN1hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTEzMj1jb25maWcgVVNCX1VTQk5FVFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTY1LVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjE2Njpjb25maWcgVVNCX05FVF9BWDg4MTdYXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTY3LVxcdHRyaXN0YXRlIFxcXCJBU0lYIEFYODh4eHggQmFzZWQgVVNCIDIuMCBFdGhlcm5ldCBBZGFwdGVyc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfVVNCX0xBTjc4WFgpXFx0Kz0gbGFuNzh4eC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxN1gpXFx0Kz0gYXNpeC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTE0LWFzaXgteSA6PSBhc2l4X2RldmljZXMubyBhc2l4X2NvbW1vbi5vIGF4ODgxNzJhLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6MzQuMjIxNTQzOTIzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg0NzcwNzY0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipEZWx2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBVU0IgTmV0d29ya2luZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNjYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBVU0IgbmV0d29ya2luZyBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY2llcywgb3B0aW9ucywgYW5kIGRlZmF1bHRzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBmZWF0dXJlIG9yIGRyaXZlci4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB0aGlzIHNlY3Rpb24gb2YgdGhlIEtjb25maWcgaG9sZHMuIFRoaXMgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBzb21lIHZhbHVhYmxlIGNvbnRleHQgYXMgSSBhbSBkZWJ1Z2dpbmcgYSBwcm9ibGVtIGluIHRoaXMgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE3MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU2OjM2LjA2OTI1NTI2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTYwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdFxcbiAxNjE6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgXFx1MDAzY2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy91c2JuZXQvXFx1MDAzZS5cXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gMTY0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYm5ldC5cXG4gMTY1OlxcdFxcbiAxNjY6XFx0Y29uZmlnIFVTQl9ORVRfQVg4ODE3WFxcbiAxNjc6XFx0XFx0dHJpc3RhdGUgXFxcIkFTSVggQVg4OHh4eCBCYXNlZCBVU0IgMi4wIEV0aGVybmV0IEFkYXB0ZXJzXFxcIlxcbiAxNjg6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuIDE2OTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gMTcwOlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuIDE3MTpcXHRcXHRzZWxlY3QgQVg4ODc5NkJfUEhZXFxuIDE3MjpcXHRcXHRpbXBseSBORVRfU0VMRlRFU1RTXFxuIDE3MzpcXHRcXHRkZWZhdWx0IHlcXG4gMTc0OlxcdFxcdGhlbHBcXG4gMTc1OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBBU0lYIEFYODh4eHggYmFzZWQgVVNCIDIuMFxcbiAxNzY6XFx0XFx0ICAxMC8xMDAgRXRoZXJuZXQgYWRhcHRlcnMuXFxuIDE3NzpcXHRcXG4gMTc4OlxcdFxcdCAgVGhpcyBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGRldmljZXM6XFxuIDE3OTpcXHRcXHQgICAgKiBBdGVuIFVDMjEwVFxcbiAxODA6XFx0XFx0ICAgICogQVNJWCBBWDg4MTcyXFxuIDE4MTpcXHRcXHQgICAgKiBCaWxsaW9udG9uIFN5c3RlbXMsIFVTQjJBUlxcbiAxODI6XFx0XFx0ICAgICogQmlsbGlvbnRvbiBTeXN0ZW1zLCBHVVNCMkFNLTFHLUJcXG4gMTgzOlxcdFxcdCAgICAqIEJ1ZmZhbG8gTFVBLVUyLUtUWFxcbiAxODQ6XFx0XFx0ICAgICogQ29yZWdhIEZFdGhlciBVU0IyLVRYXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU2OjM2LjA2OTM3ODQ0NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTMxMjQzMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6XG5cbioqQW5hbHl6aW5nIFVTQiBOZXR3b3JrIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBVU0IgbmV0d29yayBkcml2ZXIgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBBWDg4MTdYIGRyaXZlci4gRmlyc3QgdGhpbmcncyBmaXJzdDogYFVTQl9ORVRfQVg4ODE3WGAgcmVsaWVzIG9uIHRoZSBgVVNCX1VTQk5FVGAgY29uZmlndXJhdGlvbiBvcHRpb24sIHdoaWNoLCBpbiB0dXJuLCBoaW5nZXMgb24gdGhlIG1vcmUgZ2VuZXJhbCBgVVNCX05FVF9EUklWRVJTYCBhbmQgdGhlIGJhc2UgYFVTQmAgb3B0aW9uLiBHb3QgaXQsIHRoaXMgaXMgc3RhbmRhcmQgZGVwZW5kZW5jeSB0cmFja2luZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNoYWluIGNvcnJlY3RseS5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGFzaXggZHJpdmVyLCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2FsbGluZyBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAuIEkgd2FudCB0byB0cmFjayBkb3duIGV2ZXJ5d2hlcmUgaXQgaXMgY2FsbGVkLiBUaGF0IG1lYW5zIGxvb2tpbmcgaW4gYGFzaXhfY29tbW9uLmNgIGZpcnN0LCBvYnZpb3VzbHksIGJ1dCBJJ2xsIG5lZWQgdG8gY2hlY2sgZWxzZXdoZXJlIHRvbywganVzdCBpbiBjYXNlIHRoZXJlIGFyZSBvdGhlciBtb2R1bGVzIGludm9sdmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGJyb2FkZXIgZHJpdmVyIGFyY2hpdGVjdHVyZSwgc28gdW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgaXMgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NTQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU2OjM4LjIwMDYyNTY2NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxNTYxMjYyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhc2l4X3J4X2ZpeHVwX2ludGVybmFsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg9MjA2PXZvaWQgYXNpeF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA4LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjA5OmludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIxMC1cXHRcXHRcXHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeCk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz0xMTU9c3RhdGljIHZvaWQgcmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTE3LVxcdC8qIFJlc2V0IHRoZSB2YXJpYWJsZXMgdGhhdCBoYXZlIGEgbGlmZXRpbWUgb3V0c2lkZSBvZlxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjExODpcXHQgKiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgc28gdGhhdCBmdXR1cmUgcHJvY2Vzc2luZyBzdGFydHMgZnJvbSBhXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTE5LVxcdCAqIGtub3duIHNldCBvZiBpbml0aWFsIGNvbmRpdGlvbnMuXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMzUtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTM2OmludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMzctXFx0XFx0XFx0ICAgc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz0yNDI9aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0Ni1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoyNDc6XFx0cmV0dXJuIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoZGV2LCBza2IsIHJ4KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNDgtfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MzM5PXN0YXRpYyBpbnQgYXg4ODE3MmFfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzQzLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjM0NDpcXHRyZXR1cm4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbChkZXYsIHNrYiwgcngpO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTM0NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU2OjQxLjIxNjI0MzExNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTQzODE0MDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBVU0IgRHJpdmVyIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiB0aGUgQVNJWCBBWDg4eHh4IFVTQiBuZXR3b3JraW5nIGRyaXZlci4gSSBzZWUgdGhhdCBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgYnkgYGFzaXhfcnhfZml4dXBfY29tbW9uYCBhbmQgYGF4ODgxNzJhX3J4X2ZpeHVwYC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IGNoYW5nZWQuXG5cbkFoYSEgVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGxpZXMgd2l0aGluIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYC4gSXQncyBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgY2hhbmdlIGluIHRoZSBvZmZzZXQgY2FsY3VsYXRpb246XG5cbmBgYGNcbi1cdGlmIChyeC1cdTAwM2VyZW1haW5pbmcgXHUwMDI2XHUwMDI2IChyeC1cdTAwM2VyZW1haW5pbmcgKyBzaXplb2YodTMyKSBcdTAwM2M9IHNrYi1cdTAwM2VsZW4pKSB7XG4rXHRpZiAocngtXHUwMDNlcmVtYWluaW5nIFx1MDAyNlx1MDAyNiAoKChyeC1cdTAwM2VyZW1haW5pbmcgKyAxKSBcdTAwMjYgMHhmZmZlKSArIHNpemVvZih1MzIpIFx1MDAzYz0gc2tiLVx1MDAzZWxlbikpIHtcbiBcdFx0b2Zmc2V0ID0gKChyeC1cdTAwM2VyZW1haW5pbmcgKyAxKSBcdTAwMjYgMHhmZmZlKTtcbiBcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICsgb2Zmc2V0KTtcbiBcdFx0b2Zmc2V0ID0gMDtcbmBgYFxuXG5QcmV2aW91c2x5LCB0aGUgY29kZSB3YXMgdnVsbmVyYWJsZSB0byBhIGJ1ZmZlciBvdmVycnVuLCB0cmlnZ2VyZWQgYnkgYW4gb2RkIHZhbHVlIGZvciBgcngtXHUwMDNlcmVtYWluaW5nYCBhbmQgYSBzcGVjaWZpYyBgc2tiLVx1MDAzZWxlbmAuIEZvciBleGFtcGxlLCB3aXRoIGByeC1cdTAwM2VyZW1haW5pbmcgPSAxYCBhbmQgYHNrYi1cdTAwM2VsZW4gPSA1YCwgdGhlIG9yaWdpbmFsIGNoZWNrIHBhc3NlZCBiZWNhdXNlIGAxICsgNCBcdTAwM2M9IDVgLiBIb3dldmVyLCB0aGUgc3Vic2VxdWVudCBgb2Zmc2V0YCBjYWxjdWxhdGlvbiByZXN1bHRlZCBpbiByZWFkaW5nIGZvdXIgYnl0ZXMgZnJvbSBhbiBvZmZzZXQgb2YgMiwgbGVhZGluZyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gYSA1LWJ5dGUgYnVmZmVyLiBUaGlzIGlzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGEgc3VidGxlIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgdGhhdCdzIHJpcGUgZm9yIGV4cGxvaXRhdGlvbi5cblxuU28sIHRoaXMgcGF0Y2ggZml4ZXMgdGhpcyBmbGF3IGJ5IGNvcnJlY3RseSBjYWxjdWxhdGluZyB0aGUgb2Zmc2V0IHRvIHByZXZlbnQgdGhpcyBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBwYXJzaW5nIGluY29taW5nIFVTQiBwYWNrZXQgc3RyZWFtcy5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgZXhwbG9pdGFiaWxpdHkgYW5kIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIFRoaXMgYnVnIGlzIGNlcnRhaW5seSByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGluIGEga2VybmVsIFVTQiBuZXR3b3JraW5nIGRyaXZlciAoQVNJWCBBWDg4eHh4KSwgd2hpY2ggbWFrZXMgaXQgYSB2ZXJ5IGFwcGVhbGluZyB0YXJnZXQuIEl0IGNhbiBiZSBzdGltdWxhdGVkIHZpYSBVU0IgZ2FkZ2V0LCByYXctZ2FkZ2V0LCBvciBldmVuIHBhY2tldCBmdXp6aW5nIHZpYSBzeXprYWxsZXIsIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB0cmlnZ2VyIHRoZSB2dWxuZXJhYmlsaXR5LlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgdHJ1ZS5cblxuTm93IGZvciBGb2N1c1N5bWJvbHM6XG5cbiogICBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgKG5vbi1zdGF0aWMgZnVuY3Rpb24gaW4gYXNpeFxcX2NvbW1vbi5jKVxuKiAgIGBhc2l4X3J4X2ZpeHVwX2NvbW1vbmAgKGluIGFzaXhcXF9jb21tb24uYylcbiogICBgYXg4ODE3MmFfcnhfZml4dXBgIChpbiBheDg4MTcyYS5jKVxuXG5OZXh0IHN0ZXAsIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgY2FsbGVycyBvZiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgb3IgYGFzaXhfcnhfZml4dXBfY29tbW9uYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcxMSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1Njo0Ni4xNjAwNTk2NzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTkxMjc3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXNpeF9yeF9maXh1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeC5oPTE2Mz1zdHJ1Y3QgYXNpeF9kYXRhIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMTcwLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MTcxOnN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8ge1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMTcyLVxcdHN0cnVjdCBza19idWZmICpheF9za2I7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oPTE3OD1zdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTE4My1cXHR1MTYgcHJlc3ZkX3BoeV9ibWNyO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MTg0OlxcdHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gcnhfZml4dXBfaW5mbztcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTE4NS1cXHRzdHJ1Y3QgbWlpX2J1cyAqbWRpbztcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg9MjA2PXZvaWQgYXNpeF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA4LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjA5OmludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIxMDpcXHRcXHRcXHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTE6aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTI6dm9pZCBhc2l4X3J4X2ZpeHVwX2NvbW1vbl9mcmVlKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTMtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz05Mj1zdGF0aWMgaW50IGFzaXhfY2hlY2tfaG9zdF9lbmFibGUoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgaW5fcG0pXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTQtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTE1OnN0YXRpYyB2b2lkIHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeClcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTYte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTExNy1cXHQvKiBSZXNldCB0aGUgdmFyaWFibGVzIHRoYXQgaGF2ZSBhIGxpZmV0aW1lIG91dHNpZGUgb2ZcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxMTg6XFx0ICogYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIHNvIHRoYXQgZnV0dXJlIHByb2Nlc3Npbmcgc3RhcnRzIGZyb20gYVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTExOS1cXHQgKiBrbm93biBzZXQgb2YgaW5pdGlhbCBjb25kaXRpb25zLlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTM1LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjEzNjppbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTM3OlxcdFxcdFxcdCAgIHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzOC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xNTctXFx0XFx0aWYgKHNpemUgIT0gKCh+cngtXFx1MDAzZWhlYWRlciBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweDdmZikpIHtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxNTg6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBEYXRhIEhlYWRlciBzeW5jaHJvbmlzYXRpb24gd2FzIGxvc3QsIHJlbWFpbmluZyAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xNTktXFx0XFx0XFx0XFx0ICAgcngtXFx1MDAzZXJlbWFpbmluZyk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTYwOlxcdFxcdFxcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTYxLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTE4OS1cXHRcXHRcXHRpZiAoc2l6ZSAhPSAoKH5yeC1cXHUwMDNlaGVhZGVyIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4N2ZmKSkge1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjE5MDpcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiYXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIDB4JXgsIG9mZnNldCAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xOTEtXFx0XFx0XFx0XFx0XFx0ICAgcngtXFx1MDAzZWhlYWRlciwgb2Zmc2V0KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxOTI6XFx0XFx0XFx0XFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xOTMtXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xOTUtXFx0XFx0XFx0aWYgKHNpemUgXFx1MDAzZSBkZXYtXFx1MDAzZW5ldC1cXHUwMDNlbXR1ICsgRVRIX0hMRU4gKyBWTEFOX0hMRU4pIHtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxOTY6XFx0XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBCYWQgUlggTGVuZ3RoICVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTE5Ny1cXHRcXHRcXHRcXHRcXHQgICBzaXplKTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxOTg6XFx0XFx0XFx0XFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xOTktXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yMzItXFx0aWYgKHNrYi1cXHUwMDNlbGVuICE9IG9mZnNldCkge1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjIzMzpcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiYXNpeF9yeF9maXh1cCgpIEJhZCBTS0IgTGVuZ3RoICVkLCAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yMzQtXFx0XFx0XFx0ICAgc2tiLVxcdTAwM2VsZW4sIG9mZnNldCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjM1OlxcdFxcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjM2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjQxLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI0MjppbnQgYXNpeF9yeF9maXh1cF9jb21tb24oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0My17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjQ0LVxcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcCA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjQ1OlxcdHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4ID0gXFx1MDAyNmRwLVxcdTAwM2VyeF9maXh1cF9pbmZvO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0Ni1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoyNDc6XFx0cmV0dXJuIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoZGV2LCBza2IsIHJ4KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNDgtfVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0OS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoyNTA6dm9pZCBhc2l4X3J4X2ZpeHVwX2NvbW1vbl9mcmVlKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcClcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNTEte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI1MjpcXHRzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeDtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNTMtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9OTU1PXN0YXRpYyB2b2lkIGF4ODg3NzJfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtOTYzLVxcdGF4ODg3NzJfbWRpb191bnJlZ2lzdGVyKHByaXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo5NjQ6XFx0YXNpeF9yeF9maXh1cF9jb21tb25fZnJlZShkZXYtXFx1MDAzZWRyaXZlcl9wcml2KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtOTY1LVxcdC8qIERyb3AgdGhlIFBNIHVzYWdlIHJlZiB0YWtlbiBpbiBiaW5kKCkgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz05Njk9c3RhdGljIHZvaWQgYXg4ODE3OF91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtOTcwLXtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6OTcxOlxcdGFzaXhfcnhfZml4dXBfY29tbW9uX2ZyZWUoZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTk3Mi1cXHRrZnJlZShkZXYtXFx1MDAzZWRyaXZlcl9wcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0xMzY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODc3Ml9pbmZvID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTEzNzItXFx0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VULFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxMzczOlxcdC5yeF9maXh1cCA9IGFzaXhfcnhfZml4dXBfY29tbW9uLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMzc0LVxcdC50eF9maXh1cCA9IGFzaXhfdHhfZml4dXAsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MTM3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODg3NzJiX2luZm8gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTM4My1cXHQuZmxhZ3MgPSBGTEFHX0VUSEVSIHwgRkxBR19GUkFNSU5HX0FYIHwgRkxBR19NVUxUSV9QQUNLRVQsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEzODQ6XFx0LnJ4X2ZpeHVwID0gYXNpeF9yeF9maXh1cF9jb21tb24sXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTEzODUtXFx0LnR4X2ZpeHVwID0gYXNpeF90eF9maXh1cCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0xMzg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gbHhhdXNiX3QxbF9pbmZvID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTEzOTUtXFx0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VULFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxMzk2OlxcdC5yeF9maXh1cCA9IGFzaXhfcnhfZml4dXBfY29tbW9uLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMzk3LVxcdC50eF9maXh1cCA9IGFzaXhfdHhfZml4dXAsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MTQwMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxNzhfaW5mbyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xNDA5LVxcdFxcdCBGTEFHX01VTFRJX1BBQ0tFVCxcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MTQxMDpcXHQucnhfZml4dXAgPSBhc2l4X3J4X2ZpeHVwX2NvbW1vbixcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTQxMS1cXHQudHhfZml4dXAgPSBhc2l4X3R4X2ZpeHVwLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTE0MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBoZzIwZjlfaW5mbyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xNDI4LVxcdC5mbGFncyA9IEZMQUdfRVRIRVIgfCBGTEFHX0ZSQU1JTkdfQVggfCBGTEFHX01VTFRJX1BBQ0tFVCxcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MTQyOTpcXHQucnhfZml4dXAgPSBhc2l4X3J4X2ZpeHVwX2NvbW1vbixcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTQzMC1cXHQudHhfZml4dXAgPSBhc2l4X3R4X2ZpeHVwLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTE0MzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBseWNvbnN5c19maWJlcmdlY2tvMTAwX2luZm8gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTQ0MS1cXHRcXHQgRkxBR19NVUxUSV9QQUNLRVQsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjE0NDI6XFx0LnJ4X2ZpeHVwID0gYXNpeF9yeF9maXh1cF9jb21tb24sXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTE0NDMtXFx0LnR4X2ZpeHVwID0gYXNpeF90eF9maXh1cCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTE4PXN0cnVjdCBheDg4MTcyYV9wcml2YXRlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTI0LVxcdGludCB1c2VfZW1iZHBoeTtcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzoyNTpcXHRzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvIHJ4X2ZpeHVwX2luZm87XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMjYtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTMzOT1zdGF0aWMgaW50IGF4ODgxNzJhX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTM0MS1cXHRzdHJ1Y3QgYXg4ODE3MmFfcHJpdmF0ZSAqZHAgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjM0MjpcXHRzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeCA9IFxcdTAwMjZkcC1cXHUwMDNlcnhfZml4dXBfaW5mbztcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNDMtXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MzQ0OlxcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzQ1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6NDguNDE5MTkxNDUyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNjc3MjA1NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29uZmlndXJhdGlvbiBzaXR1YXRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBVU0JfTkVUX0FYODgxN1hgLiBUaGF0IG9uZSBpcyBhIGtleSBkcml2ZXIsIGJ1dCBpdCBoYXMgYSBmZXcgbGF5ZXJzLiBJdCByZWxpZXMgb24gYFVTQl9VU0JORVRgLCBgVVNCX05FVF9EUklWRVJTYCwgYW5kIHRoZSBiYXNlIGBVU0JgIGNvbmZpZ3VyYXRpb24sIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGFsbCBvZiB0aG9zZSBhcmUgcHJvcGVybHkgc2V0LCBhbmQgdGhhdCB0aGV5IGFyZSBjb3JyZWN0bHkgZW5hYmxlZCBmb3IgdGhpcyBzY2VuYXJpby5cblxuTm93LCBsZXQncyBzcGVjaWZpY2FsbHkgbG9vayBhdCBgVVNCX1VTQk5FVGAuIFNpbmNlIGBVU0JfTkVUX0FYODgxN1hgIGRlcGVuZHMgb24gaXQsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZW50cnkgZm9yIGl0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiBpdCdzIG5lZWRlZCBpbiB0aGlzIHNwZWNpZmljIGNhc2UuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZmVyZW5jZSB0aGUgS2NvbmZpZzpcblxuYGBga2NvbmZpZ1xuY29uZmlnIFVTQl9ORVRfQVg4ODE3WFxuXHR0cmlzdGF0ZSBcIkFTSVggQVg4OHh4eCBCYXNlZCBVU0IgMi4wIEV0aGVybmV0IEFkYXB0ZXJzXCJcblx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5gYGBcblxuQWxyaWdodCwgdGhlIEtjb25maWcgY29uZmlybXMgdGhlIGRpcmVjdCBkZXBlbmRlbmN5IG9mIGBVU0JfTkVUX0FYODgxN1hgIG9uIGBVU0JfVVNCTkVUYC4gVGhhdCdzIGdvb2QgYW5kIHN0cmFpZ2h0Zm9yd2FyZC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgVVNCX1VTQk5FVGAgaXMgcHJvcGVybHkgc2V0LiBJIGtub3cgdGhhdCwgaW4gbWFueSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGBVU0JfVVNCTkVUYCBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGZyYW1ld29yayBmb3IgVVNCIEV0aGVybmV0IGRldmljZXMuIEkgbmVlZCB0byBub3cgZm9jdXMgb24gY2hlY2tpbmcgdGhhdCBzcGVjaWZpYyBjb25maWcgc2V0dGluZyBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMzMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1Njo1MS41ODY5MTUzNjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzOTk1MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfVVNCTkVUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xMTM9Y29uZmlnIFVTQl9MQU43OFhYXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzEtXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTMyOmNvbmZpZyBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMzLVxcdHRyaXN0YXRlIFxcXCJNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6NTEuNjgwOTE1NjM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNzY0MDY0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFVTQl9VU0JORVQgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB0aG9yb3VnaGx5IGFzc2VzcyB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBgVVNCX1VTQk5FVGAgY29tcG9uZW50LiBJJ20gdGhpbmtpbmcsIHRoaXMgaXNuJ3QganVzdCBhIHNpbXBsZSBtb2R1bGU7IGl0J3MgYSBuZXR3b3JrLXJlbGF0ZWQgc3Vic3lzdGVtLCBzbyBpdCBsaWtlbHkgcmVsaWVzIG9uIGEgZmV3IGtleSBidWlsZGluZyBibG9ja3MuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGNhdGVnb3JpemUgdGhlc2UgZGVwZW5kZW5jaWVzIGludG8gc2V2ZXJhbCB0eXBlczpcblxuKiAgICoqSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIgKEhBTCk6KiogT2J2aW91c2x5LCBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGhhcmR3YXJlIGludGVyZmFjZXMgaXQgaW50ZXJhY3RzIHdpdGgg4oCTIHRoZSBVU0IgY29udHJvbGxlciBpdHNlbGYsIG9mIGNvdXJzZSwgYnV0IGFsc28gcG90ZW50aWFsIFBIWSBjb21wb25lbnRzLCBhbnkgRE1BIGVuZ2luZXMgaW52b2x2ZWQsIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcgbWVjaGFuaXNtcy4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIHJlZ2lzdGVyIGRlZmluaXRpb25zIGFuZCBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGVzZSBwZXJpcGhlcmFscy4gVGhlIGhhcmR3YXJlIGlzIGFsd2F5cyB0aGUgc3RhcnRpbmcgcG9pbnQuXG5cbiogICAqKlVTQiBTdGFjayBMYXllcjoqKiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHBpZWNlcyBvZiB0aGUgVVNCIHN0YWNrIGBVU0JfVVNCTkVUYCBsZXZlcmFnZXMuIElzIGl0IGEgZnVsbCBVU0Igc3RhY2ssIG9yIGEgc3RyaXBwZWQtZG93biB2ZXJzaW9uLCBwZXJoYXBzIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uPyBBcmUgdGhlcmUgc3BlY2lmaWMgY2xhc3MgZHJpdmVycyAoQ0RDLUVDTSwgUk5ESVMsIGV0Yy4pIGludm9sdmVkIGFuZCBob3cgYXJlIHRoZXkgaW50ZWdyYXRlZD8gSG93IGRvZXMgaXQgaGFuZGxlIGVudW1lcmF0aW9uLCBlbmRwb2ludCBtYW5hZ2VtZW50LCBhbmQgZGF0YSB0cmFuc2Zlcj9cblxuKiAgICoqTmV0d29yayBTdGFjayBJbnRlZ3JhdGlvbjoqKiBUaGlzIGlzIGtleS4gSG93IGlzIHRoaXMgbW9kdWxlIGhvb2tlZCBpbnRvIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2s/IElzIGl0IHVzaW5nIGEgc3RhbmRhcmQgbmV0d29yayBpbnRlcmZhY2UgZHJpdmVyIChlLmcuLCBORElTLCBhIFRVTi9UQVAtbGlrZSBpbnRlcmZhY2UsIG9yIHNvbWV0aGluZyBwcm9wcmlldGFyeSk/IFdoYXQgYXJlIHRoZSBkYXRhIHBhdGggY29uc2lkZXJhdGlvbnM/IElzIGl0IG9wdGltaXplZCBmb3IgbG93IGxhdGVuY3kgYW5kIGhpZ2ggdGhyb3VnaHB1dCwgb3IgaXMgaXQgZGVzaWduZWQgd2l0aCBvdGhlciB0cmFkZS1vZmZzIGluIG1pbmQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBuZXR3b3JrIHByb3RvY29sIGl0IGhhbmRsZXM/XG5cbiogICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIEdpdmVuIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgbGFyZ2UgZGF0YSB0cmFuc2ZlcnMsIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBETUEgYnVmZmVyIG1hbmFnZW1lbnQgYXJlIGNyaXRpY2FsbHkgaW1wb3J0YW50LiBXaGF0IG1lbW9yeSBwb29scyBvciBhbGxvY2F0b3JzIGFyZSBiZWluZyB1c2VkPyBIb3cgYXJlIHRoZXkgY29uZmlndXJlZCB0byBhdm9pZCBmcmFnbWVudGF0aW9uIGFuZCBlbnN1cmUgZWZmaWNpZW50IHJlc291cmNlIHV0aWxpemF0aW9uP1xuXG4qICAgKipDb25jdXJyZW5jeSBcdTAwMjYgVGhyZWFkaW5nOioqIEknbGwgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSB0aHJlYWRpbmcgbW9kZWwgZW1wbG95ZWQgYnkgYFVTQl9VU0JORVRgIOKAkyBpcyBpdCBpbnRlcnJ1cHQtZHJpdmVuLCB1c2luZyB0YXNrcywgb3IgYm90aD8gSG93IGFyZSBjcml0aWNhbCBzZWN0aW9ucyBhbmQgc2hhcmVkIHJlc291cmNlcyBwcm90ZWN0ZWQgZnJvbSByYWNlIGNvbmRpdGlvbnM/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgbG9ja2luZyBhbmQgaW50ZXJydXB0LW1hc2tpbmcgY2hhbGxlbmdlcyBpbiBhIHJlYWwtdGltZSBlbnZpcm9ubWVudD9cblxuKiAgICoqQ29uZmlndXJhdGlvbiBcdTAwMjYgQnVpbGQtVGltZSBPcHRpb25zOioqIEZpbmFsbHksIEkgbmVlZCB0byBtYXAgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHdoaWNoIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYW55IHJlYWwgYW5hbHlzaXMuIFdoYXQgY29tcGlsZS10aW1lIGZsYWdzIGFmZmVjdCB0aGUgYmVoYXZpb3IgYW5kIGZlYXR1cmVzIG9mIHRoZSBtb2R1bGU/IFdoYXQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGNvbnRyb2wgaXRzIG9wZXJhdGlvbmFsIGNoYXJhY3RlcmlzdGljcz9cblxuTXkgZ2VuZXJhbCBwcm9jZXNzIHdpbGwgYmUgdG8gZXhwbG9yZSB0aGVzZSBkZXBlbmRlbmNpZXM6IHRoZSBoZWFkZXIgZmlsZXMsIGNvbmZpZ3VyYXRpb24gc2NyaXB0cywgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgdG8gZm9ybSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MDEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1Njo1NS44NTczMjQ3NDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsYW43OHh4LlxcbiAxMzE6XFx0XFxuIDEzMjpcXHRjb25maWcgVVNCX1VTQk5FVFxcbiAxMzM6XFx0XFx0dHJpc3RhdGUgXFxcIk11bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXFxcIlxcbiAxMzQ6XFx0XFx0c2VsZWN0IE1JSVxcbiAxMzU6XFx0XFx0aGVscFxcbiAxMzY6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBzZXZlcmFsIGtpbmRzIG9mIG5ldHdvcmsgbGlua3Mgb3ZlciBVU0IsXFxuIDEzNzpcXHRcXHQgIHdpdGggXFxcIm1pbmlkcml2ZXJzXFxcIiBidWlsdCBhcm91bmQgYSBjb21tb24gbmV0d29yayBkcml2ZXIgY29yZVxcbiAxMzg6XFx0XFx0ICB0aGF0IHN1cHBvcnRzIGRlZXAgcXVldWVzIGZvciBlZmZpY2llbnQgdHJhbnNmZXJzLiAgKFRoaXMgZ2l2ZXNcXG4gMTM5OlxcdFxcdCAgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggc21hbGwgcGFja2V0cyBhbmQgYXQgaGlnaCBzcGVlZHMpLlxcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHQgIFRoZSBVU0IgaG9zdCBydW5zIFxcXCJ1c2JuZXRcXFwiLCBhbmQgdGhlIG90aGVyIGVuZCBvZiB0aGUgbGluayBtaWdodCBiZTpcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0ICAtIEFub3RoZXIgVVNCIGhvc3QsIHdoZW4gdXNpbmcgVVNCIFxcXCJuZXR3b3JrXFxcIiBvciBcXFwiZGF0YSB0cmFuc2ZlclxcXCJcXG4gMTQ0OlxcdFxcdCAgICBjYWJsZXMuICBUaGVzZSBhcmUgb2Z0ZW4gdXNlZCB0byBuZXR3b3JrIGxhcHRvcHMgdG8gUENzLCBsaWtlXFxuIDE0NTpcXHRcXHQgICAgXFxcIkxhcGxpbmtcXFwiIHBhcmFsbGVsIGNhYmxlcyBvciBzb21lIG1vdGhlcmJvYXJkcy4gIFRoZXNlIHJlbHlcXG4gMTQ2OlxcdFxcdCAgICBvbiBzcGVjaWFsaXplZCBjaGlwcyBmcm9tIG1hbnkgc3VwcGxpZXJzLlxcbiAxNDc6XFx0XFxuIDE0ODpcXHRcXHQgIC0gQW4gaW50ZWxsaWdlbnQgVVNCIGdhZGdldCwgcGVyaGFwcyBlbWJlZGRpbmcgYSBMaW51eCBzeXN0ZW0uXFxuIDE0OTpcXHRcXHQgICAgVGhlc2UgaW5jbHVkZSBQREFzIHJ1bm5pbmcgTGludXggKGlQYXEsIFlvcHksIFphdXJ1cywgYW5kXFxuIDE1MDpcXHRcXHQgICAgb3RoZXJzKSwgYW5kIGRldmljZXMgdGhhdCBpbnRlcm9wZXJhdGUgdXNpbmcgdGhlIHN0YW5kYXJkXFxuIDE1MTpcXHRcXHQgICAgQ0RDLUV0aGVybmV0IHNwZWNpZmljYXRpb24gKGluY2x1ZGluZyBtYW55IGNhYmxlIG1vZGVtcykuXFxuIDE1MjpcXHRcXG4gMTUzOlxcdFxcdCAgLSBOZXR3b3JrIGFkYXB0ZXIgaGFyZHdhcmUgKGxpa2UgdGhvc2UgZm9yIDEwLzEwMCBFdGhlcm5ldCkgd2hpY2hcXG4gMTU0OlxcdFxcdCAgICB1c2VzIHRoaXMgZHJpdmVyIGZyYW1ld29yay5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6NTUuODU3NDQ1MjEzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5OTMyMjcyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDaGVja2luZyBVU0IgTmV0d29yayBEcml2ZXJzKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJMZXQncyBjaGVjayBgVVNCX05FVF9EUklWRVJTYC5cIiBJIGtub3cgdGhpcyBpcyB0aGUgY3J1Y2lhbCBzdGFydGluZyBwb2ludCBmb3IgYW55IFVTQiBuZXR3b3JraW5nIGludmVzdGlnYXRpb24uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHRoZSBnYXRla2VlcGVyOyBpdCBkaWN0YXRlcyB3aGV0aGVyIHRoZSBrZXJuZWwgZXZlbiAqY29uc2lkZXJzKiB0aGUgcG9zc2liaWxpdHkgb2YgdXRpbGl6aW5nIFVTQiBmb3IgbmV0d29yayBjb25uZWN0aXZpdHkuIFNvLCBJIG5lZWQgdG8gY29uZmlybSBpdHMgY3VycmVudCBzdGF0ZSDigJMgaXMgaXQgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIHNldCBhcyBhIG1vZHVsZT8gVGhlIGFuc3dlciBoZXJlIHdpbGwgaW1tZWRpYXRlbHkgbmFycm93IHRoZSBzY29wZSBvZiB0aGUgcHJvYmxlbS4gSWYgaXQncyBkaXNhYmxlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50IGluIGZ1cnRoZXIgZXhwbG9yYXRpb24gZG93biB0aGlzIHJhYmJpdCBob2xlIHVudGlsIHRoZSBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3RlZC4gSWYgaXTigJlzIGEgbW9kdWxlLCBJJ2xsIGNoZWNrIGl0cyBsb2FkaW5nIHN0YXR1cyBhbmQgYW55IGFzc29jaWF0ZWQgZXJyb3IgbWVzc2FnZXMuIElmIGl0J3MgYnVpbHQtaW4sIHRoZW4gdGhlIGhhcmR3YXJlIGlzc3VlcyBhcmUgdGhlIGltbWVkaWF0ZSBjb25jZXJuLiBGdXJ0aGVybW9yZSwgSSB3aWxsIGNoZWNrIHdoYXQgc3BlY2lmaWMgZHJpdmVycyBhcmUgYXZhaWxhYmxlIGFuZCBlbmFibGVkLCBrbm93aW5nIHRoYXQgc3VwcG9ydCBmb3IgdmFyaW91cyBVU0IgbmV0d29yayBhZGFwdGVycyBjYW4gYmUgZnJhZ21lbnRlZCwgYW5kIHRoYXQgdGhlIGFwcHJvcHJpYXRlIGRyaXZlciBtdXN0IGJlIHNlbGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkzNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6NTguODUwNjc1NDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4OTIwMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz01PWNvbW1lbnQgXFxcIkhvc3Qtc2lkZSBVU0Igc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTctXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6ODptZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTktXFx0dHJpc3RhdGUgXFxcIlVTQiBOZXR3b3JrIEFkYXB0ZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1Njo1OC45Mjk1OTkyNzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0NzE0MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipLY29uZmlnIEluc3BlY3Rpb246IFVTQiBOZXR3b3JraW5nIERyaXZlciBPcHRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgVVNCIG5ldHdvcmtpbmcgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gbGluZXMgMSB0aHJvdWdoIDI1IG9mIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBwbGFjZSB0byBiZWdpbiwgc2luY2UgS2NvbmZpZyBmaWxlcyB0eXBpY2FsbHkgc3RydWN0dXJlIHRoZWlyIG9wdGlvbnMgaW4gYSBsb2dpY2FsIG1hbm5lciwgYW5kIHRoYXQgaW5pdGlhbCBzZWN0aW9uIG9mdGVuIGNvdmVycyB0aGUgb3ZlcmFsbCBkcml2ZXIgbW9kdWxlIG9yIGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiB0aGUgYXZhaWxhYmxlIGNob2ljZXMuXG5cbkknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjb3JlIG1vZHVsZSBkZWZpbml0aW9uIGluIHRoYXQgcmFuZ2UsIGFuZCBob3BlZnVsbHkgc29tZSBiYXNpYyBkZXBlbmRlbmNpZXMuIEl0IGNvdWxkIG91dGxpbmUgdGhlIGVzc2VudGlhbCBjb21wb25lbnRzIHRoYXQgZ2V0IGxvYWRlZCwgYW5kIHBlcmhhcHMgc29tZSBkZWZhdWx0IHN0YXRlcyBmb3IgdGhlIGRldmljZSBvcHRpb25zLiBIb3BlZnVsbHkgaXQncyB3ZWxsLWNvbW1lbnRlZCwgYXMgaXMgdXN1YWxseSB0aGUgc3RhbmRhcmQgd2l0aGluIHRoZSBrZXJuZWwuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIGRyaXZlciBuYW1lLCBhIGdlbmVyYWwgZGVzY3JpcHRpb24sIGFuZCBwZXJoYXBzIHRoZSBpbml0aWFsIGBzZWxlY3RgIHN0YXRlbWVudHMgdGhhdCBwdWxsIGluIGFueSBjb3JlIFVTQiBvciBuZXR3b3JraW5nIHByZXJlcXVpc2l0ZXMuIElmIGl0J3MgYSB3ZWxsLW9yZ2FuaXplZCBmaWxlLCB0aGlzIHNlY3Rpb24gc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCBhIHNvbGlkIGZvdW5kYXRpb24gYmVmb3JlIEkgZGVsdmUgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljcyBvZiBpbmRpdmlkdWFsIGRldmljZSBzdXBwb3J0IG9yIGFkdmFuY2VkIGZlYXR1cmVzLiBJIGhvcGUgaXQgY2xlYXJseSBvdXRsaW5lcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMxMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU3OjAxLjM3Njc0MzkyNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb21tZW50IFxcXCJIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcXFwiXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uICFVU0IgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAgNzpcXHRcXG4gICA4OlxcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXFxuICAgOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIE5ldHdvcmsgQWRhcHRlcnNcXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IFVTQiBpZiBVU0JcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBVU0JfTkVUX0RSSVZFUlNcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFVTQl9DQVRDXFxuICAxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDE3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxcbiAgMjA6XFx0XFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxcbiAgMjE6XFx0XFx0ICBCZWxraW4gRjVVMDExXFxuICAyMjpcXHRcXHQgIEJlbGtpbiBGNVUxMTFcXG4gIDIzOlxcdFxcdCAgQ0FUQyBOZXRNYXRlXFxuICAyNDpcXHRcXHQgIENBVEMgTmV0TWF0ZSBJSVxcbiAgMjU6XFx0XFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTc6MDEuMzc2ODg3Njc1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzMzEwNjAyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEFTSVggQVg4OHh4eCBVU0IgTmV0d29yayBBZGFwdGVyIERyaXZlciBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZW5hYmxlIGEgZmV3IGNvbmZpZ3VyYXRpb25zOiBgVVNCX05FVF9BWDg4MTdYYCwgYFVTQl9VU0JORVRgLCBgVVNCX05FVF9EUklWRVJTYCwgYW5kLCBvZiBjb3Vyc2UsIGBVU0JgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5Ob3csIGxldCdzIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9scyBhbmQgZmlsZXMuIFdlJ3JlIGxvb2tpbmcgYXQ6IGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCwgd2hpY2ggaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgd2FzIGFsdGVyZWQ7IGBhc2l4X3J4X2ZpeHVwX2NvbW1vbmAsIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGZpeHVwIHJvdXRpbmU7IGFuZCBgYXg4ODE3MmFfcnhfZml4dXBgLCBhbHNvIGFuIGVudHJ5IHBvaW50IHRvIHRoZSBmaXh1cCByb3V0aW5lLlxuXG5MZXQncyBkbyBhIHF1aWNrIGdpdCBkaWZmIHJldmlldyBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29tbWl0ICpvbmx5KiBtb2RpZmllcyBgZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNgIHdpdGhpbiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAuIEdvb2QsIHRoYXQncyBjbGVhbiBhbmQgZm9jdXNlZC5cblxuTm93LCB0byBzdW1tYXJpemUgbXkgcmVhc29uaW5nIGNvbmNpc2VseTogdGhlIGZpeCBpcyBpbiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpYCB3aXRoaW4gYGRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jYCwgYW5kIGl0J3MgYWxsIGFib3V0IHBhcnNpbmcgVVNCIHBhY2tldHMgZm9yIEFTSVggQVg4OHh4eCBuZXR3b3JrIGFkYXB0ZXJzLiBJdCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgYm91bmRzLWNoZWNraW5nIHZ1bG5lcmFiaWxpdHkgaW4gYSBjYWxjdWxhdGlvbiB3aGVuIGRlYWxpbmcgd2l0aCBtdWx0aS1VUkIgZnJhbWVzLiBXaGVuIGByeC1cdTAwM2VyZW1haW5pbmdgIGlzIG9kZCwgdGhpcyBjb2RlIHdhcyBwcm9uZSB0byBvdXQtb2YtYm91bmRzIGhlYWRlciByZWFkcy4gVGhlIHZ1bG5lcmFiaWxpdHkgY291bGQgZXhpc3QgaW4gdmlydHVhbGl6ZWQvZW11bGF0ZWQgZW52aXJvbm1lbnRzIChlLmcuLCBzeXprYWxsZXIgVVNCIHJhdy1nYWRnZXQgLyBuZXRkZXYgZnV6emluZykgd2hpY2ggbWVhbnMgdGhpcyBzaG91bGQgYmUgZnV6eiB0ZXN0ZWQuXG5cblRoZSBrZXkgY29uZmlncyByZW1haW46IGBVU0JfTkVUX0FYODgxN1hgLCBgVVNCX1VTQk5FVGAsIGBVU0JfTkVUX0RSSVZFUlNgLCBgVVNCYC5cblxuQW5kIHRoZSBmb2N1c2VkIHN5bWJvbHM6IGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCwgYGFzaXhfcnhfZml4dXBfY29tbW9uYCwgYW5kIGBheDg4MTcyYV9yeF9maXh1cGAuXG5cbkZpbmFsbHksIEknbGwgZG91YmxlLWNoZWNrIG15IHRvb2wgY2FsbCBwYXJhbWV0ZXJzIGFuZCBmb3JtYXR0aW5nLiBUaGlzIGxvb2tzIHNvbGlkOyByZWFkeSB0byBwcm9jZWVkIHdpdGggdGhlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk1MCwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1NzowNi43MDc5NTAwNzhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDkxMzExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9BWDg4MTdYXCIsXG4gICAgXCJVU0JfVVNCTkVUXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFzaXhfcnhfZml4dXBfaW50ZXJuYWxcIixcbiAgICBcImFzaXhfcnhfZml4dXBfY29tbW9uXCIsXG4gICAgXCJheDg4MTcyYV9yeF9maXh1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBoZWFkZXIgYm91bmRzIGNoZWNraW5nIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSB0byBhY2NvdW50IGZvciAyLWJ5dGUgYWxpZ25tZW50IHdoZW4gY2hlY2tpbmcgcmVtYWluaW5nIHBhY2tldCBidWZmZXIgbGVuZ3RoLiBUaGlzIGNvZGUgcnVucyBpbiB0aGUgQVNJWCBVU0IgZXRoZXJuZXQgZHJpdmVyJ3MgUlggcGF0aCBhbmQgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZW11bGF0aW9uL2Z1enppbmcgKGUuZy4sIFVTQiByYXctZ2FkZ2V0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfTkVUX0FYODgxN1hcIixcbiAgICBcIlVTQl9VU0JORVRcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXNpeF9yeF9maXh1cF9pbnRlcm5hbFwiLFxuICAgIFwiYXNpeF9yeF9maXh1cF9jb21tb25cIixcbiAgICBcImF4ODgxNzJhX3J4X2ZpeHVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IGhlYWRlciBib3VuZHMgY2hlY2tpbmcgaW4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIHRvIGFjY291bnQgZm9yIDItYnl0ZSBhbGlnbm1lbnQgd2hlbiBjaGVja2luZyByZW1haW5pbmcgcGFja2V0IGJ1ZmZlciBsZW5ndGguIFRoaXMgY29kZSBydW5zIGluIHRoZSBBU0lYIFVTQiBldGhlcm5ldCBkcml2ZXIncyBSWCBwYXRoIGFuZCBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24vZnV6emluZyAoZS5nLiwgVVNCIHJhdy1nYWRnZXQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1NzowNi43ODI4NzAxMzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODY1MjcwMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTc6MDYuNzgzMzk1NDE5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk4NjQ3NDEzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIDItYnl0ZSBhbGlnbm1lbnQgd2hlbiBjaGVja2luZyBpZiB0aGUgc29ja2V0IGJ1ZmZlciBoYXMgZW5vdWdoIHJlbWFpbmluZyBieXRlcyBmb3IgdGhlIDMyLWJpdCBoZWFkZXIgcmVhZCAoYCgocngtXFx1MDAzZXJlbWFpbmluZyArIDEpIFxcdTAwMjYgMHhmZmZlKSArIHNpemVvZih1MzIpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuYCkuXFxuXFxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIChPT0IpIG1lbW9yeSByZWFkIG9uIHNrYi1cXHUwMDNlZGF0YSwgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWY1MDMwNjJjZTdjNzA0Mzc2NzJhMzk1MTE0NmVmYzdhMWRiNzc5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTE6NTY6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG5pbmRleCA0ZjAzZjRlNTc2NTVkLi5jNTA2NDZlYTM1YzdlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG5AQCAtMTQ4LDcgKzE0OCw3IEBAIGludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAqIEFsc28gYXZvaWQgdW5uZWNlc3NhcmlseSBkaXNjYXJkaW5nIGEgZ29vZCBjdXJyZW50IG5ldGRldiBzb2NrZXRcbiBcdCAqIGJ1ZmZlci5cbiBcdCAqL1xuLVx0aWYgKHJ4LVx1MDAzZXJlbWFpbmluZyBcdTAwMjZcdTAwMjYgKHJ4LVx1MDAzZXJlbWFpbmluZyArIHNpemVvZih1MzIpIFx1MDAzYz0gc2tiLVx1MDAzZWxlbikpIHtcbitcdGlmIChyeC1cdTAwM2VyZW1haW5pbmcgXHUwMDI2XHUwMDI2ICgoKHJ4LVx1MDAzZXJlbWFpbmluZyArIDEpIFx1MDAyNiAweGZmZmUpICsgc2l6ZW9mKHUzMikgXHUwMDNjPSBza2ItXHUwMDNlbGVuKSkge1xuIFx0XHRvZmZzZXQgPSAoKHJ4LVx1MDAzZXJlbWFpbmluZyArIDEpIFx1MDAyNiAweGZmZmUpO1xuIFx0XHRyeC1cdTAwM2VoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLVx1MDAzZWRhdGEgKyBvZmZzZXQpO1xuIFx0XHRvZmZzZXQgPSAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTc6MDYuNzgzMzk2MzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTU3MzU4MTY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gLSBhc2l4X2NvbW1vbi5jKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSByZXF1ZXN0IGlzIHRvIGRldGVybWluZSBpZiBhIHNwZWNpZmljIHBhdGNoIHdpdGhpbiBgZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNgIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEkgbmVlZCB0byBtYWtlIGEganVkZ21lbnQgY2FsbCBoZXJlLCBjb25zaWRlcmluZyB0aGlzIGZhbGxzIHVuZGVyIGRlZmVuc2l2ZSBzZWN1cml0eSBhbmQga2VybmVsIHNhbml0aXplciBhbmFseXNpcywgc3BlY2lmaWNhbGx5IGZvciBzeXprYWxsZXIvZnV6emluZyBwdXJwb3Nlcy4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQgLSBpdCdzIGEgbG93LXNldmVyaXR5IGNvZGUgcmV2aWV3IGZvciBzYW5pdGl6ZXIgc2VsZWN0aW9uLCBubyByZWQgZmxhZ3MgYWJvdXQgb2ZmZW5zaXZlIGFjdGlvbnMuXG5cbkZpcnN0IHN0ZXAsIEknbGwgcHVsbCB1cCB0aGUgY29kZSB1c2luZyBgcmVhZC1maWxlYCB0byBnZXQgYSBnb29kIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgcGF0Y2ggaXMgYWx0ZXJpbmcuIFdoYXQncyB0aGUgY2hhbmdlIGludHJvZHVjaW5nPyBEYXRhIHN0cnVjdHVyZXMsIG5ldyBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9uYWwgbG9naWM/IFRoYXQncyB3aGVyZSB0aGUgcmVhbCBldmFsdWF0aW9uIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU3OjE2LjM1Njk4MDk0NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcdCAqL1xcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHRpZiAocngtXFx1MDAzZWF4X3NrYikge1xcbiAxMjM6XFx0XFx0XFx0LyogRGlzY2FyZCBhbnkgaW5jb21wbGV0ZSBFdGhlcm5ldCBmcmFtZSBpbiB0aGUgbmV0ZGV2IGJ1ZmZlciAqL1xcbiAxMjQ6XFx0XFx0XFx0a2ZyZWVfc2tiKHJ4LVxcdTAwM2VheF9za2IpO1xcbiAxMjU6XFx0XFx0XFx0cngtXFx1MDAzZWF4X3NrYiA9IE5VTEw7XFxuIDEyNjpcXHRcXHR9XFxuIDEyNzpcXHRcXG4gMTI4OlxcdFxcdC8qIEFzc3VtZSB0aGUgRGF0YSBoZWFkZXIgMzItYml0IHdvcmQgaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50XFxuIDEyOTpcXHRcXHQgKiBvciBuZXh0IFVSQiBzb2NrZXQgYnVmZmVyIHNvIHJlc2V0IGFsbCB0aGUgc3RhdGUgdmFyaWFibGVzLlxcbiAxMzA6XFx0XFx0ICovXFxuIDEzMTpcXHRcXHRyeC1cXHUwMDNlcmVtYWluaW5nID0gMDtcXG4gMTMyOlxcdFxcdHJ4LVxcdTAwM2VzcGxpdF9oZWFkID0gZmFsc2U7XFxuIDEzMzpcXHRcXHRyeC1cXHUwMDNlaGVhZGVyID0gMDtcXG4gMTM0OlxcdH1cXG4gMTM1OlxcdFxcbiAxMzY6XFx0aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAxMzc6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXFxuIDEzODpcXHR7XFxuIDEzOTpcXHRcXHRpbnQgb2Zmc2V0ID0gMDtcXG4gMTQwOlxcdFxcdHUxNiBzaXplO1xcbiAxNDE6XFx0XFxuIDE0MjpcXHRcXHQvKiBXaGVuIGFuIEV0aGVybmV0IGZyYW1lIHNwYW5zIG11bHRpcGxlIFVSQiBzb2NrZXQgYnVmZmVycyxcXG4gMTQzOlxcdFxcdCAqIGRvIGEgc2FuaXR5IHRlc3QgZm9yIHRoZSBEYXRhIGhlYWRlciBzeW5jaHJvbmlzYXRpb24uXFxuIDE0NDpcXHRcXHQgKiBBdHRlbXB0IHRvIGRldGVjdCB0aGUgc2l0dWF0aW9uIG9mIHRoZSBwcmV2aW91cyBzb2NrZXQgYnVmZmVyIGhhdmluZ1xcbiAxNDU6XFx0XFx0ICogYmVlbiB0cnVuY2F0ZWQgb3IgYSBzb2NrZXQgYnVmZmVyIHdhcyBtaXNzaW5nLiBUaGVzZSBzaXR1YXRpb25zXFxuIDE0NjpcXHRcXHQgKiBjYXVzZSBhIGRpc2NvbnRpbnVpdHkgaW4gdGhlIGRhdGEgc3RyZWFtIGFuZCB0aGVyZWZvcmUgbmVlZCB0byBhdm9pZFxcbiAxNDc6XFx0XFx0ICogYXBwZW5kaW5nIGJhZCBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbmV0ZGV2IHNvY2tldCBidWZmZXIuXFxuIDE0ODpcXHRcXHQgKiBBbHNvIGF2b2lkIHVubmVjZXNzYXJpbHkgZGlzY2FyZGluZyBhIGdvb2QgY3VycmVudCBuZXRkZXYgc29ja2V0XFxuIDE0OTpcXHRcXHQgKiBidWZmZXIuXFxuIDE1MDpcXHRcXHQgKi9cXG4gMTUxOlxcdFxcdGlmIChyeC1cXHUwMDNlcmVtYWluaW5nIFxcdTAwMjZcXHUwMDI2ICgoKHJ4LVxcdTAwM2VyZW1haW5pbmcgKyAxKSBcXHUwMDI2IDB4ZmZmZSkgKyBzaXplb2YodTMyKSBcXHUwMDNjPSBza2ItXFx1MDAzZWxlbikpIHtcXG4gMTUyOlxcdFxcdFxcdG9mZnNldCA9ICgocngtXFx1MDAzZXJlbWFpbmluZyArIDEpIFxcdTAwMjYgMHhmZmZlKTtcXG4gMTUzOlxcdFxcdFxcdHJ4LVxcdTAwM2VoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KTtcXG4gMTU0OlxcdFxcdFxcdG9mZnNldCA9IDA7XFxuIDE1NTpcXHRcXG4gMTU2OlxcdFxcdFxcdHNpemUgPSAodTE2KShyeC1cXHUwMDNlaGVhZGVyIFxcdTAwMjYgMHg3ZmYpO1xcbiAxNTc6XFx0XFx0XFx0aWYgKHNpemUgIT0gKCh+cngtXFx1MDAzZWhlYWRlciBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweDdmZikpIHtcXG4gMTU4OlxcdFxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LVxcdTAwM2VuZXQsIFxcXCJhc2l4X3J4X2ZpeHVwKCkgRGF0YSBIZWFkZXIgc3luY2hyb25pc2F0aW9uIHdhcyBsb3N0LCByZW1haW5pbmcgJWRcXFxcblxcXCIsXFxuIDE1OTpcXHRcXHRcXHRcXHRcXHQgICByeC1cXHUwMDNlcmVtYWluaW5nKTtcXG4gMTYwOlxcdFxcdFxcdFxcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XFxuIDE2MTpcXHRcXHRcXHR9XFxuIDE2MjpcXHRcXHR9XFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdHdoaWxlIChvZmZzZXQgKyBzaXplb2YodTE2KSBcXHUwMDNjPSBza2ItXFx1MDAzZWxlbikge1xcbiAxNjU6XFx0XFx0XFx0dTE2IGNvcHlfbGVuZ3RoO1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRcXHRpZiAoIXJ4LVxcdTAwM2VyZW1haW5pbmcpIHtcXG4gMTY4OlxcdFxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiAtIG9mZnNldCA9PSBzaXplb2YodTE2KSkge1xcbiAxNjk6XFx0XFx0XFx0XFx0XFx0cngtXFx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUxNihcXG4gMTcwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlZGF0YSArIG9mZnNldCk7XFxuIDE3MTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlc3BsaXRfaGVhZCA9IHRydWU7XFxuIDE3MjpcXHRcXHRcXHRcXHRcXHRvZmZzZXQgKz0gc2l6ZW9mKHUxNik7XFxuIDE3MzpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMTc0OlxcdFxcdFxcdFxcdH1cXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0XFx0XFx0aWYgKHJ4LVxcdTAwM2VzcGxpdF9oZWFkID09IHRydWUpIHtcXG4gMTc3OlxcdFxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VoZWFkZXIgfD0gKGdldF91bmFsaWduZWRfbGUxNihcXG4gMTc4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlZGF0YSArIG9mZnNldCkgXFx1MDAzY1xcdTAwM2MgMTYpO1xcbiAxNzk6XFx0XFx0XFx0XFx0XFx0cngtXFx1MDAzZXNwbGl0X2hlYWQgPSBmYWxzZTtcXG4gMTgwOlxcdFxcdFxcdFxcdFxcdG9mZnNldCArPSBzaXplb2YodTE2KTtcXG4gMTgxOlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuIDE4MjpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cXHUwMDNlZGF0YSArXFxuIDE4MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRvZmZzZXQpO1xcbiAxODQ6XFx0XFx0XFx0XFx0XFx0b2Zmc2V0ICs9IHNpemVvZih1MzIpO1xcbiAxODU6XFx0XFx0XFx0XFx0fVxcbiAxODY6XFx0XFxuIDE4NzpcXHRcXHRcXHRcXHQvKiB0YWtlIGZyYW1lIGxlbmd0aCBmcm9tIERhdGEgaGVhZGVyIDMyLWJpdCB3b3JkICovXFxuIDE4ODpcXHRcXHRcXHRcXHRzaXplID0gKHUxNikocngtXFx1MDAzZWhlYWRlciBcXHUwMDI2IDB4N2ZmKTtcXG4gMTg5OlxcdFxcdFxcdFxcdGlmIChzaXplICE9ICgofnJ4LVxcdTAwM2VoZWFkZXIgXFx1MDAzZVxcdTAwM2UgMTYpIFxcdTAwMjYgMHg3ZmYpKSB7XFxuIDE5MDpcXHRcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiYXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIDB4JXgsIG9mZnNldCAlZFxcXFxuXFxcIixcXG4gMTkxOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHJ4LVxcdTAwM2VoZWFkZXIsIG9mZnNldCk7XFxuIDE5MjpcXHRcXHRcXHRcXHRcXHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xcbiAxOTM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE5NDpcXHRcXHRcXHRcXHR9XFxuIDE5NTpcXHRcXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIGRldi1cXHUwMDNlbmV0LVxcdTAwM2VtdHUgKyBFVEhfSExFTiArIFZMQU5fSExFTikge1xcbiAxOTY6XFx0XFx0XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBCYWQgUlggTGVuZ3RoICVkXFxcXG5cXFwiLFxcbiAxOTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2l6ZSk7XFxuIDE5ODpcXHRcXHRcXHRcXHRcXHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xcbiAxOTk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU3OjE2LjM1NzA4NDU2NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjU1MzM0NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIHRhcmdldGVkIHRvd2FyZHMgYW4gZXhwZXJ0LCBzdGFydGluZyB3aXRoIHRoZSBib2xkZWQgaGVhZGVyOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgZnVuY3Rpb24uIEkndmUgZ290IGEgZGVjZW50IGdyYXNwIG9mIHRoZSBvdmVyYWxsIEFTSVggZHJpdmVyIHN0cnVjdHVyZSwgYnV0IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uLi4gaXQncyB0aGUgaGVhcnQgb2YgdGhlIHJlY2VpdmUgcGF0aCdzIGVycm9yIGhhbmRsaW5nIGFuZCBwYWNrZXQgYWRqdXN0bWVudCwgaXNuJ3QgaXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IGNsZWFucyB1cCBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgZHVyaW5nIGhhcmR3YXJlIHJlY2VwdGlvbiBvciBlYXJseSBidWZmZXIgYWxsb2NhdGlvbi4gTXkgZm9jdXMgbm93IGlzIG9uIHRoZSBcInJlc3Qgb2YgaXRcIi5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb21tb24gcGl0ZmFsbHMgaGVyZTogcG90ZW50aWFsIGFsaWdubWVudCBwcm9ibGVtcywgZGVzY3JpcHRvciBjb3JydXB0aW9uLCBtYXliZSBldmVuIGEgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZCBoYXZlIHBvcHBlZCB1cCBnaXZlbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgUlggRE1BIGludGVyYWN0aW9uLiBBcmUgd2UgZGVhbGluZyB3aXRoIGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyB0aGF0IG5lY2Vzc2l0YXRlIHBhY2tldCBzaXplIGFkanVzdG1lbnRzPyBBcmUgdGhleSBoYW5kbGluZyBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIFRDUC9VRFAgY2hlY2tzdW0gb2ZmbG9hZD8gV2hhdCBhYm91dCBqdW1ibyBmcmFtZXMgYW5kIHRoZWlyIGZyYWdtZW50YXRpb24/IFdoYXQgY2hlY2tzIGFyZSBpbiBwbGFjZSB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cz9cblxuU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3I6XG5cbiogICAqKkVycm9yIGRldGVjdGlvbjoqKiBIb3cgYXJlIHRoZXkgaWRlbnRpZnlpbmcgY29ycnVwdGVkIGRhdGEgb3IgYnVmZmVyIGlzc3Vlcz9cbiogICAqKkJ1ZmZlciBtYW5pcHVsYXRpb246KiogSG93IGlzIHRoZSByZWNlaXZlZCBidWZmZXIgYmVpbmcgYWRqdXN0ZWQ/IEFyZSB0aGVyZSBjbGV2ZXIgdHJpY2tzIGZvciByZS1hbGlnbmluZyBkYXRhIG9yIGhhbmRsaW5nIHBhcnRpYWwgcGFja2V0IGZyYWdtZW50cz9cbiogICAqKkRlc2NyaXB0b3IgaW50ZXJhY3Rpb246KiogV2hhdCdzIHRoZSBkYW5jZSBiZXR3ZWVuIHRoZSBkZXNjcmlwdG9ycyBhbmQgdGhpcyBmaXh1cCBmdW5jdGlvbj8gQXJlIHRoZXkgcmUtdXNpbmcgZGVzY3JpcHRvcnMgc2FmZWx5LCBvciBhcmUgdGhlcmUgcG90ZW50aWFsIGhhemFyZHMgdGhlcmU/XG4qICAgKipQZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnM6KiogQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIG9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgSSBjYW4gc3BvdD9cblxuSSdtIGdvaW5nIHRvIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGJpdHdpc2Ugb3BlcmF0aW9ucyBvciBwb2ludGVyIGFyaXRobWV0aWMsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGluZ3MgY2FuIGdldCBoYWlyeSByZWFsIHF1aWNrLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGFueSBhc3N1bXB0aW9ucyBtYWRlIGFib3V0IGhhcmR3YXJlIGJlaGF2aW9yIG9yIHJlZ2lzdGVyIHZhbHVlcy4gQW5kIHRoZW4sIEkgbmVlZCB0byBsb29rIGZvciBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyIG9yIGV2ZW4gdGhlIG5ldHdvcmsgc3RhY2sgaXRzZWxmLlxuXG5MZXQncyBzZWUgdGhlIHJlc3Qgb2YgYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODQ5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1NzoxOS42MTI0MjE4NTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMDpcXHRcXHRcXHRcXHR9XFxuIDIwMTpcXHRcXG4gMjAyOlxcdFxcdFxcdFxcdC8qIFNvbWV0aW1lcyBtYXkgZmFpbCB0byBnZXQgYSBuZXRkZXYgc29ja2V0IGJ1ZmZlciBidXRcXG4gMjAzOlxcdFxcdFxcdFxcdCAqIGNvbnRpbnVlIHRvIHByb2Nlc3MgdGhlIFVSQiBzb2NrZXQgYnVmZmVyIHNvIHRoYXRcXG4gMjA0OlxcdFxcdFxcdFxcdCAqIHN5bmNocm9uaXNhdGlvbiBvZiB0aGUgRXRoZXJuZXQgZnJhbWUgRGF0YSBoZWFkZXJcXG4gMjA1OlxcdFxcdFxcdFxcdCAqIHdvcmQgaXMgbWFpbnRhaW5lZC5cXG4gMjA2OlxcdFxcdFxcdFxcdCAqL1xcbiAyMDc6XFx0XFx0XFx0XFx0cngtXFx1MDAzZWF4X3NrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oZGV2LVxcdTAwM2VuZXQsIHNpemUpO1xcbiAyMDg6XFx0XFxuIDIwOTpcXHRcXHRcXHRcXHRyeC1cXHUwMDNlcmVtYWluaW5nID0gc2l6ZTtcXG4gMjEwOlxcdFxcdFxcdH1cXG4gMjExOlxcdFxcbiAyMTI6XFx0XFx0XFx0aWYgKHJ4LVxcdTAwM2VyZW1haW5pbmcgXFx1MDAzZSBza2ItXFx1MDAzZWxlbiAtIG9mZnNldCkge1xcbiAyMTM6XFx0XFx0XFx0XFx0Y29weV9sZW5ndGggPSBza2ItXFx1MDAzZWxlbiAtIG9mZnNldDtcXG4gMjE0OlxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VyZW1haW5pbmcgLT0gY29weV9sZW5ndGg7XFxuIDIxNTpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMTY6XFx0XFx0XFx0XFx0Y29weV9sZW5ndGggPSByeC1cXHUwMDNlcmVtYWluaW5nO1xcbiAyMTc6XFx0XFx0XFx0XFx0cngtXFx1MDAzZXJlbWFpbmluZyA9IDA7XFxuIDIxODpcXHRcXHRcXHR9XFxuIDIxOTpcXHRcXG4gMjIwOlxcdFxcdFxcdGlmIChyeC1cXHUwMDNlYXhfc2tiKSB7XFxuIDIyMTpcXHRcXHRcXHRcXHRza2JfcHV0X2RhdGEocngtXFx1MDAzZWF4X3NrYiwgc2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0LFxcbiAyMjI6XFx0XFx0XFx0XFx0XFx0ICAgICBjb3B5X2xlbmd0aCk7XFxuIDIyMzpcXHRcXHRcXHRcXHRpZiAoIXJ4LVxcdTAwM2VyZW1haW5pbmcpIHtcXG4gMjI0OlxcdFxcdFxcdFxcdFxcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgcngtXFx1MDAzZWF4X3NrYik7XFxuIDIyNTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlYXhfc2tiID0gTlVMTDtcXG4gMjI2OlxcdFxcdFxcdFxcdH1cXG4gMjI3OlxcdFxcdFxcdH1cXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0XFx0b2Zmc2V0ICs9IChjb3B5X2xlbmd0aCArIDEpIFxcdTAwMjYgMHhmZmZlO1xcbiAyMzA6XFx0XFx0fVxcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gIT0gb2Zmc2V0KSB7XFxuIDIzMzpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiYXNpeF9yeF9maXh1cCgpIEJhZCBTS0IgTGVuZ3RoICVkLCAlZFxcXFxuXFxcIixcXG4gMjM0OlxcdFxcdFxcdFxcdCAgIHNrYi1cXHUwMDNlbGVuLCBvZmZzZXQpO1xcbiAyMzU6XFx0XFx0XFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcXG4gMjM2OlxcdFxcdFxcdHJldHVybiAwO1xcbiAyMzc6XFx0XFx0fVxcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRyZXR1cm4gMTtcXG4gMjQwOlxcdH1cXG4gMjQxOlxcdFxcbiAyNDI6XFx0aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMjQzOlxcdHtcXG4gMjQ0OlxcdFxcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcCA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuIDI0NTpcXHRcXHRzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeCA9IFxcdTAwMjZkcC1cXHUwMDNlcnhfZml4dXBfaW5mbztcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0XFx0cmV0dXJuIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoZGV2LCBza2IsIHJ4KTtcXG4gMjQ4OlxcdH1cXG4gMjQ5OlxcdFxcbiAyNTA6XFx0dm9pZCBhc2l4X3J4X2ZpeHVwX2NvbW1vbl9mcmVlKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcClcXG4gMjUxOlxcdHtcXG4gMjUyOlxcdFxcdHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4O1xcbiAyNTM6XFx0XFxuIDI1NDpcXHRcXHRpZiAoIWRwKVxcbiAyNTU6XFx0XFx0XFx0cmV0dXJuO1xcbiAyNTY6XFx0XFxuIDI1NzpcXHRcXHRyeCA9IFxcdTAwMjZkcC1cXHUwMDNlcnhfZml4dXBfaW5mbztcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0aWYgKHJ4LVxcdTAwM2VheF9za2IpIHtcXG4gMjYwOlxcdFxcdFxcdGtmcmVlX3NrYihyeC1cXHUwMDNlYXhfc2tiKTtcXG4gMjYxOlxcdFxcdFxcdHJ4LVxcdTAwM2VheF9za2IgPSBOVUxMO1xcbiAyNjI6XFx0XFx0fVxcbiAyNjM6XFx0fVxcbiAyNjQ6XFx0XFxuIDI2NTpcXHRzdHJ1Y3Qgc2tfYnVmZiAqYXNpeF90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIDI2NjpcXHRcXHRcXHRcXHQgICAgICBnZnBfdCBmbGFncylcXG4gMjY3OlxcdHtcXG4gMjY4OlxcdFxcdGludCBwYWRsZW47XFxuIDI2OTpcXHRcXHRpbnQgaGVhZHJvb20gPSBza2JfaGVhZHJvb20oc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTc6MTkuNjEyNTM4MDIxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwMzU1Nzc2MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBhc2l4X2NvbW1vbi5jIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGluIGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AgYW5kIGltbWVkaWF0ZWx5LCBJIGNhbiBzZWUgYSBjcml0aWNhbCBib3VuZHMgY2hlY2sgY2hhbmdlLiAgVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgdG8gYW4gb3V0LW9mLWJvdW5kcyAoT09CKSByZWFkIGluIHRoZSBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpYCBmdW5jdGlvbi4gIFRoZSBwcm9ibGVtLCBhcyBJIHNlZSBpdCwgcmV2b2x2ZWQgYXJvdW5kIGhvdyB0aGUgY29kZSBoYW5kbGVkIGByeC1cdTAwM2VyZW1haW5pbmdgIHdoZW4gaXQgd2FzIGFuIG9kZCBudW1iZXIuXG5cblNwZWNpZmljYWxseSwgdGhlIG9yaWdpbmFsIGNoZWNrOiBgcngtXHUwMDNlcmVtYWluaW5nICsgc2l6ZW9mKHUzMikgXHUwMDNjPSBza2ItXHUwMDNlbGVuYCB3YXMgaW5zdWZmaWNpZW50LiAgV2hlbiBgcngtXHUwMDNlcmVtYWluaW5nYCB3YXMsIHNheSwgMywgYW5kIGBza2ItXHUwMDNlbGVuYCB3YXMgNywgdGhlIGNoZWNrIHBhc3NlZCAoMyArIDQgXHUwMDNjPSA3KS4gSG93ZXZlciwgYWZ0ZXIgY2FsY3VsYXRpbmcgdGhlIGBvZmZzZXRgIGFzIGAoKDMgKyAxKSBcdTAwMjYgMHhmZmZlKWAgd2hpY2ggcmVzdWx0cyBpbiA0LCB0aGUgYGdldF91bmFsaWduZWRfbGUzMihza2ItXHUwMDNlZGF0YSArIDQpYCBjYWxsIHdvdWxkIHJlYWQgYnl0ZXMgNCwgNSwgNiwgYW5kIDcgZnJvbSB0aGUgYHNrYi1cdTAwM2VkYXRhYCBidWZmZXIsIGJ1dCB0aGUgYnVmZmVyIG9ubHkgaGFkIHZhbGlkIGRhdGEgdXAgdG8gaW5kZXggNi4gVGhpcyBtZWFudCBhIG9uZS1ieXRlIE9PQiByZWFkLCByaWdodCBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhhdC5cblxuVGhlIGZpeCBpcyBzbWFydC4gQnkgbW9kaWZ5aW5nIHRoZSBjaGVjayB0byBgKCgocngtXHUwMDNlcmVtYWluaW5nICsgMSkgXHUwMDI2IDB4ZmZmZSkgKyBzaXplb2YodTMyKSBcdTAwM2M9IHNrYi1cdTAwM2VsZW4pYCwgdGhlIGFsaWdubWVudCBjYWxjdWxhdGlvbiBpcyBub3cgKmluY2x1ZGVkKiBpbiB0aGUgYm91bmRzIGNoZWNrLiBTbyB0aGUgbmV3IGNoZWNrIG1ha2VzIHN1cmUgdGhhdCB0aGUgYG9mZnNldGAgKnBsdXMqIHRoZSBzaXplIG9mIHRoZSA0IGJ5dGUgcmVhZCBkb2VzIG5vdCBleGNlZWQgYHNrYi1cdTAwM2VsZW5gLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzLCBsaWtlIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzPyBOby4gVGhpcyBpcyBjcnVjaWFsIHRvIGVzdGFibGlzaC4gVGhpcyBpcyBwdXJlbHkgYSAqYm91bmRzIGNoZWNrKiBjb3JyZWN0aW9uLiBUaGUgYHNrYi1cdTAwM2VkYXRhYCBidWZmZXIgY29tZXMgZnJvbSBVU0IgUlgsIG5ldHdvcmsgcGFja2V0IGRhdGEuIFRoZSBmaXggcHJldmVudHMgdGhlIE9PQiByZWFkLiBUaGVyZSdzIG5vIG5ldyBhbGxvY2F0aW9uLCBubyB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vdGhpbmcgbGlrZSB0aGF0LiBUaGUgT09CIG5hdHVyZSBvZiB0aGUgaW5pdGlhbCBwcm9ibGVtIGlzIHRoZSByZWFzb24gS0FTQU4gZm91bmQgaXQgaW4gdGhlIGZpcnN0IHBsYWNlLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuIEFuZCB0aGUgYEtNU0FOUmVhc29uaW5nYCBzaG91bGQgZXhwbGljaXRseSBzdGF0ZSB0aGF0IHRoaXMgcGF0Y2ggZml4ZXMgdGhlIE9PQiBoZWFwIG1lbW9yeSByZWFkIGluIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKClgIGJ5IGNvcnJlY3RseSBhbGlnbmluZyBgcngtXHUwMDNlcmVtYWluaW5nYCBiZWZvcmUgdGhlIGJvdW5kcyBjaGVjay4gSXQncyBhIHRleHRib29rIEtBU0FOLWRldGVjdGVkIGlzc3VlLCBhbmQgdGhlIGZpeCBhZGRyZXNzZXMgdGhhdCBzcGVjaWZpYyBwcm9ibGVtIHdpdGhvdXQgaW50cm9kdWNpbmcgYW55IG5ldyBjb25jZXJucyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjUsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTc6MjYuNjQ4MTE3NTY5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIGJ5IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciAyLWJ5dGUgYWxpZ25tZW50IHdoZW4gY2hlY2tpbmcgaWYgdGhlIHNvY2tldCBidWZmZXIgaGFzIGVub3VnaCByZW1haW5pbmcgYnl0ZXMgZm9yIHRoZSAzMi1iaXQgaGVhZGVyIHJlYWQgKGAoKHJ4LVxcdTAwM2VyZW1haW5pbmcgKyAxKSBcXHUwMDI2IDB4ZmZmZSkgKyBzaXplb2YodTMyKSBcXHUwMDNjPSBza2ItXFx1MDAzZWxlbmApLlxcblxcblRoaXMgaXNzdWUgaXMgYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBvbiBza2ItXFx1MDAzZWRhdGEsIHdoaWNoIGlzIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIDItYnl0ZSBhbGlnbm1lbnQgd2hlbiBjaGVja2luZyBpZiB0aGUgc29ja2V0IGJ1ZmZlciBoYXMgZW5vdWdoIHJlbWFpbmluZyBieXRlcyBmb3IgdGhlIDMyLWJpdCBoZWFkZXIgcmVhZCAoYCgocngtXFx1MDAzZXJlbWFpbmluZyArIDEpIFxcdTAwMjYgMHhmZmZlKSArIHNpemVvZih1MzIpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuYCkuXFxuXFxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIChPT0IpIG1lbW9yeSByZWFkIG9uIHNrYi1cXHUwMDNlZGF0YSwgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpfkxd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 11:18:09 +0000 UTC FinishedAt: 2026-09-07 11:57:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_AX8817X", "USB_USBNET", "USB_NET_DRIVERS", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_AX8817X", "USB_USBNET", "USB_NET_DRIVERS", "USB" ], "series_id": "4b4febd4-92d5-4e65-9fec-ca613725699c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "asix_rx_fixup_internal", "asix_rx_fixup_common", "ax88172a_rx_fixup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQVg4ODE3WCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthc2l4X3J4X2ZpeHVwX2ludGVybmFsJiMzNDssCiAgICAmIzM0O2FzaXhfcnhfZml4dXBfY29tbW9uJiMzNDssCiAgICAmIzM0O2F4ODgxNzJhX3J4X2ZpeHVwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSBieSBjb3JyZWN0bHkgYWNjb3VudGluZyBmb3IgMi1ieXRlIGFsaWdubWVudCB3aGVuIGNoZWNraW5nIGlmIHRoZSBzb2NrZXQgYnVmZmVyIGhhcyBlbm91Z2ggcmVtYWluaW5nIGJ5dGVzIGZvciB0aGUgMzItYml0IGhlYWRlciByZWFkIChgKChyeC1cdTAwM2VyZW1haW5pbmcgJiM0MzsgMSkgXHUwMDI2IDB4ZmZmZSkgJiM0Mzsgc2l6ZW9mKHUzMikgXHUwMDNjPSBza2ItXHUwMDNlbGVuYCkuXG5cblRoaXMgaXNzdWUgaXMgYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBvbiBza2ItXHUwMDNlZGF0YSwgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBoZWFkZXIgYm91bmRzIGNoZWNraW5nIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSB0byBhY2NvdW50IGZvciAyLWJ5dGUgYWxpZ25tZW50IHdoZW4gY2hlY2tpbmcgcmVtYWluaW5nIHBhY2tldCBidWZmZXIgbGVuZ3RoLiBUaGlzIGNvZGUgcnVucyBpbiB0aGUgQVNJWCBVU0IgZXRoZXJuZXQgZHJpdmVyJiMzOTtzIFJYIHBhdGggYW5kIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbi9mdXp6aW5nIChlLmcuLCBVU0IgcmF3LWdhZGdldCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhZjUwMzA2MmNlN2M3MDQzNzY3MmEzOTUxMTQ2ZWZjN2ExZGI3NzljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMTo1NjowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG5pbmRleCA0ZjAzZjRlNTc2NTVkLi5jNTA2NDZlYTM1YzdlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG5AQCAtMTQ4LDcgJiM0MzsxNDgsNyBAQCBpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKiBBbHNvIGF2b2lkIHVubmVjZXNzYXJpbHkgZGlzY2FyZGluZyBhIGdvb2QgY3VycmVudCBuZXRkZXYgc29ja2V0XG4gXHQgKiBidWZmZXIuXG4gXHQgKi9cbi1cdGlmIChyeC1cdTAwM2VyZW1haW5pbmcgXHUwMDI2XHUwMDI2IChyeC1cdTAwM2VyZW1haW5pbmcgJiM0Mzsgc2l6ZW9mKHUzMikgXHUwMDNjPSBza2ItXHUwMDNlbGVuKSkge1xuJiM0MztcdGlmIChyeC1cdTAwM2VyZW1haW5pbmcgXHUwMDI2XHUwMDI2ICgoKHJ4LVx1MDAzZXJlbWFpbmluZyAmIzQzOyAxKSBcdTAwMjYgMHhmZmZlKSAmIzQzOyBzaXplb2YodTMyKSBcdTAwM2M9IHNrYi1cdTAwM2VsZW4pKSB7XG4gXHRcdG9mZnNldCA9ICgocngtXHUwMDNlcmVtYWluaW5nICYjNDM7IDEpIFx1MDAyNiAweGZmZmUpO1xuIFx0XHRyeC1cdTAwM2VoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0KTtcbiBcdFx0b2Zmc2V0ID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfTkVUX0FYODgxN1gmIzM0OywKICAgICYjMzQ7VVNCX1VTQk5FVCYjMzQ7LAogICAgJiMzNDtVU0JfTkVUX0RSSVZFUlMmIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXNpeF9yeF9maXh1cF9pbnRlcm5hbCYjMzQ7LAogICAgJiMzNDthc2l4X3J4X2ZpeHVwX2NvbW1vbiYjMzQ7LAogICAgJiMzNDtheDg4MTcyYV9yeF9maXh1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgaGVhZGVyIGJvdW5kcyBjaGVja2luZyBpbiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgdG8gYWNjb3VudCBmb3IgMi1ieXRlIGFsaWdubWVudCB3aGVuIGNoZWNraW5nIHJlbWFpbmluZyBwYWNrZXQgYnVmZmVyIGxlbmd0aC4gVGhpcyBjb2RlIHJ1bnMgaW4gdGhlIEFTSVggVVNCIGV0aGVybmV0IGRyaXZlciYjMzk7cyBSWCBwYXRoIGFuZCBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24vZnV6emluZyAoZS5nLiwgVVNCIHJhdy1nYWRnZXQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWY1MDMwNjJjZTdjNzA0Mzc2NzJhMzk1MTE0NmVmYzdhMWRiNzc5YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMTE6NTY6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jCmluZGV4IDRmMDNmNGU1NzY1NWQuLmM1MDY0NmVhMzVjN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jCkBAIC0xNDgsNyAmIzQzOzE0OCw3IEBAIGludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKiBBbHNvIGF2b2lkIHVubmVjZXNzYXJpbHkgZGlzY2FyZGluZyBhIGdvb2QgY3VycmVudCBuZXRkZXYgc29ja2V0CiAJICogYnVmZmVyLgogCSAqLwotCWlmIChyeC0mZ3Q7cmVtYWluaW5nICZhbXA7JmFtcDsgKHJ4LSZndDtyZW1haW5pbmcgJiM0Mzsgc2l6ZW9mKHUzMikgJmx0Oz0gc2tiLSZndDtsZW4pKSB7CiYjNDM7CWlmIChyeC0mZ3Q7cmVtYWluaW5nICZhbXA7JmFtcDsgKCgocngtJmd0O3JlbWFpbmluZyAmIzQzOyAxKSAmYW1wOyAweGZmZmUpICYjNDM7IHNpemVvZih1MzIpICZsdDs9IHNrYi0mZ3Q7bGVuKSkgewogCQlvZmZzZXQgPSAoKHJ4LSZndDtyZW1haW5pbmcgJiM0MzsgMSkgJmFtcDsgMHhmZmZlKTsKIAkJcngtJmd0O2hlYWRlciA9IGdldF91bmFsaWduZWRfbGUzMihza2ItJmd0O2RhdGEgJiM0Mzsgb2Zmc2V0KTsKIAkJb2Zmc2V0ID0gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzOAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFTSVggVVNCIE5ldHdvcmsgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoLCBhbmQgaXQgc2VlbXMgdG8gdGFyZ2V0IGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AuIEFscmlnaHQsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBkaWZmLiBJdCYjMzk7cyBhIGZhaXJseSBzbWFsbCBjaGFuZ2UsIHRoYW5rZnVsbHkuIExvb2tpbmcgYXQgaXQsIGl0IHNlZW1zIHRvIGJlIGNoYW5naW5nIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgd2l0aGluIHRoZSBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhlIGNoZWNrIGludm9sdmluZyBgcngtJmd0O3JlbWFpbmluZ2AgYW5kIGBza2ItJmd0O2xlbmAuIEkgc2VlIGEgc2xpZ2h0IG1vZGlmaWNhdGlvbiB0byB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9uLiBJdCBhcHBlYXJzIHRoYXQgYChyeC0mZ3Q7cmVtYWluaW5nICYjNDM7IDEpICZhbXA7IDB4ZmZmZWAgaGFzIGJlZW4gYWRkZWQuIFRoYXQgbGlrZWx5IG1lYW5zIHRoZXkmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbGlnbm1lbnQuIEl0JiMzOTtzIHByb2JhYmx5IHRvIGhhbmRsZSBzb21lIHNwZWNpZmljIGhhcmR3YXJlIHF1aXJrIG9yIGEgc3BlY2lmaWMgZGF0YSBsYXlvdXQgZnJvbSB0aGUgVVNCIGRldmljZSwgcmlnaHQ/IEl0IGNvdWxkIGJlIHJlbGF0ZWQgdG8gc29tZSBwYWRkaW5nIG9yIGFsaWdubWVudCByZXF1aXJlbWVudCBvZiB0aGUgUlggYnVmZmVyLgoKVG8gY29uZmlybSBteSBpbml0aWFsIHRob3VnaHRzLCBJJiMzOTtsbCBxdWlja2x5IHVzZSBgcmVhZC1maWxlYCB0byBncmFiIHRoZSBjb250ZXh0IGFyb3VuZCBsaW5lIDE0OCBvZiBgZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNgLiBJIG5lZWQgYSBmdWxsZXIgcGljdHVyZSBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIExldCYjMzk7cyBzZWUgaWYgdGhlIGNvbnRleHQgd2lsbCBoZWxwIG1lIHdpdGggdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcdCAqL1xuIDEzMTpcdFx0cngtXHUwMDNlcmVtYWluaW5nID0gMDtcbiAxMzI6XHRcdHJ4LVx1MDAzZXNwbGl0X2hlYWQgPSBmYWxzZTtcbiAxMzM6XHRcdHJ4LVx1MDAzZWhlYWRlciA9IDA7XG4gMTM0Olx0fVxuIDEzNTpcdFxuIDEzNjpcdGludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAxMzc6XHRcdFx0XHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeClcbiAxMzg6XHR7XG4gMTM5Olx0XHRpbnQgb2Zmc2V0ID0gMDtcbiAxNDA6XHRcdHUxNiBzaXplO1xuIDE0MTpcdFxuIDE0MjpcdFx0LyogV2hlbiBhbiBFdGhlcm5ldCBmcmFtZSBzcGFucyBtdWx0aXBsZSBVUkIgc29ja2V0IGJ1ZmZlcnMsXG4gMTQzOlx0XHQgKiBkbyBhIHNhbml0eSB0ZXN0IGZvciB0aGUgRGF0YSBoZWFkZXIgc3luY2hyb25pc2F0aW9uLlxuIDE0NDpcdFx0ICogQXR0ZW1wdCB0byBkZXRlY3QgdGhlIHNpdHVhdGlvbiBvZiB0aGUgcHJldmlvdXMgc29ja2V0IGJ1ZmZlciBoYXZpbmdcbiAxNDU6XHRcdCAqIGJlZW4gdHJ1bmNhdGVkIG9yIGEgc29ja2V0IGJ1ZmZlciB3YXMgbWlzc2luZy4gVGhlc2Ugc2l0dWF0aW9uc1xuIDE0NjpcdFx0ICogY2F1c2UgYSBkaXNjb250aW51aXR5IGluIHRoZSBkYXRhIHN0cmVhbSBhbmQgdGhlcmVmb3JlIG5lZWQgdG8gYXZvaWRcbiAxNDc6XHRcdCAqIGFwcGVuZGluZyBiYWQgZGF0YSB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IG5ldGRldiBzb2NrZXQgYnVmZmVyLlxuIDE0ODpcdFx0ICogQWxzbyBhdm9pZCB1bm5lY2Vzc2FyaWx5IGRpc2NhcmRpbmcgYSBnb29kIGN1cnJlbnQgbmV0ZGV2IHNvY2tldFxuIDE0OTpcdFx0ICogYnVmZmVyLlxuIDE1MDpcdFx0ICovXG4gMTUxOlx0XHRpZiAocngtXHUwMDNlcmVtYWluaW5nIFx1MDAyNlx1MDAyNiAoKChyeC1cdTAwM2VyZW1haW5pbmcgJiM0MzsgMSkgXHUwMDI2IDB4ZmZmZSkgJiM0Mzsgc2l6ZW9mKHUzMikgXHUwMDNjPSBza2ItXHUwMDNlbGVuKSkge1xuIDE1MjpcdFx0XHRvZmZzZXQgPSAoKHJ4LVx1MDAzZXJlbWFpbmluZyAmIzQzOyAxKSBcdTAwMjYgMHhmZmZlKTtcbiAxNTM6XHRcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldCk7XG4gMTU0Olx0XHRcdG9mZnNldCA9IDA7XG4gMTU1Olx0XG4gMTU2Olx0XHRcdHNpemUgPSAodTE2KShyeC1cdTAwM2VoZWFkZXIgXHUwMDI2IDB4N2ZmKTtcbiAxNTc6XHRcdFx0aWYgKHNpemUgIT0gKCh+cngtXHUwMDNlaGVhZGVyIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4N2ZmKSkge1xuIDE1ODpcdFx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7YXNpeF9yeF9maXh1cCgpIERhdGEgSGVhZGVyIHN5bmNocm9uaXNhdGlvbiB3YXMgbG9zdCwgcmVtYWluaW5nICVkXFxuXCYjMzQ7LFxuIDE1OTpcdFx0XHRcdFx0ICAgcngtXHUwMDNlcmVtYWluaW5nKTtcbiAxNjA6XHRcdFx0XHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xuIDE2MTpcdFx0XHR9XG4gMTYyOlx0XHR9XG4gMTYzOlx0XG4gMTY0Olx0XHR3aGlsZSAob2Zmc2V0ICYjNDM7IHNpemVvZih1MTYpIFx1MDAzYz0gc2tiLVx1MDAzZWxlbikge1xuIDE2NTpcdFx0XHR1MTYgY29weV9sZW5ndGg7XG4gMTY2Olx0XG4gMTY3Olx0XHRcdGlmICghcngtXHUwMDNlcmVtYWluaW5nKSB7XG4gMTY4Olx0XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQgPT0gc2l6ZW9mKHUxNikpIHtcbiAxNjk6XHRcdFx0XHRcdHJ4LVx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUxNihcbiAxNzA6XHRcdFx0XHRcdFx0XHRza2ItXHUwMDNlZGF0YSAmIzQzOyBvZmZzZXQpO1xuIDE3MTpcdFx0XHRcdFx0cngtXHUwMDNlc3BsaXRfaGVhZCA9IHRydWU7XG4gMTcyOlx0XHRcdFx0XHRvZmZzZXQgJiM0Mzs9IHNpemVvZih1MTYpO1xuIDE3MzpcdFx0XHRcdFx0YnJlYWs7XG4gMTc0Olx0XHRcdFx0fVxuIDE3NTpcdFxuIDE3NjpcdFx0XHRcdGlmIChyeC1cdTAwM2VzcGxpdF9oZWFkID09IHRydWUpIHtcbiAxNzc6XHRcdFx0XHRcdHJ4LVx1MDAzZWhlYWRlciB8PSAoZ2V0X3VuYWxpZ25lZF9sZTE2KFxuIDE3ODpcdFx0XHRcdFx0XHRcdHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldCkgXHUwMDNjXHUwMDNjIDE2KTtcbiAxNzk6XHRcdFx0XHRcdHJ4LVx1MDAzZXNwbGl0X2hlYWQgPSBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDI3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQVNJWCBVU0IgTmV0d29yayBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNgLiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoaXMgaXMgY29yZSBjb2RlIGZvciB0aGUgVVNCIG5ldHdvcmsgZHJpdmVycyBzcGVjaWZpY2FsbHkgZm9yIEFTSVggQVg4OHh4eCBkZXZpY2VzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBrbm93IHRoYXQgc3l6a2FsbGVyIGlzIGFuIG9idmlvdXMgY2FuZGlkYXRlIGZvciB0aGlzLiBTcGVjaWZpY2FsbHksIGl0cyBVU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcyDigJMgdGhlIGdhZGdldCBtb2RlLCByYXctZ2FkZ2V0IG1vZGUsIG9yIGV2ZW4gdmhjaSDigJMgYXJlIGV4dHJlbWVseSByZWxldmFudCBoZXJlLgoKVGhlIGtleSBpcyBpZiBzeXprYWxsZXIgY2FuIHByb2JlIHRoZSBVU0IgbmV0d29yayBkcml2ZXJzIGVmZmVjdGl2ZWx5LiBBbmQgdGhlIGFuc3dlciBpcyB5ZXMuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIHByb2JlIHRoZXNlIHR5cGVzIG9mIGRyaXZlcnMuIEkgY2FuIGxldmVyYWdlIGl0IHRvIGVtdWxhdGUgVVNCIGRldmljZXMgYW5kIHNlbmQgdGhlIHJpZ2h0IHR5cGUgb2YgVVJCcyBhbmQgcGFja2V0cyB0byB0aGUgZHJpdmVyLCBwb3RlbnRpYWxseSBoaXR0aW5nIHRoZSBgcnhfZml4dXBgIGNhbGxiYWNrcy4gVGhhdCYjMzk7cyB3aGVyZSBpbnRlcmVzdGluZyBidWdzIG9mdGVuIGx1cmsuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGVudHJ5IG5leHQgdG8gY29uZmlybSBpdCBpcyBlbmFibGVkIG9uIHRoZSB0YXJnZXQgc3lzdGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthc2l4X2NvbW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX1VTQl9ORVRfQVg4ODE3WClcdCYjNDM7PSBhc2l4Lm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZToxNDphc2l4LXkgOj0gYXNpeF9kZXZpY2VzLm8gYXNpeF9jb21tb24ubyBheDg4MTcyYS5vXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtMTUtb2JqLSQoQ09ORklHX1VTQl9ORVRfQVg4ODE3OV8xNzhBKSAgICAgICYjNDM7PSBheDg4MTc5XzE3OGEub1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg9MTcxPXN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMTc3LVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoxNzg6c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUge1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0xNzktXHR2b2lkICgqcmVzdW1lKShzdHJ1Y3QgdXNibmV0ICpkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg9MjExPWludCBhc2l4X3J4X2ZpeHVwX2NvbW1vbihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTI6dm9pZCBhc2l4X3J4X2ZpeHVwX2NvbW1vbl9mcmVlKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIxMy1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz0yNDI9aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0My17XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoyNDQ6XHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqZHAgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNDUtXHRzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeCA9IFx1MDAyNmRwLVx1MDAzZXJ4X2ZpeHVwX2luZm87XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjQ5LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjUwOnZvaWQgYXNpeF9yeF9maXh1cF9jb21tb25fZnJlZShzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqZHApXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNTEte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0yOTQ9c3RhdGljIHZvaWQgYXg4ODc3Ml9ldGh0b29sX2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0yOTctXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoyOTg6XHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0yOTktXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTMwMz1zdGF0aWMgaW50IGF4ODg3NzJfZXRodG9vbF9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMzA2LVx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MzA3Olx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMzA4LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0zMzI9c3RhdGljIGludCBheDg4NzcyX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMzM0LVx0c3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopXHUwMDI2ZGV2LVx1MDAzZWRhdGE7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MzM1Olx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMzM2LVx0aW50IHJldDtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MzYyPXN0YXRpYyBpbnQgYXg4ODc3Ml9od19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBpbl9wbSlcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMzY0LVx0c3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopXHUwMDI2ZGV2LVx1MDAzZWRhdGE7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MzY1Olx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMzY2LVx0dTE2IHJ4X2N0bDtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NDU2PXN0YXRpYyBpbnQgYXg4ODc3MmFfaHdfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgaW5fcG0pXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTQ1OC1cdHN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKVx1MDAyNmRldi1cdTAwM2VkYXRhO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjQ1OTpcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTQ2MC1cdHUxNiByeF9jdGwsIHBoeTE0aCwgcGh5MTVoLCBwaHkxNmg7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTU5Nj1zdGF0aWMgdm9pZCBheDg4NzcyX3N1c3BlbmQoc3RydWN0IHVzYm5ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTU5Ny17XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NTk4Olx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNTk5LVx0dTE2IG1lZGl1bTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjMxPXN0YXRpYyBpbnQgYXNpeF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjMzLVx0c3RydWN0IHVzYm5ldCAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2MzQ6XHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02MzUtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTY0Mj1zdGF0aWMgdm9pZCBheDg4NzcyX3Jlc3VtZShzdHJ1Y3QgdXNibmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjQzLXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2NDQ6XHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02NDUtXHRpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjU4PXN0YXRpYyBpbnQgYXNpeF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY2MC1cdHN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NjYxOlx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjYyLVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz02Njk9c3RhdGljIGludCBheDg4NzcyX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjcwLXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2NzE6XHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02NzItXHRpbnQgcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02OTYtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njk3OnN0YXRpYyB2b2lkIGF4ODg3NzJfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2KVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY5OC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTcwMz1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9waHkoc3RydWN0IHVzYm5ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcwNC17XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzA1Olx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNzA2LVx0aW50IHJldDtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9Nzk5PXN0YXRpYyBpbnQgYXg4ODc3Ml9waHlsaW5rX3NldHVwKHN0cnVjdCB1c2JuZXQgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy04MDAte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjgwMTpcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTgwMi1cdHBoeV9pbnRlcmZhY2VfdCBwaHlfaWZfbW9kZTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9ODI5PXN0YXRpYyBpbnQgYXg4ODc3Ml9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtODMwLXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo4MzE6XHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy04MzItXHR1OCBidWZbRVRIX0FMRU5dID0gezB9O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz05NDY9c3RhdGljIGludCBheDg4NzcyX3N0b3Aoc3RydWN0IHVzYm5ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTk0Ny17XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6OTQ4Olx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtOTQ5LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz05NTU9c3RhdGljIHZvaWQgYXg4ODc3Ml91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy05NTYte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjk1NzpcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTk1OC1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MTI3MT1zdGF0aWMgaW50IGF4ODgxNzhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMzE4LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEzMTk6XHRkZXYtXHUwMDNlZHJpdmVyX3ByaXYgPSBremFsbG9jX29iaihzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTMyMC1cdGlmICghZGV2LVx1MDAzZWRyaXZlcl9wcml2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYy00LSAqXG5kcml2ZXJzL25ldC91c2Ivc3I5ODAwLmM6NTogKiBCYXNlZCBvbiBhc2l4X2NvbW1vbi5jLCBhc2l4X2RldmljZXMuY1xuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jLTYtICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTIyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIHF1ZXN0aW9uLCB0aGlua2luZyB0aHJvdWdoIGl0IHN0ZXAtYnktc3RlcDoKCioqQ2hlY2tpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEFYODgxN1ggVVNCIE5ldHdvcmtpbmcgU3VwcG9ydCoqCgpBbHJpZ2h0LCBzbyBzb21lb25lJiMzOTtzIGFza2luZyBhYm91dCBob3cgdG8gZW5hYmxlIHRoZSBBWDg4MTdYIFVTQiBuZXR3b3JraW5nIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGJlaW5nIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBjb25maWd1cmF0aW9uLCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGl0JiMzOTtzIHdoZXJlIHRoZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgY29uZmlndXJhdGlvbnMgdXN1YWxseSBsaXZlLiBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgbWU7IGl0JiMzOTtzIHByYWN0aWNhbGx5IG11c2NsZSBtZW1vcnkgYXQgdGhpcyBwb2ludC4KCk15IHRoaW5raW5nIGlzLCB3aXRoaW4gdGhhdCBgS2NvbmZpZ2AgZmlsZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgbGlrZSBgQ09ORklHX1VTQl9ORVRfQVg4ODE3WGAuIFRoZSBrZXkgaXMgdG8gZmluZCB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKVGhlbiwgb25jZSBJJiMzOTt2ZSBsb2NhdGVkIGl0LCB0aGUgKnJlYWwqIHdvcmsgYmVnaW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBEb2VzIGl0IHJlbHkgb24gYENPTkZJR19VU0JfTkVUYCBiZWluZyBlbmFibGVkPyBEb2VzIGl0IGRlcGVuZCBvbiBzcGVjaWZpYyBVU0IgY29udHJvbGxlciBzdXBwb3J0PyBNYXliZSBhIGdlbmVyYWwgVVNCIG5ldHdvcmtpbmcgZnJhbWV3b3JrPyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSB0byBzZWUgd2hhdCBvdGhlciBvcHRpb25zIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhpcyBvbmUgdG8gYmUgYXZhaWxhYmxlLCB0byB1bmRlcnN0YW5kIHRoZSBjaGFpbiBvZiBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIG5vdCBqdXN0IGFib3V0IGZsaXBwaW5nIGEgc3dpdGNoOyBpdCYjMzk7cyBhYm91dCBtYWtpbmcgc3VyZSBhbGwgdGhlIHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgaW4gcGxhY2UuIEkgaGF2ZSB0byBsb29rIGZvciBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBvciBvdGhlciBjb25kaXRpb25zLgoKRXNzZW50aWFsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyB3aXRoaW4gYEtjb25maWdgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBuZWVkZWQgZm9yIHRoZSBBWDg4MTdYIGRyaXZlciB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgaXMgYnJlYWQgYW5kIGJ1dHRlciBmb3IgbWUsIGVuc3VyaW5nIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QgaXMgYW4gaW1wb3J0YW50IHBhcnQgb2YgdGhlIGpvYi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtVU0JfTkVUX0FYODgxN1gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTMyPWNvbmZpZyBVU0JfVVNCTkVUXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTY1LVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTY2OmNvbmZpZyBVU0JfTkVUX0FYODgxN1hcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2Ny1cdHRyaXN0YXRlIFwmIzM0O0FTSVggQVg4OHh4eCBCYXNlZCBVU0IgMi4wIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTEyPW9iai0kKENPTkZJR19VU0JfTEFONzhYWClcdCYjNDM7PSBsYW43OHh4Lm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfVVNCX05FVF9BWDg4MTdYKVx0JiM0Mzs9IGFzaXgub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTE0LWFzaXgteSA6PSBhc2l4X2RldmljZXMubyBhc2l4X2NvbW1vbi5vIGF4ODgxNzJhLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTcxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipEZWx2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBVU0IgTmV0d29ya2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE2Ni4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFVTQiBuZXR3b3JraW5nIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY2llcywgb3B0aW9ucywgYW5kIGRlZmF1bHRzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBmZWF0dXJlIG9yIGRyaXZlci4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgdGhpcyBzZWN0aW9uIG9mIHRoZSBLY29uZmlnIGhvbGRzLiBUaGlzIGlzIGdvaW5nIHRvIGdpdmUgbWUgc29tZSB2YWx1YWJsZSBjb250ZXh0IGFzIEkgYW0gZGVidWdnaW5nIGEgcHJvYmxlbSBpbiB0aGlzIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MDpcdFxuIDE2MTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgXHUwMDNjaHR0cDovL3d3dy5saW51eC11c2Iub3JnL3VzYm5ldC9cdTAwM2UuXG4gMTYyOlx0XG4gMTYzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDE2NDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNibmV0LlxuIDE2NTpcdFxuIDE2NjpcdGNvbmZpZyBVU0JfTkVUX0FYODgxN1hcbiAxNjc6XHRcdHRyaXN0YXRlIFwmIzM0O0FTSVggQVg4OHh4eCBCYXNlZCBVU0IgMi4wIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4gMTY4Olx0XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbiAxNjk6XHRcdHNlbGVjdCBDUkMzMlxuIDE3MDpcdFx0c2VsZWN0IFBIWUxJTktcbiAxNzE6XHRcdHNlbGVjdCBBWDg4Nzk2Ql9QSFlcbiAxNzI6XHRcdGltcGx5IE5FVF9TRUxGVEVTVFNcbiAxNzM6XHRcdGRlZmF1bHQgeVxuIDE3NDpcdFx0aGVscFxuIDE3NTpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIEFTSVggQVg4OHh4eCBiYXNlZCBVU0IgMi4wXG4gMTc2Olx0XHQgIDEwLzEwMCBFdGhlcm5ldCBhZGFwdGVycy5cbiAxNzc6XHRcbiAxNzg6XHRcdCAgVGhpcyBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGRldmljZXM6XG4gMTc5Olx0XHQgICAgKiBBdGVuIFVDMjEwVFxuIDE4MDpcdFx0ICAgICogQVNJWCBBWDg4MTcyXG4gMTgxOlx0XHQgICAgKiBCaWxsaW9udG9uIFN5c3RlbXMsIFVTQjJBUlxuIDE4MjpcdFx0ICAgICogQmlsbGlvbnRvbiBTeXN0ZW1zLCBHVVNCMkFNLTFHLUJcbiAxODM6XHRcdCAgICAqIEJ1ZmZhbG8gTFVBLVUyLUtUWFxuIDE4NDpcdFx0ICAgICogQ29yZWdhIEZFdGhlciBVU0IyLVRYXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NTQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqQW5hbHl6aW5nIFVTQiBOZXR3b3JrIERyaXZlciBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIFVTQiBuZXR3b3JrIGRyaXZlciBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIEFYODgxN1ggZHJpdmVyLiBGaXJzdCB0aGluZyYjMzk7cyBmaXJzdDogYFVTQl9ORVRfQVg4ODE3WGAgcmVsaWVzIG9uIHRoZSBgVVNCX1VTQk5FVGAgY29uZmlndXJhdGlvbiBvcHRpb24sIHdoaWNoLCBpbiB0dXJuLCBoaW5nZXMgb24gdGhlIG1vcmUgZ2VuZXJhbCBgVVNCX05FVF9EUklWRVJTYCBhbmQgdGhlIGJhc2UgYFVTQmAgb3B0aW9uLiBHb3QgaXQsIHRoaXMgaXMgc3RhbmRhcmQgZGVwZW5kZW5jeSB0cmFja2luZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNoYWluIGNvcnJlY3RseS4KCk5vdywgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBhc2l4IGRyaXZlciwgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjYWxsaW5nIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYC4gSSB3YW50IHRvIHRyYWNrIGRvd24gZXZlcnl3aGVyZSBpdCBpcyBjYWxsZWQuIFRoYXQgbWVhbnMgbG9va2luZyBpbiBgYXNpeF9jb21tb24uY2AgZmlyc3QsIG9idmlvdXNseSwgYnV0IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZWxzZXdoZXJlIHRvbywganVzdCBpbiBjYXNlIHRoZXJlIGFyZSBvdGhlciBtb2R1bGVzIGludm9sdmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGJyb2FkZXIgZHJpdmVyIGFyY2hpdGVjdHVyZSwgc28gdW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgaXMgY3JpdGljYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FzaXhfcnhfZml4dXBfaW50ZXJuYWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXguaD0yMDY9dm9pZCBhc2l4X3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA4LVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMDk6aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTAtXHRcdFx0ICAgc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTExNT1zdGF0aWMgdm9pZCByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8oc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTE3LVx0LyogUmVzZXQgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYSBsaWZldGltZSBvdXRzaWRlIG9mXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxMTg6XHQgKiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgc28gdGhhdCBmdXR1cmUgcHJvY2Vzc2luZyBzdGFydHMgZnJvbSBhXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTktXHQgKiBrbm93biBzZXQgb2YgaW5pdGlhbCBjb25kaXRpb25zLlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzNS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjEzNjppbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMzctXHRcdFx0ICAgc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9MjQyPWludCBhc2l4X3J4X2ZpeHVwX2NvbW1vbihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjQ2LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjQ3Olx0cmV0dXJuIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoZGV2LCBza2IsIHJ4KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0OC19XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MzM5PXN0YXRpYyBpbnQgYXg4ODE3MmFfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTM0My1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjM0NDpcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzExCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBVU0IgRHJpdmVyIEJ1ZyBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiB0aGUgQVNJWCBBWDg4eHh4IFVTQiBuZXR3b3JraW5nIGRyaXZlci4gSSBzZWUgdGhhdCBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgYnkgYGFzaXhfcnhfZml4dXBfY29tbW9uYCBhbmQgYGF4ODgxNzJhX3J4X2ZpeHVwYC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IGNoYW5nZWQuCgpBaGEhIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCBsaWVzIHdpdGhpbiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAuIEl0JiMzOTtzIGEgc3VidGxlIGJ1dCBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIG9mZnNldCBjYWxjdWxhdGlvbjoKCmBgYGMKLQlpZiAocngtJmd0O3JlbWFpbmluZyAmYW1wOyZhbXA7IChyeC0mZ3Q7cmVtYWluaW5nICYjNDM7IHNpemVvZih1MzIpICZsdDs9IHNrYi0mZ3Q7bGVuKSkgewomIzQzOwlpZiAocngtJmd0O3JlbWFpbmluZyAmYW1wOyZhbXA7ICgoKHJ4LSZndDtyZW1haW5pbmcgJiM0MzsgMSkgJmFtcDsgMHhmZmZlKSAmIzQzOyBzaXplb2YodTMyKSAmbHQ7PSBza2ItJmd0O2xlbikpIHsKIAkJb2Zmc2V0ID0gKChyeC0mZ3Q7cmVtYWluaW5nICYjNDM7IDEpICZhbXA7IDB4ZmZmZSk7CiAJCXJ4LSZndDtoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLSZndDtkYXRhICYjNDM7IG9mZnNldCk7CiAJCW9mZnNldCA9IDA7CmBgYAoKUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIHZ1bG5lcmFibGUgdG8gYSBidWZmZXIgb3ZlcnJ1biwgdHJpZ2dlcmVkIGJ5IGFuIG9kZCB2YWx1ZSBmb3IgYHJ4LSZndDtyZW1haW5pbmdgIGFuZCBhIHNwZWNpZmljIGBza2ItJmd0O2xlbmAuIEZvciBleGFtcGxlLCB3aXRoIGByeC0mZ3Q7cmVtYWluaW5nID0gMWAgYW5kIGBza2ItJmd0O2xlbiA9IDVgLCB0aGUgb3JpZ2luYWwgY2hlY2sgcGFzc2VkIGJlY2F1c2UgYDEgJiM0MzsgNCAmbHQ7PSA1YC4gSG93ZXZlciwgdGhlIHN1YnNlcXVlbnQgYG9mZnNldGAgY2FsY3VsYXRpb24gcmVzdWx0ZWQgaW4gcmVhZGluZyBmb3VyIGJ5dGVzIGZyb20gYW4gb2Zmc2V0IG9mIDIsIGxlYWRpbmcgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9uIGEgNS1ieXRlIGJ1ZmZlci4gVGhpcyBpcyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBhIHN1YnRsZSBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIHRoYXQmIzM5O3MgcmlwZSBmb3IgZXhwbG9pdGF0aW9uLgoKU28sIHRoaXMgcGF0Y2ggZml4ZXMgdGhpcyBmbGF3IGJ5IGNvcnJlY3RseSBjYWxjdWxhdGluZyB0aGUgb2Zmc2V0IHRvIHByZXZlbnQgdGhpcyBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBwYXJzaW5nIGluY29taW5nIFVTQiBwYWNrZXQgc3RyZWFtcy4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBleHBsb2l0YWJpbGl0eSBhbmQgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gVGhpcyBidWcgaXMgY2VydGFpbmx5IHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gYSBrZXJuZWwgVVNCIG5ldHdvcmtpbmcgZHJpdmVyIChBU0lYIEFYODh4eHgpLCB3aGljaCBtYWtlcyBpdCBhIHZlcnkgYXBwZWFsaW5nIHRhcmdldC4gSXQgY2FuIGJlIHN0aW11bGF0ZWQgdmlhIFVTQiBnYWRnZXQsIHJhdy1nYWRnZXQsIG9yIGV2ZW4gcGFja2V0IGZ1enppbmcgdmlhIHN5emthbGxlciwgd2hpY2ggbWVhbnMgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHRyaWdnZXIgdGhlIHZ1bG5lcmFiaWxpdHkuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgdHJ1ZS4KCk5vdyBmb3IgRm9jdXNTeW1ib2xzOgoKKiAgIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCAobm9uLXN0YXRpYyBmdW5jdGlvbiBpbiBhc2l4XF9jb21tb24uYykKKiAgIGBhc2l4X3J4X2ZpeHVwX2NvbW1vbmAgKGluIGFzaXhcX2NvbW1vbi5jKQoqICAgYGF4ODgxNzJhX3J4X2ZpeHVwYCAoaW4gYXg4ODE3MmEuYykKCk5leHQgc3RlcCwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxsZXJzIG9mIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCBvciBgYXNpeF9yeF9maXh1cF9jb21tb25gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthc2l4X3J4X2ZpeHVwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4Lmg9MTYzPXN0cnVjdCBhc2l4X2RhdGEge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMTcwLVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoxNzE6c3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyB7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTE3Mi1cdHN0cnVjdCBza19idWZmICpheF9za2I7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaD0xNzg9c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMTgzLVx0dTE2IHByZXN2ZF9waHlfYm1jcjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MTg0Olx0c3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyByeF9maXh1cF9pbmZvO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0xODUtXHRzdHJ1Y3QgbWlpX2J1cyAqbWRpbztcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oPTIwNj12b2lkIGFzaXhfd3JpdGVfY21kX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMDgtXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIwOTppbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIxMDpcdFx0XHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIxMTppbnQgYXNpeF9yeF9maXh1cF9jb21tb24oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjEyOnZvaWQgYXNpeF9yeF9maXh1cF9jb21tb25fZnJlZShzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqZHApO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTMtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9OTI9c3RhdGljIGludCBhc2l4X2NoZWNrX2hvc3RfZW5hYmxlKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTExNC1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjExNTpzdGF0aWMgdm9pZCByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8oc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTYte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTE3LVx0LyogUmVzZXQgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYSBsaWZldGltZSBvdXRzaWRlIG9mXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxMTg6XHQgKiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgc28gdGhhdCBmdXR1cmUgcHJvY2Vzc2luZyBzdGFydHMgZnJvbSBhXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTktXHQgKiBrbm93biBzZXQgb2YgaW5pdGlhbCBjb25kaXRpb25zLlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzNS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjEzNjppbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxMzc6XHRcdFx0ICAgc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMzgte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTE1Ny1cdFx0aWYgKHNpemUgIT0gKCh+cngtXHUwMDNlaGVhZGVyIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4N2ZmKSkge1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTU4Olx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7YXNpeF9yeF9maXh1cCgpIERhdGEgSGVhZGVyIHN5bmNocm9uaXNhdGlvbiB3YXMgbG9zdCwgcmVtYWluaW5nICVkXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTU5LVx0XHRcdFx0ICAgcngtXHUwMDNlcmVtYWluaW5nKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjE2MDpcdFx0XHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTYxLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTg5LVx0XHRcdGlmIChzaXplICE9ICgofnJ4LVx1MDAzZWhlYWRlciBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweDdmZikpIHtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjE5MDpcdFx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7YXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIDB4JXgsIG9mZnNldCAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTE5MS1cdFx0XHRcdFx0ICAgcngtXHUwMDNlaGVhZGVyLCBvZmZzZXQpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTkyOlx0XHRcdFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTE5My1cdFx0XHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTE5NS1cdFx0XHRpZiAoc2l6ZSBcdTAwM2UgZGV2LVx1MDAzZW5ldC1cdTAwM2VtdHUgJiM0MzsgRVRIX0hMRU4gJiM0MzsgVkxBTl9ITEVOKSB7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxOTY6XHRcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2FzaXhfcnhfZml4dXAoKSBCYWQgUlggTGVuZ3RoICVkXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTk3LVx0XHRcdFx0XHQgICBzaXplKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjE5ODpcdFx0XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xOTktXHRcdFx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yMzItXHRpZiAoc2tiLVx1MDAzZWxlbiAhPSBvZmZzZXQpIHtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjIzMzpcdFx0bmV0ZGV2X2VycihkZXYtXHUwMDNlbmV0LCBcJiMzNDthc2l4X3J4X2ZpeHVwKCkgQmFkIFNLQiBMZW5ndGggJWQsICVkXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjM0LVx0XHRcdCAgIHNrYi1cdTAwM2VsZW4sIG9mZnNldCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoyMzU6XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yMzYtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0MS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI0MjppbnQgYXNpeF9yeF9maXh1cF9jb21tb24oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjQzLXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0NC1cdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcCA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI0NTpcdHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4ID0gXHUwMDI2ZHAtXHUwMDNlcnhfZml4dXBfaW5mbztcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0Ni1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI0NzpcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNDgtfVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjQ5LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjUwOnZvaWQgYXNpeF9yeF9maXh1cF9jb21tb25fZnJlZShzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqZHApXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNTEte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjUyOlx0c3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcng7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNTMtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTk1NT1zdGF0aWMgdm9pZCBheDg4NzcyX3VuYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy05NjMtXHRheDg4NzcyX21kaW9fdW5yZWdpc3Rlcihwcml2KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo5NjQ6XHRhc2l4X3J4X2ZpeHVwX2NvbW1vbl9mcmVlKGRldi1cdTAwM2Vkcml2ZXJfcHJpdik7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtOTY1LVx0LyogRHJvcCB0aGUgUE0gdXNhZ2UgcmVmIHRha2VuIGluIGJpbmQoKSAqL1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz05Njk9c3RhdGljIHZvaWQgYXg4ODE3OF91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy05NzAte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjk3MTpcdGFzaXhfcnhfZml4dXBfY29tbW9uX2ZyZWUoZGV2LVx1MDAzZWRyaXZlcl9wcml2KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy05NzItXHRrZnJlZShkZXYtXHUwMDNlZHJpdmVyX3ByaXYpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0xMzY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODc3Ml9pbmZvID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMzcyLVx0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VULFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEzNzM6XHQucnhfZml4dXAgPSBhc2l4X3J4X2ZpeHVwX2NvbW1vbixcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMzc0LVx0LnR4X2ZpeHVwID0gYXNpeF90eF9maXh1cCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MTM3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODg3NzJiX2luZm8gPSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTEzODMtXHQuZmxhZ3MgPSBGTEFHX0VUSEVSIHwgRkxBR19GUkFNSU5HX0FYIHwgRkxBR19NVUxUSV9QQUNLRVQsXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MTM4NDpcdC5yeF9maXh1cCA9IGFzaXhfcnhfZml4dXBfY29tbW9uLFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTEzODUtXHQudHhfZml4dXAgPSBhc2l4X3R4X2ZpeHVwLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0xMzg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gbHhhdXNiX3QxbF9pbmZvID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMzk1LVx0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VULFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEzOTY6XHQucnhfZml4dXAgPSBhc2l4X3J4X2ZpeHVwX2NvbW1vbixcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMzk3LVx0LnR4X2ZpeHVwID0gYXNpeF90eF9maXh1cCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MTQwMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxNzhfaW5mbyA9IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTQwOS1cdFx0IEZMQUdfTVVMVElfUEFDS0VULFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjE0MTA6XHQucnhfZml4dXAgPSBhc2l4X3J4X2ZpeHVwX2NvbW1vbixcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xNDExLVx0LnR4X2ZpeHVwID0gYXNpeF90eF9maXh1cCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MTQyMz1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGhnMjBmOV9pbmZvID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xNDI4LVx0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VULFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjE0Mjk6XHQucnhfZml4dXAgPSBhc2l4X3J4X2ZpeHVwX2NvbW1vbixcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xNDMwLVx0LnR4X2ZpeHVwID0gYXNpeF90eF9maXh1cCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MTQzND1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGx5Y29uc3lzX2ZpYmVyZ2Vja28xMDBfaW5mbyA9IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTQ0MS1cdFx0IEZMQUdfTVVMVElfUEFDS0VULFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjE0NDI6XHQucnhfZml4dXAgPSBhc2l4X3J4X2ZpeHVwX2NvbW1vbixcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xNDQzLVx0LnR4X2ZpeHVwID0gYXNpeF90eF9maXh1cCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0xOD1zdHJ1Y3QgYXg4ODE3MmFfcHJpdmF0ZSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMjQtXHRpbnQgdXNlX2VtYmRwaHk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzoyNTpcdHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gcnhfZml4dXBfaW5mbztcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTI2LX07XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MzM5PXN0YXRpYyBpbnQgYXg4ODE3MmFfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTM0MS1cdHN0cnVjdCBheDg4MTcyYV9wcml2YXRlICpkcCA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjM0MjpcdHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4ID0gXHUwMDI2ZHAtXHUwMDNlcnhfZml4dXBfaW5mbztcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTM0My1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjM0NDpcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMzMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvbmZpZ3VyYXRpb24gc2l0dWF0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgVVNCX05FVF9BWDg4MTdYYC4gVGhhdCBvbmUgaXMgYSBrZXkgZHJpdmVyLCBidXQgaXQgaGFzIGEgZmV3IGxheWVycy4gSXQgcmVsaWVzIG9uIGBVU0JfVVNCTkVUYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGFuZCB0aGUgYmFzZSBgVVNCYCBjb25maWd1cmF0aW9uLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGwgb2YgdGhvc2UgYXJlIHByb3Blcmx5IHNldCwgYW5kIHRoYXQgdGhleSBhcmUgY29ycmVjdGx5IGVuYWJsZWQgZm9yIHRoaXMgc2NlbmFyaW8uCgpOb3csIGxldCYjMzk7cyBzcGVjaWZpY2FsbHkgbG9vayBhdCBgVVNCX1VTQk5FVGAuIFNpbmNlIGBVU0JfTkVUX0FYODgxN1hgIGRlcGVuZHMgb24gaXQsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZW50cnkgZm9yIGl0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiBpdCYjMzk7cyBuZWVkZWQgaW4gdGhpcyBzcGVjaWZpYyBjYXNlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmZXJlbmNlIHRoZSBLY29uZmlnOgoKYGBga2NvbmZpZwpjb25maWcgVVNCX05FVF9BWDg4MTdYCgl0cmlzdGF0ZSAmIzM0O0FTSVggQVg4OHh4eCBCYXNlZCBVU0IgMi4wIEV0aGVybmV0IEFkYXB0ZXJzJiMzNDsKCWRlcGVuZHMgb24gVVNCX1VTQk5FVApgYGAKCkFscmlnaHQsIHRoZSBLY29uZmlnIGNvbmZpcm1zIHRoZSBkaXJlY3QgZGVwZW5kZW5jeSBvZiBgVVNCX05FVF9BWDg4MTdYYCBvbiBgVVNCX1VTQk5FVGAuIFRoYXQmIzM5O3MgZ29vZCBhbmQgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGBVU0JfVVNCTkVUYCBpcyBwcm9wZXJseSBzZXQuIEkga25vdyB0aGF0LCBpbiBtYW55IGtlcm5lbCBjb25maWd1cmF0aW9ucywgYFVTQl9VU0JORVRgIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgZnJhbWV3b3JrIGZvciBVU0IgRXRoZXJuZXQgZGV2aWNlcy4gSSBuZWVkIHRvIG5vdyBmb2N1cyBvbiBjaGVja2luZyB0aGF0IHNwZWNpZmljIGNvbmZpZyBzZXR0aW5nIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfVVNCTkVUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTExMz1jb25maWcgVVNCX0xBTjc4WFhcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzEtXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoxMzI6Y29uZmlnIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTEzMy1cdHRyaXN0YXRlIFwmIzM0O011bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTAxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgVVNCX1VTQk5FVCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBhc3Nlc3MgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgYFVTQl9VU0JORVRgIGNvbXBvbmVudC4gSSYjMzk7bSB0aGlua2luZywgdGhpcyBpc24mIzM5O3QganVzdCBhIHNpbXBsZSBtb2R1bGU7IGl0JiMzOTtzIGEgbmV0d29yay1yZWxhdGVkIHN1YnN5c3RlbSwgc28gaXQgbGlrZWx5IHJlbGllcyBvbiBhIGZldyBrZXkgYnVpbGRpbmcgYmxvY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBjYXRlZ29yaXplIHRoZXNlIGRlcGVuZGVuY2llcyBpbnRvIHNldmVyYWwgdHlwZXM6CgoqICAgKipIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllciAoSEFMKToqKiBPYnZpb3VzbHksIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGhhcmR3YXJlIGludGVyZmFjZXMgaXQgaW50ZXJhY3RzIHdpdGgg4oCTIHRoZSBVU0IgY29udHJvbGxlciBpdHNlbGYsIG9mIGNvdXJzZSwgYnV0IGFsc28gcG90ZW50aWFsIFBIWSBjb21wb25lbnRzLCBhbnkgRE1BIGVuZ2luZXMgaW52b2x2ZWQsIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcgbWVjaGFuaXNtcy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBzcGVjaWZpYyByZWdpc3RlciBkZWZpbml0aW9ucyBhbmQgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgdGhlc2UgcGVyaXBoZXJhbHMuIFRoZSBoYXJkd2FyZSBpcyBhbHdheXMgdGhlIHN0YXJ0aW5nIHBvaW50LgoKKiAgICoqVVNCIFN0YWNrIExheWVyOioqIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIG9mIHRoZSBVU0Igc3RhY2sgYFVTQl9VU0JORVRgIGxldmVyYWdlcy4gSXMgaXQgYSBmdWxsIFVTQiBzdGFjaywgb3IgYSBzdHJpcHBlZC1kb3duIHZlcnNpb24sIHBlcmhhcHMgYSBjdXN0b20gaW1wbGVtZW50YXRpb24/IEFyZSB0aGVyZSBzcGVjaWZpYyBjbGFzcyBkcml2ZXJzIChDREMtRUNNLCBSTkRJUywgZXRjLikgaW52b2x2ZWQgYW5kIGhvdyBhcmUgdGhleSBpbnRlZ3JhdGVkPyBIb3cgZG9lcyBpdCBoYW5kbGUgZW51bWVyYXRpb24sIGVuZHBvaW50IG1hbmFnZW1lbnQsIGFuZCBkYXRhIHRyYW5zZmVyPwoKKiAgICoqTmV0d29yayBTdGFjayBJbnRlZ3JhdGlvbjoqKiBUaGlzIGlzIGtleS4gSG93IGlzIHRoaXMgbW9kdWxlIGhvb2tlZCBpbnRvIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2s/IElzIGl0IHVzaW5nIGEgc3RhbmRhcmQgbmV0d29yayBpbnRlcmZhY2UgZHJpdmVyIChlLmcuLCBORElTLCBhIFRVTi9UQVAtbGlrZSBpbnRlcmZhY2UsIG9yIHNvbWV0aGluZyBwcm9wcmlldGFyeSk/IFdoYXQgYXJlIHRoZSBkYXRhIHBhdGggY29uc2lkZXJhdGlvbnM/IElzIGl0IG9wdGltaXplZCBmb3IgbG93IGxhdGVuY3kgYW5kIGhpZ2ggdGhyb3VnaHB1dCwgb3IgaXMgaXQgZGVzaWduZWQgd2l0aCBvdGhlciB0cmFkZS1vZmZzIGluIG1pbmQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBuZXR3b3JrIHByb3RvY29sIGl0IGhhbmRsZXM/CgoqICAgKipNZW1vcnkgTWFuYWdlbWVudDoqKiBHaXZlbiB0aGF0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBsYXJnZSBkYXRhIHRyYW5zZmVycywgbWVtb3J5IGFsbG9jYXRpb24gYW5kIERNQSBidWZmZXIgbWFuYWdlbWVudCBhcmUgY3JpdGljYWxseSBpbXBvcnRhbnQuIFdoYXQgbWVtb3J5IHBvb2xzIG9yIGFsbG9jYXRvcnMgYXJlIGJlaW5nIHVzZWQ/IEhvdyBhcmUgdGhleSBjb25maWd1cmVkIHRvIGF2b2lkIGZyYWdtZW50YXRpb24gYW5kIGVuc3VyZSBlZmZpY2llbnQgcmVzb3VyY2UgdXRpbGl6YXRpb24/CgoqICAgKipDb25jdXJyZW5jeSAmYW1wOyBUaHJlYWRpbmc6KiogSSYjMzk7bGwgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSB0aHJlYWRpbmcgbW9kZWwgZW1wbG95ZWQgYnkgYFVTQl9VU0JORVRgIOKAkyBpcyBpdCBpbnRlcnJ1cHQtZHJpdmVuLCB1c2luZyB0YXNrcywgb3IgYm90aD8gSG93IGFyZSBjcml0aWNhbCBzZWN0aW9ucyBhbmQgc2hhcmVkIHJlc291cmNlcyBwcm90ZWN0ZWQgZnJvbSByYWNlIGNvbmRpdGlvbnM/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgbG9ja2luZyBhbmQgaW50ZXJydXB0LW1hc2tpbmcgY2hhbGxlbmdlcyBpbiBhIHJlYWwtdGltZSBlbnZpcm9ubWVudD8KCiogICAqKkNvbmZpZ3VyYXRpb24gJmFtcDsgQnVpbGQtVGltZSBPcHRpb25zOioqIEZpbmFsbHksIEkgbmVlZCB0byBtYXAgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHdoaWNoIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYW55IHJlYWwgYW5hbHlzaXMuIFdoYXQgY29tcGlsZS10aW1lIGZsYWdzIGFmZmVjdCB0aGUgYmVoYXZpb3IgYW5kIGZlYXR1cmVzIG9mIHRoZSBtb2R1bGU/IFdoYXQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGNvbnRyb2wgaXRzIG9wZXJhdGlvbmFsIGNoYXJhY3RlcmlzdGljcz8KCk15IGdlbmVyYWwgcHJvY2VzcyB3aWxsIGJlIHRvIGV4cGxvcmUgdGhlc2UgZGVwZW5kZW5jaWVzOiB0aGUgaGVhZGVyIGZpbGVzLCBjb25maWd1cmF0aW9uIHNjcmlwdHMsIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIHRvIGZvcm0gYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbGFuNzh4eC5cbiAxMzE6XHRcbiAxMzI6XHRjb25maWcgVVNCX1VTQk5FVFxuIDEzMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TXVsdGktcHVycG9zZSBVU0IgTmV0d29ya2luZyBGcmFtZXdvcmtcJiMzNDtcbiAxMzQ6XHRcdHNlbGVjdCBNSUlcbiAxMzU6XHRcdGhlbHBcbiAxMzY6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgc2V2ZXJhbCBraW5kcyBvZiBuZXR3b3JrIGxpbmtzIG92ZXIgVVNCLFxuIDEzNzpcdFx0ICB3aXRoIFwmIzM0O21pbmlkcml2ZXJzXCYjMzQ7IGJ1aWx0IGFyb3VuZCBhIGNvbW1vbiBuZXR3b3JrIGRyaXZlciBjb3JlXG4gMTM4Olx0XHQgIHRoYXQgc3VwcG9ydHMgZGVlcCBxdWV1ZXMgZm9yIGVmZmljaWVudCB0cmFuc2ZlcnMuICAoVGhpcyBnaXZlc1xuIDEzOTpcdFx0ICBiZXR0ZXIgcGVyZm9ybWFuY2Ugd2l0aCBzbWFsbCBwYWNrZXRzIGFuZCBhdCBoaWdoIHNwZWVkcykuXG4gMTQwOlx0XG4gMTQxOlx0XHQgIFRoZSBVU0IgaG9zdCBydW5zIFwmIzM0O3VzYm5ldFwmIzM0OywgYW5kIHRoZSBvdGhlciBlbmQgb2YgdGhlIGxpbmsgbWlnaHQgYmU6XG4gMTQyOlx0XG4gMTQzOlx0XHQgIC0gQW5vdGhlciBVU0IgaG9zdCwgd2hlbiB1c2luZyBVU0IgXCYjMzQ7bmV0d29ya1wmIzM0OyBvciBcJiMzNDtkYXRhIHRyYW5zZmVyXCYjMzQ7XG4gMTQ0Olx0XHQgICAgY2FibGVzLiAgVGhlc2UgYXJlIG9mdGVuIHVzZWQgdG8gbmV0d29yayBsYXB0b3BzIHRvIFBDcywgbGlrZVxuIDE0NTpcdFx0ICAgIFwmIzM0O0xhcGxpbmtcJiMzNDsgcGFyYWxsZWwgY2FibGVzIG9yIHNvbWUgbW90aGVyYm9hcmRzLiAgVGhlc2UgcmVseVxuIDE0NjpcdFx0ICAgIG9uIHNwZWNpYWxpemVkIGNoaXBzIGZyb20gbWFueSBzdXBwbGllcnMuXG4gMTQ3Olx0XG4gMTQ4Olx0XHQgIC0gQW4gaW50ZWxsaWdlbnQgVVNCIGdhZGdldCwgcGVyaGFwcyBlbWJlZGRpbmcgYSBMaW51eCBzeXN0ZW0uXG4gMTQ5Olx0XHQgICAgVGhlc2UgaW5jbHVkZSBQREFzIHJ1bm5pbmcgTGludXggKGlQYXEsIFlvcHksIFphdXJ1cywgYW5kXG4gMTUwOlx0XHQgICAgb3RoZXJzKSwgYW5kIGRldmljZXMgdGhhdCBpbnRlcm9wZXJhdGUgdXNpbmcgdGhlIHN0YW5kYXJkXG4gMTUxOlx0XHQgICAgQ0RDLUV0aGVybmV0IHNwZWNpZmljYXRpb24gKGluY2x1ZGluZyBtYW55IGNhYmxlIG1vZGVtcykuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIC0gTmV0d29yayBhZGFwdGVyIGhhcmR3YXJlIChsaWtlIHRob3NlIGZvciAxMC8xMDAgRXRoZXJuZXQpIHdoaWNoXG4gMTU0Olx0XHQgICAgdXNlcyB0aGlzIGRyaXZlciBmcmFtZXdvcmsuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTM3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNoZWNraW5nIFVTQiBOZXR3b3JrIERyaXZlcnMqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgY2hlY2sgYFVTQl9ORVRfRFJJVkVSU2AuJiMzNDsgSSBrbm93IHRoaXMgaXMgdGhlIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBVU0IgbmV0d29ya2luZyBpbnZlc3RpZ2F0aW9uLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlcjsgaXQgZGljdGF0ZXMgd2hldGhlciB0aGUga2VybmVsIGV2ZW4gKmNvbnNpZGVycyogdGhlIHBvc3NpYmlsaXR5IG9mIHV0aWxpemluZyBVU0IgZm9yIG5ldHdvcmsgY29ubmVjdGl2aXR5LiBTbywgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGN1cnJlbnQgc3RhdGUg4oCTIGlzIGl0IGVuYWJsZWQsIGRpc2FibGVkLCBvciBzZXQgYXMgYSBtb2R1bGU/IFRoZSBhbnN3ZXIgaGVyZSB3aWxsIGltbWVkaWF0ZWx5IG5hcnJvdyB0aGUgc2NvcGUgb2YgdGhlIHByb2JsZW0uIElmIGl0JiMzOTtzIGRpc2FibGVkLCB0aGVuIHRoZXJlJiMzOTtzIG5vIHBvaW50IGluIGZ1cnRoZXIgZXhwbG9yYXRpb24gZG93biB0aGlzIHJhYmJpdCBob2xlIHVudGlsIHRoZSBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3RlZC4gSWYgaXTigJlzIGEgbW9kdWxlLCBJJiMzOTtsbCBjaGVjayBpdHMgbG9hZGluZyBzdGF0dXMgYW5kIGFueSBhc3NvY2lhdGVkIGVycm9yIG1lc3NhZ2VzLiBJZiBpdCYjMzk7cyBidWlsdC1pbiwgdGhlbiB0aGUgaGFyZHdhcmUgaXNzdWVzIGFyZSB0aGUgaW1tZWRpYXRlIGNvbmNlcm4uIEZ1cnRoZXJtb3JlLCBJIHdpbGwgY2hlY2sgd2hhdCBzcGVjaWZpYyBkcml2ZXJzIGFyZSBhdmFpbGFibGUgYW5kIGVuYWJsZWQsIGtub3dpbmcgdGhhdCBzdXBwb3J0IGZvciB2YXJpb3VzIFVTQiBuZXR3b3JrIGFkYXB0ZXJzIGNhbiBiZSBmcmFnbWVudGVkLCBhbmQgdGhhdCB0aGUgYXBwcm9wcmlhdGUgZHJpdmVyIG11c3QgYmUgc2VsZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgVVNCX05FVF9EUklWRVJTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTU9Y29tbWVudCBcJiMzNDtIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy03LVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6ODptZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWctOS1cdHRyaXN0YXRlIFwmIzM0O1VTQiBOZXR3b3JrIEFkYXB0ZXJzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqS2NvbmZpZyBJbnNwZWN0aW9uOiBVU0IgTmV0d29ya2luZyBEcml2ZXIgT3B0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gbGluZXMgMSB0aHJvdWdoIDI1IG9mIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gYmVnaW4sIHNpbmNlIEtjb25maWcgZmlsZXMgdHlwaWNhbGx5IHN0cnVjdHVyZSB0aGVpciBvcHRpb25zIGluIGEgbG9naWNhbCBtYW5uZXIsIGFuZCB0aGF0IGluaXRpYWwgc2VjdGlvbiBvZnRlbiBjb3ZlcnMgdGhlIG92ZXJhbGwgZHJpdmVyIG1vZHVsZSBvciBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIGF2YWlsYWJsZSBjaG9pY2VzLgoKSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjb3JlIG1vZHVsZSBkZWZpbml0aW9uIGluIHRoYXQgcmFuZ2UsIGFuZCBob3BlZnVsbHkgc29tZSBiYXNpYyBkZXBlbmRlbmNpZXMuIEl0IGNvdWxkIG91dGxpbmUgdGhlIGVzc2VudGlhbCBjb21wb25lbnRzIHRoYXQgZ2V0IGxvYWRlZCwgYW5kIHBlcmhhcHMgc29tZSBkZWZhdWx0IHN0YXRlcyBmb3IgdGhlIGRldmljZSBvcHRpb25zLiBIb3BlZnVsbHkgaXQmIzM5O3Mgd2VsbC1jb21tZW50ZWQsIGFzIGlzIHVzdWFsbHkgdGhlIHN0YW5kYXJkIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgZHJpdmVyIG5hbWUsIGEgZ2VuZXJhbCBkZXNjcmlwdGlvbiwgYW5kIHBlcmhhcHMgdGhlIGluaXRpYWwgYHNlbGVjdGAgc3RhdGVtZW50cyB0aGF0IHB1bGwgaW4gYW55IGNvcmUgVVNCIG9yIG5ldHdvcmtpbmcgcHJlcmVxdWlzaXRlcy4gSWYgaXQmIzM5O3MgYSB3ZWxsLW9yZ2FuaXplZCBmaWxlLCB0aGlzIHNlY3Rpb24gc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCBhIHNvbGlkIGZvdW5kYXRpb24gYmVmb3JlIEkgZGVsdmUgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljcyBvZiBpbmRpdmlkdWFsIGRldmljZSBzdXBwb3J0IG9yIGFkdmFuY2VkIGZlYXR1cmVzLiBJIGhvcGUgaXQgY2xlYXJseSBvdXRsaW5lcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdGNvbW1lbnQgXCYjMzQ7SG9zdC1zaWRlIFVTQiBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XCYjMzQ7XG4gICA2Olx0XHRkZXBlbmRzIG9uICFVU0IgXHUwMDI2XHUwMDI2IE5FVFxuICAgNzpcdFxuICAgODpcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXG4gICA5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgTmV0d29yayBBZGFwdGVyc1wmIzM0O1xuICAxMDpcdFx0ZGVmYXVsdCBVU0IgaWYgVVNCXG4gIDExOlx0XHRkZXBlbmRzIG9uIFVTQiBcdTAwMjZcdTAwMjYgTkVUXG4gIDEyOlx0XG4gIDEzOlx0aWYgVVNCX05FVF9EUklWRVJTXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIFVTQl9DQVRDXG4gIDE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgQ0FUQyBOZXRNYXRlLWJhc2VkIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBVU0IgRXRoZXJuZXRcbiAgMjA6XHRcdCAgZGV2aWNlIGJhc2VkIG9uIHRoZSBFTDEyMTBBIGNoaXAuIFN1cHBvcnRlZCBkZXZpY2VzIGFyZTpcbiAgMjE6XHRcdCAgQmVsa2luIEY1VTAxMVxuICAyMjpcdFx0ICBCZWxraW4gRjVVMTExXG4gIDIzOlx0XHQgIENBVEMgTmV0TWF0ZVxuICAyNDpcdFx0ICBDQVRDIE5ldE1hdGUgSUlcbiAgMjU6XHRcdCAgc21hcnRCcmlkZ2VzIHNtYXJ0TklDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTUwCgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDM5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQVNJWCBBWDg4eHh4IFVTQiBOZXR3b3JrIEFkYXB0ZXIgRHJpdmVyIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGVuYWJsZSBhIGZldyBjb25maWd1cmF0aW9uczogYFVTQl9ORVRfQVg4ODE3WGAsIGBVU0JfVVNCTkVUYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGFuZCwgb2YgY291cnNlLCBgVVNCYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOb3csIGxldCYjMzk7cyBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgYW5kIGZpbGVzLiBXZSYjMzk7cmUgbG9va2luZyBhdDogYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgLCB3aGljaCBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB3YXMgYWx0ZXJlZDsgYGFzaXhfcnhfZml4dXBfY29tbW9uYCwgd2hpY2ggaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgZml4dXAgcm91dGluZTsgYW5kIGBheDg4MTcyYV9yeF9maXh1cGAsIGFsc28gYW4gZW50cnkgcG9pbnQgdG8gdGhlIGZpeHVwIHJvdXRpbmUuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBnaXQgZGlmZiByZXZpZXcganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJdCBsb29rcyBsaWtlIHRoZSBjb21taXQgKm9ubHkqIG1vZGlmaWVzIGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2Agd2l0aGluIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYC4gR29vZCwgdGhhdCYjMzk7cyBjbGVhbiBhbmQgZm9jdXNlZC4KCk5vdywgdG8gc3VtbWFyaXplIG15IHJlYXNvbmluZyBjb25jaXNlbHk6IHRoZSBmaXggaXMgaW4gYGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKWAgd2l0aGluIGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AsIGFuZCBpdCYjMzk7cyBhbGwgYWJvdXQgcGFyc2luZyBVU0IgcGFja2V0cyBmb3IgQVNJWCBBWDg4eHh4IG5ldHdvcmsgYWRhcHRlcnMuIEl0IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSBib3VuZHMtY2hlY2tpbmcgdnVsbmVyYWJpbGl0eSBpbiBhIGNhbGN1bGF0aW9uIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLVVSQiBmcmFtZXMuIFdoZW4gYHJ4LSZndDtyZW1haW5pbmdgIGlzIG9kZCwgdGhpcyBjb2RlIHdhcyBwcm9uZSB0byBvdXQtb2YtYm91bmRzIGhlYWRlciByZWFkcy4gVGhlIHZ1bG5lcmFiaWxpdHkgY291bGQgZXhpc3QgaW4gdmlydHVhbGl6ZWQvZW11bGF0ZWQgZW52aXJvbm1lbnRzIChlLmcuLCBzeXprYWxsZXIgVVNCIHJhdy1nYWRnZXQgLyBuZXRkZXYgZnV6emluZykgd2hpY2ggbWVhbnMgdGhpcyBzaG91bGQgYmUgZnV6eiB0ZXN0ZWQuCgpUaGUga2V5IGNvbmZpZ3MgcmVtYWluOiBgVVNCX05FVF9BWDg4MTdYYCwgYFVTQl9VU0JORVRgLCBgVVNCX05FVF9EUklWRVJTYCwgYFVTQmAuCgpBbmQgdGhlIGZvY3VzZWQgc3ltYm9sczogYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgLCBgYXNpeF9yeF9maXh1cF9jb21tb25gLCBhbmQgYGF4ODgxNzJhX3J4X2ZpeHVwYC4KCkZpbmFsbHksIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBteSB0b29sIGNhbGwgcGFyYW1ldGVycyBhbmQgZm9ybWF0dGluZy4gVGhpcyBsb29rcyBzb2xpZDsgcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHRoZSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQVg4ODE3WCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthc2l4X3J4X2ZpeHVwX2ludGVybmFsJiMzNDssCiAgICAmIzM0O2FzaXhfcnhfZml4dXBfY29tbW9uJiMzNDssCiAgICAmIzM0O2F4ODgxNzJhX3J4X2ZpeHVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBoZWFkZXIgYm91bmRzIGNoZWNraW5nIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSB0byBhY2NvdW50IGZvciAyLWJ5dGUgYWxpZ25tZW50IHdoZW4gY2hlY2tpbmcgcmVtYWluaW5nIHBhY2tldCBidWZmZXIgbGVuZ3RoLiBUaGlzIGNvZGUgcnVucyBpbiB0aGUgQVNJWCBVU0IgZXRoZXJuZXQgZHJpdmVyJiMzOTtzIFJYIHBhdGggYW5kIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbi9mdXp6aW5nIChlLmcuLCBVU0IgcmF3LWdhZGdldCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQVg4ODE3WCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthc2l4X3J4X2ZpeHVwX2ludGVybmFsJiMzNDssCiAgICAmIzM0O2FzaXhfcnhfZml4dXBfY29tbW9uJiMzNDssCiAgICAmIzM0O2F4ODgxNzJhX3J4X2ZpeHVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBoZWFkZXIgYm91bmRzIGNoZWNraW5nIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSB0byBhY2NvdW50IGZvciAyLWJ5dGUgYWxpZ25tZW50IHdoZW4gY2hlY2tpbmcgcmVtYWluaW5nIHBhY2tldCBidWZmZXIgbGVuZ3RoLiBUaGlzIGNvZGUgcnVucyBpbiB0aGUgQVNJWCBVU0IgZXRoZXJuZXQgZHJpdmVyJiMzOTtzIFJYIHBhdGggYW5kIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbi9mdXp6aW5nIChlLmcuLCBVU0IgcmF3LWdhZGdldCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIGJ5IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciAyLWJ5dGUgYWxpZ25tZW50IHdoZW4gY2hlY2tpbmcgaWYgdGhlIHNvY2tldCBidWZmZXIgaGFzIGVub3VnaCByZW1haW5pbmcgYnl0ZXMgZm9yIHRoZSAzMi1iaXQgaGVhZGVyIHJlYWQgKGAoKHJ4LVx1MDAzZXJlbWFpbmluZyAmIzQzOyAxKSBcdTAwMjYgMHhmZmZlKSAmIzQzOyBzaXplb2YodTMyKSBcdTAwM2M9IHNrYi1cdTAwM2VsZW5gKS5cblxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIChPT0IpIG1lbW9yeSByZWFkIG9uIHNrYi1cdTAwM2VkYXRhLCB3aGljaCBpcyBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzLCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFmNTAzMDYyY2U3YzcwNDM3NjcyYTM5NTExNDZlZmM3YTFkYjc3OWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDExOjU2OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYwppbmRleCA0ZjAzZjRlNTc2NTVkLi5jNTA2NDZlYTM1YzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYwpAQCAtMTQ4LDcgJiM0MzsxNDgsNyBAQCBpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJICogQWxzbyBhdm9pZCB1bm5lY2Vzc2FyaWx5IGRpc2NhcmRpbmcgYSBnb29kIGN1cnJlbnQgbmV0ZGV2IHNvY2tldAogCSAqIGJ1ZmZlci4KIAkgKi8KLQlpZiAocngtJmd0O3JlbWFpbmluZyAmYW1wOyZhbXA7IChyeC0mZ3Q7cmVtYWluaW5nICYjNDM7IHNpemVvZih1MzIpICZsdDs9IHNrYi0mZ3Q7bGVuKSkgewomIzQzOwlpZiAocngtJmd0O3JlbWFpbmluZyAmYW1wOyZhbXA7ICgoKHJ4LSZndDtyZW1haW5pbmcgJiM0MzsgMSkgJmFtcDsgMHhmZmZlKSAmIzQzOyBzaXplb2YodTMyKSAmbHQ7PSBza2ItJmd0O2xlbikpIHsKIAkJb2Zmc2V0ID0gKChyeC0mZ3Q7cmVtYWluaW5nICYjNDM7IDEpICZhbXA7IDB4ZmZmZSk7CiAJCXJ4LSZndDtoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLSZndDtkYXRhICYjNDM7IG9mZnNldCk7CiAJCW9mZnNldCA9IDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiAtIGFzaXhfY29tbW9uLmMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgcmVxdWVzdCBpcyB0byBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBwYXRjaCB3aXRoaW4gYGRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jYCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGNhbGwgaGVyZSwgY29uc2lkZXJpbmcgdGhpcyBmYWxscyB1bmRlciBkZWZlbnNpdmUgc2VjdXJpdHkgYW5kIGtlcm5lbCBzYW5pdGl6ZXIgYW5hbHlzaXMsIHNwZWNpZmljYWxseSBmb3Igc3l6a2FsbGVyL2Z1enppbmcgcHVycG9zZXMuIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIC0gaXQmIzM5O3MgYSBsb3ctc2V2ZXJpdHkgY29kZSByZXZpZXcgZm9yIHNhbml0aXplciBzZWxlY3Rpb24sIG5vIHJlZCBmbGFncyBhYm91dCBvZmZlbnNpdmUgYWN0aW9ucy4KCkZpcnN0IHN0ZXAsIEkmIzM5O2xsIHB1bGwgdXAgdGhlIGNvZGUgdXNpbmcgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIHBhdGNoIGlzIGFsdGVyaW5nLiBXaGF0JiMzOTtzIHRoZSBjaGFuZ2UgaW50cm9kdWNpbmc/IERhdGEgc3RydWN0dXJlcywgbmV3IGZ1bmN0aW9uIGNhbGxzLCBjb25kaXRpb25hbCBsb2dpYz8gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBldmFsdWF0aW9uIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHQgKi9cbiAxMjE6XHRcbiAxMjI6XHRcdGlmIChyeC1cdTAwM2VheF9za2IpIHtcbiAxMjM6XHRcdFx0LyogRGlzY2FyZCBhbnkgaW5jb21wbGV0ZSBFdGhlcm5ldCBmcmFtZSBpbiB0aGUgbmV0ZGV2IGJ1ZmZlciAqL1xuIDEyNDpcdFx0XHRrZnJlZV9za2IocngtXHUwMDNlYXhfc2tiKTtcbiAxMjU6XHRcdFx0cngtXHUwMDNlYXhfc2tiID0gTlVMTDtcbiAxMjY6XHRcdH1cbiAxMjc6XHRcbiAxMjg6XHRcdC8qIEFzc3VtZSB0aGUgRGF0YSBoZWFkZXIgMzItYml0IHdvcmQgaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50XG4gMTI5Olx0XHQgKiBvciBuZXh0IFVSQiBzb2NrZXQgYnVmZmVyIHNvIHJlc2V0IGFsbCB0aGUgc3RhdGUgdmFyaWFibGVzLlxuIDEzMDpcdFx0ICovXG4gMTMxOlx0XHRyeC1cdTAwM2VyZW1haW5pbmcgPSAwO1xuIDEzMjpcdFx0cngtXHUwMDNlc3BsaXRfaGVhZCA9IGZhbHNlO1xuIDEzMzpcdFx0cngtXHUwMDNlaGVhZGVyID0gMDtcbiAxMzQ6XHR9XG4gMTM1Olx0XG4gMTM2Olx0aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDEzNzpcdFx0XHRcdCAgIHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KVxuIDEzODpcdHtcbiAxMzk6XHRcdGludCBvZmZzZXQgPSAwO1xuIDE0MDpcdFx0dTE2IHNpemU7XG4gMTQxOlx0XG4gMTQyOlx0XHQvKiBXaGVuIGFuIEV0aGVybmV0IGZyYW1lIHNwYW5zIG11bHRpcGxlIFVSQiBzb2NrZXQgYnVmZmVycyxcbiAxNDM6XHRcdCAqIGRvIGEgc2FuaXR5IHRlc3QgZm9yIHRoZSBEYXRhIGhlYWRlciBzeW5jaHJvbmlzYXRpb24uXG4gMTQ0Olx0XHQgKiBBdHRlbXB0IHRvIGRldGVjdCB0aGUgc2l0dWF0aW9uIG9mIHRoZSBwcmV2aW91cyBzb2NrZXQgYnVmZmVyIGhhdmluZ1xuIDE0NTpcdFx0ICogYmVlbiB0cnVuY2F0ZWQgb3IgYSBzb2NrZXQgYnVmZmVyIHdhcyBtaXNzaW5nLiBUaGVzZSBzaXR1YXRpb25zXG4gMTQ2Olx0XHQgKiBjYXVzZSBhIGRpc2NvbnRpbnVpdHkgaW4gdGhlIGRhdGEgc3RyZWFtIGFuZCB0aGVyZWZvcmUgbmVlZCB0byBhdm9pZFxuIDE0NzpcdFx0ICogYXBwZW5kaW5nIGJhZCBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbmV0ZGV2IHNvY2tldCBidWZmZXIuXG4gMTQ4Olx0XHQgKiBBbHNvIGF2b2lkIHVubmVjZXNzYXJpbHkgZGlzY2FyZGluZyBhIGdvb2QgY3VycmVudCBuZXRkZXYgc29ja2V0XG4gMTQ5Olx0XHQgKiBidWZmZXIuXG4gMTUwOlx0XHQgKi9cbiAxNTE6XHRcdGlmIChyeC1cdTAwM2VyZW1haW5pbmcgXHUwMDI2XHUwMDI2ICgoKHJ4LVx1MDAzZXJlbWFpbmluZyAmIzQzOyAxKSBcdTAwMjYgMHhmZmZlKSAmIzQzOyBzaXplb2YodTMyKSBcdTAwM2M9IHNrYi1cdTAwM2VsZW4pKSB7XG4gMTUyOlx0XHRcdG9mZnNldCA9ICgocngtXHUwMDNlcmVtYWluaW5nICYjNDM7IDEpIFx1MDAyNiAweGZmZmUpO1xuIDE1MzpcdFx0XHRyeC1cdTAwM2VoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0KTtcbiAxNTQ6XHRcdFx0b2Zmc2V0ID0gMDtcbiAxNTU6XHRcbiAxNTY6XHRcdFx0c2l6ZSA9ICh1MTYpKHJ4LVx1MDAzZWhlYWRlciBcdTAwMjYgMHg3ZmYpO1xuIDE1NzpcdFx0XHRpZiAoc2l6ZSAhPSAoKH5yeC1cdTAwM2VoZWFkZXIgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHg3ZmYpKSB7XG4gMTU4Olx0XHRcdFx0bmV0ZGV2X2VycihkZXYtXHUwMDNlbmV0LCBcJiMzNDthc2l4X3J4X2ZpeHVwKCkgRGF0YSBIZWFkZXIgc3luY2hyb25pc2F0aW9uIHdhcyBsb3N0LCByZW1haW5pbmcgJWRcXG5cJiMzNDssXG4gMTU5Olx0XHRcdFx0XHQgICByeC1cdTAwM2VyZW1haW5pbmcpO1xuIDE2MDpcdFx0XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG4gMTYxOlx0XHRcdH1cbiAxNjI6XHRcdH1cbiAxNjM6XHRcbiAxNjQ6XHRcdHdoaWxlIChvZmZzZXQgJiM0Mzsgc2l6ZW9mKHUxNikgXHUwMDNjPSBza2ItXHUwMDNlbGVuKSB7XG4gMTY1Olx0XHRcdHUxNiBjb3B5X2xlbmd0aDtcbiAxNjY6XHRcbiAxNjc6XHRcdFx0aWYgKCFyeC1cdTAwM2VyZW1haW5pbmcpIHtcbiAxNjg6XHRcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiAtIG9mZnNldCA9PSBzaXplb2YodTE2KSkge1xuIDE2OTpcdFx0XHRcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFxuIDE3MDpcdFx0XHRcdFx0XHRcdHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldCk7XG4gMTcxOlx0XHRcdFx0XHRyeC1cdTAwM2VzcGxpdF9oZWFkID0gdHJ1ZTtcbiAxNzI6XHRcdFx0XHRcdG9mZnNldCAmIzQzOz0gc2l6ZW9mKHUxNik7XG4gMTczOlx0XHRcdFx0XHRicmVhaztcbiAxNzQ6XHRcdFx0XHR9XG4gMTc1Olx0XG4gMTc2Olx0XHRcdFx0aWYgKHJ4LVx1MDAzZXNwbGl0X2hlYWQgPT0gdHJ1ZSkge1xuIDE3NzpcdFx0XHRcdFx0cngtXHUwMDNlaGVhZGVyIHw9IChnZXRfdW5hbGlnbmVkX2xlMTYoXG4gMTc4Olx0XHRcdFx0XHRcdFx0c2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0KSBcdTAwM2NcdTAwM2MgMTYpO1xuIDE3OTpcdFx0XHRcdFx0cngtXHUwMDNlc3BsaXRfaGVhZCA9IGZhbHNlO1xuIDE4MDpcdFx0XHRcdFx0b2Zmc2V0ICYjNDM7PSBzaXplb2YodTE2KTtcbiAxODE6XHRcdFx0XHR9IGVsc2Uge1xuIDE4MjpcdFx0XHRcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICYjNDM7XG4gMTgzOlx0XHRcdFx0XHRcdFx0XHRcdG9mZnNldCk7XG4gMTg0Olx0XHRcdFx0XHRvZmZzZXQgJiM0Mzs9IHNpemVvZih1MzIpO1xuIDE4NTpcdFx0XHRcdH1cbiAxODY6XHRcbiAxODc6XHRcdFx0XHQvKiB0YWtlIGZyYW1lIGxlbmd0aCBmcm9tIERhdGEgaGVhZGVyIDMyLWJpdCB3b3JkICovXG4gMTg4Olx0XHRcdFx0c2l6ZSA9ICh1MTYpKHJ4LVx1MDAzZWhlYWRlciBcdTAwMjYgMHg3ZmYpO1xuIDE4OTpcdFx0XHRcdGlmIChzaXplICE9ICgofnJ4LVx1MDAzZWhlYWRlciBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweDdmZikpIHtcbiAxOTA6XHRcdFx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7YXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIDB4JXgsIG9mZnNldCAlZFxcblwmIzM0OyxcbiAxOTE6XHRcdFx0XHRcdFx0ICAgcngtXHUwMDNlaGVhZGVyLCBvZmZzZXQpO1xuIDE5MjpcdFx0XHRcdFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcbiAxOTM6XHRcdFx0XHRcdHJldHVybiAwO1xuIDE5NDpcdFx0XHRcdH1cbiAxOTU6XHRcdFx0XHRpZiAoc2l6ZSBcdTAwM2UgZGV2LVx1MDAzZW5ldC1cdTAwM2VtdHUgJiM0MzsgRVRIX0hMRU4gJiM0MzsgVkxBTl9ITEVOKSB7XG4gMTk2Olx0XHRcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2FzaXhfcnhfZml4dXAoKSBCYWQgUlggTGVuZ3RoICVkXFxuXCYjMzQ7LFxuIDE5NzpcdFx0XHRcdFx0XHQgICBzaXplKTtcbiAxOTg6XHRcdFx0XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG4gMTk5Olx0XHRcdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCB0YXJnZXRlZCB0b3dhcmRzIGFuIGV4cGVydCwgc3RhcnRpbmcgd2l0aCB0aGUgYm9sZGVkIGhlYWRlcjoKCioqRGl2aW5nIERlZXBlciBpbnRvIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgIGZ1bmN0aW9uLiBJJiMzOTt2ZSBnb3QgYSBkZWNlbnQgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgQVNJWCBkcml2ZXIgc3RydWN0dXJlLCBidXQgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4uLiBpdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIHJlY2VpdmUgcGF0aCYjMzk7cyBlcnJvciBoYW5kbGluZyBhbmQgcGFja2V0IGFkanVzdG1lbnQsIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQgY2xlYW5zIHVwIHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBkdXJpbmcgaGFyZHdhcmUgcmVjZXB0aW9uIG9yIGVhcmx5IGJ1ZmZlciBhbGxvY2F0aW9uLiBNeSBmb2N1cyBub3cgaXMgb24gdGhlICYjMzQ7cmVzdCBvZiBpdCYjMzQ7LgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29tbW9uIHBpdGZhbGxzIGhlcmU6IHBvdGVudGlhbCBhbGlnbm1lbnQgcHJvYmxlbXMsIGRlc2NyaXB0b3IgY29ycnVwdGlvbiwgbWF5YmUgZXZlbiBhIHJhY2UgY29uZGl0aW9uIHRoYXQgY291bGQgaGF2ZSBwb3BwZWQgdXAgZ2l2ZW4gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIFJYIERNQSBpbnRlcmFjdGlvbi4gQXJlIHdlIGRlYWxpbmcgd2l0aCBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MgdGhhdCBuZWNlc3NpdGF0ZSBwYWNrZXQgc2l6ZSBhZGp1c3RtZW50cz8gQXJlIHRoZXkgaGFuZGxpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBUQ1AvVURQIGNoZWNrc3VtIG9mZmxvYWQ/IFdoYXQgYWJvdXQganVtYm8gZnJhbWVzIGFuZCB0aGVpciBmcmFnbWVudGF0aW9uPyBXaGF0IGNoZWNrcyBhcmUgaW4gcGxhY2UgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3dzIG9yIHVuZGVyZmxvd3M/CgpTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3I6CgoqICAgKipFcnJvciBkZXRlY3Rpb246KiogSG93IGFyZSB0aGV5IGlkZW50aWZ5aW5nIGNvcnJ1cHRlZCBkYXRhIG9yIGJ1ZmZlciBpc3N1ZXM/CiogICAqKkJ1ZmZlciBtYW5pcHVsYXRpb246KiogSG93IGlzIHRoZSByZWNlaXZlZCBidWZmZXIgYmVpbmcgYWRqdXN0ZWQ/IEFyZSB0aGVyZSBjbGV2ZXIgdHJpY2tzIGZvciByZS1hbGlnbmluZyBkYXRhIG9yIGhhbmRsaW5nIHBhcnRpYWwgcGFja2V0IGZyYWdtZW50cz8KKiAgICoqRGVzY3JpcHRvciBpbnRlcmFjdGlvbjoqKiBXaGF0JiMzOTtzIHRoZSBkYW5jZSBiZXR3ZWVuIHRoZSBkZXNjcmlwdG9ycyBhbmQgdGhpcyBmaXh1cCBmdW5jdGlvbj8gQXJlIHRoZXkgcmUtdXNpbmcgZGVzY3JpcHRvcnMgc2FmZWx5LCBvciBhcmUgdGhlcmUgcG90ZW50aWFsIGhhemFyZHMgdGhlcmU/CiogICAqKlBlcmZvcm1hbmNlIGltcGxpY2F0aW9uczoqKiBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyBJIGNhbiBzcG90PwoKSSYjMzk7bSBnb2luZyB0byBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBiaXR3aXNlIG9wZXJhdGlvbnMgb3IgcG9pbnRlciBhcml0aG1ldGljLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBjYW4gZ2V0IGhhaXJ5IHJlYWwgcXVpY2suIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGFueSBhc3N1bXB0aW9ucyBtYWRlIGFib3V0IGhhcmR3YXJlIGJlaGF2aW9yIG9yIHJlZ2lzdGVyIHZhbHVlcy4gQW5kIHRoZW4sIEkgbmVlZCB0byBsb29rIGZvciBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyIG9yIGV2ZW4gdGhlIG5ldHdvcmsgc3RhY2sgaXRzZWxmLgoKTGV0JiMzOTtzIHNlZSB0aGUgcmVzdCBvZiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMDpcdFx0XHRcdH1cbiAyMDE6XHRcbiAyMDI6XHRcdFx0XHQvKiBTb21ldGltZXMgbWF5IGZhaWwgdG8gZ2V0IGEgbmV0ZGV2IHNvY2tldCBidWZmZXIgYnV0XG4gMjAzOlx0XHRcdFx0ICogY29udGludWUgdG8gcHJvY2VzcyB0aGUgVVJCIHNvY2tldCBidWZmZXIgc28gdGhhdFxuIDIwNDpcdFx0XHRcdCAqIHN5bmNocm9uaXNhdGlvbiBvZiB0aGUgRXRoZXJuZXQgZnJhbWUgRGF0YSBoZWFkZXJcbiAyMDU6XHRcdFx0XHQgKiB3b3JkIGlzIG1haW50YWluZWQuXG4gMjA2Olx0XHRcdFx0ICovXG4gMjA3Olx0XHRcdFx0cngtXHUwMDNlYXhfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbihkZXYtXHUwMDNlbmV0LCBzaXplKTtcbiAyMDg6XHRcbiAyMDk6XHRcdFx0XHRyeC1cdTAwM2VyZW1haW5pbmcgPSBzaXplO1xuIDIxMDpcdFx0XHR9XG4gMjExOlx0XG4gMjEyOlx0XHRcdGlmIChyeC1cdTAwM2VyZW1haW5pbmcgXHUwMDNlIHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQpIHtcbiAyMTM6XHRcdFx0XHRjb3B5X2xlbmd0aCA9IHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQ7XG4gMjE0Olx0XHRcdFx0cngtXHUwMDNlcmVtYWluaW5nIC09IGNvcHlfbGVuZ3RoO1xuIDIxNTpcdFx0XHR9IGVsc2Uge1xuIDIxNjpcdFx0XHRcdGNvcHlfbGVuZ3RoID0gcngtXHUwMDNlcmVtYWluaW5nO1xuIDIxNzpcdFx0XHRcdHJ4LVx1MDAzZXJlbWFpbmluZyA9IDA7XG4gMjE4Olx0XHRcdH1cbiAyMTk6XHRcbiAyMjA6XHRcdFx0aWYgKHJ4LVx1MDAzZWF4X3NrYikge1xuIDIyMTpcdFx0XHRcdHNrYl9wdXRfZGF0YShyeC1cdTAwM2VheF9za2IsIHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldCxcbiAyMjI6XHRcdFx0XHRcdCAgICAgY29weV9sZW5ndGgpO1xuIDIyMzpcdFx0XHRcdGlmICghcngtXHUwMDNlcmVtYWluaW5nKSB7XG4gMjI0Olx0XHRcdFx0XHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHJ4LVx1MDAzZWF4X3NrYik7XG4gMjI1Olx0XHRcdFx0XHRyeC1cdTAwM2VheF9za2IgPSBOVUxMO1xuIDIyNjpcdFx0XHRcdH1cbiAyMjc6XHRcdFx0fVxuIDIyODpcdFxuIDIyOTpcdFx0XHRvZmZzZXQgJiM0Mzs9IChjb3B5X2xlbmd0aCAmIzQzOyAxKSBcdTAwMjYgMHhmZmZlO1xuIDIzMDpcdFx0fVxuIDIzMTpcdFxuIDIzMjpcdFx0aWYgKHNrYi1cdTAwM2VsZW4gIT0gb2Zmc2V0KSB7XG4gMjMzOlx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7YXNpeF9yeF9maXh1cCgpIEJhZCBTS0IgTGVuZ3RoICVkLCAlZFxcblwmIzM0OyxcbiAyMzQ6XHRcdFx0XHQgICBza2ItXHUwMDNlbGVuLCBvZmZzZXQpO1xuIDIzNTpcdFx0XHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xuIDIzNjpcdFx0XHRyZXR1cm4gMDtcbiAyMzc6XHRcdH1cbiAyMzg6XHRcbiAyMzk6XHRcdHJldHVybiAxO1xuIDI0MDpcdH1cbiAyNDE6XHRcbiAyNDI6XHRpbnQgYXNpeF9yeF9maXh1cF9jb21tb24oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDI0MzpcdHtcbiAyNDQ6XHRcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcCA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiAyNDU6XHRcdHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4ID0gXHUwMDI2ZHAtXHUwMDNlcnhfZml4dXBfaW5mbztcbiAyNDY6XHRcbiAyNDc6XHRcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XG4gMjQ4Olx0fVxuIDI0OTpcdFxuIDI1MDpcdHZvaWQgYXNpeF9yeF9maXh1cF9jb21tb25fZnJlZShzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqZHApXG4gMjUxOlx0e1xuIDI1MjpcdFx0c3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcng7XG4gMjUzOlx0XG4gMjU0Olx0XHRpZiAoIWRwKVxuIDI1NTpcdFx0XHRyZXR1cm47XG4gMjU2Olx0XG4gMjU3Olx0XHRyeCA9IFx1MDAyNmRwLVx1MDAzZXJ4X2ZpeHVwX2luZm87XG4gMjU4Olx0XG4gMjU5Olx0XHRpZiAocngtXHUwMDNlYXhfc2tiKSB7XG4gMjYwOlx0XHRcdGtmcmVlX3NrYihyeC1cdTAwM2VheF9za2IpO1xuIDI2MTpcdFx0XHRyeC1cdTAwM2VheF9za2IgPSBOVUxMO1xuIDI2MjpcdFx0fVxuIDI2MzpcdH1cbiAyNjQ6XHRcbiAyNjU6XHRzdHJ1Y3Qgc2tfYnVmZiAqYXNpeF90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gMjY2Olx0XHRcdFx0ICAgICAgZ2ZwX3QgZmxhZ3MpXG4gMjY3Olx0e1xuIDI2ODpcdFx0aW50IHBhZGxlbjtcbiAyNjk6XHRcdGludCBoZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzY1CgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDgzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGFzaXhfY29tbW9uLmMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jYCBhbmQgaW1tZWRpYXRlbHksIEkgY2FuIHNlZSBhIGNyaXRpY2FsIGJvdW5kcyBjaGVjayBjaGFuZ2UuICBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSB0byBhbiBvdXQtb2YtYm91bmRzIChPT0IpIHJlYWQgaW4gdGhlIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKClgIGZ1bmN0aW9uLiAgVGhlIHByb2JsZW0sIGFzIEkgc2VlIGl0LCByZXZvbHZlZCBhcm91bmQgaG93IHRoZSBjb2RlIGhhbmRsZWQgYHJ4LSZndDtyZW1haW5pbmdgIHdoZW4gaXQgd2FzIGFuIG9kZCBudW1iZXIuCgpTcGVjaWZpY2FsbHksIHRoZSBvcmlnaW5hbCBjaGVjazogYHJ4LSZndDtyZW1haW5pbmcgJiM0Mzsgc2l6ZW9mKHUzMikgJmx0Oz0gc2tiLSZndDtsZW5gIHdhcyBpbnN1ZmZpY2llbnQuICBXaGVuIGByeC0mZ3Q7cmVtYWluaW5nYCB3YXMsIHNheSwgMywgYW5kIGBza2ItJmd0O2xlbmAgd2FzIDcsIHRoZSBjaGVjayBwYXNzZWQgKDMgJiM0MzsgNCAmbHQ7PSA3KS4gSG93ZXZlciwgYWZ0ZXIgY2FsY3VsYXRpbmcgdGhlIGBvZmZzZXRgIGFzIGAoKDMgJiM0MzsgMSkgJmFtcDsgMHhmZmZlKWAgd2hpY2ggcmVzdWx0cyBpbiA0LCB0aGUgYGdldF91bmFsaWduZWRfbGUzMihza2ItJmd0O2RhdGEgJiM0MzsgNClgIGNhbGwgd291bGQgcmVhZCBieXRlcyA0LCA1LCA2LCBhbmQgNyBmcm9tIHRoZSBgc2tiLSZndDtkYXRhYCBidWZmZXIsIGJ1dCB0aGUgYnVmZmVyIG9ubHkgaGFkIHZhbGlkIGRhdGEgdXAgdG8gaW5kZXggNi4gVGhpcyBtZWFudCBhIG9uZS1ieXRlIE9PQiByZWFkLCByaWdodCBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhhdC4KClRoZSBmaXggaXMgc21hcnQuIEJ5IG1vZGlmeWluZyB0aGUgY2hlY2sgdG8gYCgoKHJ4LSZndDtyZW1haW5pbmcgJiM0MzsgMSkgJmFtcDsgMHhmZmZlKSAmIzQzOyBzaXplb2YodTMyKSAmbHQ7PSBza2ItJmd0O2xlbilgLCB0aGUgYWxpZ25tZW50IGNhbGN1bGF0aW9uIGlzIG5vdyAqaW5jbHVkZWQqIGluIHRoZSBib3VuZHMgY2hlY2suIFNvIHRoZSBuZXcgY2hlY2sgbWFrZXMgc3VyZSB0aGF0IHRoZSBgb2Zmc2V0YCAqcGx1cyogdGhlIHNpemUgb2YgdGhlIDQgYnl0ZSByZWFkIGRvZXMgbm90IGV4Y2VlZCBgc2tiLSZndDtsZW5gLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcywgbGlrZSBpbmZvcm1hdGlvbiBsZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcz8gTm8uIFRoaXMgaXMgY3J1Y2lhbCB0byBlc3RhYmxpc2guIFRoaXMgaXMgcHVyZWx5IGEgKmJvdW5kcyBjaGVjayogY29ycmVjdGlvbi4gVGhlIGBza2ItJmd0O2RhdGFgIGJ1ZmZlciBjb21lcyBmcm9tIFVTQiBSWCwgbmV0d29yayBwYWNrZXQgZGF0YS4gVGhlIGZpeCBwcmV2ZW50cyB0aGUgT09CIHJlYWQuIFRoZXJlJiMzOTtzIG5vIG5ldyBhbGxvY2F0aW9uLCBubyB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vdGhpbmcgbGlrZSB0aGF0LiBUaGUgT09CIG5hdHVyZSBvZiB0aGUgaW5pdGlhbCBwcm9ibGVtIGlzIHRoZSByZWFzb24gS0FTQU4gZm91bmQgaXQgaW4gdGhlIGZpcnN0IHBsYWNlLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLiBBbmQgdGhlIGBLTVNBTlJlYXNvbmluZ2Agc2hvdWxkIGV4cGxpY2l0bHkgc3RhdGUgdGhhdCB0aGlzIHBhdGNoIGZpeGVzIHRoZSBPT0IgaGVhcCBtZW1vcnkgcmVhZCBpbiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpYCBieSBjb3JyZWN0bHkgYWxpZ25pbmcgYHJ4LSZndDtyZW1haW5pbmdgIGJlZm9yZSB0aGUgYm91bmRzIGNoZWNrLiBJdCYjMzk7cyBhIHRleHRib29rIEtBU0FOLWRldGVjdGVkIGlzc3VlLCBhbmQgdGhlIGZpeCBhZGRyZXNzZXMgdGhhdCBzcGVjaWZpYyBwcm9ibGVtIHdpdGhvdXQgaW50cm9kdWNpbmcgYW55IG5ldyBjb25jZXJucyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIDItYnl0ZSBhbGlnbm1lbnQgd2hlbiBjaGVja2luZyBpZiB0aGUgc29ja2V0IGJ1ZmZlciBoYXMgZW5vdWdoIHJlbWFpbmluZyBieXRlcyBmb3IgdGhlIDMyLWJpdCBoZWFkZXIgcmVhZCAoYCgocngtXHUwMDNlcmVtYWluaW5nICYjNDM7IDEpIFx1MDAyNiAweGZmZmUpICYjNDM7IHNpemVvZih1MzIpIFx1MDAzYz0gc2tiLVx1MDAzZWxlbmApLlxuXG5UaGlzIGlzc3VlIGlzIGFuIG91dC1vZi1ib3VuZHMgKE9PQikgbWVtb3J5IHJlYWQgb24gc2tiLVx1MDAzZWRhdGEsIHdoaWNoIGlzIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSBieSBjb3JyZWN0bHkgYWNjb3VudGluZyBmb3IgMi1ieXRlIGFsaWdubWVudCB3aGVuIGNoZWNraW5nIGlmIHRoZSBzb2NrZXQgYnVmZmVyIGhhcyBlbm91Z2ggcmVtYWluaW5nIGJ5dGVzIGZvciB0aGUgMzItYml0IGhlYWRlciByZWFkIChgKChyeC1cdTAwM2VyZW1haW5pbmcgJiM0MzsgMSkgXHUwMDI2IDB4ZmZmZSkgJiM0Mzsgc2l6ZW9mKHUzMikgXHUwMDNjPSBza2ItXHUwMDNlbGVuYCkuXG5cblRoaXMgaXNzdWUgaXMgYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBvbiBza2ItXHUwMDNlZGF0YSwgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU2OjA2LjYyMTE4NDE2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDI2OTY1OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9ORVRfQVg4ODE3WFwiLFxuICAgIFwiVVNCX1VTQk5FVFwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhc2l4X3J4X2ZpeHVwX2ludGVybmFsXCIsXG4gICAgXCJhc2l4X3J4X2ZpeHVwX2NvbW1vblwiLFxuICAgIFwiYXg4ODE3MmFfcnhfZml4dXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIDItYnl0ZSBhbGlnbm1lbnQgd2hlbiBjaGVja2luZyBpZiB0aGUgc29ja2V0IGJ1ZmZlciBoYXMgZW5vdWdoIHJlbWFpbmluZyBieXRlcyBmb3IgdGhlIDMyLWJpdCBoZWFkZXIgcmVhZCAoYCgocngtXFx1MDAzZXJlbWFpbmluZyArIDEpIFxcdTAwMjYgMHhmZmZlKSArIHNpemVvZih1MzIpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuYCkuXFxuXFxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIChPT0IpIG1lbW9yeSByZWFkIG9uIHNrYi1cXHUwMDNlZGF0YSwgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IGhlYWRlciBib3VuZHMgY2hlY2tpbmcgaW4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIHRvIGFjY291bnQgZm9yIDItYnl0ZSBhbGlnbm1lbnQgd2hlbiBjaGVja2luZyByZW1haW5pbmcgcGFja2V0IGJ1ZmZlciBsZW5ndGguIFRoaXMgY29kZSBydW5zIGluIHRoZSBBU0lYIFVTQiBldGhlcm5ldCBkcml2ZXIncyBSWCBwYXRoIGFuZCBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24vZnV6emluZyAoZS5nLiwgVVNCIHJhdy1nYWRnZXQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1NjowNi42MjExODg4MDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDcyMjkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFmNTAzMDYyY2U3YzcwNDM3NjcyYTM5NTExNDZlZmM3YTFkYjc3OWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAxMTo1NjowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXFxuaW5kZXggNGYwM2Y0ZTU3NjU1ZC4uYzUwNjQ2ZWEzNWM3ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXFxuQEAgLTE0OCw3ICsxNDgsNyBAQCBpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAqIEFsc28gYXZvaWQgdW5uZWNlc3NhcmlseSBkaXNjYXJkaW5nIGEgZ29vZCBjdXJyZW50IG5ldGRldiBzb2NrZXRcXG4gXFx0ICogYnVmZmVyLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHJ4LVxcdTAwM2VyZW1haW5pbmcgXFx1MDAyNlxcdTAwMjYgKHJ4LVxcdTAwM2VyZW1haW5pbmcgKyBzaXplb2YodTMyKSBcXHUwMDNjPSBza2ItXFx1MDAzZWxlbikpIHtcXG4rXFx0aWYgKHJ4LVxcdTAwM2VyZW1haW5pbmcgXFx1MDAyNlxcdTAwMjYgKCgocngtXFx1MDAzZXJlbWFpbmluZyArIDEpIFxcdTAwMjYgMHhmZmZlKSArIHNpemVvZih1MzIpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuKSkge1xcbiBcXHRcXHRvZmZzZXQgPSAoKHJ4LVxcdTAwM2VyZW1haW5pbmcgKyAxKSBcXHUwMDI2IDB4ZmZmZSk7XFxuIFxcdFxcdHJ4LVxcdTAwM2VoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KTtcXG4gXFx0XFx0b2Zmc2V0ID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6MDcuMTgyODU2MzYzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1OTYwMDAwOTczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfTkVUX0FYODgxN1hcIixcbiAgICBcIlVTQl9VU0JORVRcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXNpeF9yeF9maXh1cF9pbnRlcm5hbFwiLFxuICAgIFwiYXNpeF9yeF9maXh1cF9jb21tb25cIixcbiAgICBcImF4ODgxNzJhX3J4X2ZpeHVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IGhlYWRlciBib3VuZHMgY2hlY2tpbmcgaW4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIHRvIGFjY291bnQgZm9yIDItYnl0ZSBhbGlnbm1lbnQgd2hlbiBjaGVja2luZyByZW1haW5pbmcgcGFja2V0IGJ1ZmZlciBsZW5ndGguIFRoaXMgY29kZSBydW5zIGluIHRoZSBBU0lYIFVTQiBldGhlcm5ldCBkcml2ZXIncyBSWCBwYXRoIGFuZCBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24vZnV6emluZyAoZS5nLiwgVVNCIHJhdy1nYWRnZXQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFmNTAzMDYyY2U3YzcwNDM3NjcyYTM5NTExNDZlZmM3YTFkYjc3OWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDExOjU2OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY1xuaW5kZXggNGYwM2Y0ZTU3NjU1ZC4uYzUwNjQ2ZWEzNWM3ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY1xuQEAgLTE0OCw3ICsxNDgsNyBAQCBpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKiBBbHNvIGF2b2lkIHVubmVjZXNzYXJpbHkgZGlzY2FyZGluZyBhIGdvb2QgY3VycmVudCBuZXRkZXYgc29ja2V0XG4gXHQgKiBidWZmZXIuXG4gXHQgKi9cbi1cdGlmIChyeC1cdTAwM2VyZW1haW5pbmcgXHUwMDI2XHUwMDI2IChyeC1cdTAwM2VyZW1haW5pbmcgKyBzaXplb2YodTMyKSBcdTAwM2M9IHNrYi1cdTAwM2VsZW4pKSB7XG4rXHRpZiAocngtXHUwMDNlcmVtYWluaW5nIFx1MDAyNlx1MDAyNiAoKChyeC1cdTAwM2VyZW1haW5pbmcgKyAxKSBcdTAwMjYgMHhmZmZlKSArIHNpemVvZih1MzIpIFx1MDAzYz0gc2tiLVx1MDAzZWxlbikpIHtcbiBcdFx0b2Zmc2V0ID0gKChyeC1cdTAwM2VyZW1haW5pbmcgKyAxKSBcdTAwMjYgMHhmZmZlKTtcbiBcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICsgb2Zmc2V0KTtcbiBcdFx0b2Zmc2V0ID0gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU2OjA3LjE4Mjg1ODk3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDIxMjM5NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQVNJWCBVU0IgTmV0d29yayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoLCBhbmQgaXQgc2VlbXMgdG8gdGFyZ2V0IGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AuIEFscmlnaHQsIGxldCdzIGxvb2sgYXQgdGhlIGRpZmYuIEl0J3MgYSBmYWlybHkgc21hbGwgY2hhbmdlLCB0aGFua2Z1bGx5LiBMb29raW5nIGF0IGl0LCBpdCBzZWVtcyB0byBiZSBjaGFuZ2luZyB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50IHdpdGhpbiB0aGUgYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBjaGVjayBpbnZvbHZpbmcgYHJ4LVx1MDAzZXJlbWFpbmluZ2AgYW5kIGBza2ItXHUwMDNlbGVuYC4gSSBzZWUgYSBzbGlnaHQgbW9kaWZpY2F0aW9uIHRvIHRoZSBvZmZzZXQgY2FsY3VsYXRpb24uIEl0IGFwcGVhcnMgdGhhdCBgKHJ4LVx1MDAzZXJlbWFpbmluZyArIDEpIFx1MDAyNiAweGZmZmVgIGhhcyBiZWVuIGFkZGVkLiBUaGF0IGxpa2VseSBtZWFucyB0aGV5J3JlIGRlYWxpbmcgd2l0aCBhbGlnbm1lbnQuIEl0J3MgcHJvYmFibHkgdG8gaGFuZGxlIHNvbWUgc3BlY2lmaWMgaGFyZHdhcmUgcXVpcmsgb3IgYSBzcGVjaWZpYyBkYXRhIGxheW91dCBmcm9tIHRoZSBVU0IgZGV2aWNlLCByaWdodD8gSXQgY291bGQgYmUgcmVsYXRlZCB0byBzb21lIHBhZGRpbmcgb3IgYWxpZ25tZW50IHJlcXVpcmVtZW50IG9mIHRoZSBSWCBidWZmZXIuXG5cblRvIGNvbmZpcm0gbXkgaW5pdGlhbCB0aG91Z2h0cywgSSdsbCBxdWlja2x5IHVzZSBgcmVhZC1maWxlYCB0byBncmFiIHRoZSBjb250ZXh0IGFyb3VuZCBsaW5lIDE0OCBvZiBgZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNgLiBJIG5lZWQgYSBmdWxsZXIgcGljdHVyZSBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIExldCdzIHNlZSBpZiB0aGUgY29udGV4dCB3aWxsIGhlbHAgbWUgd2l0aCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTM4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6MjguMjA0MTAxMjg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHQgKi9cXG4gMTMxOlxcdFxcdHJ4LVxcdTAwM2VyZW1haW5pbmcgPSAwO1xcbiAxMzI6XFx0XFx0cngtXFx1MDAzZXNwbGl0X2hlYWQgPSBmYWxzZTtcXG4gMTMzOlxcdFxcdHJ4LVxcdTAwM2VoZWFkZXIgPSAwO1xcbiAxMzQ6XFx0fVxcbiAxMzU6XFx0XFxuIDEzNjpcXHRpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIDEzNzpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeClcXG4gMTM4OlxcdHtcXG4gMTM5OlxcdFxcdGludCBvZmZzZXQgPSAwO1xcbiAxNDA6XFx0XFx0dTE2IHNpemU7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdC8qIFdoZW4gYW4gRXRoZXJuZXQgZnJhbWUgc3BhbnMgbXVsdGlwbGUgVVJCIHNvY2tldCBidWZmZXJzLFxcbiAxNDM6XFx0XFx0ICogZG8gYSBzYW5pdHkgdGVzdCBmb3IgdGhlIERhdGEgaGVhZGVyIHN5bmNocm9uaXNhdGlvbi5cXG4gMTQ0OlxcdFxcdCAqIEF0dGVtcHQgdG8gZGV0ZWN0IHRoZSBzaXR1YXRpb24gb2YgdGhlIHByZXZpb3VzIHNvY2tldCBidWZmZXIgaGF2aW5nXFxuIDE0NTpcXHRcXHQgKiBiZWVuIHRydW5jYXRlZCBvciBhIHNvY2tldCBidWZmZXIgd2FzIG1pc3NpbmcuIFRoZXNlIHNpdHVhdGlvbnNcXG4gMTQ2OlxcdFxcdCAqIGNhdXNlIGEgZGlzY29udGludWl0eSBpbiB0aGUgZGF0YSBzdHJlYW0gYW5kIHRoZXJlZm9yZSBuZWVkIHRvIGF2b2lkXFxuIDE0NzpcXHRcXHQgKiBhcHBlbmRpbmcgYmFkIGRhdGEgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBuZXRkZXYgc29ja2V0IGJ1ZmZlci5cXG4gMTQ4OlxcdFxcdCAqIEFsc28gYXZvaWQgdW5uZWNlc3NhcmlseSBkaXNjYXJkaW5nIGEgZ29vZCBjdXJyZW50IG5ldGRldiBzb2NrZXRcXG4gMTQ5OlxcdFxcdCAqIGJ1ZmZlci5cXG4gMTUwOlxcdFxcdCAqL1xcbiAxNTE6XFx0XFx0aWYgKHJ4LVxcdTAwM2VyZW1haW5pbmcgXFx1MDAyNlxcdTAwMjYgKCgocngtXFx1MDAzZXJlbWFpbmluZyArIDEpIFxcdTAwMjYgMHhmZmZlKSArIHNpemVvZih1MzIpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuKSkge1xcbiAxNTI6XFx0XFx0XFx0b2Zmc2V0ID0gKChyeC1cXHUwMDNlcmVtYWluaW5nICsgMSkgXFx1MDAyNiAweGZmZmUpO1xcbiAxNTM6XFx0XFx0XFx0cngtXFx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUzMihza2ItXFx1MDAzZWRhdGEgKyBvZmZzZXQpO1xcbiAxNTQ6XFx0XFx0XFx0b2Zmc2V0ID0gMDtcXG4gMTU1OlxcdFxcbiAxNTY6XFx0XFx0XFx0c2l6ZSA9ICh1MTYpKHJ4LVxcdTAwM2VoZWFkZXIgXFx1MDAyNiAweDdmZik7XFxuIDE1NzpcXHRcXHRcXHRpZiAoc2l6ZSAhPSAoKH5yeC1cXHUwMDNlaGVhZGVyIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4N2ZmKSkge1xcbiAxNTg6XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBEYXRhIEhlYWRlciBzeW5jaHJvbmlzYXRpb24gd2FzIGxvc3QsIHJlbWFpbmluZyAlZFxcXFxuXFxcIixcXG4gMTU5OlxcdFxcdFxcdFxcdFxcdCAgIHJ4LVxcdTAwM2VyZW1haW5pbmcpO1xcbiAxNjA6XFx0XFx0XFx0XFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcXG4gMTYxOlxcdFxcdFxcdH1cXG4gMTYyOlxcdFxcdH1cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0d2hpbGUgKG9mZnNldCArIHNpemVvZih1MTYpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuKSB7XFxuIDE2NTpcXHRcXHRcXHR1MTYgY29weV9sZW5ndGg7XFxuIDE2NjpcXHRcXG4gMTY3OlxcdFxcdFxcdGlmICghcngtXFx1MDAzZXJlbWFpbmluZykge1xcbiAxNjg6XFx0XFx0XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0ID09IHNpemVvZih1MTYpKSB7XFxuIDE2OTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFxcbiAxNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KTtcXG4gMTcxOlxcdFxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VzcGxpdF9oZWFkID0gdHJ1ZTtcXG4gMTcyOlxcdFxcdFxcdFxcdFxcdG9mZnNldCArPSBzaXplb2YodTE2KTtcXG4gMTczOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNzQ6XFx0XFx0XFx0XFx0fVxcbiAxNzU6XFx0XFxuIDE3NjpcXHRcXHRcXHRcXHRpZiAocngtXFx1MDAzZXNwbGl0X2hlYWQgPT0gdHJ1ZSkge1xcbiAxNzc6XFx0XFx0XFx0XFx0XFx0cngtXFx1MDAzZWhlYWRlciB8PSAoZ2V0X3VuYWxpZ25lZF9sZTE2KFxcbiAxNzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KSBcXHUwMDNjXFx1MDAzYyAxNik7XFxuIDE3OTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlc3BsaXRfaGVhZCA9IGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1NjoyOC4yMDQyNzYzMDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjc3ODA3Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQVNJWCBVU0IgTmV0d29yayBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jYC4gSXQncyBjbGVhciB0aGF0IHRoaXMgaXMgY29yZSBjb2RlIGZvciB0aGUgVVNCIG5ldHdvcmsgZHJpdmVycyBzcGVjaWZpY2FsbHkgZm9yIEFTSVggQVg4OHh4eCBkZXZpY2VzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBrbm93IHRoYXQgc3l6a2FsbGVyIGlzIGFuIG9idmlvdXMgY2FuZGlkYXRlIGZvciB0aGlzLiBTcGVjaWZpY2FsbHksIGl0cyBVU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcyDigJMgdGhlIGdhZGdldCBtb2RlLCByYXctZ2FkZ2V0IG1vZGUsIG9yIGV2ZW4gdmhjaSDigJMgYXJlIGV4dHJlbWVseSByZWxldmFudCBoZXJlLlxuXG5UaGUga2V5IGlzIGlmIHN5emthbGxlciBjYW4gcHJvYmUgdGhlIFVTQiBuZXR3b3JrIGRyaXZlcnMgZWZmZWN0aXZlbHkuIEFuZCB0aGUgYW5zd2VyIGlzIHllcy4gSXQncyBkZXNpZ25lZCB0byBwcm9iZSB0aGVzZSB0eXBlcyBvZiBkcml2ZXJzLiBJIGNhbiBsZXZlcmFnZSBpdCB0byBlbXVsYXRlIFVTQiBkZXZpY2VzIGFuZCBzZW5kIHRoZSByaWdodCB0eXBlIG9mIFVSQnMgYW5kIHBhY2tldHMgdG8gdGhlIGRyaXZlciwgcG90ZW50aWFsbHkgaGl0dGluZyB0aGUgYHJ4X2ZpeHVwYCBjYWxsYmFja3MuIFRoYXQncyB3aGVyZSBpbnRlcmVzdGluZyBidWdzIG9mdGVuIGx1cmsuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZW50cnkgbmV4dCB0byBjb25maXJtIGl0IGlzIGVuYWJsZWQgb24gdGhlIHRhcmdldCBzeXN0ZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDI3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6MzAuODgyMDg3NTA4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MDE4MDc0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhc2l4X2NvbW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTEzPW9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxN1gpXFx0Kz0gYXNpeC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjE0OmFzaXgteSA6PSBhc2l4X2RldmljZXMubyBhc2l4X2NvbW1vbi5vIGF4ODgxNzJhLm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtMTUtb2JqLSQoQ09ORklHX1VTQl9ORVRfQVg4ODE3OV8xNzhBKSAgICAgICs9IGF4ODgxNzlfMTc4YS5vXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oPTE3MT1zdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMTc3LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MTc4OnN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlIHtcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTE3OS1cXHR2b2lkICgqcmVzdW1lKShzdHJ1Y3QgdXNibmV0ICpkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaD0yMTE9aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTI6dm9pZCBhc2l4X3J4X2ZpeHVwX2NvbW1vbl9mcmVlKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTMtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz0yNDI9aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNDMte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI0NDpcXHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqZHAgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0NS1cXHRzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeCA9IFxcdTAwMjZkcC1cXHUwMDNlcnhfZml4dXBfaW5mbztcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0OS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoyNTA6dm9pZCBhc2l4X3J4X2ZpeHVwX2NvbW1vbl9mcmVlKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcClcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNTEte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTI5ND1zdGF0aWMgdm9pZCBheDg4NzcyX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMjk3LVxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoyOTg6XFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0yOTktXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MzAzPXN0YXRpYyBpbnQgYXg4ODc3Ml9ldGh0b29sX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTMwNi1cXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MzA3OlxcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMzA4LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTMzMj1zdGF0aWMgaW50IGF4ODg3NzJfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTMzNC1cXHRzdHJ1Y3QgYXNpeF9kYXRhICpkYXRhID0gKHN0cnVjdCBhc2l4X2RhdGEgKilcXHUwMDI2ZGV2LVxcdTAwM2VkYXRhO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzozMzU6XFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0zMzYtXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0zNjI9c3RhdGljIGludCBheDg4NzcyX2h3X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTM2NC1cXHRzdHJ1Y3QgYXNpeF9kYXRhICpkYXRhID0gKHN0cnVjdCBhc2l4X2RhdGEgKilcXHUwMDI2ZGV2LVxcdTAwM2VkYXRhO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzozNjU6XFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0zNjYtXFx0dTE2IHJ4X2N0bDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz00NTY9c3RhdGljIGludCBheDg4NzcyYV9od19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBpbl9wbSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy00NTgtXFx0c3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopXFx1MDAyNmRldi1cXHUwMDNlZGF0YTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NDU5OlxcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNDYwLVxcdHUxNiByeF9jdGwsIHBoeTE0aCwgcGh5MTVoLCBwaHkxNmg7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NTk2PXN0YXRpYyB2b2lkIGF4ODg3NzJfc3VzcGVuZChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTU5Ny17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjU5ODpcXHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTU5OS1cXHR1MTYgbWVkaXVtO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTYzMT1zdGF0aWMgaW50IGFzaXhfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjMzLVxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjYzNDpcXHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTYzNS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz02NDI9c3RhdGljIHZvaWQgYXg4ODc3Ml9yZXN1bWUoc3RydWN0IHVzYm5ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02NDMte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2NDQ6XFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02NDUtXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjU4PXN0YXRpYyBpbnQgYXNpeF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjYwLVxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY2MTpcXHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY2Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz02Njk9c3RhdGljIGludCBheDg4NzcyX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY3MC17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY3MTpcXHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY3Mi1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY5Ni1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njk3OnN0YXRpYyB2b2lkIGF4ODg3NzJfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2KVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02OTgte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTcwMz1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9waHkoc3RydWN0IHVzYm5ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MDQte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo3MDU6XFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MDYtXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz03OTk9c3RhdGljIGludCBheDg4NzcyX3BoeWxpbmtfc2V0dXAoc3RydWN0IHVzYm5ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy04MDAte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo4MDE6XFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy04MDItXFx0cGh5X2ludGVyZmFjZV90IHBoeV9pZl9tb2RlO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTgyOT1zdGF0aWMgaW50IGF4ODg3NzJfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy04MzAte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo4MzE6XFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXY7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTgzMi1cXHR1OCBidWZbRVRIX0FMRU5dID0gezB9O1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTk0Nj1zdGF0aWMgaW50IGF4ODg3NzJfc3RvcChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTk0Ny17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjk0ODpcXHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTk0OS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz05NTU9c3RhdGljIHZvaWQgYXg4ODc3Ml91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtOTU2LXtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6OTU3OlxcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtOTU4LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTEyNzE9c3RhdGljIGludCBheDg4MTc4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMzE4LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxMzE5OlxcdGRldi1cXHUwMDNlZHJpdmVyX3ByaXYgPSBremFsbG9jX29iaihzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTEzMjAtXFx0aWYgKCFkZXYtXFx1MDAzZWRyaXZlcl9wcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jLTQtICpcXG5kcml2ZXJzL25ldC91c2Ivc3I5ODAwLmM6NTogKiBCYXNlZCBvbiBhc2l4X2NvbW1vbi5jLCBhc2l4X2RldmljZXMuY1xcbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYy02LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU2OjMxLjIyMjI3Nzg2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkwMDMyNzI4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvbmZpZ3VyYXRpb24gcXVlc3Rpb24sIHRoaW5raW5nIHRocm91Z2ggaXQgc3RlcC1ieS1zdGVwOlxuXG4qKkNoZWNraW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBBWDg4MTdYIFVTQiBOZXR3b3JraW5nIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCBzbyBzb21lb25lJ3MgYXNraW5nIGFib3V0IGhvdyB0byBlbmFibGUgdGhlIEFYODgxN1ggVVNCIG5ldHdvcmtpbmcgZHJpdmVyLiBNeSBmaXJzdCBpbnN0aW5jdCwgYmVpbmcgd2VsbC12ZXJzZWQgaW4ga2VybmVsIGNvbmZpZ3VyYXRpb24sIGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBpdCdzIHdoZXJlIHRoZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgY29uZmlndXJhdGlvbnMgdXN1YWxseSBsaXZlLiBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgbWU7IGl0J3MgcHJhY3RpY2FsbHkgbXVzY2xlIG1lbW9yeSBhdCB0aGlzIHBvaW50LlxuXG5NeSB0aGlua2luZyBpcywgd2l0aGluIHRoYXQgYEtjb25maWdgIGZpbGUsIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgbGlrZSBgQ09ORklHX1VTQl9ORVRfQVg4ODE3WGAuIFRoZSBrZXkgaXMgdG8gZmluZCB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5UaGVuLCBvbmNlIEkndmUgbG9jYXRlZCBpdCwgdGhlICpyZWFsKiB3b3JrIGJlZ2lucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gRG9lcyBpdCByZWx5IG9uIGBDT05GSUdfVVNCX05FVGAgYmVpbmcgZW5hYmxlZD8gRG9lcyBpdCBkZXBlbmQgb24gc3BlY2lmaWMgVVNCIGNvbnRyb2xsZXIgc3VwcG9ydD8gTWF5YmUgYSBnZW5lcmFsIFVTQiBuZXR3b3JraW5nIGZyYW1ld29yaz8gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgYEtjb25maWdgIGZpbGUgdG8gc2VlIHdoYXQgb3RoZXIgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoaXMgb25lIHRvIGJlIGF2YWlsYWJsZSwgdG8gdW5kZXJzdGFuZCB0aGUgY2hhaW4gb2YgZGVwZW5kZW5jaWVzLiBJdCdzIG5vdCBqdXN0IGFib3V0IGZsaXBwaW5nIGEgc3dpdGNoOyBpdCdzIGFib3V0IG1ha2luZyBzdXJlIGFsbCB0aGUgc3VwcG9ydGluZyBpbmZyYXN0cnVjdHVyZSBpcyBpbiBwbGFjZS4gSSBoYXZlIHRvIGxvb2sgZm9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIG9yIG90aGVyIGNvbmRpdGlvbnMuXG5cbkVzc2VudGlhbGx5LCBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyB3aXRoaW4gYEtjb25maWdgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCdzIG5lZWRlZCBmb3IgdGhlIEFYODgxN1ggZHJpdmVyIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpcyBicmVhZCBhbmQgYnV0dGVyIGZvciBtZSwgZW5zdXJpbmcgdGhlIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdCBpcyBhbiBpbXBvcnRhbnQgcGFydCBvZiB0aGUgam9iLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTIyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6MzQuMTIyNjA3OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODkzMjIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJVU0JfTkVUX0FYODgxN1hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTEzMj1jb25maWcgVVNCX1VTQk5FVFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTY1LVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjE2Njpjb25maWcgVVNCX05FVF9BWDg4MTdYXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTY3LVxcdHRyaXN0YXRlIFxcXCJBU0lYIEFYODh4eHggQmFzZWQgVVNCIDIuMCBFdGhlcm5ldCBBZGFwdGVyc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfVVNCX0xBTjc4WFgpXFx0Kz0gbGFuNzh4eC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxN1gpXFx0Kz0gYXNpeC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTE0LWFzaXgteSA6PSBhc2l4X2RldmljZXMubyBhc2l4X2NvbW1vbi5vIGF4ODgxNzJhLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6MzQuMjIxNTQzOTIzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg0NzcwNzY0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipEZWx2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBVU0IgTmV0d29ya2luZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNjYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBVU0IgbmV0d29ya2luZyBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY2llcywgb3B0aW9ucywgYW5kIGRlZmF1bHRzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBmZWF0dXJlIG9yIGRyaXZlci4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB0aGlzIHNlY3Rpb24gb2YgdGhlIEtjb25maWcgaG9sZHMuIFRoaXMgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBzb21lIHZhbHVhYmxlIGNvbnRleHQgYXMgSSBhbSBkZWJ1Z2dpbmcgYSBwcm9ibGVtIGluIHRoaXMgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE3MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU2OjM2LjA2OTI1NTI2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTYwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdFxcbiAxNjE6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgXFx1MDAzY2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy91c2JuZXQvXFx1MDAzZS5cXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gMTY0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYm5ldC5cXG4gMTY1OlxcdFxcbiAxNjY6XFx0Y29uZmlnIFVTQl9ORVRfQVg4ODE3WFxcbiAxNjc6XFx0XFx0dHJpc3RhdGUgXFxcIkFTSVggQVg4OHh4eCBCYXNlZCBVU0IgMi4wIEV0aGVybmV0IEFkYXB0ZXJzXFxcIlxcbiAxNjg6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuIDE2OTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gMTcwOlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuIDE3MTpcXHRcXHRzZWxlY3QgQVg4ODc5NkJfUEhZXFxuIDE3MjpcXHRcXHRpbXBseSBORVRfU0VMRlRFU1RTXFxuIDE3MzpcXHRcXHRkZWZhdWx0IHlcXG4gMTc0OlxcdFxcdGhlbHBcXG4gMTc1OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBBU0lYIEFYODh4eHggYmFzZWQgVVNCIDIuMFxcbiAxNzY6XFx0XFx0ICAxMC8xMDAgRXRoZXJuZXQgYWRhcHRlcnMuXFxuIDE3NzpcXHRcXG4gMTc4OlxcdFxcdCAgVGhpcyBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGRldmljZXM6XFxuIDE3OTpcXHRcXHQgICAgKiBBdGVuIFVDMjEwVFxcbiAxODA6XFx0XFx0ICAgICogQVNJWCBBWDg4MTcyXFxuIDE4MTpcXHRcXHQgICAgKiBCaWxsaW9udG9uIFN5c3RlbXMsIFVTQjJBUlxcbiAxODI6XFx0XFx0ICAgICogQmlsbGlvbnRvbiBTeXN0ZW1zLCBHVVNCMkFNLTFHLUJcXG4gMTgzOlxcdFxcdCAgICAqIEJ1ZmZhbG8gTFVBLVUyLUtUWFxcbiAxODQ6XFx0XFx0ICAgICogQ29yZWdhIEZFdGhlciBVU0IyLVRYXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU2OjM2LjA2OTM3ODQ0NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTMxMjQzMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6XG5cbioqQW5hbHl6aW5nIFVTQiBOZXR3b3JrIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBVU0IgbmV0d29yayBkcml2ZXIgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBBWDg4MTdYIGRyaXZlci4gRmlyc3QgdGhpbmcncyBmaXJzdDogYFVTQl9ORVRfQVg4ODE3WGAgcmVsaWVzIG9uIHRoZSBgVVNCX1VTQk5FVGAgY29uZmlndXJhdGlvbiBvcHRpb24sIHdoaWNoLCBpbiB0dXJuLCBoaW5nZXMgb24gdGhlIG1vcmUgZ2VuZXJhbCBgVVNCX05FVF9EUklWRVJTYCBhbmQgdGhlIGJhc2UgYFVTQmAgb3B0aW9uLiBHb3QgaXQsIHRoaXMgaXMgc3RhbmRhcmQgZGVwZW5kZW5jeSB0cmFja2luZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNoYWluIGNvcnJlY3RseS5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGFzaXggZHJpdmVyLCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2FsbGluZyBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAuIEkgd2FudCB0byB0cmFjayBkb3duIGV2ZXJ5d2hlcmUgaXQgaXMgY2FsbGVkLiBUaGF0IG1lYW5zIGxvb2tpbmcgaW4gYGFzaXhfY29tbW9uLmNgIGZpcnN0LCBvYnZpb3VzbHksIGJ1dCBJJ2xsIG5lZWQgdG8gY2hlY2sgZWxzZXdoZXJlIHRvbywganVzdCBpbiBjYXNlIHRoZXJlIGFyZSBvdGhlciBtb2R1bGVzIGludm9sdmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGJyb2FkZXIgZHJpdmVyIGFyY2hpdGVjdHVyZSwgc28gdW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgaXMgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NTQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU2OjM4LjIwMDYyNTY2NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxNTYxMjYyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhc2l4X3J4X2ZpeHVwX2ludGVybmFsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg9MjA2PXZvaWQgYXNpeF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA4LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjA5OmludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIxMC1cXHRcXHRcXHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeCk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz0xMTU9c3RhdGljIHZvaWQgcmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTE3LVxcdC8qIFJlc2V0IHRoZSB2YXJpYWJsZXMgdGhhdCBoYXZlIGEgbGlmZXRpbWUgb3V0c2lkZSBvZlxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjExODpcXHQgKiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgc28gdGhhdCBmdXR1cmUgcHJvY2Vzc2luZyBzdGFydHMgZnJvbSBhXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTE5LVxcdCAqIGtub3duIHNldCBvZiBpbml0aWFsIGNvbmRpdGlvbnMuXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMzUtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTM2OmludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMzctXFx0XFx0XFx0ICAgc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz0yNDI9aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0Ni1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoyNDc6XFx0cmV0dXJuIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoZGV2LCBza2IsIHJ4KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNDgtfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MzM5PXN0YXRpYyBpbnQgYXg4ODE3MmFfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzQzLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjM0NDpcXHRyZXR1cm4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbChkZXYsIHNrYiwgcngpO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTM0NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU2OjQxLjIxNjI0MzExNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTQzODE0MDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBVU0IgRHJpdmVyIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiB0aGUgQVNJWCBBWDg4eHh4IFVTQiBuZXR3b3JraW5nIGRyaXZlci4gSSBzZWUgdGhhdCBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgYnkgYGFzaXhfcnhfZml4dXBfY29tbW9uYCBhbmQgYGF4ODgxNzJhX3J4X2ZpeHVwYC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IGNoYW5nZWQuXG5cbkFoYSEgVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGxpZXMgd2l0aGluIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYC4gSXQncyBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgY2hhbmdlIGluIHRoZSBvZmZzZXQgY2FsY3VsYXRpb246XG5cbmBgYGNcbi1cdGlmIChyeC1cdTAwM2VyZW1haW5pbmcgXHUwMDI2XHUwMDI2IChyeC1cdTAwM2VyZW1haW5pbmcgKyBzaXplb2YodTMyKSBcdTAwM2M9IHNrYi1cdTAwM2VsZW4pKSB7XG4rXHRpZiAocngtXHUwMDNlcmVtYWluaW5nIFx1MDAyNlx1MDAyNiAoKChyeC1cdTAwM2VyZW1haW5pbmcgKyAxKSBcdTAwMjYgMHhmZmZlKSArIHNpemVvZih1MzIpIFx1MDAzYz0gc2tiLVx1MDAzZWxlbikpIHtcbiBcdFx0b2Zmc2V0ID0gKChyeC1cdTAwM2VyZW1haW5pbmcgKyAxKSBcdTAwMjYgMHhmZmZlKTtcbiBcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICsgb2Zmc2V0KTtcbiBcdFx0b2Zmc2V0ID0gMDtcbmBgYFxuXG5QcmV2aW91c2x5LCB0aGUgY29kZSB3YXMgdnVsbmVyYWJsZSB0byBhIGJ1ZmZlciBvdmVycnVuLCB0cmlnZ2VyZWQgYnkgYW4gb2RkIHZhbHVlIGZvciBgcngtXHUwMDNlcmVtYWluaW5nYCBhbmQgYSBzcGVjaWZpYyBgc2tiLVx1MDAzZWxlbmAuIEZvciBleGFtcGxlLCB3aXRoIGByeC1cdTAwM2VyZW1haW5pbmcgPSAxYCBhbmQgYHNrYi1cdTAwM2VsZW4gPSA1YCwgdGhlIG9yaWdpbmFsIGNoZWNrIHBhc3NlZCBiZWNhdXNlIGAxICsgNCBcdTAwM2M9IDVgLiBIb3dldmVyLCB0aGUgc3Vic2VxdWVudCBgb2Zmc2V0YCBjYWxjdWxhdGlvbiByZXN1bHRlZCBpbiByZWFkaW5nIGZvdXIgYnl0ZXMgZnJvbSBhbiBvZmZzZXQgb2YgMiwgbGVhZGluZyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gYSA1LWJ5dGUgYnVmZmVyLiBUaGlzIGlzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGEgc3VidGxlIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgdGhhdCdzIHJpcGUgZm9yIGV4cGxvaXRhdGlvbi5cblxuU28sIHRoaXMgcGF0Y2ggZml4ZXMgdGhpcyBmbGF3IGJ5IGNvcnJlY3RseSBjYWxjdWxhdGluZyB0aGUgb2Zmc2V0IHRvIHByZXZlbnQgdGhpcyBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBwYXJzaW5nIGluY29taW5nIFVTQiBwYWNrZXQgc3RyZWFtcy5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgZXhwbG9pdGFiaWxpdHkgYW5kIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIFRoaXMgYnVnIGlzIGNlcnRhaW5seSByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGluIGEga2VybmVsIFVTQiBuZXR3b3JraW5nIGRyaXZlciAoQVNJWCBBWDg4eHh4KSwgd2hpY2ggbWFrZXMgaXQgYSB2ZXJ5IGFwcGVhbGluZyB0YXJnZXQuIEl0IGNhbiBiZSBzdGltdWxhdGVkIHZpYSBVU0IgZ2FkZ2V0LCByYXctZ2FkZ2V0LCBvciBldmVuIHBhY2tldCBmdXp6aW5nIHZpYSBzeXprYWxsZXIsIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB0cmlnZ2VyIHRoZSB2dWxuZXJhYmlsaXR5LlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgdHJ1ZS5cblxuTm93IGZvciBGb2N1c1N5bWJvbHM6XG5cbiogICBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgKG5vbi1zdGF0aWMgZnVuY3Rpb24gaW4gYXNpeFxcX2NvbW1vbi5jKVxuKiAgIGBhc2l4X3J4X2ZpeHVwX2NvbW1vbmAgKGluIGFzaXhcXF9jb21tb24uYylcbiogICBgYXg4ODE3MmFfcnhfZml4dXBgIChpbiBheDg4MTcyYS5jKVxuXG5OZXh0IHN0ZXAsIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgY2FsbGVycyBvZiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgb3IgYGFzaXhfcnhfZml4dXBfY29tbW9uYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcxMSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1Njo0Ni4xNjAwNTk2NzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTkxMjc3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXNpeF9yeF9maXh1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeC5oPTE2Mz1zdHJ1Y3QgYXNpeF9kYXRhIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMTcwLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MTcxOnN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8ge1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMTcyLVxcdHN0cnVjdCBza19idWZmICpheF9za2I7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oPTE3OD1zdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTE4My1cXHR1MTYgcHJlc3ZkX3BoeV9ibWNyO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MTg0OlxcdHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gcnhfZml4dXBfaW5mbztcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTE4NS1cXHRzdHJ1Y3QgbWlpX2J1cyAqbWRpbztcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg9MjA2PXZvaWQgYXNpeF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA4LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjA5OmludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIxMDpcXHRcXHRcXHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTE6aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTI6dm9pZCBhc2l4X3J4X2ZpeHVwX2NvbW1vbl9mcmVlKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTMtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz05Mj1zdGF0aWMgaW50IGFzaXhfY2hlY2tfaG9zdF9lbmFibGUoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgaW5fcG0pXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTQtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTE1OnN0YXRpYyB2b2lkIHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeClcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTYte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTExNy1cXHQvKiBSZXNldCB0aGUgdmFyaWFibGVzIHRoYXQgaGF2ZSBhIGxpZmV0aW1lIG91dHNpZGUgb2ZcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxMTg6XFx0ICogYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIHNvIHRoYXQgZnV0dXJlIHByb2Nlc3Npbmcgc3RhcnRzIGZyb20gYVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTExOS1cXHQgKiBrbm93biBzZXQgb2YgaW5pdGlhbCBjb25kaXRpb25zLlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTM1LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjEzNjppbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTM3OlxcdFxcdFxcdCAgIHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzOC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xNTctXFx0XFx0aWYgKHNpemUgIT0gKCh+cngtXFx1MDAzZWhlYWRlciBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweDdmZikpIHtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxNTg6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBEYXRhIEhlYWRlciBzeW5jaHJvbmlzYXRpb24gd2FzIGxvc3QsIHJlbWFpbmluZyAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xNTktXFx0XFx0XFx0XFx0ICAgcngtXFx1MDAzZXJlbWFpbmluZyk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTYwOlxcdFxcdFxcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTYxLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTE4OS1cXHRcXHRcXHRpZiAoc2l6ZSAhPSAoKH5yeC1cXHUwMDNlaGVhZGVyIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4N2ZmKSkge1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjE5MDpcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiYXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIDB4JXgsIG9mZnNldCAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xOTEtXFx0XFx0XFx0XFx0XFx0ICAgcngtXFx1MDAzZWhlYWRlciwgb2Zmc2V0KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxOTI6XFx0XFx0XFx0XFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xOTMtXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xOTUtXFx0XFx0XFx0aWYgKHNpemUgXFx1MDAzZSBkZXYtXFx1MDAzZW5ldC1cXHUwMDNlbXR1ICsgRVRIX0hMRU4gKyBWTEFOX0hMRU4pIHtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxOTY6XFx0XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBCYWQgUlggTGVuZ3RoICVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTE5Ny1cXHRcXHRcXHRcXHRcXHQgICBzaXplKTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxOTg6XFx0XFx0XFx0XFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xOTktXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yMzItXFx0aWYgKHNrYi1cXHUwMDNlbGVuICE9IG9mZnNldCkge1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjIzMzpcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiYXNpeF9yeF9maXh1cCgpIEJhZCBTS0IgTGVuZ3RoICVkLCAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yMzQtXFx0XFx0XFx0ICAgc2tiLVxcdTAwM2VsZW4sIG9mZnNldCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjM1OlxcdFxcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjM2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjQxLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI0MjppbnQgYXNpeF9yeF9maXh1cF9jb21tb24oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0My17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjQ0LVxcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcCA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjQ1OlxcdHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4ID0gXFx1MDAyNmRwLVxcdTAwM2VyeF9maXh1cF9pbmZvO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0Ni1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoyNDc6XFx0cmV0dXJuIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoZGV2LCBza2IsIHJ4KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNDgtfVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0OS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoyNTA6dm9pZCBhc2l4X3J4X2ZpeHVwX2NvbW1vbl9mcmVlKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcClcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNTEte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI1MjpcXHRzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeDtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNTMtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9OTU1PXN0YXRpYyB2b2lkIGF4ODg3NzJfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtOTYzLVxcdGF4ODg3NzJfbWRpb191bnJlZ2lzdGVyKHByaXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo5NjQ6XFx0YXNpeF9yeF9maXh1cF9jb21tb25fZnJlZShkZXYtXFx1MDAzZWRyaXZlcl9wcml2KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtOTY1LVxcdC8qIERyb3AgdGhlIFBNIHVzYWdlIHJlZiB0YWtlbiBpbiBiaW5kKCkgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz05Njk9c3RhdGljIHZvaWQgYXg4ODE3OF91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtOTcwLXtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6OTcxOlxcdGFzaXhfcnhfZml4dXBfY29tbW9uX2ZyZWUoZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTk3Mi1cXHRrZnJlZShkZXYtXFx1MDAzZWRyaXZlcl9wcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0xMzY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODc3Ml9pbmZvID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTEzNzItXFx0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VULFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxMzczOlxcdC5yeF9maXh1cCA9IGFzaXhfcnhfZml4dXBfY29tbW9uLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMzc0LVxcdC50eF9maXh1cCA9IGFzaXhfdHhfZml4dXAsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MTM3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODg3NzJiX2luZm8gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTM4My1cXHQuZmxhZ3MgPSBGTEFHX0VUSEVSIHwgRkxBR19GUkFNSU5HX0FYIHwgRkxBR19NVUxUSV9QQUNLRVQsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEzODQ6XFx0LnJ4X2ZpeHVwID0gYXNpeF9yeF9maXh1cF9jb21tb24sXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTEzODUtXFx0LnR4X2ZpeHVwID0gYXNpeF90eF9maXh1cCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0xMzg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gbHhhdXNiX3QxbF9pbmZvID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTEzOTUtXFx0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VULFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxMzk2OlxcdC5yeF9maXh1cCA9IGFzaXhfcnhfZml4dXBfY29tbW9uLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMzk3LVxcdC50eF9maXh1cCA9IGFzaXhfdHhfZml4dXAsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MTQwMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxNzhfaW5mbyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xNDA5LVxcdFxcdCBGTEFHX01VTFRJX1BBQ0tFVCxcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MTQxMDpcXHQucnhfZml4dXAgPSBhc2l4X3J4X2ZpeHVwX2NvbW1vbixcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTQxMS1cXHQudHhfZml4dXAgPSBhc2l4X3R4X2ZpeHVwLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTE0MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBoZzIwZjlfaW5mbyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xNDI4LVxcdC5mbGFncyA9IEZMQUdfRVRIRVIgfCBGTEFHX0ZSQU1JTkdfQVggfCBGTEFHX01VTFRJX1BBQ0tFVCxcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MTQyOTpcXHQucnhfZml4dXAgPSBhc2l4X3J4X2ZpeHVwX2NvbW1vbixcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTQzMC1cXHQudHhfZml4dXAgPSBhc2l4X3R4X2ZpeHVwLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTE0MzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBseWNvbnN5c19maWJlcmdlY2tvMTAwX2luZm8gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTQ0MS1cXHRcXHQgRkxBR19NVUxUSV9QQUNLRVQsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjE0NDI6XFx0LnJ4X2ZpeHVwID0gYXNpeF9yeF9maXh1cF9jb21tb24sXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTE0NDMtXFx0LnR4X2ZpeHVwID0gYXNpeF90eF9maXh1cCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTE4PXN0cnVjdCBheDg4MTcyYV9wcml2YXRlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTI0LVxcdGludCB1c2VfZW1iZHBoeTtcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzoyNTpcXHRzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvIHJ4X2ZpeHVwX2luZm87XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMjYtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTMzOT1zdGF0aWMgaW50IGF4ODgxNzJhX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTM0MS1cXHRzdHJ1Y3QgYXg4ODE3MmFfcHJpdmF0ZSAqZHAgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjM0MjpcXHRzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeCA9IFxcdTAwMjZkcC1cXHUwMDNlcnhfZml4dXBfaW5mbztcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNDMtXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MzQ0OlxcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzQ1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6NDguNDE5MTkxNDUyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNjc3MjA1NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29uZmlndXJhdGlvbiBzaXR1YXRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBVU0JfTkVUX0FYODgxN1hgLiBUaGF0IG9uZSBpcyBhIGtleSBkcml2ZXIsIGJ1dCBpdCBoYXMgYSBmZXcgbGF5ZXJzLiBJdCByZWxpZXMgb24gYFVTQl9VU0JORVRgLCBgVVNCX05FVF9EUklWRVJTYCwgYW5kIHRoZSBiYXNlIGBVU0JgIGNvbmZpZ3VyYXRpb24sIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGFsbCBvZiB0aG9zZSBhcmUgcHJvcGVybHkgc2V0LCBhbmQgdGhhdCB0aGV5IGFyZSBjb3JyZWN0bHkgZW5hYmxlZCBmb3IgdGhpcyBzY2VuYXJpby5cblxuTm93LCBsZXQncyBzcGVjaWZpY2FsbHkgbG9vayBhdCBgVVNCX1VTQk5FVGAuIFNpbmNlIGBVU0JfTkVUX0FYODgxN1hgIGRlcGVuZHMgb24gaXQsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZW50cnkgZm9yIGl0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiBpdCdzIG5lZWRlZCBpbiB0aGlzIHNwZWNpZmljIGNhc2UuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZmVyZW5jZSB0aGUgS2NvbmZpZzpcblxuYGBga2NvbmZpZ1xuY29uZmlnIFVTQl9ORVRfQVg4ODE3WFxuXHR0cmlzdGF0ZSBcIkFTSVggQVg4OHh4eCBCYXNlZCBVU0IgMi4wIEV0aGVybmV0IEFkYXB0ZXJzXCJcblx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5gYGBcblxuQWxyaWdodCwgdGhlIEtjb25maWcgY29uZmlybXMgdGhlIGRpcmVjdCBkZXBlbmRlbmN5IG9mIGBVU0JfTkVUX0FYODgxN1hgIG9uIGBVU0JfVVNCTkVUYC4gVGhhdCdzIGdvb2QgYW5kIHN0cmFpZ2h0Zm9yd2FyZC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgVVNCX1VTQk5FVGAgaXMgcHJvcGVybHkgc2V0LiBJIGtub3cgdGhhdCwgaW4gbWFueSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGBVU0JfVVNCTkVUYCBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGZyYW1ld29yayBmb3IgVVNCIEV0aGVybmV0IGRldmljZXMuIEkgbmVlZCB0byBub3cgZm9jdXMgb24gY2hlY2tpbmcgdGhhdCBzcGVjaWZpYyBjb25maWcgc2V0dGluZyBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMzMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1Njo1MS41ODY5MTUzNjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzOTk1MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfVVNCTkVUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xMTM9Y29uZmlnIFVTQl9MQU43OFhYXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzEtXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTMyOmNvbmZpZyBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMzLVxcdHRyaXN0YXRlIFxcXCJNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6NTEuNjgwOTE1NjM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNzY0MDY0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFVTQl9VU0JORVQgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB0aG9yb3VnaGx5IGFzc2VzcyB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBgVVNCX1VTQk5FVGAgY29tcG9uZW50LiBJJ20gdGhpbmtpbmcsIHRoaXMgaXNuJ3QganVzdCBhIHNpbXBsZSBtb2R1bGU7IGl0J3MgYSBuZXR3b3JrLXJlbGF0ZWQgc3Vic3lzdGVtLCBzbyBpdCBsaWtlbHkgcmVsaWVzIG9uIGEgZmV3IGtleSBidWlsZGluZyBibG9ja3MuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGNhdGVnb3JpemUgdGhlc2UgZGVwZW5kZW5jaWVzIGludG8gc2V2ZXJhbCB0eXBlczpcblxuKiAgICoqSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIgKEhBTCk6KiogT2J2aW91c2x5LCBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGhhcmR3YXJlIGludGVyZmFjZXMgaXQgaW50ZXJhY3RzIHdpdGgg4oCTIHRoZSBVU0IgY29udHJvbGxlciBpdHNlbGYsIG9mIGNvdXJzZSwgYnV0IGFsc28gcG90ZW50aWFsIFBIWSBjb21wb25lbnRzLCBhbnkgRE1BIGVuZ2luZXMgaW52b2x2ZWQsIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcgbWVjaGFuaXNtcy4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIHJlZ2lzdGVyIGRlZmluaXRpb25zIGFuZCBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGVzZSBwZXJpcGhlcmFscy4gVGhlIGhhcmR3YXJlIGlzIGFsd2F5cyB0aGUgc3RhcnRpbmcgcG9pbnQuXG5cbiogICAqKlVTQiBTdGFjayBMYXllcjoqKiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHBpZWNlcyBvZiB0aGUgVVNCIHN0YWNrIGBVU0JfVVNCTkVUYCBsZXZlcmFnZXMuIElzIGl0IGEgZnVsbCBVU0Igc3RhY2ssIG9yIGEgc3RyaXBwZWQtZG93biB2ZXJzaW9uLCBwZXJoYXBzIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uPyBBcmUgdGhlcmUgc3BlY2lmaWMgY2xhc3MgZHJpdmVycyAoQ0RDLUVDTSwgUk5ESVMsIGV0Yy4pIGludm9sdmVkIGFuZCBob3cgYXJlIHRoZXkgaW50ZWdyYXRlZD8gSG93IGRvZXMgaXQgaGFuZGxlIGVudW1lcmF0aW9uLCBlbmRwb2ludCBtYW5hZ2VtZW50LCBhbmQgZGF0YSB0cmFuc2Zlcj9cblxuKiAgICoqTmV0d29yayBTdGFjayBJbnRlZ3JhdGlvbjoqKiBUaGlzIGlzIGtleS4gSG93IGlzIHRoaXMgbW9kdWxlIGhvb2tlZCBpbnRvIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2s/IElzIGl0IHVzaW5nIGEgc3RhbmRhcmQgbmV0d29yayBpbnRlcmZhY2UgZHJpdmVyIChlLmcuLCBORElTLCBhIFRVTi9UQVAtbGlrZSBpbnRlcmZhY2UsIG9yIHNvbWV0aGluZyBwcm9wcmlldGFyeSk/IFdoYXQgYXJlIHRoZSBkYXRhIHBhdGggY29uc2lkZXJhdGlvbnM/IElzIGl0IG9wdGltaXplZCBmb3IgbG93IGxhdGVuY3kgYW5kIGhpZ2ggdGhyb3VnaHB1dCwgb3IgaXMgaXQgZGVzaWduZWQgd2l0aCBvdGhlciB0cmFkZS1vZmZzIGluIG1pbmQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBuZXR3b3JrIHByb3RvY29sIGl0IGhhbmRsZXM/XG5cbiogICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIEdpdmVuIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgbGFyZ2UgZGF0YSB0cmFuc2ZlcnMsIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBETUEgYnVmZmVyIG1hbmFnZW1lbnQgYXJlIGNyaXRpY2FsbHkgaW1wb3J0YW50LiBXaGF0IG1lbW9yeSBwb29scyBvciBhbGxvY2F0b3JzIGFyZSBiZWluZyB1c2VkPyBIb3cgYXJlIHRoZXkgY29uZmlndXJlZCB0byBhdm9pZCBmcmFnbWVudGF0aW9uIGFuZCBlbnN1cmUgZWZmaWNpZW50IHJlc291cmNlIHV0aWxpemF0aW9uP1xuXG4qICAgKipDb25jdXJyZW5jeSBcdTAwMjYgVGhyZWFkaW5nOioqIEknbGwgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSB0aHJlYWRpbmcgbW9kZWwgZW1wbG95ZWQgYnkgYFVTQl9VU0JORVRgIOKAkyBpcyBpdCBpbnRlcnJ1cHQtZHJpdmVuLCB1c2luZyB0YXNrcywgb3IgYm90aD8gSG93IGFyZSBjcml0aWNhbCBzZWN0aW9ucyBhbmQgc2hhcmVkIHJlc291cmNlcyBwcm90ZWN0ZWQgZnJvbSByYWNlIGNvbmRpdGlvbnM/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgbG9ja2luZyBhbmQgaW50ZXJydXB0LW1hc2tpbmcgY2hhbGxlbmdlcyBpbiBhIHJlYWwtdGltZSBlbnZpcm9ubWVudD9cblxuKiAgICoqQ29uZmlndXJhdGlvbiBcdTAwMjYgQnVpbGQtVGltZSBPcHRpb25zOioqIEZpbmFsbHksIEkgbmVlZCB0byBtYXAgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHdoaWNoIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYW55IHJlYWwgYW5hbHlzaXMuIFdoYXQgY29tcGlsZS10aW1lIGZsYWdzIGFmZmVjdCB0aGUgYmVoYXZpb3IgYW5kIGZlYXR1cmVzIG9mIHRoZSBtb2R1bGU/IFdoYXQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGNvbnRyb2wgaXRzIG9wZXJhdGlvbmFsIGNoYXJhY3RlcmlzdGljcz9cblxuTXkgZ2VuZXJhbCBwcm9jZXNzIHdpbGwgYmUgdG8gZXhwbG9yZSB0aGVzZSBkZXBlbmRlbmNpZXM6IHRoZSBoZWFkZXIgZmlsZXMsIGNvbmZpZ3VyYXRpb24gc2NyaXB0cywgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgdG8gZm9ybSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MDEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1Njo1NS44NTczMjQ3NDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsYW43OHh4LlxcbiAxMzE6XFx0XFxuIDEzMjpcXHRjb25maWcgVVNCX1VTQk5FVFxcbiAxMzM6XFx0XFx0dHJpc3RhdGUgXFxcIk11bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXFxcIlxcbiAxMzQ6XFx0XFx0c2VsZWN0IE1JSVxcbiAxMzU6XFx0XFx0aGVscFxcbiAxMzY6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBzZXZlcmFsIGtpbmRzIG9mIG5ldHdvcmsgbGlua3Mgb3ZlciBVU0IsXFxuIDEzNzpcXHRcXHQgIHdpdGggXFxcIm1pbmlkcml2ZXJzXFxcIiBidWlsdCBhcm91bmQgYSBjb21tb24gbmV0d29yayBkcml2ZXIgY29yZVxcbiAxMzg6XFx0XFx0ICB0aGF0IHN1cHBvcnRzIGRlZXAgcXVldWVzIGZvciBlZmZpY2llbnQgdHJhbnNmZXJzLiAgKFRoaXMgZ2l2ZXNcXG4gMTM5OlxcdFxcdCAgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggc21hbGwgcGFja2V0cyBhbmQgYXQgaGlnaCBzcGVlZHMpLlxcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHQgIFRoZSBVU0IgaG9zdCBydW5zIFxcXCJ1c2JuZXRcXFwiLCBhbmQgdGhlIG90aGVyIGVuZCBvZiB0aGUgbGluayBtaWdodCBiZTpcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0ICAtIEFub3RoZXIgVVNCIGhvc3QsIHdoZW4gdXNpbmcgVVNCIFxcXCJuZXR3b3JrXFxcIiBvciBcXFwiZGF0YSB0cmFuc2ZlclxcXCJcXG4gMTQ0OlxcdFxcdCAgICBjYWJsZXMuICBUaGVzZSBhcmUgb2Z0ZW4gdXNlZCB0byBuZXR3b3JrIGxhcHRvcHMgdG8gUENzLCBsaWtlXFxuIDE0NTpcXHRcXHQgICAgXFxcIkxhcGxpbmtcXFwiIHBhcmFsbGVsIGNhYmxlcyBvciBzb21lIG1vdGhlcmJvYXJkcy4gIFRoZXNlIHJlbHlcXG4gMTQ2OlxcdFxcdCAgICBvbiBzcGVjaWFsaXplZCBjaGlwcyBmcm9tIG1hbnkgc3VwcGxpZXJzLlxcbiAxNDc6XFx0XFxuIDE0ODpcXHRcXHQgIC0gQW4gaW50ZWxsaWdlbnQgVVNCIGdhZGdldCwgcGVyaGFwcyBlbWJlZGRpbmcgYSBMaW51eCBzeXN0ZW0uXFxuIDE0OTpcXHRcXHQgICAgVGhlc2UgaW5jbHVkZSBQREFzIHJ1bm5pbmcgTGludXggKGlQYXEsIFlvcHksIFphdXJ1cywgYW5kXFxuIDE1MDpcXHRcXHQgICAgb3RoZXJzKSwgYW5kIGRldmljZXMgdGhhdCBpbnRlcm9wZXJhdGUgdXNpbmcgdGhlIHN0YW5kYXJkXFxuIDE1MTpcXHRcXHQgICAgQ0RDLUV0aGVybmV0IHNwZWNpZmljYXRpb24gKGluY2x1ZGluZyBtYW55IGNhYmxlIG1vZGVtcykuXFxuIDE1MjpcXHRcXG4gMTUzOlxcdFxcdCAgLSBOZXR3b3JrIGFkYXB0ZXIgaGFyZHdhcmUgKGxpa2UgdGhvc2UgZm9yIDEwLzEwMCBFdGhlcm5ldCkgd2hpY2hcXG4gMTU0OlxcdFxcdCAgICB1c2VzIHRoaXMgZHJpdmVyIGZyYW1ld29yay5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6NTUuODU3NDQ1MjEzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5OTMyMjcyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDaGVja2luZyBVU0IgTmV0d29yayBEcml2ZXJzKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJMZXQncyBjaGVjayBgVVNCX05FVF9EUklWRVJTYC5cIiBJIGtub3cgdGhpcyBpcyB0aGUgY3J1Y2lhbCBzdGFydGluZyBwb2ludCBmb3IgYW55IFVTQiBuZXR3b3JraW5nIGludmVzdGlnYXRpb24uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHRoZSBnYXRla2VlcGVyOyBpdCBkaWN0YXRlcyB3aGV0aGVyIHRoZSBrZXJuZWwgZXZlbiAqY29uc2lkZXJzKiB0aGUgcG9zc2liaWxpdHkgb2YgdXRpbGl6aW5nIFVTQiBmb3IgbmV0d29yayBjb25uZWN0aXZpdHkuIFNvLCBJIG5lZWQgdG8gY29uZmlybSBpdHMgY3VycmVudCBzdGF0ZSDigJMgaXMgaXQgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIHNldCBhcyBhIG1vZHVsZT8gVGhlIGFuc3dlciBoZXJlIHdpbGwgaW1tZWRpYXRlbHkgbmFycm93IHRoZSBzY29wZSBvZiB0aGUgcHJvYmxlbS4gSWYgaXQncyBkaXNhYmxlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50IGluIGZ1cnRoZXIgZXhwbG9yYXRpb24gZG93biB0aGlzIHJhYmJpdCBob2xlIHVudGlsIHRoZSBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3RlZC4gSWYgaXTigJlzIGEgbW9kdWxlLCBJJ2xsIGNoZWNrIGl0cyBsb2FkaW5nIHN0YXR1cyBhbmQgYW55IGFzc29jaWF0ZWQgZXJyb3IgbWVzc2FnZXMuIElmIGl0J3MgYnVpbHQtaW4sIHRoZW4gdGhlIGhhcmR3YXJlIGlzc3VlcyBhcmUgdGhlIGltbWVkaWF0ZSBjb25jZXJuLiBGdXJ0aGVybW9yZSwgSSB3aWxsIGNoZWNrIHdoYXQgc3BlY2lmaWMgZHJpdmVycyBhcmUgYXZhaWxhYmxlIGFuZCBlbmFibGVkLCBrbm93aW5nIHRoYXQgc3VwcG9ydCBmb3IgdmFyaW91cyBVU0IgbmV0d29yayBhZGFwdGVycyBjYW4gYmUgZnJhZ21lbnRlZCwgYW5kIHRoYXQgdGhlIGFwcHJvcHJpYXRlIGRyaXZlciBtdXN0IGJlIHNlbGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkzNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTY6NTguODUwNjc1NDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4OTIwMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz01PWNvbW1lbnQgXFxcIkhvc3Qtc2lkZSBVU0Igc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTctXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6ODptZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTktXFx0dHJpc3RhdGUgXFxcIlVTQiBOZXR3b3JrIEFkYXB0ZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1Njo1OC45Mjk1OTkyNzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0NzE0MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipLY29uZmlnIEluc3BlY3Rpb246IFVTQiBOZXR3b3JraW5nIERyaXZlciBPcHRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgVVNCIG5ldHdvcmtpbmcgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gbGluZXMgMSB0aHJvdWdoIDI1IG9mIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBwbGFjZSB0byBiZWdpbiwgc2luY2UgS2NvbmZpZyBmaWxlcyB0eXBpY2FsbHkgc3RydWN0dXJlIHRoZWlyIG9wdGlvbnMgaW4gYSBsb2dpY2FsIG1hbm5lciwgYW5kIHRoYXQgaW5pdGlhbCBzZWN0aW9uIG9mdGVuIGNvdmVycyB0aGUgb3ZlcmFsbCBkcml2ZXIgbW9kdWxlIG9yIGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiB0aGUgYXZhaWxhYmxlIGNob2ljZXMuXG5cbkknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjb3JlIG1vZHVsZSBkZWZpbml0aW9uIGluIHRoYXQgcmFuZ2UsIGFuZCBob3BlZnVsbHkgc29tZSBiYXNpYyBkZXBlbmRlbmNpZXMuIEl0IGNvdWxkIG91dGxpbmUgdGhlIGVzc2VudGlhbCBjb21wb25lbnRzIHRoYXQgZ2V0IGxvYWRlZCwgYW5kIHBlcmhhcHMgc29tZSBkZWZhdWx0IHN0YXRlcyBmb3IgdGhlIGRldmljZSBvcHRpb25zLiBIb3BlZnVsbHkgaXQncyB3ZWxsLWNvbW1lbnRlZCwgYXMgaXMgdXN1YWxseSB0aGUgc3RhbmRhcmQgd2l0aGluIHRoZSBrZXJuZWwuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIGRyaXZlciBuYW1lLCBhIGdlbmVyYWwgZGVzY3JpcHRpb24sIGFuZCBwZXJoYXBzIHRoZSBpbml0aWFsIGBzZWxlY3RgIHN0YXRlbWVudHMgdGhhdCBwdWxsIGluIGFueSBjb3JlIFVTQiBvciBuZXR3b3JraW5nIHByZXJlcXVpc2l0ZXMuIElmIGl0J3MgYSB3ZWxsLW9yZ2FuaXplZCBmaWxlLCB0aGlzIHNlY3Rpb24gc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCBhIHNvbGlkIGZvdW5kYXRpb24gYmVmb3JlIEkgZGVsdmUgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljcyBvZiBpbmRpdmlkdWFsIGRldmljZSBzdXBwb3J0IG9yIGFkdmFuY2VkIGZlYXR1cmVzLiBJIGhvcGUgaXQgY2xlYXJseSBvdXRsaW5lcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMxMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU3OjAxLjM3Njc0MzkyNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb21tZW50IFxcXCJIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcXFwiXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uICFVU0IgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAgNzpcXHRcXG4gICA4OlxcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXFxuICAgOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIE5ldHdvcmsgQWRhcHRlcnNcXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IFVTQiBpZiBVU0JcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBVU0JfTkVUX0RSSVZFUlNcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFVTQl9DQVRDXFxuICAxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDE3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxcbiAgMjA6XFx0XFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxcbiAgMjE6XFx0XFx0ICBCZWxraW4gRjVVMDExXFxuICAyMjpcXHRcXHQgIEJlbGtpbiBGNVUxMTFcXG4gIDIzOlxcdFxcdCAgQ0FUQyBOZXRNYXRlXFxuICAyNDpcXHRcXHQgIENBVEMgTmV0TWF0ZSBJSVxcbiAgMjU6XFx0XFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTc6MDEuMzc2ODg3Njc1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzMzEwNjAyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEFTSVggQVg4OHh4eCBVU0IgTmV0d29yayBBZGFwdGVyIERyaXZlciBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZW5hYmxlIGEgZmV3IGNvbmZpZ3VyYXRpb25zOiBgVVNCX05FVF9BWDg4MTdYYCwgYFVTQl9VU0JORVRgLCBgVVNCX05FVF9EUklWRVJTYCwgYW5kLCBvZiBjb3Vyc2UsIGBVU0JgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5Ob3csIGxldCdzIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9scyBhbmQgZmlsZXMuIFdlJ3JlIGxvb2tpbmcgYXQ6IGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCwgd2hpY2ggaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgd2FzIGFsdGVyZWQ7IGBhc2l4X3J4X2ZpeHVwX2NvbW1vbmAsIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGZpeHVwIHJvdXRpbmU7IGFuZCBgYXg4ODE3MmFfcnhfZml4dXBgLCBhbHNvIGFuIGVudHJ5IHBvaW50IHRvIHRoZSBmaXh1cCByb3V0aW5lLlxuXG5MZXQncyBkbyBhIHF1aWNrIGdpdCBkaWZmIHJldmlldyBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29tbWl0ICpvbmx5KiBtb2RpZmllcyBgZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNgIHdpdGhpbiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAuIEdvb2QsIHRoYXQncyBjbGVhbiBhbmQgZm9jdXNlZC5cblxuTm93LCB0byBzdW1tYXJpemUgbXkgcmVhc29uaW5nIGNvbmNpc2VseTogdGhlIGZpeCBpcyBpbiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpYCB3aXRoaW4gYGRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jYCwgYW5kIGl0J3MgYWxsIGFib3V0IHBhcnNpbmcgVVNCIHBhY2tldHMgZm9yIEFTSVggQVg4OHh4eCBuZXR3b3JrIGFkYXB0ZXJzLiBJdCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgYm91bmRzLWNoZWNraW5nIHZ1bG5lcmFiaWxpdHkgaW4gYSBjYWxjdWxhdGlvbiB3aGVuIGRlYWxpbmcgd2l0aCBtdWx0aS1VUkIgZnJhbWVzLiBXaGVuIGByeC1cdTAwM2VyZW1haW5pbmdgIGlzIG9kZCwgdGhpcyBjb2RlIHdhcyBwcm9uZSB0byBvdXQtb2YtYm91bmRzIGhlYWRlciByZWFkcy4gVGhlIHZ1bG5lcmFiaWxpdHkgY291bGQgZXhpc3QgaW4gdmlydHVhbGl6ZWQvZW11bGF0ZWQgZW52aXJvbm1lbnRzIChlLmcuLCBzeXprYWxsZXIgVVNCIHJhdy1nYWRnZXQgLyBuZXRkZXYgZnV6emluZykgd2hpY2ggbWVhbnMgdGhpcyBzaG91bGQgYmUgZnV6eiB0ZXN0ZWQuXG5cblRoZSBrZXkgY29uZmlncyByZW1haW46IGBVU0JfTkVUX0FYODgxN1hgLCBgVVNCX1VTQk5FVGAsIGBVU0JfTkVUX0RSSVZFUlNgLCBgVVNCYC5cblxuQW5kIHRoZSBmb2N1c2VkIHN5bWJvbHM6IGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCwgYGFzaXhfcnhfZml4dXBfY29tbW9uYCwgYW5kIGBheDg4MTcyYV9yeF9maXh1cGAuXG5cbkZpbmFsbHksIEknbGwgZG91YmxlLWNoZWNrIG15IHRvb2wgY2FsbCBwYXJhbWV0ZXJzIGFuZCBmb3JtYXR0aW5nLiBUaGlzIGxvb2tzIHNvbGlkOyByZWFkeSB0byBwcm9jZWVkIHdpdGggdGhlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk1MCwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1NzowNi43MDc5NTAwNzhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDkxMzExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9BWDg4MTdYXCIsXG4gICAgXCJVU0JfVVNCTkVUXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFzaXhfcnhfZml4dXBfaW50ZXJuYWxcIixcbiAgICBcImFzaXhfcnhfZml4dXBfY29tbW9uXCIsXG4gICAgXCJheDg4MTcyYV9yeF9maXh1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBoZWFkZXIgYm91bmRzIGNoZWNraW5nIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSB0byBhY2NvdW50IGZvciAyLWJ5dGUgYWxpZ25tZW50IHdoZW4gY2hlY2tpbmcgcmVtYWluaW5nIHBhY2tldCBidWZmZXIgbGVuZ3RoLiBUaGlzIGNvZGUgcnVucyBpbiB0aGUgQVNJWCBVU0IgZXRoZXJuZXQgZHJpdmVyJ3MgUlggcGF0aCBhbmQgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZW11bGF0aW9uL2Z1enppbmcgKGUuZy4sIFVTQiByYXctZ2FkZ2V0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfTkVUX0FYODgxN1hcIixcbiAgICBcIlVTQl9VU0JORVRcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXNpeF9yeF9maXh1cF9pbnRlcm5hbFwiLFxuICAgIFwiYXNpeF9yeF9maXh1cF9jb21tb25cIixcbiAgICBcImF4ODgxNzJhX3J4X2ZpeHVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IGhlYWRlciBib3VuZHMgY2hlY2tpbmcgaW4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIHRvIGFjY291bnQgZm9yIDItYnl0ZSBhbGlnbm1lbnQgd2hlbiBjaGVja2luZyByZW1haW5pbmcgcGFja2V0IGJ1ZmZlciBsZW5ndGguIFRoaXMgY29kZSBydW5zIGluIHRoZSBBU0lYIFVTQiBldGhlcm5ldCBkcml2ZXIncyBSWCBwYXRoIGFuZCBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24vZnV6emluZyAoZS5nLiwgVVNCIHJhdy1nYWRnZXQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1NzowNi43ODI4NzAxMzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODY1MjcwMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTc6MDYuNzgzMzk1NDE5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk4NjQ3NDEzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIDItYnl0ZSBhbGlnbm1lbnQgd2hlbiBjaGVja2luZyBpZiB0aGUgc29ja2V0IGJ1ZmZlciBoYXMgZW5vdWdoIHJlbWFpbmluZyBieXRlcyBmb3IgdGhlIDMyLWJpdCBoZWFkZXIgcmVhZCAoYCgocngtXFx1MDAzZXJlbWFpbmluZyArIDEpIFxcdTAwMjYgMHhmZmZlKSArIHNpemVvZih1MzIpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuYCkuXFxuXFxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIChPT0IpIG1lbW9yeSByZWFkIG9uIHNrYi1cXHUwMDNlZGF0YSwgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWY1MDMwNjJjZTdjNzA0Mzc2NzJhMzk1MTE0NmVmYzdhMWRiNzc5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTE6NTY6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG5pbmRleCA0ZjAzZjRlNTc2NTVkLi5jNTA2NDZlYTM1YzdlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG5AQCAtMTQ4LDcgKzE0OCw3IEBAIGludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAqIEFsc28gYXZvaWQgdW5uZWNlc3NhcmlseSBkaXNjYXJkaW5nIGEgZ29vZCBjdXJyZW50IG5ldGRldiBzb2NrZXRcbiBcdCAqIGJ1ZmZlci5cbiBcdCAqL1xuLVx0aWYgKHJ4LVx1MDAzZXJlbWFpbmluZyBcdTAwMjZcdTAwMjYgKHJ4LVx1MDAzZXJlbWFpbmluZyArIHNpemVvZih1MzIpIFx1MDAzYz0gc2tiLVx1MDAzZWxlbikpIHtcbitcdGlmIChyeC1cdTAwM2VyZW1haW5pbmcgXHUwMDI2XHUwMDI2ICgoKHJ4LVx1MDAzZXJlbWFpbmluZyArIDEpIFx1MDAyNiAweGZmZmUpICsgc2l6ZW9mKHUzMikgXHUwMDNjPSBza2ItXHUwMDNlbGVuKSkge1xuIFx0XHRvZmZzZXQgPSAoKHJ4LVx1MDAzZXJlbWFpbmluZyArIDEpIFx1MDAyNiAweGZmZmUpO1xuIFx0XHRyeC1cdTAwM2VoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLVx1MDAzZWRhdGEgKyBvZmZzZXQpO1xuIFx0XHRvZmZzZXQgPSAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTc6MDYuNzgzMzk2MzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTU3MzU4MTY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gLSBhc2l4X2NvbW1vbi5jKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSByZXF1ZXN0IGlzIHRvIGRldGVybWluZSBpZiBhIHNwZWNpZmljIHBhdGNoIHdpdGhpbiBgZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNgIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEkgbmVlZCB0byBtYWtlIGEganVkZ21lbnQgY2FsbCBoZXJlLCBjb25zaWRlcmluZyB0aGlzIGZhbGxzIHVuZGVyIGRlZmVuc2l2ZSBzZWN1cml0eSBhbmQga2VybmVsIHNhbml0aXplciBhbmFseXNpcywgc3BlY2lmaWNhbGx5IGZvciBzeXprYWxsZXIvZnV6emluZyBwdXJwb3Nlcy4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQgLSBpdCdzIGEgbG93LXNldmVyaXR5IGNvZGUgcmV2aWV3IGZvciBzYW5pdGl6ZXIgc2VsZWN0aW9uLCBubyByZWQgZmxhZ3MgYWJvdXQgb2ZmZW5zaXZlIGFjdGlvbnMuXG5cbkZpcnN0IHN0ZXAsIEknbGwgcHVsbCB1cCB0aGUgY29kZSB1c2luZyBgcmVhZC1maWxlYCB0byBnZXQgYSBnb29kIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgcGF0Y2ggaXMgYWx0ZXJpbmcuIFdoYXQncyB0aGUgY2hhbmdlIGludHJvZHVjaW5nPyBEYXRhIHN0cnVjdHVyZXMsIG5ldyBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9uYWwgbG9naWM/IFRoYXQncyB3aGVyZSB0aGUgcmVhbCBldmFsdWF0aW9uIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU3OjE2LjM1Njk4MDk0NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcdCAqL1xcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHRpZiAocngtXFx1MDAzZWF4X3NrYikge1xcbiAxMjM6XFx0XFx0XFx0LyogRGlzY2FyZCBhbnkgaW5jb21wbGV0ZSBFdGhlcm5ldCBmcmFtZSBpbiB0aGUgbmV0ZGV2IGJ1ZmZlciAqL1xcbiAxMjQ6XFx0XFx0XFx0a2ZyZWVfc2tiKHJ4LVxcdTAwM2VheF9za2IpO1xcbiAxMjU6XFx0XFx0XFx0cngtXFx1MDAzZWF4X3NrYiA9IE5VTEw7XFxuIDEyNjpcXHRcXHR9XFxuIDEyNzpcXHRcXG4gMTI4OlxcdFxcdC8qIEFzc3VtZSB0aGUgRGF0YSBoZWFkZXIgMzItYml0IHdvcmQgaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50XFxuIDEyOTpcXHRcXHQgKiBvciBuZXh0IFVSQiBzb2NrZXQgYnVmZmVyIHNvIHJlc2V0IGFsbCB0aGUgc3RhdGUgdmFyaWFibGVzLlxcbiAxMzA6XFx0XFx0ICovXFxuIDEzMTpcXHRcXHRyeC1cXHUwMDNlcmVtYWluaW5nID0gMDtcXG4gMTMyOlxcdFxcdHJ4LVxcdTAwM2VzcGxpdF9oZWFkID0gZmFsc2U7XFxuIDEzMzpcXHRcXHRyeC1cXHUwMDNlaGVhZGVyID0gMDtcXG4gMTM0OlxcdH1cXG4gMTM1OlxcdFxcbiAxMzY6XFx0aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAxMzc6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXFxuIDEzODpcXHR7XFxuIDEzOTpcXHRcXHRpbnQgb2Zmc2V0ID0gMDtcXG4gMTQwOlxcdFxcdHUxNiBzaXplO1xcbiAxNDE6XFx0XFxuIDE0MjpcXHRcXHQvKiBXaGVuIGFuIEV0aGVybmV0IGZyYW1lIHNwYW5zIG11bHRpcGxlIFVSQiBzb2NrZXQgYnVmZmVycyxcXG4gMTQzOlxcdFxcdCAqIGRvIGEgc2FuaXR5IHRlc3QgZm9yIHRoZSBEYXRhIGhlYWRlciBzeW5jaHJvbmlzYXRpb24uXFxuIDE0NDpcXHRcXHQgKiBBdHRlbXB0IHRvIGRldGVjdCB0aGUgc2l0dWF0aW9uIG9mIHRoZSBwcmV2aW91cyBzb2NrZXQgYnVmZmVyIGhhdmluZ1xcbiAxNDU6XFx0XFx0ICogYmVlbiB0cnVuY2F0ZWQgb3IgYSBzb2NrZXQgYnVmZmVyIHdhcyBtaXNzaW5nLiBUaGVzZSBzaXR1YXRpb25zXFxuIDE0NjpcXHRcXHQgKiBjYXVzZSBhIGRpc2NvbnRpbnVpdHkgaW4gdGhlIGRhdGEgc3RyZWFtIGFuZCB0aGVyZWZvcmUgbmVlZCB0byBhdm9pZFxcbiAxNDc6XFx0XFx0ICogYXBwZW5kaW5nIGJhZCBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbmV0ZGV2IHNvY2tldCBidWZmZXIuXFxuIDE0ODpcXHRcXHQgKiBBbHNvIGF2b2lkIHVubmVjZXNzYXJpbHkgZGlzY2FyZGluZyBhIGdvb2QgY3VycmVudCBuZXRkZXYgc29ja2V0XFxuIDE0OTpcXHRcXHQgKiBidWZmZXIuXFxuIDE1MDpcXHRcXHQgKi9cXG4gMTUxOlxcdFxcdGlmIChyeC1cXHUwMDNlcmVtYWluaW5nIFxcdTAwMjZcXHUwMDI2ICgoKHJ4LVxcdTAwM2VyZW1haW5pbmcgKyAxKSBcXHUwMDI2IDB4ZmZmZSkgKyBzaXplb2YodTMyKSBcXHUwMDNjPSBza2ItXFx1MDAzZWxlbikpIHtcXG4gMTUyOlxcdFxcdFxcdG9mZnNldCA9ICgocngtXFx1MDAzZXJlbWFpbmluZyArIDEpIFxcdTAwMjYgMHhmZmZlKTtcXG4gMTUzOlxcdFxcdFxcdHJ4LVxcdTAwM2VoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KTtcXG4gMTU0OlxcdFxcdFxcdG9mZnNldCA9IDA7XFxuIDE1NTpcXHRcXG4gMTU2OlxcdFxcdFxcdHNpemUgPSAodTE2KShyeC1cXHUwMDNlaGVhZGVyIFxcdTAwMjYgMHg3ZmYpO1xcbiAxNTc6XFx0XFx0XFx0aWYgKHNpemUgIT0gKCh+cngtXFx1MDAzZWhlYWRlciBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweDdmZikpIHtcXG4gMTU4OlxcdFxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LVxcdTAwM2VuZXQsIFxcXCJhc2l4X3J4X2ZpeHVwKCkgRGF0YSBIZWFkZXIgc3luY2hyb25pc2F0aW9uIHdhcyBsb3N0LCByZW1haW5pbmcgJWRcXFxcblxcXCIsXFxuIDE1OTpcXHRcXHRcXHRcXHRcXHQgICByeC1cXHUwMDNlcmVtYWluaW5nKTtcXG4gMTYwOlxcdFxcdFxcdFxcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XFxuIDE2MTpcXHRcXHRcXHR9XFxuIDE2MjpcXHRcXHR9XFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdHdoaWxlIChvZmZzZXQgKyBzaXplb2YodTE2KSBcXHUwMDNjPSBza2ItXFx1MDAzZWxlbikge1xcbiAxNjU6XFx0XFx0XFx0dTE2IGNvcHlfbGVuZ3RoO1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRcXHRpZiAoIXJ4LVxcdTAwM2VyZW1haW5pbmcpIHtcXG4gMTY4OlxcdFxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiAtIG9mZnNldCA9PSBzaXplb2YodTE2KSkge1xcbiAxNjk6XFx0XFx0XFx0XFx0XFx0cngtXFx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUxNihcXG4gMTcwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlZGF0YSArIG9mZnNldCk7XFxuIDE3MTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlc3BsaXRfaGVhZCA9IHRydWU7XFxuIDE3MjpcXHRcXHRcXHRcXHRcXHRvZmZzZXQgKz0gc2l6ZW9mKHUxNik7XFxuIDE3MzpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMTc0OlxcdFxcdFxcdFxcdH1cXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0XFx0XFx0aWYgKHJ4LVxcdTAwM2VzcGxpdF9oZWFkID09IHRydWUpIHtcXG4gMTc3OlxcdFxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VoZWFkZXIgfD0gKGdldF91bmFsaWduZWRfbGUxNihcXG4gMTc4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlZGF0YSArIG9mZnNldCkgXFx1MDAzY1xcdTAwM2MgMTYpO1xcbiAxNzk6XFx0XFx0XFx0XFx0XFx0cngtXFx1MDAzZXNwbGl0X2hlYWQgPSBmYWxzZTtcXG4gMTgwOlxcdFxcdFxcdFxcdFxcdG9mZnNldCArPSBzaXplb2YodTE2KTtcXG4gMTgxOlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuIDE4MjpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cXHUwMDNlZGF0YSArXFxuIDE4MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRvZmZzZXQpO1xcbiAxODQ6XFx0XFx0XFx0XFx0XFx0b2Zmc2V0ICs9IHNpemVvZih1MzIpO1xcbiAxODU6XFx0XFx0XFx0XFx0fVxcbiAxODY6XFx0XFxuIDE4NzpcXHRcXHRcXHRcXHQvKiB0YWtlIGZyYW1lIGxlbmd0aCBmcm9tIERhdGEgaGVhZGVyIDMyLWJpdCB3b3JkICovXFxuIDE4ODpcXHRcXHRcXHRcXHRzaXplID0gKHUxNikocngtXFx1MDAzZWhlYWRlciBcXHUwMDI2IDB4N2ZmKTtcXG4gMTg5OlxcdFxcdFxcdFxcdGlmIChzaXplICE9ICgofnJ4LVxcdTAwM2VoZWFkZXIgXFx1MDAzZVxcdTAwM2UgMTYpIFxcdTAwMjYgMHg3ZmYpKSB7XFxuIDE5MDpcXHRcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiYXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIDB4JXgsIG9mZnNldCAlZFxcXFxuXFxcIixcXG4gMTkxOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHJ4LVxcdTAwM2VoZWFkZXIsIG9mZnNldCk7XFxuIDE5MjpcXHRcXHRcXHRcXHRcXHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xcbiAxOTM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE5NDpcXHRcXHRcXHRcXHR9XFxuIDE5NTpcXHRcXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIGRldi1cXHUwMDNlbmV0LVxcdTAwM2VtdHUgKyBFVEhfSExFTiArIFZMQU5fSExFTikge1xcbiAxOTY6XFx0XFx0XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBCYWQgUlggTGVuZ3RoICVkXFxcXG5cXFwiLFxcbiAxOTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2l6ZSk7XFxuIDE5ODpcXHRcXHRcXHRcXHRcXHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xcbiAxOTk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjU3OjE2LjM1NzA4NDU2NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjU1MzM0NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIHRhcmdldGVkIHRvd2FyZHMgYW4gZXhwZXJ0LCBzdGFydGluZyB3aXRoIHRoZSBib2xkZWQgaGVhZGVyOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgZnVuY3Rpb24uIEkndmUgZ290IGEgZGVjZW50IGdyYXNwIG9mIHRoZSBvdmVyYWxsIEFTSVggZHJpdmVyIHN0cnVjdHVyZSwgYnV0IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uLi4gaXQncyB0aGUgaGVhcnQgb2YgdGhlIHJlY2VpdmUgcGF0aCdzIGVycm9yIGhhbmRsaW5nIGFuZCBwYWNrZXQgYWRqdXN0bWVudCwgaXNuJ3QgaXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IGNsZWFucyB1cCBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgZHVyaW5nIGhhcmR3YXJlIHJlY2VwdGlvbiBvciBlYXJseSBidWZmZXIgYWxsb2NhdGlvbi4gTXkgZm9jdXMgbm93IGlzIG9uIHRoZSBcInJlc3Qgb2YgaXRcIi5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb21tb24gcGl0ZmFsbHMgaGVyZTogcG90ZW50aWFsIGFsaWdubWVudCBwcm9ibGVtcywgZGVzY3JpcHRvciBjb3JydXB0aW9uLCBtYXliZSBldmVuIGEgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZCBoYXZlIHBvcHBlZCB1cCBnaXZlbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgUlggRE1BIGludGVyYWN0aW9uLiBBcmUgd2UgZGVhbGluZyB3aXRoIGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyB0aGF0IG5lY2Vzc2l0YXRlIHBhY2tldCBzaXplIGFkanVzdG1lbnRzPyBBcmUgdGhleSBoYW5kbGluZyBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIFRDUC9VRFAgY2hlY2tzdW0gb2ZmbG9hZD8gV2hhdCBhYm91dCBqdW1ibyBmcmFtZXMgYW5kIHRoZWlyIGZyYWdtZW50YXRpb24/IFdoYXQgY2hlY2tzIGFyZSBpbiBwbGFjZSB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cz9cblxuU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3I6XG5cbiogICAqKkVycm9yIGRldGVjdGlvbjoqKiBIb3cgYXJlIHRoZXkgaWRlbnRpZnlpbmcgY29ycnVwdGVkIGRhdGEgb3IgYnVmZmVyIGlzc3Vlcz9cbiogICAqKkJ1ZmZlciBtYW5pcHVsYXRpb246KiogSG93IGlzIHRoZSByZWNlaXZlZCBidWZmZXIgYmVpbmcgYWRqdXN0ZWQ/IEFyZSB0aGVyZSBjbGV2ZXIgdHJpY2tzIGZvciByZS1hbGlnbmluZyBkYXRhIG9yIGhhbmRsaW5nIHBhcnRpYWwgcGFja2V0IGZyYWdtZW50cz9cbiogICAqKkRlc2NyaXB0b3IgaW50ZXJhY3Rpb246KiogV2hhdCdzIHRoZSBkYW5jZSBiZXR3ZWVuIHRoZSBkZXNjcmlwdG9ycyBhbmQgdGhpcyBmaXh1cCBmdW5jdGlvbj8gQXJlIHRoZXkgcmUtdXNpbmcgZGVzY3JpcHRvcnMgc2FmZWx5LCBvciBhcmUgdGhlcmUgcG90ZW50aWFsIGhhemFyZHMgdGhlcmU/XG4qICAgKipQZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnM6KiogQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIG9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgSSBjYW4gc3BvdD9cblxuSSdtIGdvaW5nIHRvIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGJpdHdpc2Ugb3BlcmF0aW9ucyBvciBwb2ludGVyIGFyaXRobWV0aWMsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGluZ3MgY2FuIGdldCBoYWlyeSByZWFsIHF1aWNrLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGFueSBhc3N1bXB0aW9ucyBtYWRlIGFib3V0IGhhcmR3YXJlIGJlaGF2aW9yIG9yIHJlZ2lzdGVyIHZhbHVlcy4gQW5kIHRoZW4sIEkgbmVlZCB0byBsb29rIGZvciBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyIG9yIGV2ZW4gdGhlIG5ldHdvcmsgc3RhY2sgaXRzZWxmLlxuXG5MZXQncyBzZWUgdGhlIHJlc3Qgb2YgYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODQ5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMTo1NzoxOS42MTI0MjE4NTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMDpcXHRcXHRcXHRcXHR9XFxuIDIwMTpcXHRcXG4gMjAyOlxcdFxcdFxcdFxcdC8qIFNvbWV0aW1lcyBtYXkgZmFpbCB0byBnZXQgYSBuZXRkZXYgc29ja2V0IGJ1ZmZlciBidXRcXG4gMjAzOlxcdFxcdFxcdFxcdCAqIGNvbnRpbnVlIHRvIHByb2Nlc3MgdGhlIFVSQiBzb2NrZXQgYnVmZmVyIHNvIHRoYXRcXG4gMjA0OlxcdFxcdFxcdFxcdCAqIHN5bmNocm9uaXNhdGlvbiBvZiB0aGUgRXRoZXJuZXQgZnJhbWUgRGF0YSBoZWFkZXJcXG4gMjA1OlxcdFxcdFxcdFxcdCAqIHdvcmQgaXMgbWFpbnRhaW5lZC5cXG4gMjA2OlxcdFxcdFxcdFxcdCAqL1xcbiAyMDc6XFx0XFx0XFx0XFx0cngtXFx1MDAzZWF4X3NrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oZGV2LVxcdTAwM2VuZXQsIHNpemUpO1xcbiAyMDg6XFx0XFxuIDIwOTpcXHRcXHRcXHRcXHRyeC1cXHUwMDNlcmVtYWluaW5nID0gc2l6ZTtcXG4gMjEwOlxcdFxcdFxcdH1cXG4gMjExOlxcdFxcbiAyMTI6XFx0XFx0XFx0aWYgKHJ4LVxcdTAwM2VyZW1haW5pbmcgXFx1MDAzZSBza2ItXFx1MDAzZWxlbiAtIG9mZnNldCkge1xcbiAyMTM6XFx0XFx0XFx0XFx0Y29weV9sZW5ndGggPSBza2ItXFx1MDAzZWxlbiAtIG9mZnNldDtcXG4gMjE0OlxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VyZW1haW5pbmcgLT0gY29weV9sZW5ndGg7XFxuIDIxNTpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMTY6XFx0XFx0XFx0XFx0Y29weV9sZW5ndGggPSByeC1cXHUwMDNlcmVtYWluaW5nO1xcbiAyMTc6XFx0XFx0XFx0XFx0cngtXFx1MDAzZXJlbWFpbmluZyA9IDA7XFxuIDIxODpcXHRcXHRcXHR9XFxuIDIxOTpcXHRcXG4gMjIwOlxcdFxcdFxcdGlmIChyeC1cXHUwMDNlYXhfc2tiKSB7XFxuIDIyMTpcXHRcXHRcXHRcXHRza2JfcHV0X2RhdGEocngtXFx1MDAzZWF4X3NrYiwgc2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0LFxcbiAyMjI6XFx0XFx0XFx0XFx0XFx0ICAgICBjb3B5X2xlbmd0aCk7XFxuIDIyMzpcXHRcXHRcXHRcXHRpZiAoIXJ4LVxcdTAwM2VyZW1haW5pbmcpIHtcXG4gMjI0OlxcdFxcdFxcdFxcdFxcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgcngtXFx1MDAzZWF4X3NrYik7XFxuIDIyNTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlYXhfc2tiID0gTlVMTDtcXG4gMjI2OlxcdFxcdFxcdFxcdH1cXG4gMjI3OlxcdFxcdFxcdH1cXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0XFx0b2Zmc2V0ICs9IChjb3B5X2xlbmd0aCArIDEpIFxcdTAwMjYgMHhmZmZlO1xcbiAyMzA6XFx0XFx0fVxcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gIT0gb2Zmc2V0KSB7XFxuIDIzMzpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiYXNpeF9yeF9maXh1cCgpIEJhZCBTS0IgTGVuZ3RoICVkLCAlZFxcXFxuXFxcIixcXG4gMjM0OlxcdFxcdFxcdFxcdCAgIHNrYi1cXHUwMDNlbGVuLCBvZmZzZXQpO1xcbiAyMzU6XFx0XFx0XFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcXG4gMjM2OlxcdFxcdFxcdHJldHVybiAwO1xcbiAyMzc6XFx0XFx0fVxcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRyZXR1cm4gMTtcXG4gMjQwOlxcdH1cXG4gMjQxOlxcdFxcbiAyNDI6XFx0aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMjQzOlxcdHtcXG4gMjQ0OlxcdFxcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcCA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuIDI0NTpcXHRcXHRzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeCA9IFxcdTAwMjZkcC1cXHUwMDNlcnhfZml4dXBfaW5mbztcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0XFx0cmV0dXJuIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoZGV2LCBza2IsIHJ4KTtcXG4gMjQ4OlxcdH1cXG4gMjQ5OlxcdFxcbiAyNTA6XFx0dm9pZCBhc2l4X3J4X2ZpeHVwX2NvbW1vbl9mcmVlKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcClcXG4gMjUxOlxcdHtcXG4gMjUyOlxcdFxcdHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4O1xcbiAyNTM6XFx0XFxuIDI1NDpcXHRcXHRpZiAoIWRwKVxcbiAyNTU6XFx0XFx0XFx0cmV0dXJuO1xcbiAyNTY6XFx0XFxuIDI1NzpcXHRcXHRyeCA9IFxcdTAwMjZkcC1cXHUwMDNlcnhfZml4dXBfaW5mbztcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0aWYgKHJ4LVxcdTAwM2VheF9za2IpIHtcXG4gMjYwOlxcdFxcdFxcdGtmcmVlX3NrYihyeC1cXHUwMDNlYXhfc2tiKTtcXG4gMjYxOlxcdFxcdFxcdHJ4LVxcdTAwM2VheF9za2IgPSBOVUxMO1xcbiAyNjI6XFx0XFx0fVxcbiAyNjM6XFx0fVxcbiAyNjQ6XFx0XFxuIDI2NTpcXHRzdHJ1Y3Qgc2tfYnVmZiAqYXNpeF90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIDI2NjpcXHRcXHRcXHRcXHQgICAgICBnZnBfdCBmbGFncylcXG4gMjY3OlxcdHtcXG4gMjY4OlxcdFxcdGludCBwYWRsZW47XFxuIDI2OTpcXHRcXHRpbnQgaGVhZHJvb20gPSBza2JfaGVhZHJvb20oc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTc6MTkuNjEyNTM4MDIxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwMzU1Nzc2MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBhc2l4X2NvbW1vbi5jIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGluIGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AgYW5kIGltbWVkaWF0ZWx5LCBJIGNhbiBzZWUgYSBjcml0aWNhbCBib3VuZHMgY2hlY2sgY2hhbmdlLiAgVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgdG8gYW4gb3V0LW9mLWJvdW5kcyAoT09CKSByZWFkIGluIHRoZSBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpYCBmdW5jdGlvbi4gIFRoZSBwcm9ibGVtLCBhcyBJIHNlZSBpdCwgcmV2b2x2ZWQgYXJvdW5kIGhvdyB0aGUgY29kZSBoYW5kbGVkIGByeC1cdTAwM2VyZW1haW5pbmdgIHdoZW4gaXQgd2FzIGFuIG9kZCBudW1iZXIuXG5cblNwZWNpZmljYWxseSwgdGhlIG9yaWdpbmFsIGNoZWNrOiBgcngtXHUwMDNlcmVtYWluaW5nICsgc2l6ZW9mKHUzMikgXHUwMDNjPSBza2ItXHUwMDNlbGVuYCB3YXMgaW5zdWZmaWNpZW50LiAgV2hlbiBgcngtXHUwMDNlcmVtYWluaW5nYCB3YXMsIHNheSwgMywgYW5kIGBza2ItXHUwMDNlbGVuYCB3YXMgNywgdGhlIGNoZWNrIHBhc3NlZCAoMyArIDQgXHUwMDNjPSA3KS4gSG93ZXZlciwgYWZ0ZXIgY2FsY3VsYXRpbmcgdGhlIGBvZmZzZXRgIGFzIGAoKDMgKyAxKSBcdTAwMjYgMHhmZmZlKWAgd2hpY2ggcmVzdWx0cyBpbiA0LCB0aGUgYGdldF91bmFsaWduZWRfbGUzMihza2ItXHUwMDNlZGF0YSArIDQpYCBjYWxsIHdvdWxkIHJlYWQgYnl0ZXMgNCwgNSwgNiwgYW5kIDcgZnJvbSB0aGUgYHNrYi1cdTAwM2VkYXRhYCBidWZmZXIsIGJ1dCB0aGUgYnVmZmVyIG9ubHkgaGFkIHZhbGlkIGRhdGEgdXAgdG8gaW5kZXggNi4gVGhpcyBtZWFudCBhIG9uZS1ieXRlIE9PQiByZWFkLCByaWdodCBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhhdC5cblxuVGhlIGZpeCBpcyBzbWFydC4gQnkgbW9kaWZ5aW5nIHRoZSBjaGVjayB0byBgKCgocngtXHUwMDNlcmVtYWluaW5nICsgMSkgXHUwMDI2IDB4ZmZmZSkgKyBzaXplb2YodTMyKSBcdTAwM2M9IHNrYi1cdTAwM2VsZW4pYCwgdGhlIGFsaWdubWVudCBjYWxjdWxhdGlvbiBpcyBub3cgKmluY2x1ZGVkKiBpbiB0aGUgYm91bmRzIGNoZWNrLiBTbyB0aGUgbmV3IGNoZWNrIG1ha2VzIHN1cmUgdGhhdCB0aGUgYG9mZnNldGAgKnBsdXMqIHRoZSBzaXplIG9mIHRoZSA0IGJ5dGUgcmVhZCBkb2VzIG5vdCBleGNlZWQgYHNrYi1cdTAwM2VsZW5gLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzLCBsaWtlIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzPyBOby4gVGhpcyBpcyBjcnVjaWFsIHRvIGVzdGFibGlzaC4gVGhpcyBpcyBwdXJlbHkgYSAqYm91bmRzIGNoZWNrKiBjb3JyZWN0aW9uLiBUaGUgYHNrYi1cdTAwM2VkYXRhYCBidWZmZXIgY29tZXMgZnJvbSBVU0IgUlgsIG5ldHdvcmsgcGFja2V0IGRhdGEuIFRoZSBmaXggcHJldmVudHMgdGhlIE9PQiByZWFkLiBUaGVyZSdzIG5vIG5ldyBhbGxvY2F0aW9uLCBubyB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vdGhpbmcgbGlrZSB0aGF0LiBUaGUgT09CIG5hdHVyZSBvZiB0aGUgaW5pdGlhbCBwcm9ibGVtIGlzIHRoZSByZWFzb24gS0FTQU4gZm91bmQgaXQgaW4gdGhlIGZpcnN0IHBsYWNlLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuIEFuZCB0aGUgYEtNU0FOUmVhc29uaW5nYCBzaG91bGQgZXhwbGljaXRseSBzdGF0ZSB0aGF0IHRoaXMgcGF0Y2ggZml4ZXMgdGhlIE9PQiBoZWFwIG1lbW9yeSByZWFkIGluIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKClgIGJ5IGNvcnJlY3RseSBhbGlnbmluZyBgcngtXHUwMDNlcmVtYWluaW5nYCBiZWZvcmUgdGhlIGJvdW5kcyBjaGVjay4gSXQncyBhIHRleHRib29rIEtBU0FOLWRldGVjdGVkIGlzc3VlLCBhbmQgdGhlIGZpeCBhZGRyZXNzZXMgdGhhdCBzcGVjaWZpYyBwcm9ibGVtIHdpdGhvdXQgaW50cm9kdWNpbmcgYW55IG5ldyBjb25jZXJucyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjUsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6NTc6MjYuNjQ4MTE3NTY5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIGJ5IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciAyLWJ5dGUgYWxpZ25tZW50IHdoZW4gY2hlY2tpbmcgaWYgdGhlIHNvY2tldCBidWZmZXIgaGFzIGVub3VnaCByZW1haW5pbmcgYnl0ZXMgZm9yIHRoZSAzMi1iaXQgaGVhZGVyIHJlYWQgKGAoKHJ4LVxcdTAwM2VyZW1haW5pbmcgKyAxKSBcXHUwMDI2IDB4ZmZmZSkgKyBzaXplb2YodTMyKSBcXHUwMDNjPSBza2ItXFx1MDAzZWxlbmApLlxcblxcblRoaXMgaXNzdWUgaXMgYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBvbiBza2ItXFx1MDAzZWRhdGEsIHdoaWNoIGlzIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIDItYnl0ZSBhbGlnbm1lbnQgd2hlbiBjaGVja2luZyBpZiB0aGUgc29ja2V0IGJ1ZmZlciBoYXMgZW5vdWdoIHJlbWFpbmluZyBieXRlcyBmb3IgdGhlIDMyLWJpdCBoZWFkZXIgcmVhZCAoYCgocngtXFx1MDAzZXJlbWFpbmluZyArIDEpIFxcdTAwMjYgMHhmZmZlKSArIHNpemVvZih1MzIpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuYCkuXFxuXFxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIChPT0IpIG1lbW9yeSByZWFkIG9uIHNrYi1cXHUwMDNlZGF0YSwgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpfkxd[1] Phase: Succeeded StartedAt: 2026-09-07 11:57:48 +0000 UTC FinishedAt: 2026-09-07 11:57:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 11:57:48 +0000 UTC FinishedAt: 2026-09-07 11:57:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2] Phase: Succeeded StartedAt: 2026-09-07 11:57:48 +0000 UTC FinishedAt: 2026-09-07 13:33:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 11:57:48 +0000 UTC FinishedAt: 2026-09-07 13:33:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 11:57:48 +0000 UTC FinishedAt: 2026-09-07 11:57:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 11:57:48 +0000 UTC FinishedAt: 2026-09-07 11:57:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowpfkxd/series-workflowpfkxd-convert-artifact-611101139/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 11:57:58 +0000 UTC FinishedAt: 2026-09-07 12:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 11:57:58 +0000 UTC FinishedAt: 2026-09-07 12:14:28 +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:*417a1c9c-8e6b-4b9a-a5c2-e56b9151f26d,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-workflowpfkxd/series-workflowpfkxd-convert-artifact-611101139/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": "7a6e5a65-64cf-4837-8929-06e2249a8307", "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-workflowpfkxd/series-workflowpfkxd-build-action-4099665153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 11:57:58 +0000 UTC FinishedAt: 2026-09-07 12:14:18 +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:*417a1c9c-8e6b-4b9a-a5c2-e56b9151f26d,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-workflowpfkxd/series-workflowpfkxd-convert-artifact-611101139/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": "7a6e5a65-64cf-4837-8929-06e2249a8307", "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-workflowpfkxd/series-workflowpfkxd-build-action-4099665153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 12:14:28 +0000 UTC FinishedAt: 2026-09-07 12:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 12:14:28 +0000 UTC FinishedAt: 2026-09-07 12:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 12:14:28 +0000 UTC FinishedAt: 2026-09-07 12:14:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 12:14:28 +0000 UTC FinishedAt: 2026-09-07 12:14:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowpfkxd/series-workflowpfkxd-convert-artifact-1791837386/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 12:14:38 +0000 UTC FinishedAt: 2026-09-07 12:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 12:14:38 +0000 UTC FinishedAt: 2026-09-07 12:16:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7a6e5a65-64cf-4837-8929-06e2249a8307,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-workflowpfkxd/series-workflowpfkxd-build-action-4099665153/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-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 12:16:30 +0000 UTC FinishedAt: 2026-09-07 12:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 12:16:30 +0000 UTC FinishedAt: 2026-09-07 12:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 12:16:30 +0000 UTC FinishedAt: 2026-09-07 12:34:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 12:16:30 +0000 UTC FinishedAt: 2026-09-07 12:34:27 +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:*417a1c9c-8e6b-4b9a-a5c2-e56b9151f26d,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-workflowpfkxd/series-workflowpfkxd-convert-artifact-1791837386/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": "31eb3585-a7b0-4282-911e-83ab18573c07", "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-workflowpfkxd/series-workflowpfkxd-build-action-2619713774/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 12:16:30 +0000 UTC FinishedAt: 2026-09-07 12:34:17 +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:*417a1c9c-8e6b-4b9a-a5c2-e56b9151f26d,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-workflowpfkxd/series-workflowpfkxd-convert-artifact-1791837386/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": "31eb3585-a7b0-4282-911e-83ab18573c07", "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-workflowpfkxd/series-workflowpfkxd-build-action-2619713774/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 12:34:27 +0000 UTC FinishedAt: 2026-09-07 12:34:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 12:34:27 +0000 UTC FinishedAt: 2026-09-07 12:34:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 12:34:27 +0000 UTC FinishedAt: 2026-09-07 12:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 12:34:27 +0000 UTC FinishedAt: 2026-09-07 12:36:08 +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:*31eb3585-a7b0-4282-911e-83ab18573c07,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-workflowpfkxd/series-workflowpfkxd-build-action-2619713774/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-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 12:36:18 +0000 UTC FinishedAt: 2026-09-07 13:33:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 12:36:18 +0000 UTC FinishedAt: 2026-09-07 13:33:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*7a6e5a65-64cf-4837-8929-06e2249a8307,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*31eb3585-a7b0-4282-911e-83ab18573c07,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-workflowpfkxd/series-workflowpfkxd-build-action-4099665153/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-workflowpfkxd/series-workflowpfkxd-build-action-2619713774/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 12:36:18 +0000 UTC FinishedAt: 2026-09-07 12:36:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 12:36:18 +0000 UTC FinishedAt: 2026-09-07 12:36:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpfkxd/series-workflowpfkxd-convert-artifact-4024826207/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 12:36:18 +0000 UTC FinishedAt: 2026-09-07 12:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 12:36:18 +0000 UTC FinishedAt: 2026-09-07 12:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 12:36:18 +0000 UTC FinishedAt: 2026-09-07 12:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 12:36:28 +0000 UTC FinishedAt: 2026-09-07 13:33:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpfkxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["asix_rx_fixup_internal","asix_rx_fixup_common","ax88172a_rx_fixup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"4b4febd4-92d5-4e65-9fec-ca613725699c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 12:36:28 +0000 UTC FinishedAt: 2026-09-07 13:33:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7a6e5a65-64cf-4837-8929-06e2249a8307,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*31eb3585-a7b0-4282-911e-83ab18573c07,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-workflowpfkxd/series-workflowpfkxd-build-action-4099665153/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-workflowpfkxd/series-workflowpfkxd-build-action-2619713774/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-workflowpfkxd/series-workflowpfkxd-convert-artifact-4024826207/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,}