Name: series-workflowwqfxw Phase: Succeeded StartedAt: 2026-07-06 15:24:56 +0000 UTC FinishedAt: 2026-07-06 17:38:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[0] Phase: Succeeded StartedAt: 2026-07-06 15:24:56 +0000 UTC FinishedAt: 2026-07-06 15:35:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[0].run-triage Phase: Succeeded StartedAt: 2026-07-06 15:24:56 +0000 UTC FinishedAt: 2026-07-06 15:35:40 +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": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REALTEK_MCU_I2C", "PSE_REALTEK_MCU_UART" ], "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": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REALTEK_MCU_I2C", "PSE_REALTEK_MCU_UART" ], "series_id": "1bcd238b-8599-4c6d-8593-69f19e6e4566" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtpse_mcu_port_get_admin_state", "rtpse_mcu_port_get_pw_status", "rtpse_mcu_port_get_pw_class", "rtpse_mcu_port_get_actual_pw", "rtpse_mcu_port_get_voltage", "rtpse_mcu_port_enable", "rtpse_mcu_port_disable", "rtpse_mcu_port_get_pw_limit", "rtpse_mcu_port_set_pw_limit", "rtpse_mcu_port_get_pw_limit_ranges", "rtpse_mcu_port_get_prio", "rtpse_mcu_port_set_prio", "rtpse_mcu_i2c_probe", "rtpse_mcu_uart_probe", "rtpse_mcu_uart_receive" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA2IDE1OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9DT05UUk9MTEVSJiMzNDssCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9JMkMmIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX1VBUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9lbmFibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2kyY19wcm9iZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfdWFydF9wcm9iZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfdWFydF9yZWNlaXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciBmb3IgUmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVcywgd2hpY2ggY2FuIGJlIGF0dGFjaGVkIHZpYSBJMkMgb3IgVUFSVC4gVGhlIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBQU0UgY29udHJvbGxlciBBUEkgYW5kIHBhcnNlcyByZXNwb25zZXMgZnJvbSB0aGUgTUNVLiBGdXp6aW5nIHRoZSBJMkMvVUFSVCBpbnRlcmZhY2VzIGFuZCB0aGUgUFNFIGNvbnRyb2xsZXIgb3BzIGlzIHZhbHVhYmxlIGZvciBmaW5kaW5nIHBvdGVudGlhbCBidWdzIGluIHRoZSBwcm90b2NvbCBwYXJzaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE1OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWNmNmJjZWYxNTA5Y2IzYTFhNjBjNmRhNDFmYjI1NDcwMzk1NTBjZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTU6MzM6NDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kMGRmYWUyMjBkYzFlOVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWxcbkBAIC0wLDAgJiM0MzsxLDE1NCBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbiYjNDM7JVlBTUwgMS4yXG4mIzQzOy0tLVxuJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwjXG4mIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuJiM0MztcbiYjNDM7dGl0bGU6IFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVVxuJiM0MztcbiYjNDM7bWFpbnRhaW5lcnM6XG4mIzQzOyAgLSBKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXG4mIzQzO1xuJiM0MztkZXNjcmlwdGlvbjogfFxuJiM0MzsgIE1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHVzaW5nXG4mIzQzOyAgUmVhbHRlayAoUlRMODIzOEIsIFJUTDgyMzksIFJUTDgyMzlDKSBvciBCcm9hZGNvbSAoQkNNNTkxMTEsIEJDTTU5MTIxKVxuJiM0MzsgIFBTRSBjaGlwcy4gVGhlIE1DVSBleHBvc2VzIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbCBvdmVyIGVpdGhlclxuJiM0MzsgIEkyQy9TTUJ1cyBvciBVQVJUOyB0aGUgYWN0dWFsIFBTRSBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVGhlXG4mIzQzOyAgUmVhbHRlayBhbmQgQnJvYWRjb20gdmFyaWFudHMgc2hhcmUgdGhpcyBkZXZpY2UgdHJlZSBjb250cmFjdCBidXQgdXNlXG4mIzQzOyAgZGlmZmVyZW50IHByb3RvY29sIG9wY29kZXMsIHNlbGVjdGVkIGJ5IHRoZSBjb21wYXRpYmxlLlxuJiM0MztcbiYjNDM7ICBUaGUgY29tcGF0aWJsZSBpZGVudGlmaWVzIHRoZSBQU0UtTUNVIHByb3RvY29sIGRpYWxlY3QsIG5vdCBhIHNwZWNpZmljXG4mIzQzOyAgcGFydC4gVGhlIGRldmljZSBoZXJlIGlzIHRoZSBNQ1U6IGl0IHByZXNlbnRzIGEgc3RhYmxlIG1lc3NhZ2UgcHJvdG9jb2xcbiYjNDM7ICBkb2N1bWVudGVkIGJ5IFJlYWx0ZWssIHdpdGggdGhlIFBTRSBzaWxpY29uIGJlaGluZCBpdCAtIEJyb2FkY29tIG9uXG4mIzQzOyAgb2xkZXIgYm9hcmRzLCBSZWFsdGVrIG9uIG5ld2VyIC0gZGV0ZWN0ZWQgYXQgcnVudGltZSBhbmQgbm90IGRlc2NyaWJlZFxuJiM0MzsgIGhlcmUuIFRoZSBNQ1UmIzM5O3Mgb3duIHNpbGljb24gaXMgZ2VuZXJhbC1wdXJwb3NlIGFuZCB2YXJpZXMgYWNyb3NzXG4mIzQzOyAgYm9hcmRzLCBzbyB0aGUgJiMzOTtyZWFsdGVrJiMzOTsgdmVuZG9yIHByZWZpeCBuYW1lcyB0aGUgcHJvdG9jb2wgZnJvbnQtZW5kXG4mIzQzOyAgKGZvbGxvd2luZyB0aGUgZ29vZ2xlLGNyb3MtZWMgcGF0dGVybik7IHRoZSAmIzM5Oy1ydGsmIzM5Oy8mIzM5Oy1icmNtJiMzOTsgc3VmZml4XG4mIzQzOyAgc2VsZWN0cyB0aGUgUmVhbHRlayBvciBCcm9hZGNvbSBkaWFsZWN0LlxuJiM0MztcbiYjNDM7ICBBIHNpbmdsZSBjb21wYXRpYmxlIHBlciBkaWFsZWN0IGNvdmVycyBib3RoIHRoZSBJMkMvU01CdXMgYW5kIFVBUlRcbiYjNDM7ICBhdHRhY2htZW50czogdGhlIHdpcmUgcHJvdG9jb2wgaXMgaWRlbnRpY2FsIGFjcm9zcyB0aGVtIGFuZCB0aGVcbiYjNDM7ICB0cmFuc3BvcnQgaXMgYWxyZWFkeSBleHByZXNzZWQgYnkgdGhlIG5vZGUmIzM5O3MgcGFyZW50IGJ1cywgc28gaXQgaXMgbm90XG4mIzQzOyAgZW5jb2RlZCBpbiB0aGUgY29tcGF0aWJsZS4gVHJhbnNwb3J0LXNwZWNpZmljIHByb3BlcnRpZXMgZGlmZmVyXG4mIzQzOyAgYWNjb3JkaW5nbHkgLSB0aGUgSTJDIGF0dGFjaG1lbnQgY2FycmllcyAmIzM5O3JlZyYjMzk7IChhbmQsIGZvciBSZWFsdGVrLFxuJiM0MzsgICYjMzk7cmVhbHRlayxpMmMtcHJvdG9jb2wmIzM5OyksIHdoaWxlIHRoZSBVQVJUIGF0dGFjaG1lbnQgY2FycmllcyB0aGUgc2VyaWFsXG4mIzQzOyAgcGVyaXBoZXJhbCBwcm9wZXJ0aWVzIHN1Y2ggYXMgJiMzOTtjdXJyZW50LXNwZWVkJiMzOTsuXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBlbnVtOlxuJiM0MzsgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1ydGtcbiYjNDM7ICAgICAgLSByZWFsdGVrLHBzZS1tY3UtYnJjbVxuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7ICBwb3dlci1zdXBwbHk6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjogUmVndWxhdG9yIHN1cHBseWluZyB0aGUgUG9FIHBvd2VyIHJhaWwuXG4mIzQzO1xuJiM0MzsgIGVuYWJsZS1ncGlvczpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzO1xuJiM0MzsgIHJlYWx0ZWssaTJjLXByb3RvY29sOlxuJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvc3RyaW5nXG4mIzQzOyAgICBlbnVtOiBbIGkyYywgc21idXMgXVxuJiM0MzsgICAgZGVzY3JpcHRpb246IHxcbiYjNDM7ICAgICAgV2lyZSBmcmFtaW5nIHRoZSBNQ1UgZmlybXdhcmUgZXhwZWN0cyBvbiB0aGUgSTJDIGJ1cy4gXCYjMzQ7c21idXNcJiMzNDsgbWVhbnNcbiYjNDM7ICAgICAgcmVhZHMgY2FycnkgYSBsZWFkaW5nIGNvbW1hbmQgYnl0ZSAoMHgwMCkgYW5kIGEgcmVwZWF0ZWQgc3RhcnQ7IFwmIzM0O2kyY1wmIzM0O1xuJiM0MzsgICAgICBtZWFucyBiYXJlIDEyLWJ5dGUgd3JpdGVzIGFuZCByZWFkcyB3aXRoIG5vIGNvbW1hbmQgcHJlZml4LiBPbmx5XG4mIzQzOyAgICAgIGFwcGxpZXMgdG8gdGhlIFJlYWx0ZWsgSTJDIGF0dGFjaG1lbnQuXG4mIzQzO1xuJiM0MztyZXF1aXJlZDpcbiYjNDM7ICAtIGNvbXBhdGlibGVcbiYjNDM7XG4mIzQzO2FsbE9mOlxuJiM0MzsgIC0gJHJlZjogcHNlLWNvbnRyb2xsZXIueWFtbCNcbiYjNDM7ICAtICRyZWY6IC9zY2hlbWFzL3NlcmlhbC9zZXJpYWwtcGVyaXBoZXJhbC1wcm9wcy55YW1sI1xuJiM0MzsgICMgVGhlIEkyQyBhdHRhY2htZW50IChpZGVudGlmaWVkIGJ5ICYjMzk7cmVnJiMzOTspIGNhbm5vdCBjYXJyeSBzZXJpYWwgYnVzIHByb3BzLlxuJiM0MzsgIC0gaWY6XG4mIzQzOyAgICAgIHJlcXVpcmVkOiBbcmVnXVxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjdXJyZW50LXNwZWVkOiBmYWxzZVxuJiM0MzsgICAgICAgIG1heC1zcGVlZDogZmFsc2VcbiYjNDM7ICAjICYjMzk7cmVhbHRlayxpMmMtcHJvdG9jb2wmIzM5OyBpcyBtZWFuaW5nZnVsIG9ubHkgZm9yIHRoZSBSZWFsdGVrIEkyQyBhdHRhY2htZW50O1xuJiM0MzsgICMgdGhlIEJyb2FkY29tIHZhcmlhbnQgYW5kIGFueSBVQVJUIGF0dGFjaG1lbnQgbXVzdCBub3QgY2FycnkgaXQuXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgY29udGFpbnM6XG4mIzQzOyAgICAgICAgICAgIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtcnRrXG4mIzQzOyAgICAgIHJlcXVpcmVkOiBbcmVnXVxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgICAgLSByZWFsdGVrLGkyYy1wcm90b2NvbFxuJiM0MzsgICAgZWxzZTpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBcJiMzNDtyZWFsdGVrLGkyYy1wcm90b2NvbFwmIzM0OzogZmFsc2VcbiYjNDM7XG4mIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgICMgUmVhbHRlayBQU0UgY2hpcCwgSTJDIGF0dGFjaG1lbnQgKFNNQnVzIGZyYW1pbmcpLlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgaTJjIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldC1wc2VAMjAge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxwc2UtbWN1LXJ0a1wmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgyMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgcmVhbHRlayxpMmMtcHJvdG9jb2wgPSBcJiMzNDtzbWJ1c1wmIzM0OztcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHBzZS1waXMge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7XG4mIzQzOyAgIyBCcm9hZGNvbSBQU0UgY2hpcCwgSTJDIGF0dGFjaG1lbnQuXG4mIzQzOyAgLSB8XG4mIzQzOyAgICBpMmMge1xuJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgIGV0aGVybmV0LXBzZUAyMCB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtYnJjbVwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgyMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHBzZS1waXMge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7XG4mIzQzOyAgIyBSZWFsdGVrIFBTRSBjaGlwLCBVQVJUIGF0dGFjaG1lbnQuXG4mIzQzOyAgLSB8XG4mIzQzOyAgICBzZXJpYWwge1xuJiM0MzsgICAgICAgIGV0aGVybmV0LXBzZSB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtcnRrXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICBjdXJyZW50LXNwZWVkID0gXHUwMDNjMTE1MjAwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgcHNlLXBpcyB7XG4mIzQzOyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICAgICAgcHNlLXBpQDAge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgI3BzZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDUyZjFhNTVlY2E5OWJmLi5lM2Y0MjZhM2IyMDFmYiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTIyNzE2LDYgJiM0MzsyMjcxNiwxMyBAQCBTOlx0TWFpbnRhaW5lZFxuIEY6XHRpbmNsdWRlL3NvdW5kL3J0Ki5oXG4gRjpcdHNvdW5kL3NvYy9jb2RlY3MvcnQqXG4gXG4mIzQzO1JFQUxURUsvQlJPQURDT00gUFNFIE1DVSBEUklWRVJcbiYjNDM7TTpcdEpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcbiYjNDM7TDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiYjNDM7UzpcdE1haW50YWluZWRcbiYjNDM7RjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1KlxuJiM0MztcbiBSRUFMVEVLIE9UVE8gV0FUQ0hET0dcbiBNOlx0U2FuZGVyIFZhbmhldWxlIFx1MDAzY3NhbmRlckBzdmFuaGV1bGUubmV0XHUwMDNlXG4gTDpcdGxpbnV4LXdhdGNoZG9nQHZnZXIua2VybmVsLm9yZ1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnIGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcbmluZGV4IDdlZjI5NjU3ZWU1ZGQxLi4yM2U0NGRkZTNkYmZlMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ1xuQEAgLTEzLDYgJiM0MzsxMywzNCBAQCBtZW51Y29uZmlnIFBTRV9DT05UUk9MTEVSXG4gXG4gaWYgUFNFX0NPTlRST0xMRVJcbiBcbiYjNDM7Y29uZmlnIFBTRV9SRUFMVEVLX01DVVxuJiM0MztcdHRyaXN0YXRlXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgU2hhcmVkIGNvcmUgZm9yIHRoZSBSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1UgZHJpdmVyLiBUaGlzIGlzXG4mIzQzO1x0ICBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSB0cmFuc3BvcnQgb3B0aW9ucyBiZWxvdy5cbiYjNDM7XG4mIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfSTJDXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydClcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQ1xuJiM0MztcdHNlbGVjdCBQU0VfUkVBTFRFS19NQ1VcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxuJiM0MztcdCAgaGFyZHdhcmUgb24gc3dpdGNoZXMgd2l0aCBSZWFsdGVrIG9yIEJyb2FkY29tIFBTRSBjaGlwcywgYXR0YWNoZWRcbiYjNDM7XHQgIHZpYSBJMkMvU01CdXMuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWxcbiYjNDM7XHQgIFBTRSBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhXG4mIzQzO1x0ICBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcmVhbHRlay1wc2UtbWN1LWkyYy5cbiYjNDM7XG4mIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfVUFSVFxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KVwmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gU0VSSUFMX0RFVl9CVVNcbiYjNDM7XHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIHRoYXQgZnJvbnRzIHRoZSBQU0VcbiYjNDM7XHQgIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHdpdGggUmVhbHRlayBvciBCcm9hZGNvbSBQU0UgY2hpcHMsIGF0dGFjaGVkXG4mIzQzO1x0ICB2aWEgVUFSVC4gVGhlIE1DVSBleHBvc2VzIGEgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDsgdGhlIGFjdHVhbCBQU0VcbiYjNDM7XHQgIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGFcbiYjNDM7XHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtdWFydC5cbiYjNDM7XG4gY29uZmlnIFBTRV9SRUdVTEFUT1JcbiBcdHRyaXN0YXRlIFwmIzM0O1JlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlclwmIzM0O1xuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxuaW5kZXggY2M3OGY3ZWE3ZjVmNzEuLjljY2E1OTAwZmUzNDIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcbkBAIC0zLDYgJiM0MzszLDkgQEBcbiBcbiBvYmotJChDT05GSUdfUFNFX0NPTlRST0xMRVIpICYjNDM7PSBwc2VfY29yZS5vXG4gXG4mIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1UpICYjNDM7PSByZWFsdGVrLXBzZS1tY3UtY29yZS5vXG4mIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfSTJDKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LWkyYy5vXG4mIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfVUFSVCkgJiM0Mzs9IHJlYWx0ZWstcHNlLW1jdS11YXJ0Lm9cbiBvYmotJChDT05GSUdfUFNFX1JFR1VMQVRPUikgJiM0Mzs9IHBzZV9yZWd1bGF0b3Iub1xuIG9iai0kKENPTkZJR19QU0VfUEQ2OTJYMCkgJiM0Mzs9IHBkNjkyeDAub1xuIG9iai0kKENPTkZJR19QU0VfU0kzNDc0KSAmIzQzOz0gc2kzNDc0Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjk2MWFjOWU5ZWU5YzdjXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuY1xuQEAgLTAsMCAmIzQzOzEsMTAwNiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsvKlxuJiM0MzsgKiBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgZnJvbnRpbmcgUmVhbHRlayBvciBCcm9hZGNvbSBQU0VcbiYjNDM7ICogY2hpcHMuIEJvdGggdmVuZG9ycyYjMzk7IE1DVXMgc3BlYWsgYSBjbG9zZWx5IHJlbGF0ZWQgMTItYnl0ZSBmaXhlZC1mcmFtZVxuJiM0MzsgKiBtYW5hZ2VtZW50IHByb3RvY29sOyB0aGlzIGRyaXZlciBjb3ZlcnMgYm90aCB2aWEgYSBwZXItZGlhbGVjdCBvcGNvZGVcbiYjNDM7ICogdGFibGUgYW5kIHJlc3BvbnNlIHBhcnNlcnMuXG4mIzQzOyAqXG4mIzQzOyAqIE1hbnkgUG9FIHN3aXRjaCBkZXNpZ25zIHB1dCBhIGRlZGljYXRlZCBtaWNyb2NvbnRyb2xsZXIgaW4gZnJvbnQgb2YgdGhlXG4mIzQzOyAqIGFjdHVhbCBQU0Ugc2lsaWNvbjogdGhlIGhvc3QgQ1BVIHRhbGtzIHRvIHRoZSBNQ1Ugb3ZlciBJMkMvU01CdXMgb3JcbiYjNDM7ICogVUFSVCwgYW5kIHRoZSBNQ1UgaW4gdHVybiBtYW5hZ2VzIHRoZSBQU0UgY2hpcHMgb24gdGhlIGJvYXJkLiBUaGUgTUNVXG4mIzQzOyAqIHNwZWFrcyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2wgKDEyLWJ5dGUgZml4ZWQtc2l6ZSBmcmFtZXM7IG9wY29kZVxuJiM0MzsgKiAmIzQzOyBhcmcgJiM0MzsgOSBwYXlsb2FkIGJ5dGVzICYjNDM7IGNoZWNrc3VtKS4gVGhlIFBTRSBjaGlwcyB0aGVtc2VsdmVzIGFyZSBub3RcbiYjNDM7ICogYWNjZXNzZWQgZGlyZWN0bHk7IGV2ZXJ5dGhpbmcgZ29lcyB0aHJvdWdoIE1DVSBjb21tYW5kcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBkcml2ZXIgdGFyZ2V0cyB0aGF0IGFyY2hpdGVjdHVyZSBmb3IgdGhlIFJlYWx0ZWstZmFtaWx5IHByb3RvY29sLlxuJiM0MzsgKiBUd28gZGlhbGVjdHMgYXJlIHN1cHBvcnRlZDogUmVhbHRlayBNQ1VzIG1hbmFnaW5nIFJUTDgyM3gvUlRMODIzOSogUFNFXG4mIzQzOyAqIGNoaXBzLCBhbmQgQnJvYWRjb20gTUNVcyBtYW5hZ2luZyBCQ001OTB4eCBQU0UgY2hpcHMuIFRoZSB0d28gc2hhcmVcbiYjNDM7ICogZnJhbWUgZm9ybWF0IGFuZCBhIHN1bS1tb2QtMjU2IGNoZWNrc3VtIGJ1dCBkaXZlcmdlIG9uIG9wY29kZSBudW1iZXJzXG4mIzQzOyAqIGFuZCBvbiBhIGZldyByZXNwb25zZSBsYXlvdXRzOyB0aGlzIGlzIGhhbmRsZWQgYnkgdGhlIHBlci1kaWFsZWN0XG4mIzQzOyAqIG9wY29kZSB0YWJsZSBhbmQgcGFyc2VyIGhvb2tzLlxuJiM0MzsgKlxuJiM0MzsgKiBPdXQgb2Ygc2NvcGU6IFBTRSBjaGlwcyB0aGF0IGFyZSBpbnRlcmZhY2VkIGRpcmVjdGx5IGZyb20gdGhlIGhvc3RcbiYjNDM7ICogd2l0aG91dCBhIG1hbmFnZW1lbnQgTUNVLCBNQ1UgZGVzaWducyB0aGF0IHNwZWFrIGFuIHVucmVsYXRlZCBwcm90b2NvbFxuJiM0MzsgKiBmYW1pbHksIGFuZCBcJiMzNDtkdW1iIFBTRVwmIzM0OyBtb2RlcyB3aGVyZSBubyBob3N0IGNvbnRyb2wgaXMgd2lyZWQgdXAgYXQgYWxsLlxuJiM0MzsgKiBUaG9zZSwgaWYgYW5kIHdoZW4gdGhleSBzaG93IHVwIGluIHRoZSBrZXJuZWwsIGJlbG9uZyBpbiBzZXBhcmF0ZVxuJiM0MzsgKiBkcml2ZXJzIHVuZGVyIGRyaXZlcnMvbmV0L3BzZS1wZC8uXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgY29yZSBtb2R1bGUgaW1wbGVtZW50cyB0aGUgcHJvdG9jb2wsIGRlY29kaW5nL2VuY29kaW5nIG9mIE1DVVxuJiM0MzsgKiByZXNwb25zZXMsIGFuZCB0aGUgcHNlX2NvbnRyb2xsZXJfb3BzIGludGVncmF0aW9uLiBUcmFuc3BvcnQgbW9kdWxlc1xuJiM0MzsgKiAocmVhbHRlay1wc2UtaTJjLCByZWFsdGVrLXBzZS11YXJ0KSBwcm92aWRlIHRoZSBzZW5kL3JlY3YgY2FsbGJhY2tzLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZ3Bpby9jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ppZmZpZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2RfZGV2aWNldGFibGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cmVhbHRlay1wc2UtbWN1LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4Qlx0XHQweDAxMzhcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlcdFx0MHgwMDM5XG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5Q1x0XHQweDAxMzlcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExXHRcdDB4ZTExMVxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjFcdFx0MHhlMTIxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRFx0XHQweDAwXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElOR1x0XHQweDAxXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkdcdFx0MHgwMlxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19URVNUXHRcdFx0MHgwM1x0LyogQnJvYWRjb207IHJlc2VydmVkIG9uIFJlYWx0ZWsgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRkFVTFRcdFx0MHgwNFxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVFx0XHQweDA1XHQvKiBCcm9hZGNvbTsgcmVzZXJ2ZWQgb24gUmVhbHRlayAqL1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HXHRcdDB4MDZcbiYjNDM7XG4mIzQzOy8qIFJUUFNFX01DVV9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFIHZhbHVlcyAqL1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUlx0MHgwMlxuJiM0MztcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfTUFYX1BPUlRTXHRcdFx0NDhcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFlcdFx0M1xuJiM0MztcbiYjNDM7ZW51bSBydHBzZV9tY3VfY21kIHtcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEUsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk8sXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJRyxcbiYjNDM7XG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRSxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZLFxuJiM0MztcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTLFxuJiM0MztcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFMsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUcsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHLFxuJiM0MztcbiYjNDM7XHRSVFBTRV9NQ1VfTlVNX0NNRFMsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSB7XG4mIzQzO1x0dTggb3A7XG4mIzQzO1x0Ym9vbCB2YWxpZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX09QKG9wYylcdHsgLm9wID0gKG9wYyksIC52YWxpZCA9IHRydWUgfVxuJiM0MztcbiYjNDM7LyogUGFyc2VkIE1DVSByZXNwb25zZSBzdHJ1Y3R1cmVzIChkZWNvZGVkIGZyb20gcnRwc2VfbWN1X21zZyByZXBsaWVzKSAqL1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9pbmZvIHtcbiYjNDM7XHR1OCBtYXhfcG9ydHM7XG4mIzQzO1x0Ym9vbCBzeXN0ZW1fZW5hYmxlO1xuJiM0MztcdHUxNiBkZXZpY2VfaWQ7XG4mIzQzO1x0dTggc3dfdmVyO1xuJiM0MztcdHU4IG1jdV90eXBlO1xuJiM0MztcdHU4IGNvbmZpZ19zdGF0dXM7XG4mIzQzO1x0dTggZXh0X3ZlcjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyB7XG4mIzQzO1x0dTggdXZsbztcbiYjNDM7XHR1OCBvdmxvO1xuJiM0MztcdGJvb2wgcHJlYWxsb2NfZW5hYmxlO1xuJiM0MztcdHU4IG51bV9vZl9wc2VzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyB7XG4mIzQzO1x0dTggc3RzMTtcbiYjNDM7XHR1OCBzdHMyO1xuJiM0MztcdHU4IHN0czM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQge1xuJiM0MztcdHUxNiB2b2x0YWdlX3JhdztcdC8qIDY0LjQ1bVYvTFNCICovXG4mIzQzO1x0dTE2IGN1cnJlbnRfcmF3O1x0LyogMW1BL0xTQiAqL1xuJiM0MztcdHUxNiB0ZW1wZXJhdHVyZV9yYXc7XHQvKiBUKG1DKSA9IDEyNTAgKiAoMjIwIC0gcmF3KSAqL1xuJiM0MztcdHUxNiBwb3dlcl9yYXc7XHRcdC8qIDEwMG1XL0xTQiAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyB7XG4mIzQzO1x0Ym9vbCBlbmFibGU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyB7XG4mIzQzO1x0dTggbWF4X3Bvd2VyO1xuJiM0MztcdHU4IHByaW9yaXR5O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSBvcGNvZGVbUlRQU0VfTUNVX05VTV9DTURTXTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2hcbiYjNDM7XHQgKiBkaWFsZWN0IHN1cHBsaWVzIGl0cyBvd24uIE90aGVyIHJlc3BvbnNlcyBzaGFyZSBvbmUgbGF5b3V0IGFuZCBhcmVcbiYjNDM7XHQgKiBkZWNvZGVkIGRpcmVjdGx5IC0gYSBkaWFsZWN0IHRoYXQgZGl2ZXJnZXMgdGhlcmUgbXVzdCBhZGQgYSBob29rLFxuJiM0MztcdCAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2b2lkICgqcGFyc2Vfc3lzdGVtX2luZm8pKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pO1xuJiM0MztcdGludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7XG4mIzQzO1x0Y29uc3QgY2hhciAqKCptY3VfdHlwZV9zdHIpKHVuc2lnbmVkIGludCBtY3VfdHlwZSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQZXItY29tcGF0aWJsZSBtYXRjaCBkYXRhOiBzZWxlY3RlZCBieSB0aGUgRFQvSTJDIGNvbXBhdGlibGUsIGl0IGJ1bmRsZXNcbiYjNDM7ICogdGhlIHByb3RvY29sIGRpYWxlY3Qgd2l0aCBhdHRhY2htZW50IHF1aXJrcyB0aGF0IHRoZSBleGFjdCBNQ1Ugc2lsaWNvblxuJiM0MzsgKiBkb2VzIG5vdCBkZXRlcm1pbmUgKG9ubHkgaXRzIGZpcm13YXJlIHByb3RvY29sIGFuZCB0aGUgaG9zdCBidXMgZG8pLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgKmRpYWxlY3Q7XG4mIzQzO1x0LyogSTJDIGZyYW1pbmcgbXVzdCBjb21lIGZyb20gRFQgKHJlYWx0ZWssaTJjLXByb3RvY29sKTsgZWxzZSBTTUJ1cy4gKi9cbiYjNDM7XHRib29sIGkyY19wcm90b19kdF9yZXF1aXJlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHtcbiYjNDM7XHRjb25zdCBjaGFyICpuYW1lO1xuJiM0MztcdHUxNiBkZXZpY2VfaWQ7XG4mIzQzO1x0dTMyIG1heF9tV19wZXJfcG9ydDtcbiYjNDM7XHRlbnVtIHJ0cHNlX21jdV9jbWQgcHdfc2V0X2NtZDtcdC8qIGNvbW1hbmQgdXNlZCBieSBzZXRfcHdfbGltaXQgKi9cbiYjNDM7XHR1MzIgcHdfc2V0X2xzYl9tVztcdFx0LyogTFNCIG9mIHB3X3NldF9jbWQgdmFsdWUsIGluIG1XICovXG4mIzQzO1x0dTMyIHB3X3JlYWRfbHNiX21XO1x0XHQvKiBMU0Igb2YgZXh0X2NvbmZpZy5tYXhfcG93ZXIgcmVhZC1iYWNrLCBpbiBtVyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzhiX2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEIsXG4mIzQzO1x0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7UlRMODIzOEJcJiMzNDssXG4mIzQzO1x0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxuJiM0MztcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbiYjNDM7XHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5X2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOSxcbiYjNDM7XHQubWF4X21XX3Blcl9wb3J0ID0gOTAwMDAsXG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtSVEw4MjM5XCYjMzQ7LFxuJiM0MztcdC5wd19yZWFkX2xzYl9tVyA9IDQwMCxcbiYjNDM7XHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuJiM0MztcdC5wd19zZXRfbHNiX21XID0gNDAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzljX2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMsXG4mIzQzO1x0Lm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7UlRMODIzOUNcJiMzNDssXG4mIzQzO1x0LnB3X3JlYWRfbHNiX21XID0gNDAwLFxuJiM0MztcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXG4mIzQzO1x0LnB3X3NldF9sc2JfbVcgPSA0MDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gYmNtNTkxMTFfaW5mbyA9IHtcbiYjNDM7XHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMSxcbiYjNDM7XHQubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsXG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtCQ001OTExMVwmIzM0OyxcbiYjNDM7XHQucHdfcmVhZF9sc2JfbVcgPSAyMDAsXG4mIzQzO1x0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxuJiM0MztcdC5wd19zZXRfbHNiX21XID0gMjAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTIxX2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjEsXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCQ001OTEyMSBpcyBhIDYwVyBUeXBlLTMgcGFydCwgYnV0IGtub3duIGJvYXJkcyBydW4gaXQgYXQgODAyLjNhdFxuJiM0MztcdCAqIGFuZCB0aGUgQkNNIGRpYWxlY3QgaGFzIG9ubHkgdGhlIDgtYml0LzAuMlcgc2V0IGNvbW1hbmQgKFx1MDAzYz01MVcpO1xuJiM0MztcdCAqIGNhcCBhdCB0aGUgMzBXIHRoZSBoYXJkd2FyZSBhY3R1YWxseSBvZmZlcnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7QkNNNTkxMjFcJiMzNDssXG4mIzQzO1x0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxuJiM0MztcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbiYjNDM7XHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIEhlbHBlcnMgYW5kIGJhc2ljIGZ1bmN0aW9ucyAqL1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBydHBzZV9tY3VfY3RybCAqdG9fcnRwc2VfbWN1X2N0cmwoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY29udGFpbmVyX29mKHBjZGV2LCBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwsIHBjZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBydHBzZV9tY3VfbmVlZHNfaTJjX3Byb3RvKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2gpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbWF0Y2gtXHUwMDNlaTJjX3Byb3RvX2R0X3JlcXVpcmVkO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9uZWVkc19pMmNfcHJvdG8pO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X21zZ19pbml0KHN0cnVjdCBydHBzZV9tY3VfbXNnICptc2csIHU4IG9wY29kZSlcbiYjNDM7e1xuJiM0MztcdG1lbXNldChtc2csIDB4ZmYsIHNpemVvZigqbXNnKSk7XG4mIzQzO1x0bXNnLVx1MDAzZW9wY29kZSA9IG9wY29kZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHU4IHJ0cHNlX21jdV9jaGVja3N1bShjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0dTggc3VtID0gMDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGxlbi0tKVxuJiM0MztcdFx0c3VtICYjNDM7PSAqYnVmJiM0MzsmIzQzOztcbiYjNDM7XHRyZXR1cm4gc3VtO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9kb194ZmVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWNoZWNrc3VtID0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlcSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSk7XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHNlLVx1MDAzZW11dGV4KSB7XG4mIzQzO1x0XHRyZXQgPSBwc2UtXHUwMDNldHJhbnNwb3J0LVx1MDAzZXNlbmQocHNlLCByZXEpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIE1DVSBuZWVkcyBhIGZpeGVkIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gcmVjZWl2aW5nIGEgcmVxdWVzdFxuJiM0MztcdFx0ICogYW5kIGhhdmluZyB0aGUgcmVzcG9uc2UgcmVhZHksIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBieXRlcyBnZXQgdG9cbiYjNDM7XHRcdCAqIHVzLiBQYWNlIHRoZSB0cmFuc2FjdGlvbiBoZXJlIHNvIGVhY2ggdHJhbnNwb3J0IGNhbiBrZWVwIGl0cyByZWN2XG4mIzQzO1x0XHQgKiBwYXRoIHNpbXBsZTogYSBzaW5nbGUgYm91bmRlZCB3YWl0IHJhdGhlciB0aGFuIGEgZ2VuZXJpYyByZXRyeS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bXNsZWVwKFJUUFNFX01DVV9SRVNQT05TRV9NUyk7XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KHJlc3AsIDAsIHNpemVvZigqcmVzcCkpO1xuJiM0MztcdFx0cmV0ID0gcHNlLVx1MDAzZXRyYW5zcG9ydC1cdTAwM2VyZWN2KHBzZSwgcmVxLCByZXNwKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEV4cGxpY2l0IE1DVSBlcnJvciBvcGNvZGVzIChvYnNlcnZlZCBvbiB0aGUgQkNNIGRpYWxlY3Q7IGhhcm1sZXNzXG4mIzQzO1x0ICogdG8gY2hlY2sgZm9yIFJUTCB0b28pLiBDYXRjaCB0aGVzZSBiZWZvcmUgdGhlIGdlbmVyaWMgb3Bjb2RlL0NSQ1xuJiM0MztcdCAqIG1pc21hdGNoIHBhdGggc28gY2FsbGVycyBzZWUgYSBtZWFuaW5nZnVsIGVycm5vLlxuJiM0MztcdCAqL1xuJiM0MztcdHN3aXRjaCAocmVzcC1cdTAwM2VvcGNvZGUpIHtcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9PUENPREVfSU5DT01QTEVURTpcbiYjNDM7XHRcdHJldHVybiAtRUJBREU7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNOlxuJiM0MztcdFx0cmV0dXJuIC1FQkFETVNHO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9OT1RfUkVBRFk6XG4mIzQzO1x0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChyZXNwLVx1MDAzZW9wY29kZSAhPSByZXEtXHUwMDNlb3Bjb2RlIHx8XG4mIzQzO1x0ICAgIHJlc3AtXHUwMDNlc2VxX251bSAhPSByZXEtXHUwMDNlc2VxX251bSB8fFxuJiM0MztcdCAgICByZXNwLVx1MDAzZWNoZWNrc3VtICE9IHJ0cHNlX21jdV9jaGVja3N1bSgodTggKilyZXNwLCBSVFBTRV9NQ1VfTVNHX1NJWkUgLSAxKSlcbiYjNDM7XHRcdHJldHVybiAtRUJBRE1TRztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfcXVlcnkoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCB1OCBvcGNvZGUsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3Bjb2RlKTtcbiYjNDM7XHRyZXEucGF5bG9hZFswXSA9IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXHUwMDI2cmVxLCByZXNwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlc3AtXHUwMDNlcGF5bG9hZFswXSAhPSBwb3J0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2NtZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSwgdTggYXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wY29kZSk7XG4mIzQzO1x0cmVxLnBheWxvYWRbMF0gPSBwb3J0O1xuJiM0MztcdHJlcS5wYXlsb2FkWzFdID0gYXJnO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChyZXNwLnBheWxvYWRbMF0gIT0gcG9ydCB8fCByZXNwLnBheWxvYWRbMV0gIT0gMClcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogR2xvYmFsIG9wZXJhdGlvbnMgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dldF9pbmZvKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGMtXHUwMDNlb3ApO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXHUwMDI2cmVxLCBcdTAwMjZyZXNwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2Vfc3lzdGVtX2luZm8ocmVzcC5wYXlsb2FkLCBpbmZvKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGMtXHUwMDNlb3ApO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXHUwMDI2cmVxLCBcdTAwMjZyZXNwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Y29uZmlnLVx1MDAzZXV2bG8gPSByZXNwLnBheWxvYWRbMF07XG4mIzQzO1x0Y29uZmlnLVx1MDAzZW92bG8gPSByZXNwLnBheWxvYWRbNV07XG4mIzQzO1x0Y29uZmlnLVx1MDAzZXByZWFsbG9jX2VuYWJsZSA9IChyZXNwLnBheWxvYWRbMV0gPT0gMHgxKTtcbiYjNDM7XHRjb25maWctXHUwMDNlbnVtX29mX3BzZXMgPSByZXNwLnBheWxvYWRbNl07XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGMtXHUwMDNlb3ApO1xuJiM0MztcdHJlcS5wYXlsb2FkWzBdID0gZW5hYmxlID8gMHgxIDogMHgwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAocmVzcC5wYXlsb2FkWzBdID09IDB4MCkgPyAwIDogLUVJTztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUG9ydCBvcGVyYXRpb25zICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU107XG4mIzQzO1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0c3RhdHVzLVx1MDAzZXN0czEgPSByZXNwLnBheWxvYWRbMV07XG4mIzQzO1x0c3RhdHVzLVx1MDAzZXN0czIgPSByZXNwLnBheWxvYWRbMl07XG4mIzQzO1x0c3RhdHVzLVx1MDAzZXN0czMgPSByZXNwLnBheWxvYWRbM107XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCAqbWVhc3VyZW1lbnQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdG1lYXN1cmVtZW50LVx1MDAzZXZvbHRhZ2VfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFsxXSk7XG4mIzQzO1x0bWVhc3VyZW1lbnQtXHUwMDNlY3VycmVudF9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cmVzcC5wYXlsb2FkWzNdKTtcbiYjNDM7XHRtZWFzdXJlbWVudC1cdTAwM2V0ZW1wZXJhdHVyZV9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cmVzcC5wYXlsb2FkWzVdKTtcbiYjNDM7XHRtZWFzdXJlbWVudC1cdTAwM2Vwb3dlcl9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cmVzcC5wYXlsb2FkWzddKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfY29uZmlnICpjb25maWcpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfQ09ORklHXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXHUwMDNlb3AsIFx1MDAyNnJlc3ApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRjb25maWctXHUwMDNlZW5hYmxlID0gKHJlc3AucGF5bG9hZFsxXSA9PSAxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnICpjb25maWcpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR107XG4mIzQzO1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Y29uZmlnLVx1MDAzZW1heF9wb3dlciA9IHJlc3AucGF5bG9hZFszXTtcbiYjNDM7XHRjb25maWctXHUwMDNlcHJpb3JpdHkgPSByZXNwLnBheWxvYWRbNF07XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgZW5hYmxlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBlbmFibGUgPyAweDEgOiAweDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBQU0UgY29udHJvbGxlciBvcHMgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBwc2VfYWRtaW5fc3RhdGUgKmFkbWluX3N0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyBjb25maWc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhwc2UsIGlkLCBcdTAwMjZjb25maWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRhZG1pbl9zdGF0ZS1cdTAwM2VjMzNfYWRtaW5fc3RhdGUgPSBjb25maWcuZW5hYmxlID8gRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0VOQUJMRUQgOlxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0RJU0FCTEVEO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBwc2VfcHdfc3RhdHVzICpwd19zdGF0dXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFx1MDAyNnN0YXR1cyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc3RhdHVzLnN0czEpIHtcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRDpcbiYjNDM7XHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RJU0FCTEVEO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfU0VBUkNISU5HOlxuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkc6XG4mIzQzO1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19TRUFSQ0hJTkc7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfREVMSVZFUklORztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1RFU1Q6XG4mIzQzO1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19URVNUO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRkFVTFQ6XG4mIzQzO1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19GQVVMVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUOlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfT1RIRVJGQVVMVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19VTktOT1dOO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3Moc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgc3RhdHVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMocHNlLCBpZCwgXHUwMDI2c3RhdHVzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBzdHMyIGhvbGRzIHRoZSBjbGFzcyBvbmx5IGluIHRoZSBvcGVyYXRpb25hbCBzdGF0ZXMgYmVsb3cuIEluIGFcbiYjNDM7XHQgKiBmYXVsdC90ZXN0IHN0YXRlIChvciBhIGNvZGUgcmVzZXJ2ZWQgb24gdGhlIGN1cnJlbnQgZGlhbGVjdCkgaXRcbiYjNDM7XHQgKiBkb2VzIG5vdCwgc28gdGhlcmUgaXMgbm8gY2xhc3MgdG8gcmVwb3J0IGFuZCB3ZSByZXR1cm4gMC4gVGhhdCBpc1xuJiM0MztcdCAqIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSByZWFsIGNsYXNzLTAgUEQ7IHVzZXJzcGFjZSBkaXNhbWJpZ3VhdGVzXG4mIzQzO1x0ICogdmlhIHRoZSBwb3dlciBzdGF0dXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3dpdGNoIChzdGF0dXMuc3RzMSkge1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEOlxuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOlxuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkc6XG4mIzQzO1x0XHRyZXR1cm4gcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2VfcG9ydF9jbGFzcyhcdTAwMjZzdGF0dXMpO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChwc2UsIGlkLCBcdTAwMjZtZWFzdXJlbWVudCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIDEwMG1XIHBlciBMU0IgKi9cbiYjNDM7XHRyZXR1cm4gbWVhc3VyZW1lbnQucG93ZXJfcmF3ICogMTAwVTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTMyIHVWO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgXHUwMDI2bWVhc3VyZW1lbnQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiA2NC40NW1WIHBlciBMU0IgKi9cbiYjNDM7XHR1ViA9IG1lYXN1cmVtZW50LnZvbHRhZ2VfcmF3ICogNjQ0NTBVO1xuJiM0MztcdHJldHVybiBtaW5fdCh1MzIsIHVWLCBJTlRfTUFYKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9lbmFibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUodG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpLCBpZCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZGlzYWJsZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZSh0b19ydHBzZV9tY3VfY3RybChwY2RldiksIGlkLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvbmZpZy5tYXhfcG93ZXIgKiBwc2UtXHUwMDNlY2hpcC1cdTAwM2Vwd19yZWFkX2xzYl9tVztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXQoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwgaW50IG1heF9tVylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICp0eXBlX29wYywgKnZhbF9vcGM7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gKmNoaXAgPSBwc2UtXHUwMDNlY2hpcDtcbiYjNDM7XHR1OCBwcmdfdmFsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChtYXhfbVcgXHUwMDNjIDAgfHwgbWF4X21XIFx1MDAzZSBjaGlwLVx1MDAzZW1heF9tV19wZXJfcG9ydClcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcbiYjNDM7XHR0eXBlX29wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdO1xuJiM0MztcdHZhbF9vcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbY2hpcC1cdTAwM2Vwd19zZXRfY21kXTtcbiYjNDM7XHQvKiBwd19zZXRfbHNiX21XIGlzIHRoZSBkaXZpc29yIGJlbG93OyByZWplY3QgYSBjaGlwIHRoYXQgbGFja3MgaXQuICovXG4mIzQzO1x0aWYgKCF0eXBlX29wYy1cdTAwM2V2YWxpZCB8fCAhdmFsX29wYy1cdTAwM2V2YWxpZCB8fCAhY2hpcC1cdTAwM2Vwd19zZXRfbHNiX21XKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFN3aXRjaCB0aGUgcG9ydCB0byB1c2VyLWRlZmluZWQgbGltaXQgbW9kZSBmaXJzdCwgdGhlbiBwcm9ncmFtIHRoZVxuJiM0MztcdCAqIGxpbWl0IHZhbHVlLiBJZiB0aGUgc2Vjb25kIGNtZCBmYWlscywgdGhlIHBvcnQgaXMgbGVmdCBpblxuJiM0MztcdCAqIHVzZXItZGVmaW5lZCBtb2RlIGJ1dCB3aXRoIHRoZSBwcmV2aW91cyBsaW1pdCB2YWx1ZTsgdGhlIG5leHRcbiYjNDM7XHQgKiBzdWNjZXNzZnVsIHNldF9wd19saW1pdCBjYWxsIHJlY292ZXJzIGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCB0eXBlX29wYy1cdTAwM2VvcCwgUlRQU0VfTUNVX1BPUlRfUFdfTElNSVRfVFlQRV9VU0VSKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cHJnX3ZhbCA9IG1pbl90KHVuc2lnbmVkIGludCwgbWF4X21XIC8gY2hpcC1cdTAwM2Vwd19zZXRfbHNiX21XLCBVOF9NQVgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIHZhbF9vcGMtXHUwMDNlb3AsIHByZ192YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBwc2VfcHdfbGltaXRfcmFuZ2VzICpvdXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9jMzNfcHNlX3B3X2xpbWl0X3JhbmdlICpyYW5nZTtcbiYjNDM7XG4mIzQzO1x0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UpO1xuJiM0MztcdGlmICghcmFuZ2UpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmFuZ2VbMF0ubWluID0gMDtcbiYjNDM7XHRyYW5nZVswXS5tYXggPSBwc2UtXHUwMDNlY2hpcC1cdTAwM2VtYXhfbVdfcGVyX3BvcnQ7XG4mIzQzO1xuJiM0MztcdG91dC1cdTAwM2VjMzNfcHdfbGltaXRfcmFuZ2VzID0gcmFuZ2U7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhwc2UsIGlkLCBcdTAwMjZjb25maWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY29uZmlnLnByaW9yaXR5O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XG4mIzQzO1x0aWYgKHByaW8gXHUwMDNlIFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWSlcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcbiYjNDM7XHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV07XG4mIzQzO1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgb3BjLVx1MDAzZW9wLCBwcmlvKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9vcHMgcnRwc2VfbWN1X29wcyA9IHtcbiYjNDM7XHQucGlfZ2V0X2FkbWluX3N0YXRlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlLFxuJiM0MztcdC5waV9nZXRfcHdfc3RhdHVzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyxcbiYjNDM7XHQucGlfZ2V0X3B3X2NsYXNzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzLFxuJiM0MztcdC5waV9nZXRfYWN0dWFsX3B3ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyxcbiYjNDM7XHQucGlfZW5hYmxlID0gcnRwc2VfbWN1X3BvcnRfZW5hYmxlLFxuJiM0MztcdC5waV9kaXNhYmxlID0gcnRwc2VfbWN1X3BvcnRfZGlzYWJsZSxcbiYjNDM7XHQucGlfZ2V0X3ZvbHRhZ2UgPSBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSxcbiYjNDM7XHQucGlfZ2V0X3B3X2xpbWl0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0LFxuJiM0MztcdC5waV9zZXRfcHdfbGltaXQgPSBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXQsXG4mIzQzO1x0LnBpX2dldF9wd19saW1pdF9yYW5nZXMgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzLFxuJiM0MztcdC5waV9nZXRfcHJpbyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvLFxuJiM0MztcdC5waV9zZXRfcHJpbyA9IHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZGlzY292ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyBleHRfY29uZmlnO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZGVhZGxpbmU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIGJvb3RpbmcgTUNVIG1heSBzdGF5IHNpbGVudCAoLUVUSU1FRE9VVCksIG5vdCBBQ0sgaXRzIGFkZHJlc3NcbiYjNDM7XHQgKiAoLUVOWElPIC8gLUVSRU1PVEVJTyksIHJlcG9ydCBub3QtcmVhZHkgKC1FQUdBSU4pLCBvciBlbWl0IGFcbiYjNDM7XHQgKiBjb3JydXB0L3BhcnRpYWwgZnJhbWUgKC1FQkFETVNHIC8gLUVCQURFKS4gUmV0cnkgdGhvc2Ugd2l0aGluIGFcbiYjNDM7XHQgKiBib3VuZGVkIHdpbmRvdzsgb3RoZXIgZXJyb3JzIChlLmcuIC1FT1BOT1RTVVBQKSBhcmUgZmF0YWwgYW5kIGZhaWxcbiYjNDM7XHQgKiBpbW1lZGlhdGVseS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkZWFkbGluZSA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhSVFBTRV9NQ1VfQk9PVF9USU1FT1VUX01TKTtcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRyZXQgPSBydHBzZV9tY3VfZ2V0X2luZm8ocHNlLCBpbmZvKTtcbiYjNDM7XHRcdGlmIChyZXQgIT0gLUVUSU1FRE9VVCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FTlhJTyBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FUkVNT1RFSU8gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcmV0ICE9IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHJldCAhPSAtRUJBRE1TRyBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQkFERSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRtc2xlZXAoUlRQU0VfTUNVX0JPT1RfUkVUUllfTVMpO1xuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIHJldCwgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgTUNVIGluZm9cXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGluZm8tXHUwMDNlZGV2aWNlX2lkKSB7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCOlxuJiM0MztcdFx0cHNlLVx1MDAzZWNoaXAgPSBcdTAwMjZydGw4MjM4Yl9pbmZvO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzk6XG4mIzQzO1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNnJ0bDgyMzlfaW5mbztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5QzpcbiYjNDM7XHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2cnRsODIzOWNfaW5mbztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMTpcbiYjNDM7XHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2YmNtNTkxMTFfaW5mbztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTEyMTpcbiYjNDM7XHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2YmNtNTkxMjFfaW5mbztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCAtRUlOVkFMLCBcJiMzNDt1bmtub3duIFBTRSBpZCAweCV4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgaW5mby1cdTAwM2VkZXZpY2VfaWQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFpbmZvLVx1MDAzZW1heF9wb3J0cyB8fCBpbmZvLVx1MDAzZW1heF9wb3J0cyBcdTAwM2UgUlRQU0VfTUNVX01BWF9QT1JUUylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtNQ1UgcmVwb3J0cyBpbnZhbGlkIHBvcnQgY291bnQgJXVcXG5cJiMzNDssIGluZm8tXHUwMDNlbWF4X3BvcnRzKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHBzZSwgXHUwMDI2ZXh0X2NvbmZpZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIHJldCwgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgTUNVIGV4dCBjb25maWdcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRkZXZfaW5mbyhwc2UtXHUwMDNlZGV2LCBcJiMzNDslcyBNQ1UsICVzIChpZCAweCUwNHgpLCAldSBwb3J0cyBhY3Jvc3MgJXUgUFNFIGNoaXAocylcXG5cJiMzNDssXG4mIzQzO1x0XHQgcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlbWN1X3R5cGVfc3RyKGluZm8tXHUwMDNlbWN1X3R5cGUpLCBwc2UtXHUwMDNlY2hpcC1cdTAwM2VuYW1lLFxuJiM0MztcdFx0IGluZm8tXHUwMDNlZGV2aWNlX2lkLCBpbmZvLVx1MDAzZW1heF9wb3J0cywgZXh0X2NvbmZpZy5udW1fb2ZfcHNlcyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9yZWd1bGF0b3JfZGlzYWJsZSh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0cmVndWxhdG9yX2Rpc2FibGUoZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nbG9iYWxfZGlzYWJsZSh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShwc2UsIGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHJ0cHNlX21jdV9yZWdpc3RlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2g7XG4mIzQzO1x0c3RydWN0IGdwaW9fZGVzYyAqZW5hYmxlX2dwaW87XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9pbmZvIGluZm87XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgcnRwc2VfbWN1X21zZykgIT0gUlRQU0VfTUNVX01TR19TSVpFKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9tdXRleF9pbml0KHBzZS1cdTAwM2VkZXYsIFx1MDAyNnBzZS1cdTAwM2VtdXRleCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHBzZS1cdTAwM2VkZXYpO1xuJiM0MztcdGlmICghbWF0Y2gpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCAtRU5PREVWLCBcJiMzNDttaXNzaW5nIG1hdGNoIGRhdGFcXG5cJiMzNDspO1xuJiM0MztcdHBzZS1cdTAwM2VkaWFsZWN0ID0gbWF0Y2gtXHUwMDNlZGlhbGVjdDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYXRjaCBhIGRpYWxlY3QgdGhhdCBmb3Jnb3QgdG8gc2V0IG9uZSBvZiB0aGUgcmVxdWlyZWQgaG9va3MgYXRcbiYjNDM7XHQgKiBwcm9iZSB0aW1lLCByYXRoZXIgdGhhbiBOVUxMLWRlcmVmJiMzOTtpbmcgbGF0ZXIgZnJvbSBhIGZhc3QgcGF0aC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXBzZS1cdTAwM2VkaWFsZWN0IHx8XG4mIzQzO1x0ICAgICFwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VwYXJzZV9zeXN0ZW1faW5mbyB8fFxuJiM0MztcdCAgICAhcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2VfcG9ydF9jbGFzcyB8fFxuJiM0MztcdCAgICAhcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlbWN1X3R5cGVfc3RyKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2RpYWxlY3QgZm9yIGNoaXAgaXMgaW5jb21wbGV0ZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHBzZS1cdTAwM2Vwb2Vfc3VwcGx5ID0gZGV2bV9yZWd1bGF0b3JfZ2V0KHBzZS1cdTAwM2VkZXYsIFwmIzM0O3Bvd2VyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBzZS1cdTAwM2Vwb2Vfc3VwcGx5KSlcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIFBUUl9FUlIocHNlLVx1MDAzZXBvZV9zdXBwbHkpLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBQb0Ugc3VwcGx5XFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZW5hYmxlX2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwc2UtXHUwMDNlZGV2LCBcJiMzNDtlbmFibGVcJiMzNDssIEdQSU9EX09VVF9ISUdIKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGVuYWJsZV9ncGlvKSlcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIFBUUl9FUlIoZW5hYmxlX2dwaW8pLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBlbmFibGUgZ3Bpb1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9kaXNjb3Zlcihwc2UsIFx1MDAyNmluZm8pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHBzZS1cdTAwM2Vwb2Vfc3VwcGx5KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgcmV0LCBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIFBvRSBzdXBwbHlcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQocHNlLVx1MDAzZWRldiwgcnRwc2VfbWN1X3JlZ3VsYXRvcl9kaXNhYmxlLCBwc2UtXHUwMDNlcG9lX3N1cHBseSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghaW5mby5zeXN0ZW1fZW5hYmxlKSB7XG4mIzQzO1x0XHRyZXQgPSBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShwc2UsIHRydWUpO1xuJiM0MztcdFx0LyogRGlhbGVjdHMgd2l0aG91dCBhIGdsb2JhbC1zdGF0ZSBjb25jZXB0IChlLmcuIEJDTSkgcmV0dXJuXG4mIzQzO1x0XHQgKiAtRU9QTk9UU1VQUDsgdHJlYXQgdGhhdCBhcyBcJiMzNDtubyBzZXBhcmF0ZSBlbmFibGUgcmVxdWlyZWRcJiMzNDsuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUClcbiYjNDM7XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIFBTRSBzeXN0ZW1cXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdFx0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHBzZS1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUsIHBzZSk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGVwZW5kaW5nIG9uIHRoZSBNQ1UgZmlybXdhcmUgY29uZmlndXJhdGlvbiAod2hpY2ggbWlnaHQgYmUgZGlmZmVyZW50XG4mIzQzO1x0ICogZm9yIGV2ZXJ5IGJvYXJkKSwgaXQgaXNuJiMzOTt0IGtub3duIHdoZXRoZXIgdGhlIFBvRSBzdWJzeXN0ZW0gaXMgYWN0aXZlIG9yXG4mIzQzO1x0ICogaW5hY3RpdmUgYnkgZGVmYXVsdC4gQXQgdGhpcyBzdGFnZSwgdGhlIFBTRSBjaGlwcyBtaWdodCBhbHJlYWR5IGRlbGl2ZXJcbiYjNDM7XHQgKiBwb3dlciB0byBQRHMgd2l0aG91dCBhbnkgZXhwbGljaXQgZW5hYmxlLlxuJiM0MztcdCAqL1xuJiM0MztcbiYjNDM7XHQvKiBwY2Rldi5vd25lciBpcyBzZXQgYnkgdGhlIHRyYW5zcG9ydCwgc28gdGhlIHJlZ2lzdGVyZWQgY29udHJvbGxlclxuJiM0MztcdCAqIHBpbnMgdGhlIHRyYW5zcG9ydCBtb2R1bGUgdGhhdCBvd25zIHRoZSBsaXZlIGRldmljZSwgbm90IHRoZSBjb3JlLlxuJiM0MztcdCAqL1xuJiM0MztcdHBzZS1cdTAwM2VwY2Rldi5vcHMgICAgICA9IFx1MDAyNnJ0cHNlX21jdV9vcHM7XG4mIzQzO1x0cHNlLVx1MDAzZXBjZGV2LmRldiAgICAgID0gcHNlLVx1MDAzZWRldjtcbiYjNDM7XHRwc2UtXHUwMDNlcGNkZXYudHlwZXMgICAgPSBFVEhUT09MX1BTRV9DMzM7XG4mIzQzO1x0cHNlLVx1MDAzZXBjZGV2Lm5yX2xpbmVzID0gaW5mby5tYXhfcG9ydHM7XG4mIzQzO1x0cHNlLVx1MDAzZXBjZGV2LnBpc19wcmlvX21heCA9IFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWTtcbiYjNDM7XHRwc2UtXHUwMDNlcGNkZXYuc3VwcF9idWRnZXRfZXZhbF9zdHJhdGVnaWVzID0gUFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHBzZS1cdTAwM2VkZXYsIFx1MDAyNnBzZS1cdTAwM2VwY2Rldik7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X3JlZ2lzdGVyKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9ydGxfcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdGluZm8tXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcbiYjNDM7XHRpbmZvLVx1MDAzZXN5c3RlbV9lbmFibGUgPSAocGF5bG9hZFsyXSA9PSAweDEpO1xuJiM0MztcdGluZm8tXHUwMDNlZGV2aWNlX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnBheWxvYWRbM10pO1xuJiM0MztcdGluZm8tXHUwMDNlc3dfdmVyID0gcGF5bG9hZFs1XTtcbiYjNDM7XHRpbmZvLVx1MDAzZW1jdV90eXBlID0gcGF5bG9hZFs2XTtcbiYjNDM7XHRpbmZvLVx1MDAzZWNvbmZpZ19zdGF0dXMgPSBwYXlsb2FkWzddO1xuJiM0MztcdGluZm8tXHUwMDNlZXh0X3ZlciA9IHBheWxvYWRbOF07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3J0bF9wYXJzZV9wb3J0X2NsYXNzKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbiYjNDM7e1xuJiM0MztcdC8qIENsYXNzIGxpdmVzIGluIHRoZSB1cHBlciBuaWJibGUgb2Ygc3RzMi4gKi9cbiYjNDM7XHRyZXR1cm4gRklFTERfR0VUKEdFTk1BU0soNywgNCksIHN0YXR1cy1cdTAwM2VzdHMyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9ydGxfbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAobWN1X3R5cGUpIHtcbiYjNDM7XHRjYXNlIDB4MDA6XHRyZXR1cm4gXCYjMzQ7R2lnYURldmljZSBHRDMyRjMxMFwmIzM0OztcbiYjNDM7XHRjYXNlIDB4MDE6XHRyZXR1cm4gXCYjMzQ7R2lnYURldmljZSBHRDMyRjIzMFwmIzM0OztcbiYjNDM7XHRjYXNlIDB4MDI6XHRyZXR1cm4gXCYjMzQ7R2lnYURldmljZSBHRDMyRjMwM1wmIzM0OztcbiYjNDM7XHRjYXNlIDB4MDM6XHRyZXR1cm4gXCYjMzQ7R2lnYURldmljZSBHRDMyRjEwM1wmIzM0OztcbiYjNDM7XHRjYXNlIDB4MDQ6XHRyZXR1cm4gXCYjMzQ7R2lnYURldmljZSBHRDMyRTEwM1wmIzM0OztcbiYjNDM7XHRjYXNlIDB4MTA6XHRyZXR1cm4gXCYjMzQ7TnV2b3RvbiBNMDUxNlwmIzM0OztcbiYjNDM7XHRjYXNlIDB4MTE6XHRyZXR1cm4gXCYjMzQ7TnV2b3RvbiBNMDU2NFwmIzM0OztcbiYjNDM7XHRjYXNlIDB4MTI6XHRyZXR1cm4gXCYjMzQ7TnV2b3RvbiBOVUMwMjlcJiMzNDs7XG4mIzQzO1x0ZGVmYXVsdDpcdHJldHVybiBcJiMzNDt1bmtub3duXCYjMzQ7O1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X2JyY21fcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdGluZm8tXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcbiYjNDM7XHQvKiBCQ00gaGFzIG5vIGV4cGxpY2l0IHN5c3RlbV9lbmFibGUgYnl0ZTsgdGhlIGNsb3Nlc3QgYW5hbG9nIGlzIHRoZVxuJiM0MztcdCAqIFwmIzM0O3JlbW90ZSBlbmFibGVcJiMzNDsgYml0IGluIHRoZSBzeXN0ZW0tc3RhdHVzIGZsYWdzIGF0IHBheWxvYWRbN10uXG4mIzQzO1x0ICovXG4mIzQzO1x0aW5mby1cdTAwM2VzeXN0ZW1fZW5hYmxlID0gISEocGF5bG9hZFs3XSBcdTAwMjYgQklUKDIpKTtcbiYjNDM7XHRpbmZvLVx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZwYXlsb2FkWzNdKTtcbiYjNDM7XHRpbmZvLVx1MDAzZXN3X3ZlciA9IHBheWxvYWRbNV07XG4mIzQzO1x0aW5mby1cdTAwM2VtY3VfdHlwZSA9IHBheWxvYWRbNl07XG4mIzQzO1x0aW5mby1cdTAwM2Vjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTtcbiYjNDM7XHRpbmZvLVx1MDAzZWV4dF92ZXIgPSBwYXlsb2FkWzhdO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9icmNtX3BhcnNlX3BvcnRfY2xhc3MoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0LyogQkNNIHB1dHMgdGhlIGRldGVjdGVkIGNsYXNzIGluIHBheWxvYWRbM10gKD09IHN0czMpIGRpcmVjdGx5LlxuJiM0MztcdCAqIE1hc2sgdG8gdGhlIGxvdyBuaWJibGU7IGNsYXNzIGlzIDAuLjggYW5kIGFueSBoaWdoIGJpdHMgd291bGQgYmVcbiYjNDM7XHQgKiBub2lzZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gc3RhdHVzLVx1MDAzZXN0czMgXHUwMDI2IDB4MGY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyICpydHBzZV9tY3VfYnJjbV9tY3VfdHlwZV9zdHIodW5zaWduZWQgaW50IG1jdV90eXBlKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChtY3VfdHlwZSkge1xuJiM0MztcdGNhc2UgMHgwMDpcdHJldHVybiBcJiMzNDtTVCBNaWNybyBTVDMyRjEwMFwmIzM0OztcbiYjNDM7XHRjYXNlIDB4MDE6XHRyZXR1cm4gXCYjMzQ7TnV2b3RvbiBNMDV4eCBMQU5cJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDAyOlx0cmV0dXJuIFwmIzM0O1NUIE1pY3JvIFNURjAzMEM4XCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwMzpcdHJldHVybiBcJiMzNDtOdXZvdG9uIE0wNThTQU5cJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDA0Olx0cmV0dXJuIFwmIzM0O051dm90b24gTlVDMTIyXCYjMzQ7O1xuJiM0MztcdGRlZmF1bHQ6XHRyZXR1cm4gXCYjMzQ7dW5rbm93blwmIzM0OztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE1hcCBlYWNoIGxvZ2ljYWwgY29tbWFuZCB0aGUgY29yZSBpc3N1ZXMgdG8gaXRzIHBlci1kaWFsZWN0IG9wY29kZS4gKi9cbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9ydGsgPSB7XG4mIzQzO1x0LnBhcnNlX3N5c3RlbV9pbmZvID0gcnRwc2VfbWN1X3J0bF9wYXJzZV9zeXN0ZW1faW5mbyxcbiYjNDM7XHQucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfcnRsX3BhcnNlX3BvcnRfY2xhc3MsXG4mIzQzO1x0Lm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X3J0bF9tY3VfdHlwZV9zdHIsXG4mIzQzO1x0Lm9wY29kZSA9IHtcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdXHQ9IFJUUFNFX01DVV9PUCgweDAwKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GT11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0MCksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0YSksXG4mIzQzO1xuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdXHRcdD0gUlRQU0VfTUNVX09QKDB4MDEpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxMiksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF1cdD0gUlRQU0VfTUNVX09QKDB4MTMpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhUXSA9IFJUUFNFX01DVV9PUCgweDE0KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXVx0PSBSVFBTRV9NQ1VfT1AoMHgxNSksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdXHRcdD0gUlRQU0VfTUNVX09QKDB4NDIpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdXHQ9IFJUUFNFX01DVV9PUCgweDQ0KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0OCksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXVx0PSBSVFBTRV9NQ1VfT1AoMHg0OSksXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgcnRwc2VfbWN1X2RpYWxlY3RfYnJjbSA9IHtcbiYjNDM7XHQucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfYnJjbV9wYXJzZV9zeXN0ZW1faW5mbyxcbiYjNDM7XHQucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfYnJjbV9wYXJzZV9wb3J0X2NsYXNzLFxuJiM0MztcdC5tY3VfdHlwZV9zdHIgICAgICA9IHJ0cHNlX21jdV9icmNtX21jdV90eXBlX3N0cixcbiYjNDM7XHQub3Bjb2RlID0ge1xuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXVx0XHQ9IFJUUFNFX01DVV9PUCgweDIwKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXVx0XHQ9IFJUUFNFX01DVV9PUCgweDJiKSxcbiYjNDM7XG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV1cdFx0PSBSVFBTRV9NQ1VfT1AoMHgwMCksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFXSA9IFJUUFNFX01DVV9PUCgweDE1KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVx0PSBSVFBTRV9NQ1VfT1AoMHgxNiksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV1cdD0gUlRQU0VfTUNVX09QKDB4MWEpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXVx0XHQ9IFJUUFNFX01DVV9PUCgweDIxKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXVx0PSBSVFBTRV9NQ1VfT1AoMHgzMCksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddXHRcdD0gUlRQU0VfTUNVX09QKDB4MjUpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR11cdD0gUlRQU0VfTUNVX09QKDB4MjYpLFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X3J0a19kYXRhID0ge1xuJiM0MztcdC5kaWFsZWN0ID0gXHUwMDI2cnRwc2VfbWN1X2RpYWxlY3RfcnRrLFxuJiM0MztcdC5pMmNfcHJvdG9fZHRfcmVxdWlyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfcnRrX2RhdGEpO1xuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9icmNtX2RhdGEgPSB7XG4mIzQzO1x0LmRpYWxlY3QgPSBcdTAwMjZydHBzZV9tY3VfZGlhbGVjdF9icmNtLFxuJiM0Mzt9O1xuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfYnJjbV9kYXRhKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1UgZHJpdmVyIChjb3JlKVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7Sm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtaTJjLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNmU2ZTM2NDVjNTA5MDNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtaTJjLmNcbkBAIC0wLDAgJiM0MzsxLDE2MyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cmVhbHRlay1wc2UtbWN1LmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBjb3JlIGhhcyBhbHJlYWR5IHdhaXRlZCBSVFBTRV9NQ1VfUkVTUE9OU0VfTVMgYmVmb3JlIGNhbGxpbmcgdXMsIHNvXG4mIzQzOyAqIHRoZSByZXNwb25zZSBpcyBub3JtYWxseSByZWFkeSBvbiB0aGUgdmVyeSBmaXJzdCByZWFkLiBGb3IgY29tbWFuZHMgdGhlXG4mIzQzOyAqIE1DVSBwcm9kdWNlcyBtb3JlIHNsb3dseSwga2VlcCBwb2xsaW5nIGF0IHRoZSB0eXBpY2FsIHJlc3BvbnNlIGNhZGVuY2VcbiYjNDM7ICogdXAgdG8gdGhlIHdvcnN0LWNhc2UgY2VpbGluZy5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19SRVRSWV9NU1x0UlRQU0VfTUNVX1JFU1BPTlNFX01TXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVNcdChSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TIC8gUlRQU0VfTUNVX0kyQ19SRVRSWV9NUylcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdC8qIFNlbmQgb3Bjb2RlIGFzIFNNQnVzIGNvbW1hbmQgYnl0ZTsgcmVtYWluaW5nIDExIGJ5dGVzIGFzIGJsb2NrIGRhdGEgKi9cbiYjNDM7XHRyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVxLVx1MDAzZW9wY29kZSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICh1OCAqKXJlcSAmIzQzOyAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4mIzQzO1x0aW50IHRyaWVzLCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAodHJpZXMgPSAwOyB0cmllcyBcdTAwM2MgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVM7IHRyaWVzJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHRyaWVzIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRtc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7XG4mIzQzO1xuJiM0MztcdFx0LyogTUNVIG5lZWRzIDB4MDAgYXMgY29tbWFuZCBieXRlIGZvciByZWFkICovXG4mIzQzO1x0XHRyZXQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIDB4MDAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAodTggKilyZXNwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRpZiAocmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSBcdTAwMjZcdTAwMjYgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwocmVxLCByZXNwKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX3NtYnVzX29wcyA9IHtcbiYjNDM7XHQuc2VuZCA9IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZCxcbiYjNDM7XHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIChjb25zdCB1OCAqKXJlcSwgUlRQU0VfTUNVX01TR19TSVpFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gcmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSA/IDAgOiAtRUlPO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuJiM0MztcdGludCB0cmllcywgcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKHRyaWVzID0gMDsgdHJpZXMgXHUwMDNjIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICh0cmllcyBcdTAwM2UgMClcbiYjNDM7XHRcdFx0bXNsZWVwKFJUUFNFX01DVV9JMkNfUkVUUllfTVMpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsICh1OCAqKXJlc3AsIFJUUFNFX01DVV9NU0dfU0laRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUgXHUwMDI2XHUwMDI2IHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X2kyY19uYXRpdmVfb3BzID0ge1xuJiM0MztcdC5zZW5kID0gcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZCxcbiYjNDM7XHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmNsaWVudC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaDtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZTtcbiYjNDM7XHRib29sIHVzZV9uYXRpdmUgPSBmYWxzZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xuJiM0MztcdGlmICghbWF0Y2gpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsIFwmIzM0O21pc3NpbmcgbWF0Y2ggZGF0YVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChydHBzZV9tY3VfbmVlZHNfaTJjX3Byb3RvKG1hdGNoKSkge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqcHJvdG87XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldiwgXCYjMzQ7cmVhbHRlayxpMmMtcHJvdG9jb2xcJiMzNDssIFx1MDAyNnByb3RvKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDttaXNzaW5nIHJlcXVpcmVkIFxcXCYjMzQ7cmVhbHRlayxpMmMtcHJvdG9jb2xcXFwmIzM0OyBwcm9wZXJ0eVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzdHJjbXAocHJvdG8sIFwmIzM0O2kyY1wmIzM0OykpXG4mIzQzO1x0XHRcdHVzZV9uYXRpdmUgPSB0cnVlO1xuJiM0MztcdFx0ZWxzZSBpZiAoIXN0cmNtcChwcm90bywgXCYjMzQ7c21idXNcJiMzNDspKVxuJiM0MztcdFx0XHR1c2VfbmF0aXZlID0gZmFsc2U7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7dW5rbm93biByZWFsdGVrLGkyYy1wcm90b2NvbCBcXFwmIzM0OyVzXFxcJiMzNDtcXG5cJiMzNDssIHByb3RvKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh1c2VfbmF0aXZlKSB7XG4mIzQzO1x0XHRpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC1cdTAwM2VhZGFwdGVyLCBJMkNfRlVOQ19JMkMpKVxuJiM0MztcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLFxuJiM0MztcdFx0XHRcdFwmIzM0O3BsYWluLUkyQyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgSTJDLWNhcGFibGUgYWRhcHRlclxcblwmIzM0Oyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LVx1MDAzZWFkYXB0ZXIsXG4mIzQzO1x0XHRcdFx0XHQgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DSyB8XG4mIzQzO1x0XHRcdFx0XHQgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCxcbiYjNDM7XHRcdFx0XHRcJiMzNDtTTUJ1cyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgU01CdXMgSTJDLWJsb2NrIHN1cHBvcnRcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHNlID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwc2UpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXBzZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwc2UtXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdHBzZS1cdTAwM2VwY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xuJiM0MztcdHBzZS1cdTAwM2V0cmFuc3BvcnQgPSB1c2VfbmF0aXZlID8gXHUwMDI2cnRwc2VfbWN1X2kyY19uYXRpdmVfb3BzIDogXHUwMDI2cnRwc2VfbWN1X2kyY19zbWJ1c19vcHM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIocHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X2kyY19vZl9tYXRjaFtdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtcnRrXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9ydGtfZGF0YSB9LFxuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtYnJjbVwmIzM0OywgLmRhdGEgPSBcdTAwMjZydHBzZV9tY3VfYnJjbV9kYXRhIH0sXG4mIzQzO1x0eyAvKiBzZW50aW5lbCAqLyB9XG4mIzQzO307XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2gpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHJ0cHNlX21jdV9pMmNfZHJpdmVyID0ge1xuJiM0MztcdC5kcml2ZXIgPSB7XG4mIzQzO1x0XHQubmFtZVx0XHQ9IFwmIzM0O3JlYWx0ZWstcHNlLW1jdS1pMmNcJiMzNDssXG4mIzQzO1x0XHQub2ZfbWF0Y2hfdGFibGVcdD0gcnRwc2VfbWN1X2kyY19vZl9tYXRjaCxcbiYjNDM7XHR9LFxuJiM0MztcdC5wcm9iZVx0XHQ9IHJ0cHNlX21jdV9pMmNfcHJvYmUsXG4mIzQzO307XG4mIzQzO21vZHVsZV9pMmNfZHJpdmVyKHJ0cHNlX21jdV9pMmNfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7Sm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1UgZHJpdmVyIChJMkMgdHJhbnNwb3J0KVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lZjA0ZTBkOTI5NjNiNVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmNcbkBAIC0wLDAgJiM0MzsxLDE1NiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcmRldi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3JlYWx0ZWstcHNlLW1jdS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVFx0MTkyMDBcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9UWF9USU1FT1VUXHRtc2Vjc190b19qaWZmaWVzKDEwMClcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUXHRtc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQge1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCBwc2U7XG4mIzQzO1x0c3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldjtcbiYjNDM7XHRzdHJ1Y3QgY29tcGxldGlvbiByeF9kb25lO1xuJiM0MztcdHNwaW5sb2NrX3QgcnhfbG9jaztcdFx0LyogcHJvdGVjdHMgcnhfYnVmIGFuZCByeF9sZW4gKi9cbiYjNDM7XHRzaXplX3QgcnhfbGVuO1xuJiM0MztcdHU4IHJ4X2J1ZltSVFBTRV9NQ1VfTVNHX1NJWkVdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSB0b19ydHBzZV9tY3VfdWFydChwKSAgY29udGFpbmVyX29mKHAsIHN0cnVjdCBydHBzZV9tY3VfdWFydCwgcHNlKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogTm8gZnJhbWluZyBpcyBkb25lIGhlcmU6IGEgZ2xpdGNoZWQgZnJhbWUgY29zdHMgb25lIHRyYW5zYWN0aW9uLCB0aGVuXG4mIzQzOyAqIHRoZSBuZXh0IF9zZW5kIHJlLWZyYW1lcyBmcm9tIHJ4X2xlbiAwLiBSZXN5bmMgd29ya3MgYnkgcmV0dXJuaW5nIGNvdW50XG4mIzQzOyAqIChub3QgdGFrZSksIGRyb3BwaW5nIGFueSBvdmVyZmxvdyBzbyBzZXJkZXYga2VlcHMgbm8gbGVmdG92ZXIgdG8gYmxlZWRcbiYjNDM7ICogaW50byB0aGUgbmV4dCBmcmFtZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzaXplX3QgcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSBzZXJkZXZfZGV2aWNlX2dldF9kcnZkYXRhKHNlcmRldik7XG4mIzQzO1x0c2l6ZV90IHRha2U7XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjdHgtXHUwMDNlcnhfbG9jaykge1xuJiM0MztcdFx0dGFrZSA9IG1pbihjb3VudCwgc2l6ZW9mKGN0eC1cdTAwM2VyeF9idWYpIC0gY3R4LVx1MDAzZXJ4X2xlbik7XG4mIzQzO1x0XHRpZiAodGFrZSkge1xuJiM0MztcdFx0XHRtZW1jcHkoY3R4LVx1MDAzZXJ4X2J1ZiAmIzQzOyBjdHgtXHUwMDNlcnhfbGVuLCBidWYsIHRha2UpO1xuJiM0MztcdFx0XHRjdHgtXHUwMDNlcnhfbGVuICYjNDM7PSB0YWtlO1xuJiM0MztcdFx0XHRpZiAoY3R4LVx1MDAzZXJ4X2xlbiA9PSBzaXplb2YoY3R4LVx1MDAzZXJ4X2J1ZikpXG4mIzQzO1x0XHRcdFx0Y29tcGxldGUoXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogY29uc3VtZSBhbGwgdG8gYXZvaWQgZGVzeW5jL21pc2FsaWdubWVudCAqL1xuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBzZXJkZXZfZGV2aWNlX29wcyBydHBzZV9tY3VfdWFydF9zZXJkZXZfb3BzID0ge1xuJiM0MztcdC5yZWNlaXZlX2J1ZiA9IHJ0cHNlX21jdV91YXJ0X3JlY2VpdmUsXG4mIzQzO1x0LndyaXRlX3dha2V1cCA9IHNlcmRldl9kZXZpY2Vfd3JpdGVfd2FrZXVwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfdWFydF9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSB0b19ydHBzZV9tY3VfdWFydChwc2UpO1xuJiM0MztcdGludCB3cml0dGVuO1xuJiM0MztcbiYjNDM7XHQvKiBjbGVhciBhbnkgbGVmdG92ZXIgcnggc3RhdGUgYmVmb3JlIHRyYW5zbWl0dGluZyAqL1xuJiM0MztcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjdHgtXHUwMDNlcnhfbG9jaykge1xuJiM0MztcdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUpO1xuJiM0MztcdFx0Y3R4LVx1MDAzZXJ4X2xlbiA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3cml0dGVuID0gc2VyZGV2X2RldmljZV93cml0ZShjdHgtXHUwMDNlc2VyZGV2LCAoY29uc3QgdTggKilyZXEsIHNpemVvZigqcmVxKSxcbiYjNDM7XHRcdFx0XHQgICAgICBSVFBTRV9NQ1VfVUFSVF9UWF9USU1FT1VUKTtcbiYjNDM7XHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiB3cml0dGVuO1xuJiM0MztcdGlmICh3cml0dGVuICE9IHNpemVvZigqcmVxKSlcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfdWFydF9yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLFxuJiM0MztcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSB0b19ydHBzZV9tY3VfdWFydChwc2UpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZjdHgtXHUwMDNlcnhfZG9uZSwgUlRQU0VfTUNVX1VBUlRfUlhfVElNRU9VVCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmN0eC1cdTAwM2VyeF9sb2NrKSB7XG4mIzQzO1x0XHRpZiAoY3R4LVx1MDAzZXJ4X2xlbiAhPSBzaXplb2YoKnJlc3ApKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0XHRtZW1jcHkocmVzcCwgY3R4LVx1MDAzZXJ4X2J1Ziwgc2l6ZW9mKCpyZXNwKSk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHJ0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHMgPSB7XG4mIzQzO1x0LnNlbmQgPSBydHBzZV9tY3VfdWFydF9zZW5kLFxuJiM0MztcdC5yZWN2ID0gcnRwc2VfbWN1X3VhcnRfcmVjdixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldilcbiYjNDM7e1xuJiM0MztcdHUzMiBzcGVlZCA9IFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVDtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZzZXJkZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFjdHgpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZXNlcmRldiA9IHNlcmRldjtcbiYjNDM7XHRjdHgtXHUwMDNlcHNlLmRldiA9IGRldjtcbiYjNDM7XHRjdHgtXHUwMDNlcHNlLnBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XG4mIzQzO1x0Y3R4LVx1MDAzZXBzZS50cmFuc3BvcnQgPSBcdTAwMjZydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzO1xuJiM0MztcdGluaXRfY29tcGxldGlvbihcdTAwMjZjdHgtXHUwMDNlcnhfZG9uZSk7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y3R4LVx1MDAzZXJ4X2xvY2spO1xuJiM0MztcbiYjNDM7XHRzZXJkZXZfZGV2aWNlX3NldF9kcnZkYXRhKHNlcmRldiwgY3R4KTtcbiYjNDM7XHRzZXJkZXZfZGV2aWNlX3NldF9jbGllbnRfb3BzKHNlcmRldiwgXHUwMDI2cnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fc2VyZGV2X2RldmljZV9vcGVuKGRldiwgc2VyZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byBvcGVuIHNlcmRldlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXZfZndub2RlKGRldiksIFwmIzM0O2N1cnJlbnQtc3BlZWRcJiMzNDssIFx1MDAyNnNwZWVkKTtcbiYjNDM7XHRzZXJkZXZfZGV2aWNlX3NldF9iYXVkcmF0ZShzZXJkZXYsIHNwZWVkKTtcbiYjNDM7XHRzZXJkZXZfZGV2aWNlX3NldF9mbG93X2NvbnRyb2woc2VyZGV2LCBmYWxzZSk7XG4mIzQzO1x0c2VyZGV2X2RldmljZV9zZXRfcGFyaXR5KHNlcmRldiwgU0VSREVWX1BBUklUWV9OT05FKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ0cHNlX21jdV9yZWdpc3RlcihcdTAwMjZjdHgtXHUwMDNlcHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2hbXSA9IHtcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxwc2UtbWN1LXJ0a1wmIzM0OywgLmRhdGEgPSBcdTAwMjZydHBzZV9tY3VfcnRrX2RhdGEgfSxcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxwc2UtbWN1LWJyY21cJiMzNDssIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2JyY21fZGF0YSB9LFxuJiM0MztcdHsgLyogc2VudGluZWwgKi8gfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHNlcmRldl9kZXZpY2VfZHJpdmVyIHJ0cHNlX21jdV91YXJ0X2RyaXZlciA9IHtcbiYjNDM7XHQuZHJpdmVyID0ge1xuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtyZWFsdGVrLXBzZS1tY3UtdWFydFwmIzM0OyxcbiYjNDM7XHRcdC5vZl9tYXRjaF90YWJsZSA9IHJ0cHNlX21jdV91YXJ0X29mX21hdGNoLFxuJiM0MztcdH0sXG4mIzQzO1x0LnByb2JlICA9IHJ0cHNlX21jdV91YXJ0X3Byb2JlLFxuJiM0Mzt9O1xuJiM0Mzttb2R1bGVfc2VyZGV2X2RldmljZV9kcml2ZXIocnRwc2VfbWN1X3VhcnRfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7Sm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1UgZHJpdmVyIChVQVJUIHRyYW5zcG9ydClcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaCBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iOWJmM2IyZGRlMDhiOFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oXG5AQCAtMCwwICYjNDM7MSw4NyBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfUkVBTFRFS19QU0VfTUNVX0hcbiYjNDM7I2RlZmluZSBfUkVBTFRFS19QU0VfTUNVX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRpbWUgdGhlIE1DVSBpdHNlbGYgbmVlZHMgYmV0d2VlbiBhY2NlcHRpbmcgYSByZXF1ZXN0IGFuZCBoYXZpbmcgYVxuJiM0MzsgKiByZXNwb25zZSByZWFkeS4gVGhlc2UgYXJlIHByb3BlcnRpZXMgb2YgdGhlIE1DVSBmaXJtd2FyZSwgbm90IG9mIHRoZVxuJiM0MzsgKiB1bmRlcmx5aW5nIHRyYW5zcG9ydDogdGhlIGNvcmUgcGFjZXMgdHJhbnNhY3Rpb25zIGJ5IFJUUFNFX01DVV9SRVNQT05TRV9NU1xuJiM0MzsgKiBhbmQgYm90aCB0cmFuc3BvcnRzIHNpemUgdGhlaXIgcGVyLXRyYW5zYWN0aW9uIHJlY3YgY2VpbGluZyBmcm9tXG4mIzQzOyAqIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMsIHNpbmNlIHNvbWUgY29tbWFuZHMgYXJlIGRvY3VtZW50ZWQgYXNcbiYjNDM7ICogbmVlZGluZyB1cCB0byB+MXMgdG8gcHJvZHVjZSBhIHJlcGx5LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVNcdFx0XHQyNVxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVNcdFx0MTAwMFxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVG90YWwgdGltZSB0byBrZWVwIHJldHJ5aW5nIHRoZSBmaXJzdCBNQ1UgcmVhZCBhdCBwcm9iZSwgYW5kIHRoZSBwYXVzZVxuJiM0MzsgKiBiZXR3ZWVuIGF0dGVtcHRzLiBSaWdodCBhZnRlciBlbmFibGUtZ3Bpb3MgaXMgYXNzZXJ0ZWQgdGhlIE1DVSBtYXkgbm90XG4mIzQzOyAqIGFuc3dlciBvbiB0aGUgYnVzIHlldDsgZ2l2ZSBpdCBhIGJvdW5kZWQgd2luZG93IHRvIGNvbWUgdXAgYmVmb3JlXG4mIzQzOyAqIGRlY2xhcmluZyB0aGUgcHJvYmUgZmFpbGVkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfQk9PVF9USU1FT1VUX01TXHRcdDMwMDBcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfQk9PVF9SRVRSWV9NU1x0XHRcdDEwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfTVNHX1NJWkVcdFx0XHQxMlxuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9tc2cge1xuJiM0MztcdHU4IG9wY29kZTtcbiYjNDM7XHR1OCBzZXFfbnVtO1xuJiM0MztcdHU4IHBheWxvYWRbOV07XG4mIzQzO1x0dTggY2hlY2tzdW07XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBNQ1Ugc3RhdHVzIG9wY29kZXMgKHNlZW4gb24gdGhlIEJDTSBkaWFsZWN0OyBSVEwgbmV2ZXIgZW1pdHMgdGhlbSkuXG4mIzQzOyAqIElOQ09NUExFVEUvQkFEX0NTVU0gYXJlIHRlcm1pbmFsOyBOT1RfUkVBRFkgaXMgdHJhbnNpZW50LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEVcdFx0MHhmZFx0LyogLUVCQURFICAgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNXHRcdDB4ZmVcdC8qIC1FQkFETVNHICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9OT1RfUkVBRFlcdFx0MHhmZlx0LyogLUVBR0FJTiAgKi9cbiYjNDM7XG4mIzQzOy8qIEEgcG9sbGluZyB0cmFuc3BvcnQgY2FuIHN0b3AgaGVyZTogdGhlIG1hdGNoaW5nIHJlcGx5LCBvciBhIHRlcm1pbmFsIGVycm9yLiAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbiYjNDM7XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlc3AtXHUwMDNlb3Bjb2RlID09IHJlcS1cdTAwM2VvcGNvZGUgfHxcbiYjNDM7XHQgICAgICAgcmVzcC1cdTAwM2VvcGNvZGUgPT0gUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFIHx8XG4mIzQzO1x0ICAgICAgIHJlc3AtXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU07XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE9wYXF1ZSB0byB0cmFuc3BvcnRzOyBkZWZpbmVkIGluIHJlYWx0ZWstcHNlLWNvcmUuYy4gKi9cbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0O1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGE7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2N0cmw7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMge1xuJiM0MztcdGludCAoKnNlbmQpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKTtcbiYjNDM7XHRpbnQgKCpyZWN2KShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwge1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiYjNDM7XHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2IHBjZGV2O1xuJiM0MztcdHN0cnVjdCBtdXRleCBtdXRleDsgLyogc2VyaWFsaXplcyBNQ1UgcmVxdWVzdC9yZXNwb25zZSB0cmFuc2FjdGlvbnMgKi9cbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgKmRpYWxlY3Q7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gKmNoaXA7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzICp0cmFuc3BvcnQ7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCByZWd1bGF0b3IgKnBvZV9zdXBwbHk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztpbnQgcnRwc2VfbWN1X3JlZ2lzdGVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlKTtcbiYjNDM7XG4mIzQzOy8qIFdoZXRoZXIgdGhlIEkyQyB0cmFuc3BvcnQgbXVzdCByZWFkIFwmIzM0O3JlYWx0ZWssaTJjLXByb3RvY29sXCYjMzQ7IGZyb20gRFQuICovXG4mIzQzO2Jvb2wgcnRwc2VfbWN1X25lZWRzX2kyY19wcm90byhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoKTtcbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X3J0a19kYXRhO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9icmNtX2RhdGE7XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNTozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQU0VfQ09OVFJPTExFUiYjMzQ7LAogICAgJiMzNDtQU0VfUkVBTFRFS19NQ1VfSTJDJiMzNDssCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9VQVJUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2Rpc2FibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3VhcnRfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3VhcnRfcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVXMsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIFRoZSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgUFNFIGNvbnRyb2xsZXIgQVBJIGFuZCBwYXJzZXMgcmVzcG9uc2VzIGZyb20gdGhlIE1DVS4gRnV6emluZyB0aGUgSTJDL1VBUlQgaW50ZXJmYWNlcyBhbmQgdGhlIFBTRSBjb250cm9sbGVyIG9wcyBpcyB2YWx1YWJsZSBmb3IgZmluZGluZyBwb3RlbnRpYWwgYnVncyBpbiB0aGUgcHJvdG9jb2wgcGFyc2luZyBhbmQgc3RhdGUgbWFuYWdlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWNmNmJjZWYxNTA5Y2IzYTFhNjBjNmRhNDFmYjI1NDcwMzk1NTBjZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDYgMTU6MzM6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kMGRmYWUyMjBkYzFlOQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sCkBAIC0wLDAgJiM0MzsxLDE1NCBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKQomIzQzOyVZQU1MIDEuMgomIzQzOy0tLQomIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogUmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIEpvbmFzIEplbG9uZWsgJmx0O2plbG9uZWsuam9uYXNAZ21haWwuY29tJmd0OwomIzQzOwomIzQzO2Rlc2NyaXB0aW9uOiB8CiYjNDM7ICBNaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRSBoYXJkd2FyZSBvbiBzd2l0Y2hlcyB1c2luZwomIzQzOyAgUmVhbHRlayAoUlRMODIzOEIsIFJUTDgyMzksIFJUTDgyMzlDKSBvciBCcm9hZGNvbSAoQkNNNTkxMTEsIEJDTTU5MTIxKQomIzQzOyAgUFNFIGNoaXBzLiBUaGUgTUNVIGV4cG9zZXMgYSBzbWFsbCBtZXNzYWdlLWJhc2VkIHByb3RvY29sIG92ZXIgZWl0aGVyCiYjNDM7ICBJMkMvU01CdXMgb3IgVUFSVDsgdGhlIGFjdHVhbCBQU0Ugc2lsaWNvbiBpcyBub3QgYWNjZXNzZWQgZGlyZWN0bHkuIFRoZQomIzQzOyAgUmVhbHRlayBhbmQgQnJvYWRjb20gdmFyaWFudHMgc2hhcmUgdGhpcyBkZXZpY2UgdHJlZSBjb250cmFjdCBidXQgdXNlCiYjNDM7ICBkaWZmZXJlbnQgcHJvdG9jb2wgb3Bjb2Rlcywgc2VsZWN0ZWQgYnkgdGhlIGNvbXBhdGlibGUuCiYjNDM7CiYjNDM7ICBUaGUgY29tcGF0aWJsZSBpZGVudGlmaWVzIHRoZSBQU0UtTUNVIHByb3RvY29sIGRpYWxlY3QsIG5vdCBhIHNwZWNpZmljCiYjNDM7ICBwYXJ0LiBUaGUgZGV2aWNlIGhlcmUgaXMgdGhlIE1DVTogaXQgcHJlc2VudHMgYSBzdGFibGUgbWVzc2FnZSBwcm90b2NvbAomIzQzOyAgZG9jdW1lbnRlZCBieSBSZWFsdGVrLCB3aXRoIHRoZSBQU0Ugc2lsaWNvbiBiZWhpbmQgaXQgLSBCcm9hZGNvbSBvbgomIzQzOyAgb2xkZXIgYm9hcmRzLCBSZWFsdGVrIG9uIG5ld2VyIC0gZGV0ZWN0ZWQgYXQgcnVudGltZSBhbmQgbm90IGRlc2NyaWJlZAomIzQzOyAgaGVyZS4gVGhlIE1DVSYjMzk7cyBvd24gc2lsaWNvbiBpcyBnZW5lcmFsLXB1cnBvc2UgYW5kIHZhcmllcyBhY3Jvc3MKJiM0MzsgIGJvYXJkcywgc28gdGhlICYjMzk7cmVhbHRlayYjMzk7IHZlbmRvciBwcmVmaXggbmFtZXMgdGhlIHByb3RvY29sIGZyb250LWVuZAomIzQzOyAgKGZvbGxvd2luZyB0aGUgZ29vZ2xlLGNyb3MtZWMgcGF0dGVybik7IHRoZSAmIzM5Oy1ydGsmIzM5Oy8mIzM5Oy1icmNtJiMzOTsgc3VmZml4CiYjNDM7ICBzZWxlY3RzIHRoZSBSZWFsdGVrIG9yIEJyb2FkY29tIGRpYWxlY3QuCiYjNDM7CiYjNDM7ICBBIHNpbmdsZSBjb21wYXRpYmxlIHBlciBkaWFsZWN0IGNvdmVycyBib3RoIHRoZSBJMkMvU01CdXMgYW5kIFVBUlQKJiM0MzsgIGF0dGFjaG1lbnRzOiB0aGUgd2lyZSBwcm90b2NvbCBpcyBpZGVudGljYWwgYWNyb3NzIHRoZW0gYW5kIHRoZQomIzQzOyAgdHJhbnNwb3J0IGlzIGFscmVhZHkgZXhwcmVzc2VkIGJ5IHRoZSBub2RlJiMzOTtzIHBhcmVudCBidXMsIHNvIGl0IGlzIG5vdAomIzQzOyAgZW5jb2RlZCBpbiB0aGUgY29tcGF0aWJsZS4gVHJhbnNwb3J0LXNwZWNpZmljIHByb3BlcnRpZXMgZGlmZmVyCiYjNDM7ICBhY2NvcmRpbmdseSAtIHRoZSBJMkMgYXR0YWNobWVudCBjYXJyaWVzICYjMzk7cmVnJiMzOTsgKGFuZCwgZm9yIFJlYWx0ZWssCiYjNDM7ICAmIzM5O3JlYWx0ZWssaTJjLXByb3RvY29sJiMzOTspLCB3aGlsZSB0aGUgVUFSVCBhdHRhY2htZW50IGNhcnJpZXMgdGhlIHNlcmlhbAomIzQzOyAgcGVyaXBoZXJhbCBwcm9wZXJ0aWVzIHN1Y2ggYXMgJiMzOTtjdXJyZW50LXNwZWVkJiMzOTsuCiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGVudW06CiYjNDM7ICAgICAgLSByZWFsdGVrLHBzZS1tY3UtcnRrCiYjNDM7ICAgICAgLSByZWFsdGVrLHBzZS1tY3UtYnJjbQomIzQzOwomIzQzOyAgcmVnOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzOyAgcG93ZXItc3VwcGx5OgomIzQzOyAgICBkZXNjcmlwdGlvbjogUmVndWxhdG9yIHN1cHBseWluZyB0aGUgUG9FIHBvd2VyIHJhaWwuCiYjNDM7CiYjNDM7ICBlbmFibGUtZ3Bpb3M6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7ICByZWFsdGVrLGkyYy1wcm90b2NvbDoKJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvc3RyaW5nCiYjNDM7ICAgIGVudW06IFsgaTJjLCBzbWJ1cyBdCiYjNDM7ICAgIGRlc2NyaXB0aW9uOiB8CiYjNDM7ICAgICAgV2lyZSBmcmFtaW5nIHRoZSBNQ1UgZmlybXdhcmUgZXhwZWN0cyBvbiB0aGUgSTJDIGJ1cy4gJiMzNDtzbWJ1cyYjMzQ7IG1lYW5zCiYjNDM7ICAgICAgcmVhZHMgY2FycnkgYSBsZWFkaW5nIGNvbW1hbmQgYnl0ZSAoMHgwMCkgYW5kIGEgcmVwZWF0ZWQgc3RhcnQ7ICYjMzQ7aTJjJiMzNDsKJiM0MzsgICAgICBtZWFucyBiYXJlIDEyLWJ5dGUgd3JpdGVzIGFuZCByZWFkcyB3aXRoIG5vIGNvbW1hbmQgcHJlZml4LiBPbmx5CiYjNDM7ICAgICAgYXBwbGllcyB0byB0aGUgUmVhbHRlayBJMkMgYXR0YWNobWVudC4KJiM0MzsKJiM0MztyZXF1aXJlZDoKJiM0MzsgIC0gY29tcGF0aWJsZQomIzQzOwomIzQzO2FsbE9mOgomIzQzOyAgLSAkcmVmOiBwc2UtY29udHJvbGxlci55YW1sIwomIzQzOyAgLSAkcmVmOiAvc2NoZW1hcy9zZXJpYWwvc2VyaWFsLXBlcmlwaGVyYWwtcHJvcHMueWFtbCMKJiM0MzsgICMgVGhlIEkyQyBhdHRhY2htZW50IChpZGVudGlmaWVkIGJ5ICYjMzk7cmVnJiMzOTspIGNhbm5vdCBjYXJyeSBzZXJpYWwgYnVzIHByb3BzLgomIzQzOyAgLSBpZjoKJiM0MzsgICAgICByZXF1aXJlZDogW3JlZ10KJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY3VycmVudC1zcGVlZDogZmFsc2UKJiM0MzsgICAgICAgIG1heC1zcGVlZDogZmFsc2UKJiM0MzsgICMgJiMzOTtyZWFsdGVrLGkyYy1wcm90b2NvbCYjMzk7IGlzIG1lYW5pbmdmdWwgb25seSBmb3IgdGhlIFJlYWx0ZWsgSTJDIGF0dGFjaG1lbnQ7CiYjNDM7ICAjIHRoZSBCcm9hZGNvbSB2YXJpYW50IGFuZCBhbnkgVUFSVCBhdHRhY2htZW50IG11c3Qgbm90IGNhcnJ5IGl0LgomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29udGFpbnM6CiYjNDM7ICAgICAgICAgICAgY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1ydGsKJiM0MzsgICAgICByZXF1aXJlZDogW3JlZ10KJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0gcmVhbHRlayxpMmMtcHJvdG9jb2wKJiM0MzsgICAgZWxzZToKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgJiMzNDtyZWFsdGVrLGkyYy1wcm90b2NvbCYjMzQ7OiBmYWxzZQomIzQzOwomIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2UKJiM0MzsKJiM0MztleGFtcGxlczoKJiM0MzsgICMgUmVhbHRlayBQU0UgY2hpcCwgSTJDIGF0dGFjaG1lbnQgKFNNQnVzIGZyYW1pbmcpLgomIzQzOyAgLSB8CiYjNDM7ICAgIGkyYyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcHNlQDIwIHsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHBzZS1tY3UtcnRrJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzB4MjAmZ3Q7OwomIzQzOyAgICAgICAgICAgIHJlYWx0ZWssaTJjLXByb3RvY29sID0gJiMzNDtzbWJ1cyYjMzQ7OwomIzQzOwomIzQzOyAgICAgICAgICAgIHBzZS1waXMgewomIzQzOyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CiYjNDM7CiYjNDM7ICAjIEJyb2FkY29tIFBTRSBjaGlwLCBJMkMgYXR0YWNobWVudC4KJiM0MzsgIC0gfAomIzQzOyAgICBpMmMgewomIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgIGV0aGVybmV0LXBzZUAyMCB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxwc2UtbWN1LWJyY20mIzM0OzsKJiM0MzsgICAgICAgICAgICByZWcgPSAmbHQ7MHgyMCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgcHNlLXBpcyB7CiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgcHNlLXBpQDAgewomIzQzOyAgICAgICAgICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgI3BzZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgfTsKJiM0MzsgICAgfTsKJiM0MzsKJiM0MzsgICMgUmVhbHRlayBQU0UgY2hpcCwgVUFSVCBhdHRhY2htZW50LgomIzQzOyAgLSB8CiYjNDM7ICAgIHNlcmlhbCB7CiYjNDM7ICAgICAgICBldGhlcm5ldC1wc2UgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscHNlLW1jdS1ydGsmIzM0OzsKJiM0MzsgICAgICAgICAgICBjdXJyZW50LXNwZWVkID0gJmx0OzExNTIwMCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgcHNlLXBpcyB7CiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgcHNlLXBpQDAgewomIzQzOyAgICAgICAgICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgI3BzZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgfTsKJiM0MzsgICAgfTsKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNTJmMWE1NWVjYTk5YmYuLmUzZjQyNmEzYjIwMWZiIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMjI3MTYsNiAmIzQzOzIyNzE2LDEzIEBAIFM6CU1haW50YWluZWQKIEY6CWluY2x1ZGUvc291bmQvcnQqLmgKIEY6CXNvdW5kL3NvYy9jb2RlY3MvcnQqCiAKJiM0MztSRUFMVEVLL0JST0FEQ09NIFBTRSBNQ1UgRFJJVkVSCiYjNDM7TToJSm9uYXMgSmVsb25layAmbHQ7amVsb25lay5qb25hc0BnbWFpbC5jb20mZ3Q7CiYjNDM7TDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwomIzQzO1M6CU1haW50YWluZWQKJiM0MztGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbAomIzQzO0Y6CWRyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UqCiYjNDM7CiBSRUFMVEVLIE9UVE8gV0FUQ0hET0cKIE06CVNhbmRlciBWYW5oZXVsZSAmbHQ7c2FuZGVyQHN2YW5oZXVsZS5uZXQmZ3Q7CiBMOglsaW51eC13YXRjaGRvZ0B2Z2VyLmtlcm5lbC5vcmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnIGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWcKaW5kZXggN2VmMjk2NTdlZTVkZDEuLjIzZTQ0ZGRlM2RiZmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZwpAQCAtMTMsNiAmIzQzOzEzLDM0IEBAIG1lbnVjb25maWcgUFNFX0NPTlRST0xMRVIKIAogaWYgUFNFX0NPTlRST0xMRVIKIAomIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1UKJiM0MzsJdHJpc3RhdGUKJiM0MzsJaGVscAomIzQzOwkgIFNoYXJlZCBjb3JlIGZvciB0aGUgUmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlci4gVGhpcyBpcwomIzQzOwkgIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHRyYW5zcG9ydCBvcHRpb25zIGJlbG93LgomIzQzOwomIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfSTJDCiYjNDM7CXRyaXN0YXRlICYjMzQ7UmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydCkmIzM0OwomIzQzOwlkZXBlbmRzIG9uIEkyQwomIzQzOwlzZWxlY3QgUFNFX1JFQUxURUtfTUNVCiYjNDM7CWhlbHAKJiM0MzsJICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRQomIzQzOwkgIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHdpdGggUmVhbHRlayBvciBCcm9hZGNvbSBQU0UgY2hpcHMsIGF0dGFjaGVkCiYjNDM7CSAgdmlhIEkyQy9TTUJ1cy4gVGhlIE1DVSBleHBvc2VzIGEgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDsgdGhlIGFjdHVhbAomIzQzOwkgIFBTRSBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhCiYjNDM7CSAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS1pMmMuCiYjNDM7CiYjNDM7Y29uZmlnIFBTRV9SRUFMVEVLX01DVV9VQVJUCiYjNDM7CXRyaXN0YXRlICYjMzQ7UmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVUwomIzQzOwlzZWxlY3QgUFNFX1JFQUxURUtfTUNVCiYjNDM7CWhlbHAKJiM0MzsJICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRQomIzQzOwkgIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHdpdGggUmVhbHRlayBvciBCcm9hZGNvbSBQU0UgY2hpcHMsIGF0dGFjaGVkCiYjNDM7CSAgdmlhIFVBUlQuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWwgUFNFCiYjNDM7CSAgc2lsaWNvbiBpcyBub3QgYWNjZXNzZWQgZGlyZWN0bHkuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYQomIzQzOwkgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtdWFydC4KJiM0MzsKIGNvbmZpZyBQU0VfUkVHVUxBVE9SCiAJdHJpc3RhdGUgJiMzNDtSZWd1bGF0b3IgYmFzZWQgUFNFIGNvbnRyb2xsZXImIzM0OwogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZQppbmRleCBjYzc4ZjdlYTdmNWY3MS4uOWNjYTU5MDBmZTM0MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGUKQEAgLTMsNiAmIzQzOzMsOSBAQAogCiBvYmotJChDT05GSUdfUFNFX0NPTlRST0xMRVIpICYjNDM7PSBwc2VfY29yZS5vCiAKJiM0MztvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LWNvcmUubwomIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfSTJDKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LWkyYy5vCiYjNDM7b2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9VQVJUKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LXVhcnQubwogb2JqLSQoQ09ORklHX1BTRV9SRUdVTEFUT1IpICYjNDM7PSBwc2VfcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19QU0VfUEQ2OTJYMCkgJiM0Mzs9IHBkNjkyeDAubwogb2JqLSQoQ09ORklHX1BTRV9TSTM0NzQpICYjNDM7PSBzaTM0NzQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1jb3JlLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uOTYxYWM5ZTllZTljN2MKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYwpAQCAtMCwwICYjNDM7MSwxMDA2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSBmcm9udGluZyBSZWFsdGVrIG9yIEJyb2FkY29tIFBTRQomIzQzOyAqIGNoaXBzLiBCb3RoIHZlbmRvcnMmIzM5OyBNQ1VzIHNwZWFrIGEgY2xvc2VseSByZWxhdGVkIDEyLWJ5dGUgZml4ZWQtZnJhbWUKJiM0MzsgKiBtYW5hZ2VtZW50IHByb3RvY29sOyB0aGlzIGRyaXZlciBjb3ZlcnMgYm90aCB2aWEgYSBwZXItZGlhbGVjdCBvcGNvZGUKJiM0MzsgKiB0YWJsZSBhbmQgcmVzcG9uc2UgcGFyc2Vycy4KJiM0MzsgKgomIzQzOyAqIE1hbnkgUG9FIHN3aXRjaCBkZXNpZ25zIHB1dCBhIGRlZGljYXRlZCBtaWNyb2NvbnRyb2xsZXIgaW4gZnJvbnQgb2YgdGhlCiYjNDM7ICogYWN0dWFsIFBTRSBzaWxpY29uOiB0aGUgaG9zdCBDUFUgdGFsa3MgdG8gdGhlIE1DVSBvdmVyIEkyQy9TTUJ1cyBvcgomIzQzOyAqIFVBUlQsIGFuZCB0aGUgTUNVIGluIHR1cm4gbWFuYWdlcyB0aGUgUFNFIGNoaXBzIG9uIHRoZSBib2FyZC4gVGhlIE1DVQomIzQzOyAqIHNwZWFrcyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2wgKDEyLWJ5dGUgZml4ZWQtc2l6ZSBmcmFtZXM7IG9wY29kZQomIzQzOyAqICYjNDM7IGFyZyAmIzQzOyA5IHBheWxvYWQgYnl0ZXMgJiM0MzsgY2hlY2tzdW0pLiBUaGUgUFNFIGNoaXBzIHRoZW1zZWx2ZXMgYXJlIG5vdAomIzQzOyAqIGFjY2Vzc2VkIGRpcmVjdGx5OyBldmVyeXRoaW5nIGdvZXMgdGhyb3VnaCBNQ1UgY29tbWFuZHMuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGRyaXZlciB0YXJnZXRzIHRoYXQgYXJjaGl0ZWN0dXJlIGZvciB0aGUgUmVhbHRlay1mYW1pbHkgcHJvdG9jb2wuCiYjNDM7ICogVHdvIGRpYWxlY3RzIGFyZSBzdXBwb3J0ZWQ6IFJlYWx0ZWsgTUNVcyBtYW5hZ2luZyBSVEw4MjN4L1JUTDgyMzkqIFBTRQomIzQzOyAqIGNoaXBzLCBhbmQgQnJvYWRjb20gTUNVcyBtYW5hZ2luZyBCQ001OTB4eCBQU0UgY2hpcHMuIFRoZSB0d28gc2hhcmUKJiM0MzsgKiBmcmFtZSBmb3JtYXQgYW5kIGEgc3VtLW1vZC0yNTYgY2hlY2tzdW0gYnV0IGRpdmVyZ2Ugb24gb3Bjb2RlIG51bWJlcnMKJiM0MzsgKiBhbmQgb24gYSBmZXcgcmVzcG9uc2UgbGF5b3V0czsgdGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBwZXItZGlhbGVjdAomIzQzOyAqIG9wY29kZSB0YWJsZSBhbmQgcGFyc2VyIGhvb2tzLgomIzQzOyAqCiYjNDM7ICogT3V0IG9mIHNjb3BlOiBQU0UgY2hpcHMgdGhhdCBhcmUgaW50ZXJmYWNlZCBkaXJlY3RseSBmcm9tIHRoZSBob3N0CiYjNDM7ICogd2l0aG91dCBhIG1hbmFnZW1lbnQgTUNVLCBNQ1UgZGVzaWducyB0aGF0IHNwZWFrIGFuIHVucmVsYXRlZCBwcm90b2NvbAomIzQzOyAqIGZhbWlseSwgYW5kICYjMzQ7ZHVtYiBQU0UmIzM0OyBtb2RlcyB3aGVyZSBubyBob3N0IGNvbnRyb2wgaXMgd2lyZWQgdXAgYXQgYWxsLgomIzQzOyAqIFRob3NlLCBpZiBhbmQgd2hlbiB0aGV5IHNob3cgdXAgaW4gdGhlIGtlcm5lbCwgYmVsb25nIGluIHNlcGFyYXRlCiYjNDM7ICogZHJpdmVycyB1bmRlciBkcml2ZXJzL25ldC9wc2UtcGQvLgomIzQzOyAqCiYjNDM7ICogVGhpcyBjb3JlIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCwgZGVjb2RpbmcvZW5jb2Rpbmcgb2YgTUNVCiYjNDM7ICogcmVzcG9uc2VzLCBhbmQgdGhlIHBzZV9jb250cm9sbGVyX29wcyBpbnRlZ3JhdGlvbi4gVHJhbnNwb3J0IG1vZHVsZXMKJiM0MzsgKiAocmVhbHRlay1wc2UtaTJjLCByZWFsdGVrLXBzZS11YXJ0KSBwcm92aWRlIHRoZSBzZW5kL3JlY3YgY2FsbGJhY2tzLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbnRhaW5lcl9vZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ncGlvL2NvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ppZmZpZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlubWF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHNlLXBkL3BzZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3JlYWx0ZWstcHNlLW1jdS5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEIJCTB4MDEzOAomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5CQkweDAwMzkKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMJCTB4MDEzOQomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMQkJMHhlMTExCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxCQkweGUxMjEKJiM0MzsKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRAkJMHgwMAomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORwkJMHgwMQomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkcJCTB4MDIKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19URVNUCQkJMHgwMwkvKiBCcm9hZGNvbTsgcmVzZXJ2ZWQgb24gUmVhbHRlayAqLwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUCQkweDA0CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfT1RIRVJfRkFVTFQJCTB4MDUJLyogQnJvYWRjb207IHJlc2VydmVkIG9uIFJlYWx0ZWsgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HCQkweDA2CiYjNDM7CiYjNDM7LyogUlRQU0VfTUNVX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUgdmFsdWVzICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVIJMHgwMgomIzQzOwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX01BWF9QT1JUUwkJCTQ4CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFkJCTMKJiM0MzsKJiM0MztlbnVtIHJ0cHNlX21jdV9jbWQgewomIzQzOwlSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEUsCiYjNDM7CVJUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPLAomIzQzOwlSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHLAomIzQzOwomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFLAomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUsCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULAomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZLAomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVUywKJiM0MzsJUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUUywKJiM0MzsJUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUcsCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJRywKJiM0MzsKJiM0MzsJUlRQU0VfTUNVX05VTV9DTURTLAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgewomIzQzOwl1OCBvcDsKJiM0MzsJYm9vbCB2YWxpZDsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1Aob3BjKQl7IC5vcCA9IChvcGMpLCAudmFsaWQgPSB0cnVlIH0KJiM0MzsKJiM0MzsvKiBQYXJzZWQgTUNVIHJlc3BvbnNlIHN0cnVjdHVyZXMgKGRlY29kZWQgZnJvbSBydHBzZV9tY3VfbXNnIHJlcGxpZXMpICovCiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9pbmZvIHsKJiM0MzsJdTggbWF4X3BvcnRzOwomIzQzOwlib29sIHN5c3RlbV9lbmFibGU7CiYjNDM7CXUxNiBkZXZpY2VfaWQ7CiYjNDM7CXU4IHN3X3ZlcjsKJiM0MzsJdTggbWN1X3R5cGU7CiYjNDM7CXU4IGNvbmZpZ19zdGF0dXM7CiYjNDM7CXU4IGV4dF92ZXI7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgewomIzQzOwl1OCB1dmxvOwomIzQzOwl1OCBvdmxvOwomIzQzOwlib29sIHByZWFsbG9jX2VuYWJsZTsKJiM0MzsJdTggbnVtX29mX3BzZXM7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHsKJiM0MzsJdTggc3RzMTsKJiM0MzsJdTggc3RzMjsKJiM0MzsJdTggc3RzMzsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCB7CiYjNDM7CXUxNiB2b2x0YWdlX3JhdzsJLyogNjQuNDVtVi9MU0IgKi8KJiM0MzsJdTE2IGN1cnJlbnRfcmF3OwkvKiAxbUEvTFNCICovCiYjNDM7CXUxNiB0ZW1wZXJhdHVyZV9yYXc7CS8qIFQobUMpID0gMTI1MCAqICgyMjAgLSByYXcpICovCiYjNDM7CXUxNiBwb3dlcl9yYXc7CQkvKiAxMDBtVy9MU0IgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgewomIzQzOwlib29sIGVuYWJsZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIHsKJiM0MzsJdTggbWF4X3Bvd2VyOwomIzQzOwl1OCBwcmlvcml0eTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCB7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlIG9wY29kZVtSVFBTRV9NQ1VfTlVNX0NNRFNdOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2gKJiM0MzsJICogZGlhbGVjdCBzdXBwbGllcyBpdHMgb3duLiBPdGhlciByZXNwb25zZXMgc2hhcmUgb25lIGxheW91dCBhbmQgYXJlCiYjNDM7CSAqIGRlY29kZWQgZGlyZWN0bHkgLSBhIGRpYWxlY3QgdGhhdCBkaXZlcmdlcyB0aGVyZSBtdXN0IGFkZCBhIGhvb2ssCiYjNDM7CSAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS4KJiM0MzsJICovCiYjNDM7CXZvaWQgKCpwYXJzZV9zeXN0ZW1faW5mbykoY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbyk7CiYjNDM7CWludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7CiYjNDM7CWNvbnN0IGNoYXIgKigqbWN1X3R5cGVfc3RyKSh1bnNpZ25lZCBpbnQgbWN1X3R5cGUpOwomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQZXItY29tcGF0aWJsZSBtYXRjaCBkYXRhOiBzZWxlY3RlZCBieSB0aGUgRFQvSTJDIGNvbXBhdGlibGUsIGl0IGJ1bmRsZXMKJiM0MzsgKiB0aGUgcHJvdG9jb2wgZGlhbGVjdCB3aXRoIGF0dGFjaG1lbnQgcXVpcmtzIHRoYXQgdGhlIGV4YWN0IE1DVSBzaWxpY29uCiYjNDM7ICogZG9lcyBub3QgZGV0ZXJtaW5lIChvbmx5IGl0cyBmaXJtd2FyZSBwcm90b2NvbCBhbmQgdGhlIGhvc3QgYnVzIGRvKS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgKmRpYWxlY3Q7CiYjNDM7CS8qIEkyQyBmcmFtaW5nIG11c3QgY29tZSBmcm9tIERUIChyZWFsdGVrLGkyYy1wcm90b2NvbCk7IGVsc2UgU01CdXMuICovCiYjNDM7CWJvb2wgaTJjX3Byb3RvX2R0X3JlcXVpcmVkOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gewomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzOwl1MTYgZGV2aWNlX2lkOwomIzQzOwl1MzIgbWF4X21XX3Blcl9wb3J0OwomIzQzOwllbnVtIHJ0cHNlX21jdV9jbWQgcHdfc2V0X2NtZDsJLyogY29tbWFuZCB1c2VkIGJ5IHNldF9wd19saW1pdCAqLwomIzQzOwl1MzIgcHdfc2V0X2xzYl9tVzsJCS8qIExTQiBvZiBwd19zZXRfY21kIHZhbHVlLCBpbiBtVyAqLwomIzQzOwl1MzIgcHdfcmVhZF9sc2JfbVc7CQkvKiBMU0Igb2YgZXh0X2NvbmZpZy5tYXhfcG93ZXIgcmVhZC1iYWNrLCBpbiBtVyAqLwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzhiX2luZm8gPSB7CiYjNDM7CS5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCLAomIzQzOwkubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsCiYjNDM7CS5uYW1lID0gJiMzNDtSVEw4MjM4QiYjMzQ7LAomIzQzOwkucHdfcmVhZF9sc2JfbVcgPSAyMDAsCiYjNDM7CS5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCwKJiM0MzsJLnB3X3NldF9sc2JfbVcgPSAyMDAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOV9pbmZvID0gewomIzQzOwkuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5LAomIzQzOwkubWF4X21XX3Blcl9wb3J0ID0gOTAwMDAsCiYjNDM7CS5uYW1lID0gJiMzNDtSVEw4MjM5JiMzNDssCiYjNDM7CS5wd19yZWFkX2xzYl9tVyA9IDQwMCwKJiM0MzsJLnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCwKJiM0MzsJLnB3X3NldF9sc2JfbVcgPSA0MDAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOWNfaW5mbyA9IHsKJiM0MzsJLmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMsCiYjNDM7CS5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCwKJiM0MzsJLm5hbWUgPSAmIzM0O1JUTDgyMzlDJiMzNDssCiYjNDM7CS5wd19yZWFkX2xzYl9tVyA9IDQwMCwKJiM0MzsJLnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCwKJiM0MzsJLnB3X3NldF9sc2JfbVcgPSA0MDAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gYmNtNTkxMTFfaW5mbyA9IHsKJiM0MzsJLmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTEsCiYjNDM7CS5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCwKJiM0MzsJLm5hbWUgPSAmIzM0O0JDTTU5MTExJiMzNDssCiYjNDM7CS5wd19yZWFkX2xzYl9tVyA9IDIwMCwKJiM0MzsJLnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULAomIzQzOwkucHdfc2V0X2xzYl9tVyA9IDIwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBiY201OTEyMV9pbmZvID0gewomIzQzOwkuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTEyMSwKJiM0MzsJLyoKJiM0MzsJICogQkNNNTkxMjEgaXMgYSA2MFcgVHlwZS0zIHBhcnQsIGJ1dCBrbm93biBib2FyZHMgcnVuIGl0IGF0IDgwMi4zYXQKJiM0MzsJICogYW5kIHRoZSBCQ00gZGlhbGVjdCBoYXMgb25seSB0aGUgOC1iaXQvMC4yVyBzZXQgY29tbWFuZCAoJmx0Oz01MVcpOwomIzQzOwkgKiBjYXAgYXQgdGhlIDMwVyB0aGUgaGFyZHdhcmUgYWN0dWFsbHkgb2ZmZXJzLgomIzQzOwkgKi8KJiM0MzsJLm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLAomIzQzOwkubmFtZSA9ICYjMzQ7QkNNNTkxMjEmIzM0OywKJiM0MzsJLnB3X3JlYWRfbHNiX21XID0gMjAwLAomIzQzOwkucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsCiYjNDM7CS5wd19zZXRfbHNiX21XID0gMjAwLAomIzQzO307CiYjNDM7CiYjNDM7LyogSGVscGVycyBhbmQgYmFzaWMgZnVuY3Rpb25zICovCiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBydHBzZV9tY3VfY3RybCAqdG9fcnRwc2VfbWN1X2N0cmwoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gY29udGFpbmVyX29mKHBjZGV2LCBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwsIHBjZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBydHBzZV9tY3VfbmVlZHNfaTJjX3Byb3RvKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2gpCiYjNDM7ewomIzQzOwlyZXR1cm4gbWF0Y2gtJmd0O2kyY19wcm90b19kdF9yZXF1aXJlZDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X25lZWRzX2kyY19wcm90byk7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X21zZ19pbml0KHN0cnVjdCBydHBzZV9tY3VfbXNnICptc2csIHU4IG9wY29kZSkKJiM0Mzt7CiYjNDM7CW1lbXNldChtc2csIDB4ZmYsIHNpemVvZigqbXNnKSk7CiYjNDM7CW1zZy0mZ3Q7b3Bjb2RlID0gb3Bjb2RlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTggcnRwc2VfbWN1X2NoZWNrc3VtKGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwl1OCBzdW0gPSAwOwomIzQzOwomIzQzOwl3aGlsZSAobGVuLS0pCiYjNDM7CQlzdW0gJiM0Mzs9ICpidWYmIzQzOyYjNDM7OwomIzQzOwlyZXR1cm4gc3VtOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9kb194ZmVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLAomIzQzOwkJCSAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXEtJmd0O2NoZWNrc3VtID0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlcSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSk7CiYjNDM7CiYjNDM7CXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtwc2UtJmd0O211dGV4KSB7CiYjNDM7CQlyZXQgPSBwc2UtJmd0O3RyYW5zcG9ydC0mZ3Q7c2VuZChwc2UsIHJlcSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIE1DVSBuZWVkcyBhIGZpeGVkIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gcmVjZWl2aW5nIGEgcmVxdWVzdAomIzQzOwkJICogYW5kIGhhdmluZyB0aGUgcmVzcG9uc2UgcmVhZHksIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBieXRlcyBnZXQgdG8KJiM0MzsJCSAqIHVzLiBQYWNlIHRoZSB0cmFuc2FjdGlvbiBoZXJlIHNvIGVhY2ggdHJhbnNwb3J0IGNhbiBrZWVwIGl0cyByZWN2CiYjNDM7CQkgKiBwYXRoIHNpbXBsZTogYSBzaW5nbGUgYm91bmRlZCB3YWl0IHJhdGhlciB0aGFuIGEgZ2VuZXJpYyByZXRyeS4KJiM0MzsJCSAqLwomIzQzOwkJbXNsZWVwKFJUUFNFX01DVV9SRVNQT05TRV9NUyk7CiYjNDM7CiYjNDM7CQltZW1zZXQocmVzcCwgMCwgc2l6ZW9mKCpyZXNwKSk7CiYjNDM7CQlyZXQgPSBwc2UtJmd0O3RyYW5zcG9ydC0mZ3Q7cmVjdihwc2UsIHJlcSwgcmVzcCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRXhwbGljaXQgTUNVIGVycm9yIG9wY29kZXMgKG9ic2VydmVkIG9uIHRoZSBCQ00gZGlhbGVjdDsgaGFybWxlc3MKJiM0MzsJICogdG8gY2hlY2sgZm9yIFJUTCB0b28pLiBDYXRjaCB0aGVzZSBiZWZvcmUgdGhlIGdlbmVyaWMgb3Bjb2RlL0NSQwomIzQzOwkgKiBtaXNtYXRjaCBwYXRoIHNvIGNhbGxlcnMgc2VlIGEgbWVhbmluZ2Z1bCBlcnJuby4KJiM0MzsJICovCiYjNDM7CXN3aXRjaCAocmVzcC0mZ3Q7b3Bjb2RlKSB7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFOgomIzQzOwkJcmV0dXJuIC1FQkFERTsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNOgomIzQzOwkJcmV0dXJuIC1FQkFETVNHOwomIzQzOwljYXNlIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZOgomIzQzOwkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJlc3AtJmd0O29wY29kZSAhPSByZXEtJmd0O29wY29kZSB8fAomIzQzOwkgICAgcmVzcC0mZ3Q7c2VxX251bSAhPSByZXEtJmd0O3NlcV9udW0gfHwKJiM0MzsJICAgIHJlc3AtJmd0O2NoZWNrc3VtICE9IHJ0cHNlX21jdV9jaGVja3N1bSgodTggKilyZXNwLCBSVFBTRV9NQ1VfTVNHX1NJWkUgLSAxKSkKJiM0MzsJCXJldHVybiAtRUJBRE1TRzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfcXVlcnkoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCB1OCBvcGNvZGUsCiYjNDM7CQkJCXN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlydHBzZV9tY3VfbXNnX2luaXQoJmFtcDtyZXEsIG9wY29kZSk7CiYjNDM7CXJlcS5wYXlsb2FkWzBdID0gcG9ydDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCAmYW1wO3JlcSwgcmVzcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocmVzcC0mZ3Q7cGF5bG9hZFswXSAhPSBwb3J0KQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2NtZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSwgdTggYXJnKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlydHBzZV9tY3VfbXNnX2luaXQoJmFtcDtyZXEsIG9wY29kZSk7CiYjNDM7CXJlcS5wYXlsb2FkWzBdID0gcG9ydDsKJiM0MzsJcmVxLnBheWxvYWRbMV0gPSBhcmc7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgJmFtcDtyZXEsICZhbXA7cmVzcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocmVzcC5wYXlsb2FkWzBdICE9IHBvcnQgfHwgcmVzcC5wYXlsb2FkWzFdICE9IDApCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIEdsb2JhbCBvcGVyYXRpb25zICovCiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZ2V0X2luZm8oc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GT107CiYjNDM7CWlmICghb3BjLSZndDt2YWxpZCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcnRwc2VfbWN1X21zZ19pbml0KCZhbXA7cmVxLCBvcGMtJmd0O29wKTsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCAmYW1wO3JlcSwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXBzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7cGFyc2Vfc3lzdGVtX2luZm8ocmVzcC5wYXlsb2FkLCBpbmZvKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgKmNvbmZpZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlydHBzZV9tY3VfbXNnX2luaXQoJmFtcDtyZXEsIG9wYy0mZ3Q7b3ApOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsICZhbXA7cmVxLCAmYW1wO3Jlc3ApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJY29uZmlnLSZndDt1dmxvID0gcmVzcC5wYXlsb2FkWzBdOwomIzQzOwljb25maWctJmd0O292bG8gPSByZXNwLnBheWxvYWRbNV07CiYjNDM7CWNvbmZpZy0mZ3Q7cHJlYWxsb2NfZW5hYmxlID0gKHJlc3AucGF5bG9hZFsxXSA9PSAweDEpOwomIzQzOwljb25maWctJmd0O251bV9vZl9wc2VzID0gcmVzcC5wYXlsb2FkWzZdOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgYm9vbCBlbmFibGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW9wYyA9ICZhbXA7cHNlLSZndDtkaWFsZWN0LSZndDtvcGNvZGVbUlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlydHBzZV9tY3VfbXNnX2luaXQoJmFtcDtyZXEsIG9wYy0mZ3Q7b3ApOwomIzQzOwlyZXEucGF5bG9hZFswXSA9IGVuYWJsZSA/IDB4MSA6IDB4MDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCAmYW1wO3JlcSwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiAocmVzcC5wYXlsb2FkWzBdID09IDB4MCkgPyAwIDogLUVJTzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUG9ydCBvcGVyYXRpb25zICovCiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy0mZ3Q7b3AsICZhbXA7cmVzcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlzdGF0dXMtJmd0O3N0czEgPSByZXNwLnBheWxvYWRbMV07CiYjNDM7CXN0YXR1cy0mZ3Q7c3RzMiA9IHJlc3AucGF5bG9hZFsyXTsKJiM0MzsJc3RhdHVzLSZndDtzdHMzID0gcmVzcC5wYXlsb2FkWzNdOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LAomIzQzOwkJCQkJICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQgKm1lYXN1cmVtZW50KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy0mZ3Q7b3AsICZhbXA7cmVzcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwltZWFzdXJlbWVudC0mZ3Q7dm9sdGFnZV9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmFtcDtyZXNwLnBheWxvYWRbMV0pOwomIzQzOwltZWFzdXJlbWVudC0mZ3Q7Y3VycmVudF9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmFtcDtyZXNwLnBheWxvYWRbM10pOwomIzQzOwltZWFzdXJlbWVudC0mZ3Q7dGVtcGVyYXR1cmVfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KCZhbXA7cmVzcC5wYXlsb2FkWzVdKTsKJiM0MzsJbWVhc3VyZW1lbnQtJmd0O3Bvd2VyX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNigmYW1wO3Jlc3AucGF5bG9hZFs3XSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LAomIzQzOwkJCQkgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgKmNvbmZpZykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW9wYyA9ICZhbXA7cHNlLSZndDtkaWFsZWN0LSZndDtvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLSZndDtvcCwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWNvbmZpZy0mZ3Q7ZW5hYmxlID0gKHJlc3AucGF5bG9hZFsxXSA9PSAxKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LAomIzQzOwkJCQkJIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnICpjb25maWcpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR107CiYjNDM7CWlmICghb3BjLSZndDt2YWxpZCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtJmd0O29wLCAmYW1wO3Jlc3ApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJY29uZmlnLSZndDttYXhfcG93ZXIgPSByZXNwLnBheWxvYWRbM107CiYjNDM7CWNvbmZpZy0mZ3Q7cHJpb3JpdHkgPSByZXNwLnBheWxvYWRbNF07CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgcG9ydCwgb3BjLSZndDtvcCwgZW5hYmxlID8gMHgxIDogMHgwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUFNFIGNvbnRyb2xsZXIgb3BzICovCiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwKJiM0MzsJCQkJCSAgc3RydWN0IHBzZV9hZG1pbl9zdGF0ZSAqYWRtaW5fc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyBjb25maWc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcocHNlLCBpZCwgJmFtcDtjb25maWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJYWRtaW5fc3RhdGUtJmd0O2MzM19hZG1pbl9zdGF0ZSA9IGNvbmZpZy5lbmFibGUgPyBFVEhUT09MX0MzM19QU0VfQURNSU5fU1RBVEVfRU5BQkxFRCA6CiYjNDM7CQkJCQkJICAgICAgIEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9ESVNBQkxFRDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLAomIzQzOwkJCQkJc3RydWN0IHBzZV9wd19zdGF0dXMgKnB3X3N0YXR1cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1czsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhwc2UsIGlkLCAmYW1wO3N0YXR1cyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlzd2l0Y2ggKHN0YXR1cy5zdHMxKSB7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RJU0FCTEVEOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzoKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElORzoKJiM0MzsJCXB3X3N0YXR1cy0mZ3Q7YzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19TRUFSQ0hJTkc7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzoKJiM0MzsJCXB3X3N0YXR1cy0mZ3Q7YzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19ERUxJVkVSSU5HOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1RFU1Q6CiYjNDM7CQlwd19zdGF0dXMtJmd0O2MzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfVEVTVDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUUFNFX01DVV9QT1JUX1NUU19GQVVMVDoKJiM0MzsJCXB3X3N0YXR1cy0mZ3Q7YzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19GQVVMVDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVDoKJiM0MzsJCXB3X3N0YXR1cy0mZ3Q7YzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19PVEhFUkZBVUxUOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlwd19zdGF0dXMtJmd0O2MzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfVU5LTk9XTjsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgc3RhdHVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsICZhbXA7c3RhdHVzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHN0czIgaG9sZHMgdGhlIGNsYXNzIG9ubHkgaW4gdGhlIG9wZXJhdGlvbmFsIHN0YXRlcyBiZWxvdy4gSW4gYQomIzQzOwkgKiBmYXVsdC90ZXN0IHN0YXRlIChvciBhIGNvZGUgcmVzZXJ2ZWQgb24gdGhlIGN1cnJlbnQgZGlhbGVjdCkgaXQKJiM0MzsJICogZG9lcyBub3QsIHNvIHRoZXJlIGlzIG5vIGNsYXNzIHRvIHJlcG9ydCBhbmQgd2UgcmV0dXJuIDAuIFRoYXQgaXMKJiM0MzsJICogaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIHJlYWwgY2xhc3MtMCBQRDsgdXNlcnNwYWNlIGRpc2FtYmlndWF0ZXMKJiM0MzsJICogdmlhIHRoZSBwb3dlciBzdGF0dXMuCiYjNDM7CSAqLwomIzQzOwlzd2l0Y2ggKHN0YXR1cy5zdHMxKSB7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEOgomIzQzOwljYXNlIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkc6CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkc6CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkc6CiYjNDM7CQlyZXR1cm4gcHNlLSZndDtkaWFsZWN0LSZndDtwYXJzZV9wb3J0X2NsYXNzKCZhbXA7c3RhdHVzKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X21lYXN1cmVtZW50KHBzZSwgaWQsICZhbXA7bWVhc3VyZW1lbnQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogMTAwbVcgcGVyIExTQiAqLwomIzQzOwlyZXR1cm4gbWVhc3VyZW1lbnQucG93ZXJfcmF3ICogMTAwVTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDsKJiM0MzsJaW50IHJldDsKJiM0MzsJdTMyIHVWOwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgJmFtcDttZWFzdXJlbWVudCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiA2NC40NW1WIHBlciBMU0IgKi8KJiM0MzsJdVYgPSBtZWFzdXJlbWVudC52b2x0YWdlX3JhdyAqIDY0NDUwVTsKJiM0MzsJcmV0dXJuIG1pbl90KHUzMiwgdVYsIElOVF9NQVgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2VuYWJsZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZSh0b19ydHBzZV9tY3VfY3RybChwY2RldiksIGlkLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9kaXNhYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHBzZSwgaWQsICZhbXA7Y29uZmlnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBjb25maWcubWF4X3Bvd2VyICogcHNlLSZndDtjaGlwLSZndDtwd19yZWFkX2xzYl9tVzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXQoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwgaW50IG1heF9tVykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICp0eXBlX29wYywgKnZhbF9vcGM7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyAqY2hpcCA9IHBzZS0mZ3Q7Y2hpcDsKJiM0MzsJdTggcHJnX3ZhbDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKG1heF9tVyAmbHQ7IDAgfHwgbWF4X21XICZndDsgY2hpcC0mZ3Q7bWF4X21XX3Blcl9wb3J0KQomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CiYjNDM7CXR5cGVfb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdOwomIzQzOwl2YWxfb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtjaGlwLSZndDtwd19zZXRfY21kXTsKJiM0MzsJLyogcHdfc2V0X2xzYl9tVyBpcyB0aGUgZGl2aXNvciBiZWxvdzsgcmVqZWN0IGEgY2hpcCB0aGF0IGxhY2tzIGl0LiAqLwomIzQzOwlpZiAoIXR5cGVfb3BjLSZndDt2YWxpZCB8fCAhdmFsX29wYy0mZ3Q7dmFsaWQgfHwgIWNoaXAtJmd0O3B3X3NldF9sc2JfbVcpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFN3aXRjaCB0aGUgcG9ydCB0byB1c2VyLWRlZmluZWQgbGltaXQgbW9kZSBmaXJzdCwgdGhlbiBwcm9ncmFtIHRoZQomIzQzOwkgKiBsaW1pdCB2YWx1ZS4gSWYgdGhlIHNlY29uZCBjbWQgZmFpbHMsIHRoZSBwb3J0IGlzIGxlZnQgaW4KJiM0MzsJICogdXNlci1kZWZpbmVkIG1vZGUgYnV0IHdpdGggdGhlIHByZXZpb3VzIGxpbWl0IHZhbHVlOyB0aGUgbmV4dAomIzQzOwkgKiBzdWNjZXNzZnVsIHNldF9wd19saW1pdCBjYWxsIHJlY292ZXJzIGl0LgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIHR5cGVfb3BjLSZndDtvcCwgUlRQU0VfTUNVX1BPUlRfUFdfTElNSVRfVFlQRV9VU0VSKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXByZ192YWwgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG1heF9tVyAvIGNoaXAtJmd0O3B3X3NldF9sc2JfbVcsIFU4X01BWCk7CiYjNDM7CiYjNDM7CXJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdmFsX29wYy0mZ3Q7b3AsIHByZ192YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwKJiM0MzsJCQkJCSAgICAgIHN0cnVjdCBwc2VfcHdfbGltaXRfcmFuZ2VzICpvdXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IGV0aHRvb2xfYzMzX3BzZV9wd19saW1pdF9yYW5nZSAqcmFuZ2U7CiYjNDM7CiYjNDM7CXJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlKTsKJiM0MzsJaWYgKCFyYW5nZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlyYW5nZVswXS5taW4gPSAwOwomIzQzOwlyYW5nZVswXS5tYXggPSBwc2UtJmd0O2NoaXAtJmd0O21heF9tV19wZXJfcG9ydDsKJiM0MzsKJiM0MzsJb3V0LSZndDtjMzNfcHdfbGltaXRfcmFuZ2VzID0gcmFuZ2U7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgY29uZmlnOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhwc2UsIGlkLCAmYW1wO2NvbmZpZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gY29uZmlnLnByaW9yaXR5OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7CiYjNDM7CiYjNDM7CWlmIChwcmlvICZndDsgUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZKQomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CiYjNDM7CW9wYyA9ICZhbXA7cHNlLSZndDtkaWFsZWN0LSZndDtvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV07CiYjNDM7CWlmICghb3BjLSZndDt2YWxpZCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCBvcGMtJmd0O29wLCBwcmlvKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9vcHMgcnRwc2VfbWN1X29wcyA9IHsKJiM0MzsJLnBpX2dldF9hZG1pbl9zdGF0ZSA9IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZSwKJiM0MzsJLnBpX2dldF9wd19zdGF0dXMgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzLAomIzQzOwkucGlfZ2V0X3B3X2NsYXNzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzLAomIzQzOwkucGlfZ2V0X2FjdHVhbF9wdyA9IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcsCiYjNDM7CS5waV9lbmFibGUgPSBydHBzZV9tY3VfcG9ydF9lbmFibGUsCiYjNDM7CS5waV9kaXNhYmxlID0gcnRwc2VfbWN1X3BvcnRfZGlzYWJsZSwKJiM0MzsJLnBpX2dldF92b2x0YWdlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UsCiYjNDM7CS5waV9nZXRfcHdfbGltaXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQsCiYjNDM7CS5waV9zZXRfcHdfbGltaXQgPSBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXQsCiYjNDM7CS5waV9nZXRfcHdfbGltaXRfcmFuZ2VzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcywKJiM0MzsJLnBpX2dldF9wcmlvID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8sCiYjNDM7CS5waV9zZXRfcHJpbyA9IHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZGlzY292ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyBleHRfY29uZmlnOwomIzQzOwl1bnNpZ25lZCBsb25nIGRlYWRsaW5lOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBIGJvb3RpbmcgTUNVIG1heSBzdGF5IHNpbGVudCAoLUVUSU1FRE9VVCksIG5vdCBBQ0sgaXRzIGFkZHJlc3MKJiM0MzsJICogKC1FTlhJTyAvIC1FUkVNT1RFSU8pLCByZXBvcnQgbm90LXJlYWR5ICgtRUFHQUlOKSwgb3IgZW1pdCBhCiYjNDM7CSAqIGNvcnJ1cHQvcGFydGlhbCBmcmFtZSAoLUVCQURNU0cgLyAtRUJBREUpLiBSZXRyeSB0aG9zZSB3aXRoaW4gYQomIzQzOwkgKiBib3VuZGVkIHdpbmRvdzsgb3RoZXIgZXJyb3JzIChlLmcuIC1FT1BOT1RTVVBQKSBhcmUgZmF0YWwgYW5kIGZhaWwKJiM0MzsJICogaW1tZWRpYXRlbHkuCiYjNDM7CSAqLwomIzQzOwlkZWFkbGluZSA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhSVFBTRV9NQ1VfQk9PVF9USU1FT1VUX01TKTsKJiM0MzsJZG8gewomIzQzOwkJcmV0ID0gcnRwc2VfbWN1X2dldF9pbmZvKHBzZSwgaW5mbyk7CiYjNDM7CQlpZiAocmV0ICE9IC1FVElNRURPVVQgJmFtcDsmYW1wOyByZXQgIT0gLUVOWElPICZhbXA7JmFtcDsgcmV0ICE9IC1FUkVNT1RFSU8gJmFtcDsmYW1wOwomIzQzOwkJICAgIHJldCAhPSAtRUFHQUlOICZhbXA7JmFtcDsgcmV0ICE9IC1FQkFETVNHICZhbXA7JmFtcDsgcmV0ICE9IC1FQkFERSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCW1zbGVlcChSVFBTRV9NQ1VfQk9PVF9SRVRSWV9NUyk7CiYjNDM7CX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgcmV0LCAmIzM0O2ZhaWxlZCB0byByZWFkIE1DVSBpbmZvXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoaW5mby0mZ3Q7ZGV2aWNlX2lkKSB7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QjoKJiM0MzsJCXBzZS0mZ3Q7Y2hpcCA9ICZhbXA7cnRsODIzOGJfaW5mbzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOToKJiM0MzsJCXBzZS0mZ3Q7Y2hpcCA9ICZhbXA7cnRsODIzOV9pbmZvOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5QzoKJiM0MzsJCXBzZS0mZ3Q7Y2hpcCA9ICZhbXA7cnRsODIzOWNfaW5mbzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTE6CiYjNDM7CQlwc2UtJmd0O2NoaXAgPSAmYW1wO2JjbTU5MTExX2luZm87CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxOgomIzQzOwkJcHNlLSZndDtjaGlwID0gJmFtcDtiY201OTEyMV9pbmZvOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgLUVJTlZBTCwgJiMzNDt1bmtub3duIFBTRSBpZCAweCV4XG4mIzM0OywKJiM0MzsJCQkJICAgICBpbmZvLSZndDtkZXZpY2VfaWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghaW5mby0mZ3Q7bWF4X3BvcnRzIHx8IGluZm8tJmd0O21heF9wb3J0cyAmZ3Q7IFJUUFNFX01DVV9NQVhfUE9SVFMpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICAmIzM0O01DVSByZXBvcnRzIGludmFsaWQgcG9ydCBjb3VudCAldVxuJiMzNDssIGluZm8tJmd0O21heF9wb3J0cyk7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9nZXRfZXh0X2NvbmZpZyhwc2UsICZhbXA7ZXh0X2NvbmZpZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgcmV0LCAmIzM0O2ZhaWxlZCB0byByZWFkIE1DVSBleHQgY29uZmlnXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWRldl9pbmZvKHBzZS0mZ3Q7ZGV2LCAmIzM0OyVzIE1DVSwgJXMgKGlkIDB4JTA0eCksICV1IHBvcnRzIGFjcm9zcyAldSBQU0UgY2hpcChzKVxuJiMzNDssCiYjNDM7CQkgcHNlLSZndDtkaWFsZWN0LSZndDttY3VfdHlwZV9zdHIoaW5mby0mZ3Q7bWN1X3R5cGUpLCBwc2UtJmd0O2NoaXAtJmd0O25hbWUsCiYjNDM7CQkgaW5mby0mZ3Q7ZGV2aWNlX2lkLCBpbmZvLSZndDttYXhfcG9ydHMsIGV4dF9jb25maWcubnVtX29mX3BzZXMpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X3JlZ3VsYXRvcl9kaXNhYmxlKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlyZWd1bGF0b3JfZGlzYWJsZShkYXRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X2dsb2JhbF9kaXNhYmxlKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IGRhdGE7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHBzZSwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgcnRwc2VfbWN1X3JlZ2lzdGVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaDsKJiM0MzsJc3RydWN0IGdwaW9fZGVzYyAqZW5hYmxlX2dwaW87CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfaW5mbyBpbmZvOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBydHBzZV9tY3VfbXNnKSAhPSBSVFBTRV9NQ1VfTVNHX1NJWkUpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX211dGV4X2luaXQocHNlLSZndDtkZXYsICZhbXA7cHNlLSZndDttdXRleCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwltYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShwc2UtJmd0O2Rldik7CiYjNDM7CWlmICghbWF0Y2gpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgLUVOT0RFViwgJiMzNDttaXNzaW5nIG1hdGNoIGRhdGFcbiYjMzQ7KTsKJiM0MzsJcHNlLSZndDtkaWFsZWN0ID0gbWF0Y2gtJmd0O2RpYWxlY3Q7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENhdGNoIGEgZGlhbGVjdCB0aGF0IGZvcmdvdCB0byBzZXQgb25lIG9mIHRoZSByZXF1aXJlZCBob29rcyBhdAomIzQzOwkgKiBwcm9iZSB0aW1lLCByYXRoZXIgdGhhbiBOVUxMLWRlcmVmJiMzOTtpbmcgbGF0ZXIgZnJvbSBhIGZhc3QgcGF0aC4KJiM0MzsJICovCiYjNDM7CWlmICghcHNlLSZndDtkaWFsZWN0IHx8CiYjNDM7CSAgICAhcHNlLSZndDtkaWFsZWN0LSZndDtwYXJzZV9zeXN0ZW1faW5mbyB8fAomIzQzOwkgICAgIXBzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7cGFyc2VfcG9ydF9jbGFzcyB8fAomIzQzOwkgICAgIXBzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7bWN1X3R5cGVfc3RyKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLSZndDtkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAgJiMzNDtkaWFsZWN0IGZvciBjaGlwIGlzIGluY29tcGxldGVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcHNlLSZndDtwb2Vfc3VwcGx5ID0gZGV2bV9yZWd1bGF0b3JfZ2V0KHBzZS0mZ3Q7ZGV2LCAmIzM0O3Bvd2VyJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHBzZS0mZ3Q7cG9lX3N1cHBseSkpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgUFRSX0VSUihwc2UtJmd0O3BvZV9zdXBwbHkpLAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGdldCBQb0Ugc3VwcGx5XG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWVuYWJsZV9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwocHNlLSZndDtkZXYsICYjMzQ7ZW5hYmxlJiMzNDssIEdQSU9EX09VVF9ISUdIKTsKJiM0MzsJaWYgKElTX0VSUihlbmFibGVfZ3BpbykpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgUFRSX0VSUihlbmFibGVfZ3BpbyksCiYjNDM7CQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IGVuYWJsZSBncGlvXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9kaXNjb3Zlcihwc2UsICZhbXA7aW5mbyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHBzZS0mZ3Q7cG9lX3N1cHBseSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgcmV0LCAmIzM0O2ZhaWxlZCB0byBlbmFibGUgUG9FIHN1cHBseVxuJiMzNDspOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQocHNlLSZndDtkZXYsIHJ0cHNlX21jdV9yZWd1bGF0b3JfZGlzYWJsZSwgcHNlLSZndDtwb2Vfc3VwcGx5KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmICghaW5mby5zeXN0ZW1fZW5hYmxlKSB7CiYjNDM7CQlyZXQgPSBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShwc2UsIHRydWUpOwomIzQzOwkJLyogRGlhbGVjdHMgd2l0aG91dCBhIGdsb2JhbC1zdGF0ZSBjb25jZXB0IChlLmcuIEJDTSkgcmV0dXJuCiYjNDM7CQkgKiAtRU9QTk9UU1VQUDsgdHJlYXQgdGhhdCBhcyAmIzM0O25vIHNlcGFyYXRlIGVuYWJsZSByZXF1aXJlZCYjMzQ7LgomIzQzOwkJICovCiYjNDM7CQlpZiAocmV0ICZhbXA7JmFtcDsgcmV0ICE9IC1FT1BOT1RTVVBQKQomIzQzOwkJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCByZXQsCiYjNDM7CQkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBQU0Ugc3lzdGVtXG4mIzM0Oyk7CiYjNDM7CQlpZiAoIXJldCkgewomIzQzOwkJCXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChwc2UtJmd0O2RldiwKJiM0MzsJCQkJCQkgICAgICAgcnRwc2VfbWN1X2dsb2JhbF9kaXNhYmxlLCBwc2UpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRGVwZW5kaW5nIG9uIHRoZSBNQ1UgZmlybXdhcmUgY29uZmlndXJhdGlvbiAod2hpY2ggbWlnaHQgYmUgZGlmZmVyZW50CiYjNDM7CSAqIGZvciBldmVyeSBib2FyZCksIGl0IGlzbiYjMzk7dCBrbm93biB3aGV0aGVyIHRoZSBQb0Ugc3Vic3lzdGVtIGlzIGFjdGl2ZSBvcgomIzQzOwkgKiBpbmFjdGl2ZSBieSBkZWZhdWx0LiBBdCB0aGlzIHN0YWdlLCB0aGUgUFNFIGNoaXBzIG1pZ2h0IGFscmVhZHkgZGVsaXZlcgomIzQzOwkgKiBwb3dlciB0byBQRHMgd2l0aG91dCBhbnkgZXhwbGljaXQgZW5hYmxlLgomIzQzOwkgKi8KJiM0MzsKJiM0MzsJLyogcGNkZXYub3duZXIgaXMgc2V0IGJ5IHRoZSB0cmFuc3BvcnQsIHNvIHRoZSByZWdpc3RlcmVkIGNvbnRyb2xsZXIKJiM0MzsJICogcGlucyB0aGUgdHJhbnNwb3J0IG1vZHVsZSB0aGF0IG93bnMgdGhlIGxpdmUgZGV2aWNlLCBub3QgdGhlIGNvcmUuCiYjNDM7CSAqLwomIzQzOwlwc2UtJmd0O3BjZGV2Lm9wcyAgICAgID0gJmFtcDtydHBzZV9tY3Vfb3BzOwomIzQzOwlwc2UtJmd0O3BjZGV2LmRldiAgICAgID0gcHNlLSZndDtkZXY7CiYjNDM7CXBzZS0mZ3Q7cGNkZXYudHlwZXMgICAgPSBFVEhUT09MX1BTRV9DMzM7CiYjNDM7CXBzZS0mZ3Q7cGNkZXYubnJfbGluZXMgPSBpbmZvLm1heF9wb3J0czsKJiM0MzsJcHNlLSZndDtwY2Rldi5waXNfcHJpb19tYXggPSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFk7CiYjNDM7CXBzZS0mZ3Q7cGNkZXYuc3VwcF9idWRnZXRfZXZhbF9zdHJhdGVnaWVzID0gUFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUM7CiYjNDM7CiYjNDM7CXJldHVybiBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHBzZS0mZ3Q7ZGV2LCAmYW1wO3BzZS0mZ3Q7cGNkZXYpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfcmVnaXN0ZXIpOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9ydGxfcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CWluZm8tJmd0O21heF9wb3J0cyA9IHBheWxvYWRbMV07CiYjNDM7CWluZm8tJmd0O3N5c3RlbV9lbmFibGUgPSAocGF5bG9hZFsyXSA9PSAweDEpOwomIzQzOwlpbmZvLSZndDtkZXZpY2VfaWQgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmFtcDtwYXlsb2FkWzNdKTsKJiM0MzsJaW5mby0mZ3Q7c3dfdmVyID0gcGF5bG9hZFs1XTsKJiM0MzsJaW5mby0mZ3Q7bWN1X3R5cGUgPSBwYXlsb2FkWzZdOwomIzQzOwlpbmZvLSZndDtjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTsKJiM0MzsJaW5mby0mZ3Q7ZXh0X3ZlciA9IHBheWxvYWRbOF07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3J0bF9wYXJzZV9wb3J0X2NsYXNzKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cykKJiM0Mzt7CiYjNDM7CS8qIENsYXNzIGxpdmVzIGluIHRoZSB1cHBlciBuaWJibGUgb2Ygc3RzMi4gKi8KJiM0MzsJcmV0dXJuIEZJRUxEX0dFVChHRU5NQVNLKDcsIDQpLCBzdGF0dXMtJmd0O3N0czIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqcnRwc2VfbWN1X3J0bF9tY3VfdHlwZV9zdHIodW5zaWduZWQgaW50IG1jdV90eXBlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChtY3VfdHlwZSkgewomIzQzOwljYXNlIDB4MDA6CXJldHVybiAmIzM0O0dpZ2FEZXZpY2UgR0QzMkYzMTAmIzM0OzsKJiM0MzsJY2FzZSAweDAxOglyZXR1cm4gJiMzNDtHaWdhRGV2aWNlIEdEMzJGMjMwJiMzNDs7CiYjNDM7CWNhc2UgMHgwMjoJcmV0dXJuICYjMzQ7R2lnYURldmljZSBHRDMyRjMwMyYjMzQ7OwomIzQzOwljYXNlIDB4MDM6CXJldHVybiAmIzM0O0dpZ2FEZXZpY2UgR0QzMkYxMDMmIzM0OzsKJiM0MzsJY2FzZSAweDA0OglyZXR1cm4gJiMzNDtHaWdhRGV2aWNlIEdEMzJFMTAzJiMzNDs7CiYjNDM7CWNhc2UgMHgxMDoJcmV0dXJuICYjMzQ7TnV2b3RvbiBNMDUxNiYjMzQ7OwomIzQzOwljYXNlIDB4MTE6CXJldHVybiAmIzM0O051dm90b24gTTA1NjQmIzM0OzsKJiM0MzsJY2FzZSAweDEyOglyZXR1cm4gJiMzNDtOdXZvdG9uIE5VQzAyOSYjMzQ7OwomIzQzOwlkZWZhdWx0OglyZXR1cm4gJiMzNDt1bmtub3duJiMzNDs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X2JyY21fcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CWluZm8tJmd0O21heF9wb3J0cyA9IHBheWxvYWRbMV07CiYjNDM7CS8qIEJDTSBoYXMgbm8gZXhwbGljaXQgc3lzdGVtX2VuYWJsZSBieXRlOyB0aGUgY2xvc2VzdCBhbmFsb2cgaXMgdGhlCiYjNDM7CSAqICYjMzQ7cmVtb3RlIGVuYWJsZSYjMzQ7IGJpdCBpbiB0aGUgc3lzdGVtLXN0YXR1cyBmbGFncyBhdCBwYXlsb2FkWzddLgomIzQzOwkgKi8KJiM0MzsJaW5mby0mZ3Q7c3lzdGVtX2VuYWJsZSA9ICEhKHBheWxvYWRbN10gJmFtcDsgQklUKDIpKTsKJiM0MzsJaW5mby0mZ3Q7ZGV2aWNlX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KCZhbXA7cGF5bG9hZFszXSk7CiYjNDM7CWluZm8tJmd0O3N3X3ZlciA9IHBheWxvYWRbNV07CiYjNDM7CWluZm8tJmd0O21jdV90eXBlID0gcGF5bG9hZFs2XTsKJiM0MzsJaW5mby0mZ3Q7Y29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107CiYjNDM7CWluZm8tJmd0O2V4dF92ZXIgPSBwYXlsb2FkWzhdOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9icmNtX3BhcnNlX3BvcnRfY2xhc3MoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKQomIzQzO3sKJiM0MzsJLyogQkNNIHB1dHMgdGhlIGRldGVjdGVkIGNsYXNzIGluIHBheWxvYWRbM10gKD09IHN0czMpIGRpcmVjdGx5LgomIzQzOwkgKiBNYXNrIHRvIHRoZSBsb3cgbmliYmxlOyBjbGFzcyBpcyAwLi44IGFuZCBhbnkgaGlnaCBiaXRzIHdvdWxkIGJlCiYjNDM7CSAqIG5vaXNlLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIHN0YXR1cy0mZ3Q7c3RzMyAmYW1wOyAweDBmOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqcnRwc2VfbWN1X2JyY21fbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAobWN1X3R5cGUpIHsKJiM0MzsJY2FzZSAweDAwOglyZXR1cm4gJiMzNDtTVCBNaWNybyBTVDMyRjEwMCYjMzQ7OwomIzQzOwljYXNlIDB4MDE6CXJldHVybiAmIzM0O051dm90b24gTTA1eHggTEFOJiMzNDs7CiYjNDM7CWNhc2UgMHgwMjoJcmV0dXJuICYjMzQ7U1QgTWljcm8gU1RGMDMwQzgmIzM0OzsKJiM0MzsJY2FzZSAweDAzOglyZXR1cm4gJiMzNDtOdXZvdG9uIE0wNThTQU4mIzM0OzsKJiM0MzsJY2FzZSAweDA0OglyZXR1cm4gJiMzNDtOdXZvdG9uIE5VQzEyMiYjMzQ7OwomIzQzOwlkZWZhdWx0OglyZXR1cm4gJiMzNDt1bmtub3duJiMzNDs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyogTWFwIGVhY2ggbG9naWNhbCBjb21tYW5kIHRoZSBjb3JlIGlzc3VlcyB0byBpdHMgcGVyLWRpYWxlY3Qgb3Bjb2RlLiAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgcnRwc2VfbWN1X2RpYWxlY3RfcnRrID0gewomIzQzOwkucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfcnRsX3BhcnNlX3N5c3RlbV9pbmZvLAomIzQzOwkucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfcnRsX3BhcnNlX3BvcnRfY2xhc3MsCiYjNDM7CS5tY3VfdHlwZV9zdHIgICAgICA9IHJ0cHNlX21jdV9ydGxfbWN1X3R5cGVfc3RyLAomIzQzOwkub3Bjb2RlID0gewomIzQzOwkJW1JUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURV0JPSBSVFBTRV9NQ1VfT1AoMHgwMCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dCQk9IFJUUFNFX01DVV9PUCgweDQwKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXQkJPSBSVFBTRV9NQ1VfT1AoMHg0YSksCiYjNDM7CiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV0JCT0gUlRQU0VfTUNVX09QKDB4MDEpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxMiksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF0JPSBSVFBTRV9NQ1VfT1AoMHgxMyksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFRdID0gUlRQU0VfTUNVX09QKDB4MTQpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldCT0gUlRQU0VfTUNVX09QKDB4MTUpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXQkJPSBSVFBTRV9NQ1VfT1AoMHg0MiksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU10JPSBSVFBTRV9NQ1VfT1AoMHg0NCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddCQk9IFJUUFNFX01DVV9PUCgweDQ4KSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddCT0gUlRQU0VfTUNVX09QKDB4NDkpLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9icmNtID0gewomIzQzOwkucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfYnJjbV9wYXJzZV9zeXN0ZW1faW5mbywKJiM0MzsJLnBhcnNlX3BvcnRfY2xhc3MgID0gcnRwc2VfbWN1X2JyY21fcGFyc2VfcG9ydF9jbGFzcywKJiM0MzsJLm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2JyY21fbWN1X3R5cGVfc3RyLAomIzQzOwkub3Bjb2RlID0gewomIzQzOwkJW1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXQkJPSBSVFBTRV9NQ1VfT1AoMHgyMCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR10JCT0gUlRQU0VfTUNVX09QKDB4MmIpLAomIzQzOwomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdCQk9IFJUUFNFX01DVV9PUCgweDAwKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdID0gUlRQU0VfTUNVX09QKDB4MTUpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRdCT0gUlRQU0VfTUNVX09QKDB4MTYpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldCT0gUlRQU0VfTUNVX09QKDB4MWEpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXQkJPSBSVFBTRV9NQ1VfT1AoMHgyMSksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU10JPSBSVFBTRV9NQ1VfT1AoMHgzMCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddCQk9IFJUUFNFX01DVV9PUCgweDI1KSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddCT0gUlRQU0VfTUNVX09QKDB4MjYpLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9ydGtfZGF0YSA9IHsKJiM0MzsJLmRpYWxlY3QgPSAmYW1wO3J0cHNlX21jdV9kaWFsZWN0X3J0aywKJiM0MzsJLmkyY19wcm90b19kdF9yZXF1aXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MztFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfcnRrX2RhdGEpOwomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfYnJjbV9kYXRhID0gewomIzQzOwkuZGlhbGVjdCA9ICZhbXA7cnRwc2VfbWN1X2RpYWxlY3RfYnJjbSwKJiM0Mzt9OwomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9icmNtX2RhdGEpOwomIzQzOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O1JlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKGNvcmUpJiMzNDspOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKb25hcyBKZWxvbmVrICZsdDtqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNmU2ZTM2NDVjNTA5MDMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jCkBAIC0wLDAgJiM0MzsxLDE2MyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2kyYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHNlLXBkL3BzZS5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7cmVhbHRlay1wc2UtbWN1LmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIGNvcmUgaGFzIGFscmVhZHkgd2FpdGVkIFJUUFNFX01DVV9SRVNQT05TRV9NUyBiZWZvcmUgY2FsbGluZyB1cywgc28KJiM0MzsgKiB0aGUgcmVzcG9uc2UgaXMgbm9ybWFsbHkgcmVhZHkgb24gdGhlIHZlcnkgZmlyc3QgcmVhZC4gRm9yIGNvbW1hbmRzIHRoZQomIzQzOyAqIE1DVSBwcm9kdWNlcyBtb3JlIHNsb3dseSwga2VlcCBwb2xsaW5nIGF0IHRoZSB0eXBpY2FsIHJlc3BvbnNlIGNhZGVuY2UKJiM0MzsgKiB1cCB0byB0aGUgd29yc3QtY2FzZSBjZWlsaW5nLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19SRVRSWV9NUwlSVFBTRV9NQ1VfUkVTUE9OU0VfTVMKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTCShSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TIC8gUlRQU0VfTUNVX0kyQ19SRVRSWV9NUykKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJLyogU2VuZCBvcGNvZGUgYXMgU01CdXMgY29tbWFuZCBieXRlOyByZW1haW5pbmcgMTEgYnl0ZXMgYXMgYmxvY2sgZGF0YSAqLwomIzQzOwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVxLSZndDtvcGNvZGUsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEsCiYjNDM7CQkJCQkgICAgICAodTggKilyZXEgJiM0MzsgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLAomIzQzOwkJCQkgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtJmd0O2Rldik7CiYjNDM7CWludCB0cmllcywgcmV0OwomIzQzOwomIzQzOwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgJmx0OyBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUzsgdHJpZXMmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodHJpZXMgJmd0OyAwKQomIzQzOwkJCW1zbGVlcChSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKTsKJiM0MzsKJiM0MzsJCS8qIE1DVSBuZWVkcyAweDAwIGFzIGNvbW1hbmQgYnl0ZSBmb3IgcmVhZCAqLwomIzQzOwkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCAweDAwLAomIzQzOwkJCQkJCSAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsCiYjNDM7CQkJCQkJICAgICh1OCAqKXJlc3ApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFICZhbXA7JmFtcDsgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwocmVxLCByZXNwKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX3NtYnVzX29wcyA9IHsKJiM0MzsJLnNlbmQgPSBydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmQsCiYjNDM7CS5yZWN2ID0gcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLSZndDtkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCAoY29uc3QgdTggKilyZXEsIFJUUFNFX01DVV9NU0dfU0laRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUgPyAwIDogLUVJTzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLAomIzQzOwkJCQkgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKQomIzQzO3sKJiM0MzsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLSZndDtkZXYpOwomIzQzOwlpbnQgdHJpZXMsIHJldDsKJiM0MzsKJiM0MzsJZm9yICh0cmllcyA9IDA7IHRyaWVzICZsdDsgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVM7IHRyaWVzJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHRyaWVzICZndDsgMCkKJiM0MzsJCQltc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7CiYjNDM7CiYjNDM7CQlyZXQgPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCAodTggKilyZXNwLCBSVFBTRV9NQ1VfTVNHX1NJWkUpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFICZhbXA7JmFtcDsgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwocmVxLCByZXNwKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgPSB7CiYjNDM7CS5zZW5kID0gcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZCwKJiM0MzsJLnJlY3YgPSBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2NsaWVudC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZTsKJiM0MzsJYm9vbCB1c2VfbmF0aXZlID0gZmFsc2U7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7CiYjNDM7CWlmICghbWF0Y2gpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsICYjMzQ7bWlzc2luZyBtYXRjaCBkYXRhXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChydHBzZV9tY3VfbmVlZHNfaTJjX3Byb3RvKG1hdGNoKSkgewomIzQzOwkJY29uc3QgY2hhciAqcHJvdG87CiYjNDM7CiYjNDM7CQlyZXQgPSBkZXZpY2VfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LCAmIzM0O3JlYWx0ZWssaTJjLXByb3RvY29sJiMzNDssICZhbXA7cHJvdG8pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAgJiMzNDttaXNzaW5nIHJlcXVpcmVkIFwmIzM0O3JlYWx0ZWssaTJjLXByb3RvY29sXCYjMzQ7IHByb3BlcnR5XG4mIzM0Oyk7CiYjNDM7CiYjNDM7CQlpZiAoIXN0cmNtcChwcm90bywgJiMzNDtpMmMmIzM0OykpCiYjNDM7CQkJdXNlX25hdGl2ZSA9IHRydWU7CiYjNDM7CQllbHNlIGlmICghc3RyY21wKHByb3RvLCAmIzM0O3NtYnVzJiMzNDspKQomIzQzOwkJCXVzZV9uYXRpdmUgPSBmYWxzZTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkgICAgICYjMzQ7dW5rbm93biByZWFsdGVrLGkyYy1wcm90b2NvbCBcJiMzNDslc1wmIzM0O1xuJiMzNDssIHByb3RvKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodXNlX25hdGl2ZSkgewomIzQzOwkJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtJmd0O2FkYXB0ZXIsIEkyQ19GVU5DX0kyQykpCiYjNDM7CQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCwKJiM0MzsJCQkJJiMzNDtwbGFpbi1JMkMgTUNVIHByb3RvY29sIHJlcXVpcmVzIEkyQy1jYXBhYmxlIGFkYXB0ZXJcbiYjMzQ7KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LSZndDthZGFwdGVyLAomIzQzOwkJCQkJICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sgfAomIzQzOwkJCQkJICAgICBJMkNfRlVOQ19TTUJVU19SRUFEX0kyQ19CTE9DSykpCiYjNDM7CQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCwKJiM0MzsJCQkJJiMzNDtTTUJ1cyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgU01CdXMgSTJDLWJsb2NrIHN1cHBvcnRcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlwc2UgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBzZSksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXBzZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwc2UtJmd0O2RldiA9IGRldjsKJiM0MzsJcHNlLSZndDtwY2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwomIzQzOwlwc2UtJmd0O3RyYW5zcG9ydCA9IHVzZV9uYXRpdmUgPyAmYW1wO3J0cHNlX21jdV9pMmNfbmF0aXZlX29wcyA6ICZhbXA7cnRwc2VfbWN1X2kyY19zbWJ1c19vcHM7CiYjNDM7CiYjNDM7CXJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIocHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X2kyY19vZl9tYXRjaFtdID0gewomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHBzZS1tY3UtcnRrJiMzNDssIC5kYXRhID0gJmFtcDtydHBzZV9tY3VfcnRrX2RhdGEgfSwKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxwc2UtbWN1LWJyY20mIzM0OywgLmRhdGEgPSAmYW1wO3J0cHNlX21jdV9icmNtX2RhdGEgfSwKJiM0MzsJeyAvKiBzZW50aW5lbCAqLyB9CiYjNDM7fTsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfaTJjX29mX21hdGNoKTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcnRwc2VfbWN1X2kyY19kcml2ZXIgPSB7CiYjNDM7CS5kcml2ZXIgPSB7CiYjNDM7CQkubmFtZQkJPSAmIzM0O3JlYWx0ZWstcHNlLW1jdS1pMmMmIzM0OywKJiM0MzsJCS5vZl9tYXRjaF90YWJsZQk9IHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2gsCiYjNDM7CX0sCiYjNDM7CS5wcm9iZQkJPSBydHBzZV9tY3VfaTJjX3Byb2JlLAomIzQzO307CiYjNDM7bW9kdWxlX2kyY19kcml2ZXIocnRwc2VfbWN1X2kyY19kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKb25hcyBKZWxvbmVrICZsdDtqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7UmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydCkmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lZjA0ZTBkOTI5NjNiNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jCkBAIC0wLDAgJiM0MzsxLDE1NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGxldGlvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHNlLXBkL3BzZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zZXJkZXYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtyZWFsdGVrLXBzZS1tY3UuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9CQVVEX0RFRkFVTFQJMTkyMDAKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9VQVJUX1RYX1RJTUVPVVQJbXNlY3NfdG9famlmZmllcygxMDApCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUCW1zZWNzX3RvX2ppZmZpZXMoUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUykKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgcHNlOwomIzQzOwlzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2OwomIzQzOwlzdHJ1Y3QgY29tcGxldGlvbiByeF9kb25lOwomIzQzOwlzcGlubG9ja190IHJ4X2xvY2s7CQkvKiBwcm90ZWN0cyByeF9idWYgYW5kIHJ4X2xlbiAqLwomIzQzOwlzaXplX3QgcnhfbGVuOwomIzQzOwl1OCByeF9idWZbUlRQU0VfTUNVX01TR19TSVpFXTsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgdG9fcnRwc2VfbWN1X3VhcnQocCkgIGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQsIHBzZSkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIE5vIGZyYW1pbmcgaXMgZG9uZSBoZXJlOiBhIGdsaXRjaGVkIGZyYW1lIGNvc3RzIG9uZSB0cmFuc2FjdGlvbiwgdGhlbgomIzQzOyAqIHRoZSBuZXh0IF9zZW5kIHJlLWZyYW1lcyBmcm9tIHJ4X2xlbiAwLiBSZXN5bmMgd29ya3MgYnkgcmV0dXJuaW5nIGNvdW50CiYjNDM7ICogKG5vdCB0YWtlKSwgZHJvcHBpbmcgYW55IG92ZXJmbG93IHNvIHNlcmRldiBrZWVwcyBubyBsZWZ0b3ZlciB0byBibGVlZAomIzQzOyAqIGludG8gdGhlIG5leHQgZnJhbWUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHNpemVfdCBydHBzZV9tY3VfdWFydF9yZWNlaXZlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYsCiYjNDM7CQkJCSAgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSBzZXJkZXZfZGV2aWNlX2dldF9kcnZkYXRhKHNlcmRldik7CiYjNDM7CXNpemVfdCB0YWtlOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDtjdHgtJmd0O3J4X2xvY2spIHsKJiM0MzsJCXRha2UgPSBtaW4oY291bnQsIHNpemVvZihjdHgtJmd0O3J4X2J1ZikgLSBjdHgtJmd0O3J4X2xlbik7CiYjNDM7CQlpZiAodGFrZSkgewomIzQzOwkJCW1lbWNweShjdHgtJmd0O3J4X2J1ZiAmIzQzOyBjdHgtJmd0O3J4X2xlbiwgYnVmLCB0YWtlKTsKJiM0MzsJCQljdHgtJmd0O3J4X2xlbiAmIzQzOz0gdGFrZTsKJiM0MzsJCQlpZiAoY3R4LSZndDtyeF9sZW4gPT0gc2l6ZW9mKGN0eC0mZ3Q7cnhfYnVmKSkKJiM0MzsJCQkJY29tcGxldGUoJmFtcDtjdHgtJmd0O3J4X2RvbmUpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGNvbnN1bWUgYWxsIHRvIGF2b2lkIGRlc3luYy9taXNhbGlnbm1lbnQgKi8KJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHNlcmRldl9kZXZpY2Vfb3BzIHJ0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMgPSB7CiYjNDM7CS5yZWNlaXZlX2J1ZiA9IHJ0cHNlX21jdV91YXJ0X3JlY2VpdmUsCiYjNDM7CS53cml0ZV93YWtldXAgPSBzZXJkZXZfZGV2aWNlX3dyaXRlX3dha2V1cCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTsKJiM0MzsJaW50IHdyaXR0ZW47CiYjNDM7CiYjNDM7CS8qIGNsZWFyIGFueSBsZWZ0b3ZlciByeCBzdGF0ZSBiZWZvcmUgdHJhbnNtaXR0aW5nICovCiYjNDM7CXNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCAmYW1wO2N0eC0mZ3Q7cnhfbG9jaykgewomIzQzOwkJcmVpbml0X2NvbXBsZXRpb24oJmFtcDtjdHgtJmd0O3J4X2RvbmUpOwomIzQzOwkJY3R4LSZndDtyeF9sZW4gPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXdyaXR0ZW4gPSBzZXJkZXZfZGV2aWNlX3dyaXRlKGN0eC0mZ3Q7c2VyZGV2LCAoY29uc3QgdTggKilyZXEsIHNpemVvZigqcmVxKSwKJiM0MzsJCQkJICAgICAgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVCk7CiYjNDM7CWlmICh3cml0dGVuICZsdDsgMCkKJiM0MzsJCXJldHVybiB3cml0dGVuOwomIzQzOwlpZiAod3JpdHRlbiAhPSBzaXplb2YoKnJlcSkpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSwKJiM0MzsJCQkgICAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eCA9IHRvX3J0cHNlX21jdV91YXJ0KHBzZSk7CiYjNDM7CiYjNDM7CWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZhbXA7Y3R4LSZndDtyeF9kb25lLCBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUKSkKJiM0MzsJCXJldHVybiAtRVRJTUVET1VUOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDtjdHgtJmd0O3J4X2xvY2spIHsKJiM0MzsJCWlmIChjdHgtJmd0O3J4X2xlbiAhPSBzaXplb2YoKnJlc3ApKQomIzQzOwkJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwkJbWVtY3B5KHJlc3AsIGN0eC0mZ3Q7cnhfYnVmLCBzaXplb2YoKnJlc3ApKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzID0gewomIzQzOwkuc2VuZCA9IHJ0cHNlX21jdV91YXJ0X3NlbmQsCiYjNDM7CS5yZWN2ID0gcnRwc2VfbWN1X3VhcnRfcmVjdiwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldikKJiM0Mzt7CiYjNDM7CXUzMiBzcGVlZCA9IFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVDsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtzZXJkZXYtJmd0O2RldjsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHg7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghY3R4KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7c2VyZGV2ID0gc2VyZGV2OwomIzQzOwljdHgtJmd0O3BzZS5kZXYgPSBkZXY7CiYjNDM7CWN0eC0mZ3Q7cHNlLnBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CiYjNDM7CWN0eC0mZ3Q7cHNlLnRyYW5zcG9ydCA9ICZhbXA7cnRwc2VfbWN1X3VhcnRfdHJhbnNwb3J0X29wczsKJiM0MzsJaW5pdF9jb21wbGV0aW9uKCZhbXA7Y3R4LSZndDtyeF9kb25lKTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtjdHgtJmd0O3J4X2xvY2spOwomIzQzOwomIzQzOwlzZXJkZXZfZGV2aWNlX3NldF9kcnZkYXRhKHNlcmRldiwgY3R4KTsKJiM0MzsJc2VyZGV2X2RldmljZV9zZXRfY2xpZW50X29wcyhzZXJkZXYsICZhbXA7cnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyk7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fc2VyZGV2X2RldmljZV9vcGVuKGRldiwgc2VyZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAmIzM0O2ZhaWxlZCB0byBvcGVuIHNlcmRldlxuJiMzNDspOwomIzQzOwomIzQzOwlmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZGV2X2Z3bm9kZShkZXYpLCAmIzM0O2N1cnJlbnQtc3BlZWQmIzM0OywgJmFtcDtzcGVlZCk7CiYjNDM7CXNlcmRldl9kZXZpY2Vfc2V0X2JhdWRyYXRlKHNlcmRldiwgc3BlZWQpOwomIzQzOwlzZXJkZXZfZGV2aWNlX3NldF9mbG93X2NvbnRyb2woc2VyZGV2LCBmYWxzZSk7CiYjNDM7CXNlcmRldl9kZXZpY2Vfc2V0X3Bhcml0eShzZXJkZXYsIFNFUkRFVl9QQVJJVFlfTk9ORSk7CiYjNDM7CiYjNDM7CXJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIoJmFtcDtjdHgtJmd0O3BzZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJ0cHNlX21jdV91YXJ0X29mX21hdGNoW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscHNlLW1jdS1ydGsmIzM0OywgLmRhdGEgPSAmYW1wO3J0cHNlX21jdV9ydGtfZGF0YSB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHBzZS1tY3UtYnJjbSYjMzQ7LCAuZGF0YSA9ICZhbXA7cnRwc2VfbWN1X2JyY21fZGF0YSB9LAomIzQzOwl7IC8qIHNlbnRpbmVsICovIH0KJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0cHNlX21jdV91YXJ0X29mX21hdGNoKTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHNlcmRldl9kZXZpY2VfZHJpdmVyIHJ0cHNlX21jdV91YXJ0X2RyaXZlciA9IHsKJiM0MzsJLmRyaXZlciA9IHsKJiM0MzsJCS5uYW1lID0gJiMzNDtyZWFsdGVrLXBzZS1tY3UtdWFydCYjMzQ7LAomIzQzOwkJLm9mX21hdGNoX3RhYmxlID0gcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2gsCiYjNDM7CX0sCiYjNDM7CS5wcm9iZSAgPSBydHBzZV9tY3VfdWFydF9wcm9iZSwKJiM0Mzt9OwomIzQzO21vZHVsZV9zZXJkZXZfZGV2aWNlX2RyaXZlcihydHBzZV9tY3VfdWFydF9kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKb25hcyBKZWxvbmVrICZsdDtqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7UmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iOWJmM2IyZGRlMDhiOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaApAQCAtMCwwICYjNDM7MSw4NyBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfUkVBTFRFS19QU0VfTUNVX0gKJiM0MzsjZGVmaW5lIF9SRUFMVEVLX1BTRV9NQ1VfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wc2UtcGQvcHNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaW1lIHRoZSBNQ1UgaXRzZWxmIG5lZWRzIGJldHdlZW4gYWNjZXB0aW5nIGEgcmVxdWVzdCBhbmQgaGF2aW5nIGEKJiM0MzsgKiByZXNwb25zZSByZWFkeS4gVGhlc2UgYXJlIHByb3BlcnRpZXMgb2YgdGhlIE1DVSBmaXJtd2FyZSwgbm90IG9mIHRoZQomIzQzOyAqIHVuZGVybHlpbmcgdHJhbnNwb3J0OiB0aGUgY29yZSBwYWNlcyB0cmFuc2FjdGlvbnMgYnkgUlRQU0VfTUNVX1JFU1BPTlNFX01TCiYjNDM7ICogYW5kIGJvdGggdHJhbnNwb3J0cyBzaXplIHRoZWlyIHBlci10cmFuc2FjdGlvbiByZWN2IGNlaWxpbmcgZnJvbQomIzQzOyAqIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMsIHNpbmNlIHNvbWUgY29tbWFuZHMgYXJlIGRvY3VtZW50ZWQgYXMKJiM0MzsgKiBuZWVkaW5nIHVwIHRvIH4xcyB0byBwcm9kdWNlIGEgcmVwbHkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVMJCQkyNQomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUwkJMTAwMAomIzQzOwomIzQzOy8qCiYjNDM7ICogVG90YWwgdGltZSB0byBrZWVwIHJldHJ5aW5nIHRoZSBmaXJzdCBNQ1UgcmVhZCBhdCBwcm9iZSwgYW5kIHRoZSBwYXVzZQomIzQzOyAqIGJldHdlZW4gYXR0ZW1wdHMuIFJpZ2h0IGFmdGVyIGVuYWJsZS1ncGlvcyBpcyBhc3NlcnRlZCB0aGUgTUNVIG1heSBub3QKJiM0MzsgKiBhbnN3ZXIgb24gdGhlIGJ1cyB5ZXQ7IGdpdmUgaXQgYSBib3VuZGVkIHdpbmRvdyB0byBjb21lIHVwIGJlZm9yZQomIzQzOyAqIGRlY2xhcmluZyB0aGUgcHJvYmUgZmFpbGVkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfVElNRU9VVF9NUwkJMzAwMAomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfUkVUUllfTVMJCQkxMDAKJiM0MzsKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9NU0dfU0laRQkJCTEyCiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9tc2cgewomIzQzOwl1OCBvcGNvZGU7CiYjNDM7CXU4IHNlcV9udW07CiYjNDM7CXU4IHBheWxvYWRbOV07CiYjNDM7CXU4IGNoZWNrc3VtOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBNQ1Ugc3RhdHVzIG9wY29kZXMgKHNlZW4gb24gdGhlIEJDTSBkaWFsZWN0OyBSVEwgbmV2ZXIgZW1pdHMgdGhlbSkuCiYjNDM7ICogSU5DT01QTEVURS9CQURfQ1NVTSBhcmUgdGVybWluYWw7IE5PVF9SRUFEWSBpcyB0cmFuc2llbnQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEUJCTB4ZmQJLyogLUVCQURFICAgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU0JCTB4ZmUJLyogLUVCQURNU0cgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZCQkweGZmCS8qIC1FQUdBSU4gICovCiYjNDM7CiYjNDM7LyogQSBwb2xsaW5nIHRyYW5zcG9ydCBjYW4gc3RvcCBoZXJlOiB0aGUgbWF0Y2hpbmcgcmVwbHksIG9yIGEgdGVybWluYWwgZXJyb3IuICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsCiYjNDM7CQkJCQkgICBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZXNwLSZndDtvcGNvZGUgPT0gcmVxLSZndDtvcGNvZGUgfHwKJiM0MzsJICAgICAgIHJlc3AtJmd0O29wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEUgfHwKJiM0MzsJICAgICAgIHJlc3AtJmd0O29wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNOwomIzQzO30KJiM0MzsKJiM0MzsvKiBPcGFxdWUgdG8gdHJhbnNwb3J0czsgZGVmaW5lZCBpbiByZWFsdGVrLXBzZS1jb3JlLmMuICovCiYjNDM7c3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0OwomIzQzO3N0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YTsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2N0cmw7CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHsKJiM0MzsJaW50ICgqc2VuZCkoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpOwomIzQzOwlpbnQgKCpyZWN2KShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSwKJiM0MzsJCSAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCk7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiYjNDM7CXN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgcGNkZXY7CiYjNDM7CXN0cnVjdCBtdXRleCBtdXRleDsgLyogc2VyaWFsaXplcyBNQ1UgcmVxdWVzdC9yZXNwb25zZSB0cmFuc2FjdGlvbnMgKi8KJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0ICpkaWFsZWN0OwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyAqY2hpcDsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzICp0cmFuc3BvcnQ7CiYjNDM7CiYjNDM7CXN0cnVjdCByZWd1bGF0b3IgKnBvZV9zdXBwbHk7CiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgcnRwc2VfbWN1X3JlZ2lzdGVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlKTsKJiM0MzsKJiM0MzsvKiBXaGV0aGVyIHRoZSBJMkMgdHJhbnNwb3J0IG11c3QgcmVhZCAmIzM0O3JlYWx0ZWssaTJjLXByb3RvY29sJiMzNDsgZnJvbSBEVC4gKi8KJiM0Mztib29sIHJ0cHNlX21jdV9uZWVkc19pMmNfcHJvdG8oY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaCk7CiYjNDM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfcnRrX2RhdGE7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfYnJjbV9kYXRhOwomIzQzOwomIzQzOyNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzUwMAoJCQkJCQkJb3V0cHV0OiAzNTIKCQkJCQkJCXRob3VnaHRzOiAxMjY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV3IFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBEcml2ZXIqKgoKT2theSwgc28gd2UgaGF2ZSBhIG5ldyBkcml2ZXIgZm9yIGEgUmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVLCBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC9wc2UtcGQvYC4gSXQgc3VwcG9ydHMgYm90aCBJMkMgYW5kIFVBUlQsIHdoaWNoIGlzIGdvb2QgYmVjYXVzZSBpdCBnaXZlcyB1cyBtdWx0aXBsZSBhdHRhY2sgc3VyZmFjZXMuICBJdCYjMzk7cyBhIG5ldyBkcml2ZXIsIHNvIGl0IGRlZmluaXRlbHkgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbC4gSW1tZWRpYXRlbHksIG15IG1pbmQgZ29lcyB0byBmdXp6aW5nLiBHaXZlbiB0aGUgaW50ZXJmYWNlcywgSTJDIGFuZCBVQVJUICh2aWEgc2VyZGV2KSwgaXQmIzM5O3MgcmVhZGlseSB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkyQyBzdHViLCBzZXJkZXYvdHR5IGVtdWxhdGlvbiwgb3IgZXZlbiBkaXJlY3QgZnV6emluZyBvZiB0aGUgaW50ZXJmYWNlcyBhcmUgYWxsIHZpYWJsZS4gRXhjZWxsZW50LCBiZWNhdXNlIHN5emthbGxlciAqYWxyZWFkeSogaGFzIHNvbWUgc3VwcG9ydCBmb3IgSTJDIGFuZCBUVFkvc2VyZGV2IQoKTGV0JiMzOTtzIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IHRoZSBjb3JyZWN0IEtjb25maWcgb3B0aW9ucyBzZXQuICBgQ09ORklHX1BTRV9DT05UUk9MTEVSYCwgYENPTkZJR19QU0VfUkVBTFRFS19NQ1VgLCBgQ09ORklHX1BTRV9SRUFMVEVLX01DVV9JMkNgLCBhbmQgYENPTkZJR19QU0VfUkVBTFRFS19NQ1VfVUFSVGAgYXJlIHRoZSBrZXlzLiAgSSYjMzk7bGwgdmVyaWZ5IHRoZXNlIGRlcGVuZGVuY2llcyBpbiB0aGUgYGRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIGBQU0VfUkVBTFRFS19NQ1VfSTJDYCBkZXBlbmRzIG9uIGBJMkNgLCBhbmQgYFBTRV9SRUFMVEVLX01DVV9VQVJUYCBkZXBlbmRzIG9uIGBTRVJJQUxfREVWX0JVU2AuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBTY2FubmluZyB0aGUgY29kZSwgaGVyZSYjMzk7cyB3aGF0IGp1bXBzIG91dCBhdCBtZToKCkZyb20gYHJlYWx0ZWstcHNlLW1jdS1jb3JlLmNgOgoqICAgYHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZWAsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc2AsIGBydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3YCwgYHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlYCwgYHJ0cHNlX21jdV9wb3J0X2VuYWJsZWAsIGBydHBzZV9tY3VfcG9ydF9kaXNhYmxlYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdGAsIGBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3Jhbmdlc2AsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHJpb2AsIGBydHBzZV9tY3VfcG9ydF9zZXRfcHJpb2AsIGBydHBzZV9tY3VfZGlzY292ZXJgLCBgcnRwc2VfbWN1X3JlZ2lzdGVyYAoKRnJvbSBgcmVhbHRlay1wc2UtbWN1LWkyYy5jYDoKKiAgIGBydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmRgLCBgcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2YCwgYHJ0cHNlX21jdV9pMmNfbmF0aXZlX3NlbmRgLCBgcnRwc2VfbWN1X2kyY19uYXRpdmVfcmVjdmAsIGBydHBzZV9tY3VfaTJjX3Byb2JlYAoKRnJvbSBgcmVhbHRlay1wc2UtbWN1LXVhcnQuY2A6CiogICBgcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZWAsIGBydHBzZV9tY3VfdWFydF9zZW5kYCwgYHJ0cHNlX21jdV91YXJ0X3JlY3ZgLCBgcnRwc2VfbWN1X3VhcnRfcHJvYmVgCgpJJiMzOTtsbCBsZWFuIGhlYXZpbHkgb24gYHNldC1yZXN1bHRzYCB0byBwcm9jZXNzIHRoaXMgaW5mb3JtYXRpb24uCgpSZWdhcmRpbmcgc3l6a2FsbGVyLCBjYW4gaXQgcmVhY2ggdGhpcyBkcml2ZXI/ICBEZWZpbml0ZWx5LiBXZSBjYW4gY3JlYXRlIEkyQyBkZXZpY2VzIHdpdGggYHN5el9pMmNfc2V0dXBgIG9yIHNpbWlsYXIuIEV2ZW4ganVzdCBsb2FkaW5nIHRoZSBtb2R1bGUgYW5kIHByb2JpbmcgaXQsIGlmIHdlIGZ1enogdGhlIGRldmljZSB0cmVlLCBvciBldmVuIGlmIGl0JiMzOTtzIGluc3RhbnRpYXRlZCB2aWEgc3lzZnMsIHdpbGwgZG8uICBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIEkyQyBkZXZpY2VzIGluc3RhbnRpYXRlZCB2aWEgYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0qL25ld19kZXZpY2VgLiBTZXJkZXYgZGV2aWNlcyBhcmUgYSBsaXR0bGUgaGFyZGVyIGR5bmFtaWNhbGx5IGZyb20gdXNlcnNwYWNlLCBidXQgdGhlIGNvcmUgbG9naWMgaXMgc3RpbGwgZnV6emFibGUgaWYgaW5zdGFudGlhdGVkLgoKSGVyZSYjMzk7cyB0aGUgbGlzdCBvZiBjb25maWdzLCBhZ2FpbjoKYFBTRV9DT05UUk9MTEVSYApgUFNFX1JFQUxURUtfTUNVX0kyQ2AKYFBTRV9SRUFMVEVLX01DVV9VQVJUYAoKQW5kIHRoZSBmdW5jdGlvbiBjYWxsIHRhcmdldHMgSSBuZWVkIHRvIGZlZWQgdG8gc2V0LXJlc3VsdHM6CmBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1c2AsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3NgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd2AsIGBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZWAsIGBydHBzZV9tY3VfcG9ydF9lbmFibGVgLCBgcnRwc2VfbWN1X3BvcnRfZGlzYWJsZWAsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRgLCBgcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0YCwgYHJ0Cgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFNFX0NPTlRST0xMRVImIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX0kyQyYjMzQ7LAogICAgJiMzNDtQU0VfUkVBTFRFS19NQ1VfVUFSVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzcyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2VuYWJsZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9kaXNhYmxlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXQmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHJpbyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9zZXRfcHJpbyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfaTJjX3Byb2JlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3JlY2VpdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciBSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1VzLCB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdmlhIEkyQyBvciBVQVJULiBUaGUgZHJpdmVyIGltcGxlbWVudHMgdGhlIFBTRSBjb250cm9sbGVyIEFQSSBhbmQgcGFyc2VzIHJlc3BvbnNlcyBmcm9tIHRoZSBNQ1UuIEZ1enppbmcgdGhlIEkyQy9VQVJUIGludGVyZmFjZXMgYW5kIHRoZSBQU0UgY29udHJvbGxlciBvcHMgaXMgdmFsdWFibGUgZm9yIGZpbmRpbmcgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlIHByb3RvY29sIHBhcnNpbmcgYW5kIHN0YXRlIG1hbmFnZW1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9DT05UUk9MTEVSJiMzNDssCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9JMkMmIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX1VBUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9lbmFibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2kyY19wcm9iZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfdWFydF9wcm9iZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfdWFydF9yZWNlaXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciBmb3IgUmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVcywgd2hpY2ggY2FuIGJlIGF0dGFjaGVkIHZpYSBJMkMgb3IgVUFSVC4gVGhlIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBQU0UgY29udHJvbGxlciBBUEkgYW5kIHBhcnNlcyByZXNwb25zZXMgZnJvbSB0aGUgTUNVLiBGdXp6aW5nIHRoZSBJMkMvVUFSVCBpbnRlcmZhY2VzIGFuZCB0aGUgUFNFIGNvbnRyb2xsZXIgb3BzIGlzIHZhbHVhYmxlIGZvciBmaW5kaW5nIHBvdGVudGlhbCBidWdzIGluIHRoZSBwcm90b2NvbCBwYXJzaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDZUMTU6MzM6NDMuMjQ4MDg2NTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA2Mjg0ODM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX0kyQ1wiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX1VBUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2VuYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZGlzYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wcmlvXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X2kyY19wcm9iZVwiLFxuICAgIFwicnRwc2VfbWN1X3VhcnRfcHJvYmVcIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3JlY2VpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVXMsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIFRoZSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgUFNFIGNvbnRyb2xsZXIgQVBJIGFuZCBwYXJzZXMgcmVzcG9uc2VzIGZyb20gdGhlIE1DVS4gRnV6emluZyB0aGUgSTJDL1VBUlQgaW50ZXJmYWNlcyBhbmQgdGhlIFBTRSBjb250cm9sbGVyIG9wcyBpcyB2YWx1YWJsZSBmb3IgZmluZGluZyBwb3RlbnRpYWwgYnVncyBpbiB0aGUgcHJvdG9jb2wgcGFyc2luZyBhbmQgc3RhdGUgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTU6MzM6NDMuMjQ4MDkyMThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NzA1NDIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVjZjZiY2VmMTUwOWNiM2ExYTYwYzZkYTQxZmIyNTQ3MDM5NTUwY2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgNiAxNTozMzo0MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZDBkZmFlMjIwZGMxZTlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWxcXG5AQCAtMCwwICsxLDE1NCBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcXG4rJVlBTUwgMS4yXFxuKy0tLVxcbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVVxcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBKb25hcyBKZWxvbmVrIFxcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOiB8XFxuKyAgTWljcm9jb250cm9sbGVyIChNQ1UpIHRoYXQgZnJvbnRzIHRoZSBQU0UgaGFyZHdhcmUgb24gc3dpdGNoZXMgdXNpbmdcXG4rICBSZWFsdGVrIChSVEw4MjM4QiwgUlRMODIzOSwgUlRMODIzOUMpIG9yIEJyb2FkY29tIChCQ001OTExMSwgQkNNNTkxMjEpXFxuKyAgUFNFIGNoaXBzLiBUaGUgTUNVIGV4cG9zZXMgYSBzbWFsbCBtZXNzYWdlLWJhc2VkIHByb3RvY29sIG92ZXIgZWl0aGVyXFxuKyAgSTJDL1NNQnVzIG9yIFVBUlQ7IHRoZSBhY3R1YWwgUFNFIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUaGVcXG4rICBSZWFsdGVrIGFuZCBCcm9hZGNvbSB2YXJpYW50cyBzaGFyZSB0aGlzIGRldmljZSB0cmVlIGNvbnRyYWN0IGJ1dCB1c2VcXG4rICBkaWZmZXJlbnQgcHJvdG9jb2wgb3Bjb2Rlcywgc2VsZWN0ZWQgYnkgdGhlIGNvbXBhdGlibGUuXFxuK1xcbisgIFRoZSBjb21wYXRpYmxlIGlkZW50aWZpZXMgdGhlIFBTRS1NQ1UgcHJvdG9jb2wgZGlhbGVjdCwgbm90IGEgc3BlY2lmaWNcXG4rICBwYXJ0LiBUaGUgZGV2aWNlIGhlcmUgaXMgdGhlIE1DVTogaXQgcHJlc2VudHMgYSBzdGFibGUgbWVzc2FnZSBwcm90b2NvbFxcbisgIGRvY3VtZW50ZWQgYnkgUmVhbHRlaywgd2l0aCB0aGUgUFNFIHNpbGljb24gYmVoaW5kIGl0IC0gQnJvYWRjb20gb25cXG4rICBvbGRlciBib2FyZHMsIFJlYWx0ZWsgb24gbmV3ZXIgLSBkZXRlY3RlZCBhdCBydW50aW1lIGFuZCBub3QgZGVzY3JpYmVkXFxuKyAgaGVyZS4gVGhlIE1DVSdzIG93biBzaWxpY29uIGlzIGdlbmVyYWwtcHVycG9zZSBhbmQgdmFyaWVzIGFjcm9zc1xcbisgIGJvYXJkcywgc28gdGhlICdyZWFsdGVrJyB2ZW5kb3IgcHJlZml4IG5hbWVzIHRoZSBwcm90b2NvbCBmcm9udC1lbmRcXG4rICAoZm9sbG93aW5nIHRoZSBnb29nbGUsY3Jvcy1lYyBwYXR0ZXJuKTsgdGhlICctcnRrJy8nLWJyY20nIHN1ZmZpeFxcbisgIHNlbGVjdHMgdGhlIFJlYWx0ZWsgb3IgQnJvYWRjb20gZGlhbGVjdC5cXG4rXFxuKyAgQSBzaW5nbGUgY29tcGF0aWJsZSBwZXIgZGlhbGVjdCBjb3ZlcnMgYm90aCB0aGUgSTJDL1NNQnVzIGFuZCBVQVJUXFxuKyAgYXR0YWNobWVudHM6IHRoZSB3aXJlIHByb3RvY29sIGlzIGlkZW50aWNhbCBhY3Jvc3MgdGhlbSBhbmQgdGhlXFxuKyAgdHJhbnNwb3J0IGlzIGFscmVhZHkgZXhwcmVzc2VkIGJ5IHRoZSBub2RlJ3MgcGFyZW50IGJ1cywgc28gaXQgaXMgbm90XFxuKyAgZW5jb2RlZCBpbiB0aGUgY29tcGF0aWJsZS4gVHJhbnNwb3J0LXNwZWNpZmljIHByb3BlcnRpZXMgZGlmZmVyXFxuKyAgYWNjb3JkaW5nbHkgLSB0aGUgSTJDIGF0dGFjaG1lbnQgY2FycmllcyAncmVnJyAoYW5kLCBmb3IgUmVhbHRlayxcXG4rICAncmVhbHRlayxpMmMtcHJvdG9jb2wnKSwgd2hpbGUgdGhlIFVBUlQgYXR0YWNobWVudCBjYXJyaWVzIHRoZSBzZXJpYWxcXG4rICBwZXJpcGhlcmFsIHByb3BlcnRpZXMgc3VjaCBhcyAnY3VycmVudC1zcGVlZCcuXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBlbnVtOlxcbisgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1ydGtcXG4rICAgICAgLSByZWFsdGVrLHBzZS1tY3UtYnJjbVxcbitcXG4rICByZWc6XFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rICBwb3dlci1zdXBwbHk6XFxuKyAgICBkZXNjcmlwdGlvbjogUmVndWxhdG9yIHN1cHBseWluZyB0aGUgUG9FIHBvd2VyIHJhaWwuXFxuK1xcbisgIGVuYWJsZS1ncGlvczpcXG4rICAgIG1heEl0ZW1zOiAxXFxuK1xcbisgIHJlYWx0ZWssaTJjLXByb3RvY29sOlxcbisgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvc3RyaW5nXFxuKyAgICBlbnVtOiBbIGkyYywgc21idXMgXVxcbisgICAgZGVzY3JpcHRpb246IHxcXG4rICAgICAgV2lyZSBmcmFtaW5nIHRoZSBNQ1UgZmlybXdhcmUgZXhwZWN0cyBvbiB0aGUgSTJDIGJ1cy4gXFxcInNtYnVzXFxcIiBtZWFuc1xcbisgICAgICByZWFkcyBjYXJyeSBhIGxlYWRpbmcgY29tbWFuZCBieXRlICgweDAwKSBhbmQgYSByZXBlYXRlZCBzdGFydDsgXFxcImkyY1xcXCJcXG4rICAgICAgbWVhbnMgYmFyZSAxMi1ieXRlIHdyaXRlcyBhbmQgcmVhZHMgd2l0aCBubyBjb21tYW5kIHByZWZpeC4gT25seVxcbisgICAgICBhcHBsaWVzIHRvIHRoZSBSZWFsdGVrIEkyQyBhdHRhY2htZW50LlxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IHBzZS1jb250cm9sbGVyLnlhbWwjXFxuKyAgLSAkcmVmOiAvc2NoZW1hcy9zZXJpYWwvc2VyaWFsLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcXG4rICAjIFRoZSBJMkMgYXR0YWNobWVudCAoaWRlbnRpZmllZCBieSAncmVnJykgY2Fubm90IGNhcnJ5IHNlcmlhbCBidXMgcHJvcHMuXFxuKyAgLSBpZjpcXG4rICAgICAgcmVxdWlyZWQ6IFtyZWddXFxuKyAgICB0aGVuOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGN1cnJlbnQtc3BlZWQ6IGZhbHNlXFxuKyAgICAgICAgbWF4LXNwZWVkOiBmYWxzZVxcbisgICMgJ3JlYWx0ZWssaTJjLXByb3RvY29sJyBpcyBtZWFuaW5nZnVsIG9ubHkgZm9yIHRoZSBSZWFsdGVrIEkyQyBhdHRhY2htZW50O1xcbisgICMgdGhlIEJyb2FkY29tIHZhcmlhbnQgYW5kIGFueSBVQVJUIGF0dGFjaG1lbnQgbXVzdCBub3QgY2FycnkgaXQuXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29udGFpbnM6XFxuKyAgICAgICAgICAgIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtcnRrXFxuKyAgICAgIHJlcXVpcmVkOiBbcmVnXVxcbisgICAgdGhlbjpcXG4rICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgLSByZWFsdGVrLGkyYy1wcm90b2NvbFxcbisgICAgZWxzZTpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBcXFwicmVhbHRlayxpMmMtcHJvdG9jb2xcXFwiOiBmYWxzZVxcbitcXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rZXhhbXBsZXM6XFxuKyAgIyBSZWFsdGVrIFBTRSBjaGlwLCBJMkMgYXR0YWNobWVudCAoU01CdXMgZnJhbWluZykuXFxuKyAgLSB8XFxuKyAgICBpMmMge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1wc2VAMjAge1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscHNlLW1jdS1ydGtcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHgyMFxcdTAwM2U7XFxuKyAgICAgICAgICAgIHJlYWx0ZWssaTJjLXByb3RvY29sID0gXFxcInNtYnVzXFxcIjtcXG4rXFxuKyAgICAgICAgICAgIHBzZS1waXMge1xcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7XFxuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbitcXG4rICAjIEJyb2FkY29tIFBTRSBjaGlwLCBJMkMgYXR0YWNobWVudC5cXG4rICAtIHxcXG4rICAgIGkyYyB7XFxuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgIGV0aGVybmV0LXBzZUAyMCB7XFxuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxwc2UtbWN1LWJyY21cXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHgyMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICBwc2UtcGlzIHtcXG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICAgICAgcHNlLXBpQDAge1xcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgfTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rXFxuKyAgIyBSZWFsdGVrIFBTRSBjaGlwLCBVQVJUIGF0dGFjaG1lbnQuXFxuKyAgLSB8XFxuKyAgICBzZXJpYWwge1xcbisgICAgICAgIGV0aGVybmV0LXBzZSB7XFxuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxwc2UtbWN1LXJ0a1xcXCI7XFxuKyAgICAgICAgICAgIGN1cnJlbnQtc3BlZWQgPSBcXHUwMDNjMTE1MjAwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgIHBzZS1waXMge1xcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7XFxuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggNTJmMWE1NWVjYTk5YmYuLmUzZjQyNmEzYjIwMWZiIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMjI3MTYsNiArMjI3MTYsMTMgQEAgUzpcXHRNYWludGFpbmVkXFxuIEY6XFx0aW5jbHVkZS9zb3VuZC9ydCouaFxcbiBGOlxcdHNvdW5kL3NvYy9jb2RlY3MvcnQqXFxuIFxcbitSRUFMVEVLL0JST0FEQ09NIFBTRSBNQ1UgRFJJVkVSXFxuK006XFx0Sm9uYXMgSmVsb25layBcXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cXHUwMDNlXFxuK0w6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbitTOlxcdE1haW50YWluZWRcXG4rRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxcbitGOlxcdGRyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UqXFxuK1xcbiBSRUFMVEVLIE9UVE8gV0FUQ0hET0dcXG4gTTpcXHRTYW5kZXIgVmFuaGV1bGUgXFx1MDAzY3NhbmRlckBzdmFuaGV1bGUubmV0XFx1MDAzZVxcbiBMOlxcdGxpbnV4LXdhdGNoZG9nQHZnZXIua2VybmVsLm9yZ1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXFxuaW5kZXggN2VmMjk2NTdlZTVkZDEuLjIzZTQ0ZGRlM2RiZmUwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcXG5AQCAtMTMsNiArMTMsMzQgQEAgbWVudWNvbmZpZyBQU0VfQ09OVFJPTExFUlxcbiBcXG4gaWYgUFNFX0NPTlRST0xMRVJcXG4gXFxuK2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VcXG4rXFx0dHJpc3RhdGVcXG4rXFx0aGVscFxcbitcXHQgIFNoYXJlZCBjb3JlIGZvciB0aGUgUmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlci4gVGhpcyBpc1xcbitcXHQgIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHRyYW5zcG9ydCBvcHRpb25zIGJlbG93LlxcbitcXG4rY29uZmlnIFBTRV9SRUFMVEVLX01DVV9JMkNcXG4rXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXFxcIlxcbitcXHRkZXBlbmRzIG9uIEkyQ1xcbitcXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXFxuK1xcdGhlbHBcXG4rXFx0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxcbitcXHQgIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHdpdGggUmVhbHRlayBvciBCcm9hZGNvbSBQU0UgY2hpcHMsIGF0dGFjaGVkXFxuK1xcdCAgdmlhIEkyQy9TTUJ1cy4gVGhlIE1DVSBleHBvc2VzIGEgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDsgdGhlIGFjdHVhbFxcbitcXHQgIFBTRSBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhXFxuK1xcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS1pMmMuXFxuK1xcbitjb25maWcgUFNFX1JFQUxURUtfTUNVX1VBUlRcXG4rXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KVxcXCJcXG4rXFx0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVU1xcbitcXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXFxuK1xcdGhlbHBcXG4rXFx0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxcbitcXHQgIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHdpdGggUmVhbHRlayBvciBCcm9hZGNvbSBQU0UgY2hpcHMsIGF0dGFjaGVkXFxuK1xcdCAgdmlhIFVBUlQuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWwgUFNFXFxuK1xcdCAgc2lsaWNvbiBpcyBub3QgYWNjZXNzZWQgZGlyZWN0bHkuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYVxcbitcXHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtdWFydC5cXG4rXFxuIGNvbmZpZyBQU0VfUkVHVUxBVE9SXFxuIFxcdHRyaXN0YXRlIFxcXCJSZWd1bGF0b3IgYmFzZWQgUFNFIGNvbnRyb2xsZXJcXFwiXFxuIFxcdGhlbHBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXFxuaW5kZXggY2M3OGY3ZWE3ZjVmNzEuLjljY2E1OTAwZmUzNDIxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxcbkBAIC0zLDYgKzMsOSBAQFxcbiBcXG4gb2JqLSQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSArPSBwc2VfY29yZS5vXFxuIFxcbitvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVKSArPSByZWFsdGVrLXBzZS1tY3UtY29yZS5vXFxuK29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfSTJDKSArPSByZWFsdGVrLXBzZS1tY3UtaTJjLm9cXG4rb2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9VQVJUKSArPSByZWFsdGVrLXBzZS1tY3UtdWFydC5vXFxuIG9iai0kKENPTkZJR19QU0VfUkVHVUxBVE9SKSArPSBwc2VfcmVndWxhdG9yLm9cXG4gb2JqLSQoQ09ORklHX1BTRV9QRDY5MlgwKSArPSBwZDY5MngwLm9cXG4gb2JqLSQoQ09ORklHX1BTRV9TSTM0NzQpICs9IHNpMzQ3NC5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1jb3JlLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45NjFhYzllOWVlOWM3Y1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuY1xcbkBAIC0wLDAgKzEsMTAwNiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgZnJvbnRpbmcgUmVhbHRlayBvciBCcm9hZGNvbSBQU0VcXG4rICogY2hpcHMuIEJvdGggdmVuZG9ycycgTUNVcyBzcGVhayBhIGNsb3NlbHkgcmVsYXRlZCAxMi1ieXRlIGZpeGVkLWZyYW1lXFxuKyAqIG1hbmFnZW1lbnQgcHJvdG9jb2w7IHRoaXMgZHJpdmVyIGNvdmVycyBib3RoIHZpYSBhIHBlci1kaWFsZWN0IG9wY29kZVxcbisgKiB0YWJsZSBhbmQgcmVzcG9uc2UgcGFyc2Vycy5cXG4rICpcXG4rICogTWFueSBQb0Ugc3dpdGNoIGRlc2lnbnMgcHV0IGEgZGVkaWNhdGVkIG1pY3JvY29udHJvbGxlciBpbiBmcm9udCBvZiB0aGVcXG4rICogYWN0dWFsIFBTRSBzaWxpY29uOiB0aGUgaG9zdCBDUFUgdGFsa3MgdG8gdGhlIE1DVSBvdmVyIEkyQy9TTUJ1cyBvclxcbisgKiBVQVJULCBhbmQgdGhlIE1DVSBpbiB0dXJuIG1hbmFnZXMgdGhlIFBTRSBjaGlwcyBvbiB0aGUgYm9hcmQuIFRoZSBNQ1VcXG4rICogc3BlYWtzIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbCAoMTItYnl0ZSBmaXhlZC1zaXplIGZyYW1lczsgb3Bjb2RlXFxuKyAqICsgYXJnICsgOSBwYXlsb2FkIGJ5dGVzICsgY2hlY2tzdW0pLiBUaGUgUFNFIGNoaXBzIHRoZW1zZWx2ZXMgYXJlIG5vdFxcbisgKiBhY2Nlc3NlZCBkaXJlY3RseTsgZXZlcnl0aGluZyBnb2VzIHRocm91Z2ggTUNVIGNvbW1hbmRzLlxcbisgKlxcbisgKiBUaGlzIGRyaXZlciB0YXJnZXRzIHRoYXQgYXJjaGl0ZWN0dXJlIGZvciB0aGUgUmVhbHRlay1mYW1pbHkgcHJvdG9jb2wuXFxuKyAqIFR3byBkaWFsZWN0cyBhcmUgc3VwcG9ydGVkOiBSZWFsdGVrIE1DVXMgbWFuYWdpbmcgUlRMODIzeC9SVEw4MjM5KiBQU0VcXG4rICogY2hpcHMsIGFuZCBCcm9hZGNvbSBNQ1VzIG1hbmFnaW5nIEJDTTU5MHh4IFBTRSBjaGlwcy4gVGhlIHR3byBzaGFyZVxcbisgKiBmcmFtZSBmb3JtYXQgYW5kIGEgc3VtLW1vZC0yNTYgY2hlY2tzdW0gYnV0IGRpdmVyZ2Ugb24gb3Bjb2RlIG51bWJlcnNcXG4rICogYW5kIG9uIGEgZmV3IHJlc3BvbnNlIGxheW91dHM7IHRoaXMgaXMgaGFuZGxlZCBieSB0aGUgcGVyLWRpYWxlY3RcXG4rICogb3Bjb2RlIHRhYmxlIGFuZCBwYXJzZXIgaG9va3MuXFxuKyAqXFxuKyAqIE91dCBvZiBzY29wZTogUFNFIGNoaXBzIHRoYXQgYXJlIGludGVyZmFjZWQgZGlyZWN0bHkgZnJvbSB0aGUgaG9zdFxcbisgKiB3aXRob3V0IGEgbWFuYWdlbWVudCBNQ1UsIE1DVSBkZXNpZ25zIHRoYXQgc3BlYWsgYW4gdW5yZWxhdGVkIHByb3RvY29sXFxuKyAqIGZhbWlseSwgYW5kIFxcXCJkdW1iIFBTRVxcXCIgbW9kZXMgd2hlcmUgbm8gaG9zdCBjb250cm9sIGlzIHdpcmVkIHVwIGF0IGFsbC5cXG4rICogVGhvc2UsIGlmIGFuZCB3aGVuIHRoZXkgc2hvdyB1cCBpbiB0aGUga2VybmVsLCBiZWxvbmcgaW4gc2VwYXJhdGVcXG4rICogZHJpdmVycyB1bmRlciBkcml2ZXJzL25ldC9wc2UtcGQvLlxcbisgKlxcbisgKiBUaGlzIGNvcmUgbW9kdWxlIGltcGxlbWVudHMgdGhlIHByb3RvY29sLCBkZWNvZGluZy9lbmNvZGluZyBvZiBNQ1VcXG4rICogcmVzcG9uc2VzLCBhbmQgdGhlIHBzZV9jb250cm9sbGVyX29wcyBpbnRlZ3JhdGlvbi4gVHJhbnNwb3J0IG1vZHVsZXNcXG4rICogKHJlYWx0ZWstcHNlLWkyYywgcmVhbHRlay1wc2UtdWFydCkgcHJvdmlkZSB0aGUgc2VuZC9yZWN2IGNhbGxiYWNrcy5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ppZmZpZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pbm1heC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kX2RldmljZXRhYmxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJyZWFsdGVrLXBzZS1tY3UuaFxcXCJcXG4rXFxuKyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QlxcdFxcdDB4MDEzOFxcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOVxcdFxcdDB4MDAzOVxcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUNcXHRcXHQweDAxMzlcXG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExXFx0XFx0MHhlMTExXFxuKyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTEyMVxcdFxcdDB4ZTEyMVxcbitcXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRURcXHRcXHQweDAwXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElOR1xcdFxcdDB4MDFcXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklOR1xcdFxcdDB4MDJcXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfVEVTVFxcdFxcdFxcdDB4MDNcXHQvKiBCcm9hZGNvbTsgcmVzZXJ2ZWQgb24gUmVhbHRlayAqL1xcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19GQVVMVFxcdFxcdDB4MDRcXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfT1RIRVJfRkFVTFRcXHRcXHQweDA1XFx0LyogQnJvYWRjb207IHJlc2VydmVkIG9uIFJlYWx0ZWsgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElOR1xcdFxcdDB4MDZcXG4rXFxuKy8qIFJUUFNFX01DVV9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFIHZhbHVlcyAqL1xcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUlxcdDB4MDJcXG4rXFxuKyNkZWZpbmUgUlRQU0VfTUNVX01BWF9QT1JUU1xcdFxcdFxcdDQ4XFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZXFx0XFx0M1xcbitcXG4rZW51bSBydHBzZV9tY3VfY21kIHtcXG4rXFx0UlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFLFxcbitcXHRSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GTyxcXG4rXFx0UlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJRyxcXG4rXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9FTkFCTEUsXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFksXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTLFxcbitcXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTLFxcbitcXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJRyxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHLFxcbitcXG4rXFx0UlRQU0VfTUNVX05VTV9DTURTLFxcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUge1xcbitcXHR1OCBvcDtcXG4rXFx0Ym9vbCB2YWxpZDtcXG4rfTtcXG4rXFxuKy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX09QKG9wYylcXHR7IC5vcCA9IChvcGMpLCAudmFsaWQgPSB0cnVlIH1cXG4rXFxuKy8qIFBhcnNlZCBNQ1UgcmVzcG9uc2Ugc3RydWN0dXJlcyAoZGVjb2RlZCBmcm9tIHJ0cHNlX21jdV9tc2cgcmVwbGllcykgKi9cXG4rXFxuK3N0cnVjdCBydHBzZV9tY3VfaW5mbyB7XFxuK1xcdHU4IG1heF9wb3J0cztcXG4rXFx0Ym9vbCBzeXN0ZW1fZW5hYmxlO1xcbitcXHR1MTYgZGV2aWNlX2lkO1xcbitcXHR1OCBzd192ZXI7XFxuK1xcdHU4IG1jdV90eXBlO1xcbitcXHR1OCBjb25maWdfc3RhdHVzO1xcbitcXHR1OCBleHRfdmVyO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnIHtcXG4rXFx0dTggdXZsbztcXG4rXFx0dTggb3ZsbztcXG4rXFx0Ym9vbCBwcmVhbGxvY19lbmFibGU7XFxuK1xcdHU4IG51bV9vZl9wc2VzO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyB7XFxuK1xcdHU4IHN0czE7XFxuK1xcdHU4IHN0czI7XFxuK1xcdHU4IHN0czM7XFxuK307XFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQge1xcbitcXHR1MTYgdm9sdGFnZV9yYXc7XFx0LyogNjQuNDVtVi9MU0IgKi9cXG4rXFx0dTE2IGN1cnJlbnRfcmF3O1xcdC8qIDFtQS9MU0IgKi9cXG4rXFx0dTE2IHRlbXBlcmF0dXJlX3JhdztcXHQvKiBUKG1DKSA9IDEyNTAgKiAoMjIwIC0gcmF3KSAqL1xcbitcXHR1MTYgcG93ZXJfcmF3O1xcdFxcdC8qIDEwMG1XL0xTQiAqL1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyB7XFxuK1xcdGJvb2wgZW5hYmxlO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcge1xcbitcXHR1OCBtYXhfcG93ZXI7XFxuK1xcdHU4IHByaW9yaXR5O1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgb3Bjb2RlW1JUUFNFX01DVV9OVU1fQ01EU107XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2hcXG4rXFx0ICogZGlhbGVjdCBzdXBwbGllcyBpdHMgb3duLiBPdGhlciByZXNwb25zZXMgc2hhcmUgb25lIGxheW91dCBhbmQgYXJlXFxuK1xcdCAqIGRlY29kZWQgZGlyZWN0bHkgLSBhIGRpYWxlY3QgdGhhdCBkaXZlcmdlcyB0aGVyZSBtdXN0IGFkZCBhIGhvb2ssXFxuK1xcdCAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS5cXG4rXFx0ICovXFxuK1xcdHZvaWQgKCpwYXJzZV9zeXN0ZW1faW5mbykoY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbyk7XFxuK1xcdGludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7XFxuK1xcdGNvbnN0IGNoYXIgKigqbWN1X3R5cGVfc3RyKSh1bnNpZ25lZCBpbnQgbWN1X3R5cGUpO1xcbit9O1xcbitcXG4rLypcXG4rICogUGVyLWNvbXBhdGlibGUgbWF0Y2ggZGF0YTogc2VsZWN0ZWQgYnkgdGhlIERUL0kyQyBjb21wYXRpYmxlLCBpdCBidW5kbGVzXFxuKyAqIHRoZSBwcm90b2NvbCBkaWFsZWN0IHdpdGggYXR0YWNobWVudCBxdWlya3MgdGhhdCB0aGUgZXhhY3QgTUNVIHNpbGljb25cXG4rICogZG9lcyBub3QgZGV0ZXJtaW5lIChvbmx5IGl0cyBmaXJtd2FyZSBwcm90b2NvbCBhbmQgdGhlIGhvc3QgYnVzIGRvKS5cXG4rICovXFxuK3N0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSB7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDtcXG4rXFx0LyogSTJDIGZyYW1pbmcgbXVzdCBjb21lIGZyb20gRFQgKHJlYWx0ZWssaTJjLXByb3RvY29sKTsgZWxzZSBTTUJ1cy4gKi9cXG4rXFx0Ym9vbCBpMmNfcHJvdG9fZHRfcmVxdWlyZWQ7XFxuK307XFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyB7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdHUxNiBkZXZpY2VfaWQ7XFxuK1xcdHUzMiBtYXhfbVdfcGVyX3BvcnQ7XFxuK1xcdGVudW0gcnRwc2VfbWN1X2NtZCBwd19zZXRfY21kO1xcdC8qIGNvbW1hbmQgdXNlZCBieSBzZXRfcHdfbGltaXQgKi9cXG4rXFx0dTMyIHB3X3NldF9sc2JfbVc7XFx0XFx0LyogTFNCIG9mIHB3X3NldF9jbWQgdmFsdWUsIGluIG1XICovXFxuK1xcdHUzMiBwd19yZWFkX2xzYl9tVztcXHRcXHQvKiBMU0Igb2YgZXh0X2NvbmZpZy5tYXhfcG93ZXIgcmVhZC1iYWNrLCBpbiBtVyAqL1xcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzhiX2luZm8gPSB7XFxuK1xcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCLFxcbitcXHQubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsXFxuK1xcdC5uYW1lID0gXFxcIlJUTDgyMzhCXFxcIixcXG4rXFx0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxcbitcXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXFxuK1xcdC5wd19zZXRfbHNiX21XID0gMjAwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzlfaW5mbyA9IHtcXG4rXFx0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOSxcXG4rXFx0Lm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLFxcbitcXHQubmFtZSA9IFxcXCJSVEw4MjM5XFxcIixcXG4rXFx0LnB3X3JlYWRfbHNiX21XID0gNDAwLFxcbitcXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxcbitcXHQucHdfc2V0X2xzYl9tVyA9IDQwMCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5Y19pbmZvID0ge1xcbitcXHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5QyxcXG4rXFx0Lm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLFxcbitcXHQubmFtZSA9IFxcXCJSVEw4MjM5Q1xcXCIsXFxuK1xcdC5wd19yZWFkX2xzYl9tVyA9IDQwMCxcXG4rXFx0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCxcXG4rXFx0LnB3X3NldF9sc2JfbVcgPSA0MDAsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gYmNtNTkxMTFfaW5mbyA9IHtcXG4rXFx0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTEsXFxuK1xcdC5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCxcXG4rXFx0Lm5hbWUgPSBcXFwiQkNNNTkxMTFcXFwiLFxcbitcXHQucHdfcmVhZF9sc2JfbVcgPSAyMDAsXFxuK1xcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcXG4rXFx0LnB3X3NldF9sc2JfbVcgPSAyMDAsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gYmNtNTkxMjFfaW5mbyA9IHtcXG4rXFx0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjEsXFxuK1xcdC8qXFxuK1xcdCAqIEJDTTU5MTIxIGlzIGEgNjBXIFR5cGUtMyBwYXJ0LCBidXQga25vd24gYm9hcmRzIHJ1biBpdCBhdCA4MDIuM2F0XFxuK1xcdCAqIGFuZCB0aGUgQkNNIGRpYWxlY3QgaGFzIG9ubHkgdGhlIDgtYml0LzAuMlcgc2V0IGNvbW1hbmQgKFxcdTAwM2M9NTFXKTtcXG4rXFx0ICogY2FwIGF0IHRoZSAzMFcgdGhlIGhhcmR3YXJlIGFjdHVhbGx5IG9mZmVycy5cXG4rXFx0ICovXFxuK1xcdC5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCxcXG4rXFx0Lm5hbWUgPSBcXFwiQkNNNTkxMjFcXFwiLFxcbitcXHQucHdfcmVhZF9sc2JfbVcgPSAyMDAsXFxuK1xcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcXG4rXFx0LnB3X3NldF9sc2JfbVcgPSAyMDAsXFxuK307XFxuK1xcbisvKiBIZWxwZXJzIGFuZCBiYXNpYyBmdW5jdGlvbnMgKi9cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnRvX3J0cHNlX21jdV9jdHJsKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbit7XFxuK1xcdHJldHVybiBjb250YWluZXJfb2YocGNkZXYsIHN0cnVjdCBydHBzZV9tY3VfY3RybCwgcGNkZXYpO1xcbit9XFxuK1xcbitib29sIHJ0cHNlX21jdV9uZWVkc19pMmNfcHJvdG8oY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaClcXG4re1xcbitcXHRyZXR1cm4gbWF0Y2gtXFx1MDAzZWkyY19wcm90b19kdF9yZXF1aXJlZDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfbmVlZHNfaTJjX3Byb3RvKTtcXG4rXFxuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9tc2dfaW5pdChzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqbXNnLCB1OCBvcGNvZGUpXFxuK3tcXG4rXFx0bWVtc2V0KG1zZywgMHhmZiwgc2l6ZW9mKCptc2cpKTtcXG4rXFx0bXNnLVxcdTAwM2VvcGNvZGUgPSBvcGNvZGU7XFxuK31cXG4rXFxuK3N0YXRpYyB1OCBydHBzZV9tY3VfY2hlY2tzdW0oY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHR1OCBzdW0gPSAwO1xcbitcXG4rXFx0d2hpbGUgKGxlbi0tKVxcbitcXHRcXHRzdW0gKz0gKmJ1ZisrO1xcbitcXHRyZXR1cm4gc3VtO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9kb194ZmVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXEtXFx1MDAzZWNoZWNrc3VtID0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlcSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSk7XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwc2UtXFx1MDAzZW11dGV4KSB7XFxuK1xcdFxcdHJldCA9IHBzZS1cXHUwMDNldHJhbnNwb3J0LVxcdTAwM2VzZW5kKHBzZSwgcmVxKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBNQ1UgbmVlZHMgYSBmaXhlZCBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHJlY2VpdmluZyBhIHJlcXVlc3RcXG4rXFx0XFx0ICogYW5kIGhhdmluZyB0aGUgcmVzcG9uc2UgcmVhZHksIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBieXRlcyBnZXQgdG9cXG4rXFx0XFx0ICogdXMuIFBhY2UgdGhlIHRyYW5zYWN0aW9uIGhlcmUgc28gZWFjaCB0cmFuc3BvcnQgY2FuIGtlZXAgaXRzIHJlY3ZcXG4rXFx0XFx0ICogcGF0aCBzaW1wbGU6IGEgc2luZ2xlIGJvdW5kZWQgd2FpdCByYXRoZXIgdGhhbiBhIGdlbmVyaWMgcmV0cnkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtc2xlZXAoUlRQU0VfTUNVX1JFU1BPTlNFX01TKTtcXG4rXFxuK1xcdFxcdG1lbXNldChyZXNwLCAwLCBzaXplb2YoKnJlc3ApKTtcXG4rXFx0XFx0cmV0ID0gcHNlLVxcdTAwM2V0cmFuc3BvcnQtXFx1MDAzZXJlY3YocHNlLCByZXEsIHJlc3ApO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFeHBsaWNpdCBNQ1UgZXJyb3Igb3Bjb2RlcyAob2JzZXJ2ZWQgb24gdGhlIEJDTSBkaWFsZWN0OyBoYXJtbGVzc1xcbitcXHQgKiB0byBjaGVjayBmb3IgUlRMIHRvbykuIENhdGNoIHRoZXNlIGJlZm9yZSB0aGUgZ2VuZXJpYyBvcGNvZGUvQ1JDXFxuK1xcdCAqIG1pc21hdGNoIHBhdGggc28gY2FsbGVycyBzZWUgYSBtZWFuaW5nZnVsIGVycm5vLlxcbitcXHQgKi9cXG4rXFx0c3dpdGNoIChyZXNwLVxcdTAwM2VvcGNvZGUpIHtcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEU6XFxuK1xcdFxcdHJldHVybiAtRUJBREU7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9CQURfQ1NVTTpcXG4rXFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbitcXHRjYXNlIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZOlxcbitcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJlc3AtXFx1MDAzZW9wY29kZSAhPSByZXEtXFx1MDAzZW9wY29kZSB8fFxcbitcXHQgICAgcmVzcC1cXHUwMDNlc2VxX251bSAhPSByZXEtXFx1MDAzZXNlcV9udW0gfHxcXG4rXFx0ICAgIHJlc3AtXFx1MDAzZWNoZWNrc3VtICE9IHJ0cHNlX21jdV9jaGVja3N1bSgodTggKilyZXNwLCBSVFBTRV9NQ1VfTVNHX1NJWkUgLSAxKSlcXG4rXFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfcXVlcnkoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCB1OCBvcGNvZGUsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJ0cHNlX21jdV9tc2dfaW5pdChcXHUwMDI2cmVxLCBvcGNvZGUpO1xcbitcXHRyZXEucGF5bG9hZFswXSA9IHBvcnQ7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFxcdTAwMjZyZXEsIHJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHJlc3AtXFx1MDAzZXBheWxvYWRbMF0gIT0gcG9ydClcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9jbWQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCB1OCBvcGNvZGUsIHU4IGFyZylcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRydHBzZV9tY3VfbXNnX2luaXQoXFx1MDAyNnJlcSwgb3Bjb2RlKTtcXG4rXFx0cmVxLnBheWxvYWRbMF0gPSBwb3J0O1xcbitcXHRyZXEucGF5bG9hZFsxXSA9IGFyZztcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXFx1MDAyNnJlcSwgXFx1MDAyNnJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHJlc3AucGF5bG9hZFswXSAhPSBwb3J0IHx8IHJlc3AucGF5bG9hZFsxXSAhPSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBHbG9iYWwgb3BlcmF0aW9ucyAqL1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfZ2V0X2luZm8oc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJ0cHNlX21jdV9tc2dfaW5pdChcXHUwMDI2cmVxLCBvcGMtXFx1MDAzZW9wKTtcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcXHUwMDI2cmVxLCBcXHUwMDI2cmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZXBhcnNlX3N5c3RlbV9pbmZvKHJlc3AucGF5bG9hZCwgaW5mbyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfZXh0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJ0cHNlX21jdV9tc2dfaW5pdChcXHUwMDI2cmVxLCBvcGMtXFx1MDAzZW9wKTtcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcXHUwMDI2cmVxLCBcXHUwMDI2cmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRjb25maWctXFx1MDAzZXV2bG8gPSByZXNwLnBheWxvYWRbMF07XFxuK1xcdGNvbmZpZy1cXHUwMDNlb3ZsbyA9IHJlc3AucGF5bG9hZFs1XTtcXG4rXFx0Y29uZmlnLVxcdTAwM2VwcmVhbGxvY19lbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDB4MSk7XFxuK1xcdGNvbmZpZy1cXHUwMDNlbnVtX29mX3BzZXMgPSByZXNwLnBheWxvYWRbNl07XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURV07XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cnRwc2VfbWN1X21zZ19pbml0KFxcdTAwMjZyZXEsIG9wYy1cXHUwMDNlb3ApO1xcbitcXHRyZXEucGF5bG9hZFswXSA9IGVuYWJsZSA/IDB4MSA6IDB4MDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXFx1MDAyNnJlcSwgXFx1MDAyNnJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIChyZXNwLnBheWxvYWRbMF0gPT0gMHgwKSA/IDAgOiAtRUlPO1xcbit9XFxuK1xcbisvKiBQb3J0IG9wZXJhdGlvbnMgKi9cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVxcdTAwM2VvcCwgXFx1MDAyNnJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0c3RhdHVzLVxcdTAwM2VzdHMxID0gcmVzcC5wYXlsb2FkWzFdO1xcbitcXHRzdGF0dXMtXFx1MDAzZXN0czIgPSByZXNwLnBheWxvYWRbMl07XFxuK1xcdHN0YXR1cy1cXHUwMDNlc3RzMyA9IHJlc3AucGF5bG9hZFszXTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50ICptZWFzdXJlbWVudClcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVxcdTAwM2VvcCwgXFx1MDAyNnJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0bWVhc3VyZW1lbnQtXFx1MDAzZXZvbHRhZ2VfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFxcdTAwMjZyZXNwLnBheWxvYWRbMV0pO1xcbitcXHRtZWFzdXJlbWVudC1cXHUwMDNlY3VycmVudF9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXFx1MDAyNnJlc3AucGF5bG9hZFszXSk7XFxuK1xcdG1lYXN1cmVtZW50LVxcdTAwM2V0ZW1wZXJhdHVyZV9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXFx1MDAyNnJlc3AucGF5bG9hZFs1XSk7XFxuK1xcdG1lYXN1cmVtZW50LVxcdTAwM2Vwb3dlcl9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXFx1MDAyNnJlc3AucGF5bG9hZFs3XSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR107XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXFx1MDAzZW9wLCBcXHUwMDI2cmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRjb25maWctXFx1MDAzZWVuYWJsZSA9IChyZXNwLnBheWxvYWRbMV0gPT0gMSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyAqY29uZmlnKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cXHUwMDNlb3AsIFxcdTAwMjZyZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGNvbmZpZy1cXHUwMDNlbWF4X3Bvd2VyID0gcmVzcC5wYXlsb2FkWzNdO1xcbitcXHRjb25maWctXFx1MDAzZXByaW9yaXR5ID0gcmVzcC5wYXlsb2FkWzRdO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgcG9ydCwgb3BjLVxcdTAwM2VvcCwgZW5hYmxlID8gMHgxIDogMHgwKTtcXG4rfVxcbitcXG4rLyogUFNFIGNvbnRyb2xsZXIgb3BzICovXFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBwc2VfYWRtaW5fc3RhdGUgKmFkbWluX3N0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfY29uZmlnIGNvbmZpZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcocHNlLCBpZCwgXFx1MDAyNmNvbmZpZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRhZG1pbl9zdGF0ZS1cXHUwMDNlYzMzX2FkbWluX3N0YXRlID0gY29uZmlnLmVuYWJsZSA/IEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEIDpcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9ESVNBQkxFRDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcHNlX3B3X3N0YXR1cyAqcHdfc3RhdHVzKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMocHNlLCBpZCwgXFx1MDAyNnN0YXR1cyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRzd2l0Y2ggKHN0YXR1cy5zdHMxKSB7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEOlxcbitcXHRcXHRwd19zdGF0dXMtXFx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfRElTQUJMRUQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkc6XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkc6XFxuK1xcdFxcdHB3X3N0YXR1cy1cXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19TRUFSQ0hJTkc7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOlxcbitcXHRcXHRwd19zdGF0dXMtXFx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfREVMSVZFUklORztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1RFU1Q6XFxuK1xcdFxcdHB3X3N0YXR1cy1cXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19URVNUO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRkFVTFQ6XFxuK1xcdFxcdHB3X3N0YXR1cy1cXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19GQVVMVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUOlxcbitcXHRcXHRwd19zdGF0dXMtXFx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfT1RIRVJGQVVMVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHB3X3N0YXR1cy1cXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19VTktOT1dOO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgc3RhdHVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhwc2UsIGlkLCBcXHUwMDI2c3RhdHVzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHN0czIgaG9sZHMgdGhlIGNsYXNzIG9ubHkgaW4gdGhlIG9wZXJhdGlvbmFsIHN0YXRlcyBiZWxvdy4gSW4gYVxcbitcXHQgKiBmYXVsdC90ZXN0IHN0YXRlIChvciBhIGNvZGUgcmVzZXJ2ZWQgb24gdGhlIGN1cnJlbnQgZGlhbGVjdCkgaXRcXG4rXFx0ICogZG9lcyBub3QsIHNvIHRoZXJlIGlzIG5vIGNsYXNzIHRvIHJlcG9ydCBhbmQgd2UgcmV0dXJuIDAuIFRoYXQgaXNcXG4rXFx0ICogaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIHJlYWwgY2xhc3MtMCBQRDsgdXNlcnNwYWNlIGRpc2FtYmlndWF0ZXNcXG4rXFx0ICogdmlhIHRoZSBwb3dlciBzdGF0dXMuXFxuK1xcdCAqL1xcbitcXHRzd2l0Y2ggKHN0YXR1cy5zdHMxKSB7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEOlxcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkc6XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkc6XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkc6XFxuK1xcdFxcdHJldHVybiBwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZXBhcnNlX3BvcnRfY2xhc3MoXFx1MDAyNnN0YXR1cyk7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQgbWVhc3VyZW1lbnQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgXFx1MDAyNm1lYXN1cmVtZW50KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIDEwMG1XIHBlciBMU0IgKi9cXG4rXFx0cmV0dXJuIG1lYXN1cmVtZW50LnBvd2VyX3JhdyAqIDEwMFU7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50O1xcbitcXHRpbnQgcmV0O1xcbitcXHR1MzIgdVY7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgXFx1MDAyNm1lYXN1cmVtZW50KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIDY0LjQ1bVYgcGVyIExTQiAqL1xcbitcXHR1ViA9IG1lYXN1cmVtZW50LnZvbHRhZ2VfcmF3ICogNjQ0NTBVO1xcbitcXHRyZXR1cm4gbWluX3QodTMyLCB1ViwgSU5UX01BWCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZW5hYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuK3tcXG4rXFx0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZSh0b19ydHBzZV9tY3VfY3RybChwY2RldiksIGlkLCB0cnVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9kaXNhYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuK3tcXG4rXFx0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZSh0b19ydHBzZV9tY3VfY3RybChwY2RldiksIGlkLCBmYWxzZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHBzZSwgaWQsIFxcdTAwMjZjb25maWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGNvbmZpZy5tYXhfcG93ZXIgKiBwc2UtXFx1MDAzZWNoaXAtXFx1MDAzZXB3X3JlYWRfbHNiX21XO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLCBpbnQgbWF4X21XKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICp0eXBlX29wYywgKnZhbF9vcGM7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyAqY2hpcCA9IHBzZS1cXHUwMDNlY2hpcDtcXG4rXFx0dTggcHJnX3ZhbDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChtYXhfbVcgXFx1MDAzYyAwIHx8IG1heF9tVyBcXHUwMDNlIGNoaXAtXFx1MDAzZW1heF9tV19wZXJfcG9ydClcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcbitcXHR0eXBlX29wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdO1xcbitcXHR2YWxfb3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW2NoaXAtXFx1MDAzZXB3X3NldF9jbWRdO1xcbitcXHQvKiBwd19zZXRfbHNiX21XIGlzIHRoZSBkaXZpc29yIGJlbG93OyByZWplY3QgYSBjaGlwIHRoYXQgbGFja3MgaXQuICovXFxuK1xcdGlmICghdHlwZV9vcGMtXFx1MDAzZXZhbGlkIHx8ICF2YWxfb3BjLVxcdTAwM2V2YWxpZCB8fCAhY2hpcC1cXHUwMDNlcHdfc2V0X2xzYl9tVylcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU3dpdGNoIHRoZSBwb3J0IHRvIHVzZXItZGVmaW5lZCBsaW1pdCBtb2RlIGZpcnN0LCB0aGVuIHByb2dyYW0gdGhlXFxuK1xcdCAqIGxpbWl0IHZhbHVlLiBJZiB0aGUgc2Vjb25kIGNtZCBmYWlscywgdGhlIHBvcnQgaXMgbGVmdCBpblxcbitcXHQgKiB1c2VyLWRlZmluZWQgbW9kZSBidXQgd2l0aCB0aGUgcHJldmlvdXMgbGltaXQgdmFsdWU7IHRoZSBuZXh0XFxuK1xcdCAqIHN1Y2Nlc3NmdWwgc2V0X3B3X2xpbWl0IGNhbGwgcmVjb3ZlcnMgaXQuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdHlwZV9vcGMtXFx1MDAzZW9wLCBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVIpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cHJnX3ZhbCA9IG1pbl90KHVuc2lnbmVkIGludCwgbWF4X21XIC8gY2hpcC1cXHUwMDNlcHdfc2V0X2xzYl9tVywgVThfTUFYKTtcXG4rXFxuK1xcdHJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdmFsX29wYy1cXHUwMDNlb3AsIHByZ192YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBzZV9wd19saW1pdF9yYW5nZXMgKm91dClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0c3RydWN0IGV0aHRvb2xfYzMzX3BzZV9wd19saW1pdF9yYW5nZSAqcmFuZ2U7XFxuK1xcbitcXHRyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSk7XFxuK1xcdGlmICghcmFuZ2UpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmFuZ2VbMF0ubWluID0gMDtcXG4rXFx0cmFuZ2VbMF0ubWF4ID0gcHNlLVxcdTAwM2VjaGlwLVxcdTAwM2VtYXhfbVdfcGVyX3BvcnQ7XFxuK1xcbitcXHRvdXQtXFx1MDAzZWMzM19wd19saW1pdF9yYW5nZXMgPSByYW5nZTtcXG4rXFx0cmV0dXJuIDE7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgY29uZmlnO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgXFx1MDAyNmNvbmZpZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gY29uZmlnLnByaW9yaXR5O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcmlvKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXG4rXFx0aWYgKHByaW8gXFx1MDAzZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFkpXFxuK1xcdFxcdHJldHVybiAtRVJBTkdFO1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgb3BjLVxcdTAwM2VvcCwgcHJpbyk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfb3BzIHJ0cHNlX21jdV9vcHMgPSB7XFxuK1xcdC5waV9nZXRfYWRtaW5fc3RhdGUgPSBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUsXFxuK1xcdC5waV9nZXRfcHdfc3RhdHVzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyxcXG4rXFx0LnBpX2dldF9wd19jbGFzcyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzcyxcXG4rXFx0LnBpX2dldF9hY3R1YWxfcHcgPSBydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3LFxcbitcXHQucGlfZW5hYmxlID0gcnRwc2VfbWN1X3BvcnRfZW5hYmxlLFxcbitcXHQucGlfZGlzYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUsXFxuK1xcdC5waV9nZXRfdm9sdGFnZSA9IHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlLFxcbitcXHQucGlfZ2V0X3B3X2xpbWl0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0LFxcbitcXHQucGlfc2V0X3B3X2xpbWl0ID0gcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0LFxcbitcXHQucGlfZ2V0X3B3X2xpbWl0X3JhbmdlcyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMsXFxuK1xcdC5waV9nZXRfcHJpbyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvLFxcbitcXHQucGlfc2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9zZXRfcHJpbyxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2Rpc2NvdmVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnIGV4dF9jb25maWc7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZGVhZGxpbmU7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBIGJvb3RpbmcgTUNVIG1heSBzdGF5IHNpbGVudCAoLUVUSU1FRE9VVCksIG5vdCBBQ0sgaXRzIGFkZHJlc3NcXG4rXFx0ICogKC1FTlhJTyAvIC1FUkVNT1RFSU8pLCByZXBvcnQgbm90LXJlYWR5ICgtRUFHQUlOKSwgb3IgZW1pdCBhXFxuK1xcdCAqIGNvcnJ1cHQvcGFydGlhbCBmcmFtZSAoLUVCQURNU0cgLyAtRUJBREUpLiBSZXRyeSB0aG9zZSB3aXRoaW4gYVxcbitcXHQgKiBib3VuZGVkIHdpbmRvdzsgb3RoZXIgZXJyb3JzIChlLmcuIC1FT1BOT1RTVVBQKSBhcmUgZmF0YWwgYW5kIGZhaWxcXG4rXFx0ICogaW1tZWRpYXRlbHkuXFxuK1xcdCAqL1xcbitcXHRkZWFkbGluZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVMpO1xcbitcXHRkbyB7XFxuK1xcdFxcdHJldCA9IHJ0cHNlX21jdV9nZXRfaW5mbyhwc2UsIGluZm8pO1xcbitcXHRcXHRpZiAocmV0ICE9IC1FVElNRURPVVQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FTlhJTyBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVSRU1PVEVJTyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcmV0ICE9IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQkFETVNHIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUJBREUpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRtc2xlZXAoUlRQU0VfTUNVX0JPT1RfUkVUUllfTVMpO1xcbitcXHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXFx1MDAzZWRldiwgcmV0LCBcXFwiZmFpbGVkIHRvIHJlYWQgTUNVIGluZm9cXFxcblxcXCIpO1xcbitcXG4rXFx0c3dpdGNoIChpbmZvLVxcdTAwM2VkZXZpY2VfaWQpIHtcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCOlxcbitcXHRcXHRwc2UtXFx1MDAzZWNoaXAgPSBcXHUwMDI2cnRsODIzOGJfaW5mbztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5OlxcbitcXHRcXHRwc2UtXFx1MDAzZWNoaXAgPSBcXHUwMDI2cnRsODIzOV9pbmZvO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDOlxcbitcXHRcXHRwc2UtXFx1MDAzZWNoaXAgPSBcXHUwMDI2cnRsODIzOWNfaW5mbztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMTpcXG4rXFx0XFx0cHNlLVxcdTAwM2VjaGlwID0gXFx1MDAyNmJjbTU5MTExX2luZm87XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjE6XFxuK1xcdFxcdHBzZS1cXHUwMDNlY2hpcCA9IFxcdTAwMjZiY201OTEyMV9pbmZvO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIC1FSU5WQUwsIFxcXCJ1bmtub3duIFBTRSBpZCAweCV4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIGluZm8tXFx1MDAzZWRldmljZV9pZCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghaW5mby1cXHUwMDNlbWF4X3BvcnRzIHx8IGluZm8tXFx1MDAzZW1heF9wb3J0cyBcXHUwMDNlIFJUUFNFX01DVV9NQVhfUE9SVFMpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJNQ1UgcmVwb3J0cyBpbnZhbGlkIHBvcnQgY291bnQgJXVcXFxcblxcXCIsIGluZm8tXFx1MDAzZW1heF9wb3J0cyk7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfZ2V0X2V4dF9jb25maWcocHNlLCBcXHUwMDI2ZXh0X2NvbmZpZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gcmVhZCBNQ1UgZXh0IGNvbmZpZ1xcXFxuXFxcIik7XFxuK1xcbitcXHRkZXZfaW5mbyhwc2UtXFx1MDAzZWRldiwgXFxcIiVzIE1DVSwgJXMgKGlkIDB4JTA0eCksICV1IHBvcnRzIGFjcm9zcyAldSBQU0UgY2hpcChzKVxcXFxuXFxcIixcXG4rXFx0XFx0IHBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlbWN1X3R5cGVfc3RyKGluZm8tXFx1MDAzZW1jdV90eXBlKSwgcHNlLVxcdTAwM2VjaGlwLVxcdTAwM2VuYW1lLFxcbitcXHRcXHQgaW5mby1cXHUwMDNlZGV2aWNlX2lkLCBpbmZvLVxcdTAwM2VtYXhfcG9ydHMsIGV4dF9jb25maWcubnVtX29mX3BzZXMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X3JlZ3VsYXRvcl9kaXNhYmxlKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0cmVndWxhdG9yX2Rpc2FibGUoZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nbG9iYWxfZGlzYWJsZSh2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gZGF0YTtcXG4rXFxuK1xcdHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHBzZSwgZmFsc2UpO1xcbit9XFxuK1xcbitpbnQgcnRwc2VfbWN1X3JlZ2lzdGVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2g7XFxuK1xcdHN0cnVjdCBncGlvX2Rlc2MgKmVuYWJsZV9ncGlvO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gaW5mbztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHJ0cHNlX21jdV9tc2cpICE9IFJUUFNFX01DVV9NU0dfU0laRSk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX211dGV4X2luaXQocHNlLVxcdTAwM2VkZXYsIFxcdTAwMjZwc2UtXFx1MDAzZW11dGV4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHBzZS1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKCFtYXRjaClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIC1FTk9ERVYsIFxcXCJtaXNzaW5nIG1hdGNoIGRhdGFcXFxcblxcXCIpO1xcbitcXHRwc2UtXFx1MDAzZWRpYWxlY3QgPSBtYXRjaC1cXHUwMDNlZGlhbGVjdDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENhdGNoIGEgZGlhbGVjdCB0aGF0IGZvcmdvdCB0byBzZXQgb25lIG9mIHRoZSByZXF1aXJlZCBob29rcyBhdFxcbitcXHQgKiBwcm9iZSB0aW1lLCByYXRoZXIgdGhhbiBOVUxMLWRlcmVmJ2luZyBsYXRlciBmcm9tIGEgZmFzdCBwYXRoLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFwc2UtXFx1MDAzZWRpYWxlY3QgfHxcXG4rXFx0ICAgICFwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZXBhcnNlX3N5c3RlbV9pbmZvIHx8XFxuK1xcdCAgICAhcHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VwYXJzZV9wb3J0X2NsYXNzIHx8XFxuK1xcdCAgICAhcHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VtY3VfdHlwZV9zdHIpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJkaWFsZWN0IGZvciBjaGlwIGlzIGluY29tcGxldGVcXFxcblxcXCIpO1xcbitcXG4rXFx0cHNlLVxcdTAwM2Vwb2Vfc3VwcGx5ID0gZGV2bV9yZWd1bGF0b3JfZ2V0KHBzZS1cXHUwMDNlZGV2LCBcXFwicG93ZXJcXFwiKTtcXG4rXFx0aWYgKElTX0VSUihwc2UtXFx1MDAzZXBvZV9zdXBwbHkpKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXFx1MDAzZWRldiwgUFRSX0VSUihwc2UtXFx1MDAzZXBvZV9zdXBwbHkpLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IFBvRSBzdXBwbHlcXFxcblxcXCIpO1xcbitcXG4rXFx0ZW5hYmxlX2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwc2UtXFx1MDAzZWRldiwgXFxcImVuYWJsZVxcXCIsIEdQSU9EX09VVF9ISUdIKTtcXG4rXFx0aWYgKElTX0VSUihlbmFibGVfZ3BpbykpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCBQVFJfRVJSKGVuYWJsZV9ncGlvKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGdldCBlbmFibGUgZ3Bpb1xcXFxuXFxcIik7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfZGlzY292ZXIocHNlLCBcXHUwMDI2aW5mbyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHBzZS1cXHUwMDNlcG9lX3N1cHBseSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gZW5hYmxlIFBvRSBzdXBwbHlcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHBzZS1cXHUwMDNlZGV2LCBydHBzZV9tY3VfcmVndWxhdG9yX2Rpc2FibGUsIHBzZS1cXHUwMDNlcG9lX3N1cHBseSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoIWluZm8uc3lzdGVtX2VuYWJsZSkge1xcbitcXHRcXHRyZXQgPSBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShwc2UsIHRydWUpO1xcbitcXHRcXHQvKiBEaWFsZWN0cyB3aXRob3V0IGEgZ2xvYmFsLXN0YXRlIGNvbmNlcHQgKGUuZy4gQkNNKSByZXR1cm5cXG4rXFx0XFx0ICogLUVPUE5PVFNVUFA7IHRyZWF0IHRoYXQgYXMgXFxcIm5vIHNlcGFyYXRlIGVuYWJsZSByZXF1aXJlZFxcXCIuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUClcXG4rXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGVuYWJsZSBQU0Ugc3lzdGVtXFxcXG5cXFwiKTtcXG4rXFx0XFx0aWYgKCFyZXQpIHtcXG4rXFx0XFx0XFx0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHBzZS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcnRwc2VfbWN1X2dsb2JhbF9kaXNhYmxlLCBwc2UpO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIERlcGVuZGluZyBvbiB0aGUgTUNVIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gKHdoaWNoIG1pZ2h0IGJlIGRpZmZlcmVudFxcbitcXHQgKiBmb3IgZXZlcnkgYm9hcmQpLCBpdCBpc24ndCBrbm93biB3aGV0aGVyIHRoZSBQb0Ugc3Vic3lzdGVtIGlzIGFjdGl2ZSBvclxcbitcXHQgKiBpbmFjdGl2ZSBieSBkZWZhdWx0LiBBdCB0aGlzIHN0YWdlLCB0aGUgUFNFIGNoaXBzIG1pZ2h0IGFscmVhZHkgZGVsaXZlclxcbitcXHQgKiBwb3dlciB0byBQRHMgd2l0aG91dCBhbnkgZXhwbGljaXQgZW5hYmxlLlxcbitcXHQgKi9cXG4rXFxuK1xcdC8qIHBjZGV2Lm93bmVyIGlzIHNldCBieSB0aGUgdHJhbnNwb3J0LCBzbyB0aGUgcmVnaXN0ZXJlZCBjb250cm9sbGVyXFxuK1xcdCAqIHBpbnMgdGhlIHRyYW5zcG9ydCBtb2R1bGUgdGhhdCBvd25zIHRoZSBsaXZlIGRldmljZSwgbm90IHRoZSBjb3JlLlxcbitcXHQgKi9cXG4rXFx0cHNlLVxcdTAwM2VwY2Rldi5vcHMgICAgICA9IFxcdTAwMjZydHBzZV9tY3Vfb3BzO1xcbitcXHRwc2UtXFx1MDAzZXBjZGV2LmRldiAgICAgID0gcHNlLVxcdTAwM2VkZXY7XFxuK1xcdHBzZS1cXHUwMDNlcGNkZXYudHlwZXMgICAgPSBFVEhUT09MX1BTRV9DMzM7XFxuK1xcdHBzZS1cXHUwMDNlcGNkZXYubnJfbGluZXMgPSBpbmZvLm1heF9wb3J0cztcXG4rXFx0cHNlLVxcdTAwM2VwY2Rldi5waXNfcHJpb19tYXggPSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFk7XFxuK1xcdHBzZS1cXHUwMDNlcGNkZXYuc3VwcF9idWRnZXRfZXZhbF9zdHJhdGVnaWVzID0gUFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUM7XFxuK1xcbitcXHRyZXR1cm4gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3Rlcihwc2UtXFx1MDAzZWRldiwgXFx1MDAyNnBzZS1cXHUwMDNlcGNkZXYpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9yZWdpc3Rlcik7XFxuK1xcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfcnRsX3BhcnNlX3N5c3RlbV9pbmZvKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0aW5mby1cXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcXG4rXFx0aW5mby1cXHUwMDNlc3lzdGVtX2VuYWJsZSA9IChwYXlsb2FkWzJdID09IDB4MSk7XFxuK1xcdGluZm8tXFx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cGF5bG9hZFszXSk7XFxuK1xcdGluZm8tXFx1MDAzZXN3X3ZlciA9IHBheWxvYWRbNV07XFxuK1xcdGluZm8tXFx1MDAzZW1jdV90eXBlID0gcGF5bG9hZFs2XTtcXG4rXFx0aW5mby1cXHUwMDNlY29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107XFxuK1xcdGluZm8tXFx1MDAzZWV4dF92ZXIgPSBwYXlsb2FkWzhdO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9ydGxfcGFyc2VfcG9ydF9jbGFzcyhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpXFxuK3tcXG4rXFx0LyogQ2xhc3MgbGl2ZXMgaW4gdGhlIHVwcGVyIG5pYmJsZSBvZiBzdHMyLiAqL1xcbitcXHRyZXR1cm4gRklFTERfR0VUKEdFTk1BU0soNywgNCksIHN0YXR1cy1cXHUwMDNlc3RzMik7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyICpydHBzZV9tY3VfcnRsX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpXFxuK3tcXG4rXFx0c3dpdGNoIChtY3VfdHlwZSkge1xcbitcXHRjYXNlIDB4MDA6XFx0cmV0dXJuIFxcXCJHaWdhRGV2aWNlIEdEMzJGMzEwXFxcIjtcXG4rXFx0Y2FzZSAweDAxOlxcdHJldHVybiBcXFwiR2lnYURldmljZSBHRDMyRjIzMFxcXCI7XFxuK1xcdGNhc2UgMHgwMjpcXHRyZXR1cm4gXFxcIkdpZ2FEZXZpY2UgR0QzMkYzMDNcXFwiO1xcbitcXHRjYXNlIDB4MDM6XFx0cmV0dXJuIFxcXCJHaWdhRGV2aWNlIEdEMzJGMTAzXFxcIjtcXG4rXFx0Y2FzZSAweDA0OlxcdHJldHVybiBcXFwiR2lnYURldmljZSBHRDMyRTEwM1xcXCI7XFxuK1xcdGNhc2UgMHgxMDpcXHRyZXR1cm4gXFxcIk51dm90b24gTTA1MTZcXFwiO1xcbitcXHRjYXNlIDB4MTE6XFx0cmV0dXJuIFxcXCJOdXZvdG9uIE0wNTY0XFxcIjtcXG4rXFx0Y2FzZSAweDEyOlxcdHJldHVybiBcXFwiTnV2b3RvbiBOVUMwMjlcXFwiO1xcbitcXHRkZWZhdWx0OlxcdHJldHVybiBcXFwidW5rbm93blxcXCI7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X2JyY21fcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcXG4re1xcbitcXHRpbmZvLVxcdTAwM2VtYXhfcG9ydHMgPSBwYXlsb2FkWzFdO1xcbitcXHQvKiBCQ00gaGFzIG5vIGV4cGxpY2l0IHN5c3RlbV9lbmFibGUgYnl0ZTsgdGhlIGNsb3Nlc3QgYW5hbG9nIGlzIHRoZVxcbitcXHQgKiBcXFwicmVtb3RlIGVuYWJsZVxcXCIgYml0IGluIHRoZSBzeXN0ZW0tc3RhdHVzIGZsYWdzIGF0IHBheWxvYWRbN10uXFxuK1xcdCAqL1xcbitcXHRpbmZvLVxcdTAwM2VzeXN0ZW1fZW5hYmxlID0gISEocGF5bG9hZFs3XSBcXHUwMDI2IEJJVCgyKSk7XFxuK1xcdGluZm8tXFx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cGF5bG9hZFszXSk7XFxuK1xcdGluZm8tXFx1MDAzZXN3X3ZlciA9IHBheWxvYWRbNV07XFxuK1xcdGluZm8tXFx1MDAzZW1jdV90eXBlID0gcGF5bG9hZFs2XTtcXG4rXFx0aW5mby1cXHUwMDNlY29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107XFxuK1xcdGluZm8tXFx1MDAzZWV4dF92ZXIgPSBwYXlsb2FkWzhdO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9icmNtX3BhcnNlX3BvcnRfY2xhc3MoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKVxcbit7XFxuK1xcdC8qIEJDTSBwdXRzIHRoZSBkZXRlY3RlZCBjbGFzcyBpbiBwYXlsb2FkWzNdICg9PSBzdHMzKSBkaXJlY3RseS5cXG4rXFx0ICogTWFzayB0byB0aGUgbG93IG5pYmJsZTsgY2xhc3MgaXMgMC4uOCBhbmQgYW55IGhpZ2ggYml0cyB3b3VsZCBiZVxcbitcXHQgKiBub2lzZS5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBzdGF0dXMtXFx1MDAzZXN0czMgXFx1MDAyNiAweDBmO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqcnRwc2VfbWN1X2JyY21fbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSlcXG4re1xcbitcXHRzd2l0Y2ggKG1jdV90eXBlKSB7XFxuK1xcdGNhc2UgMHgwMDpcXHRyZXR1cm4gXFxcIlNUIE1pY3JvIFNUMzJGMTAwXFxcIjtcXG4rXFx0Y2FzZSAweDAxOlxcdHJldHVybiBcXFwiTnV2b3RvbiBNMDV4eCBMQU5cXFwiO1xcbitcXHRjYXNlIDB4MDI6XFx0cmV0dXJuIFxcXCJTVCBNaWNybyBTVEYwMzBDOFxcXCI7XFxuK1xcdGNhc2UgMHgwMzpcXHRyZXR1cm4gXFxcIk51dm90b24gTTA1OFNBTlxcXCI7XFxuK1xcdGNhc2UgMHgwNDpcXHRyZXR1cm4gXFxcIk51dm90b24gTlVDMTIyXFxcIjtcXG4rXFx0ZGVmYXVsdDpcXHRyZXR1cm4gXFxcInVua25vd25cXFwiO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qIE1hcCBlYWNoIGxvZ2ljYWwgY29tbWFuZCB0aGUgY29yZSBpc3N1ZXMgdG8gaXRzIHBlci1kaWFsZWN0IG9wY29kZS4gKi9cXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9ydGsgPSB7XFxuK1xcdC5wYXJzZV9zeXN0ZW1faW5mbyA9IHJ0cHNlX21jdV9ydGxfcGFyc2Vfc3lzdGVtX2luZm8sXFxuK1xcdC5wYXJzZV9wb3J0X2NsYXNzICA9IHJ0cHNlX21jdV9ydGxfcGFyc2VfcG9ydF9jbGFzcyxcXG4rXFx0Lm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X3J0bF9tY3VfdHlwZV9zdHIsXFxuK1xcdC5vcGNvZGUgPSB7XFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdXFx0PSBSVFBTRV9NQ1VfT1AoMHgwMCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GT11cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDQwKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHg0YSksXFxuK1xcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV1cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDAxKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxMiksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVxcdD0gUlRQU0VfTUNVX09QKDB4MTMpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFRdID0gUlRQU0VfTUNVX09QKDB4MTQpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV1cXHQ9IFJUUFNFX01DVV9PUCgweDE1KSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4NDIpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU11cXHQ9IFJUUFNFX01DVV9PUCgweDQ0KSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfQ09ORklHXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4NDgpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXVxcdD0gUlRQU0VfTUNVX09QKDB4NDkpLFxcbitcXHR9LFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9icmNtID0ge1xcbitcXHQucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfYnJjbV9wYXJzZV9zeXN0ZW1faW5mbyxcXG4rXFx0LnBhcnNlX3BvcnRfY2xhc3MgID0gcnRwc2VfbWN1X2JyY21fcGFyc2VfcG9ydF9jbGFzcyxcXG4rXFx0Lm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2JyY21fbWN1X3R5cGVfc3RyLFxcbitcXHQub3Bjb2RlID0ge1xcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHgyMCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4MmIpLFxcbitcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHgwMCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdID0gUlRQU0VfTUNVX09QKDB4MTUpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF1cXHQ9IFJUUFNFX01DVV9PUCgweDE2KSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldXFx0PSBSVFBTRV9NQ1VfT1AoMHgxYSksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU11cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDIxKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdXFx0PSBSVFBTRV9NQ1VfT1AoMHgzMCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDI1KSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR11cXHQ9IFJUUFNFX01DVV9PUCgweDI2KSxcXG4rXFx0fSxcXG4rfTtcXG4rXFxuK2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfcnRrX2RhdGEgPSB7XFxuK1xcdC5kaWFsZWN0ID0gXFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X3J0ayxcXG4rXFx0LmkyY19wcm90b19kdF9yZXF1aXJlZCA9IHRydWUsXFxuK307XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9ydGtfZGF0YSk7XFxuK1xcbitjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2JyY21fZGF0YSA9IHtcXG4rXFx0LmRpYWxlY3QgPSBcXHUwMDI2cnRwc2VfbWN1X2RpYWxlY3RfYnJjbSxcXG4rfTtcXG4rRVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2JyY21fZGF0YSk7XFxuK1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKGNvcmUpXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkpvbmFzIEplbG9uZWsgXFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtaTJjLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNmU2ZTM2NDVjNTA5MDNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xcbkBAIC0wLDAgKzEsMTYzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2kyYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInJlYWx0ZWstcHNlLW1jdS5oXFxcIlxcbitcXG4rLypcXG4rICogVGhlIGNvcmUgaGFzIGFscmVhZHkgd2FpdGVkIFJUUFNFX01DVV9SRVNQT05TRV9NUyBiZWZvcmUgY2FsbGluZyB1cywgc29cXG4rICogdGhlIHJlc3BvbnNlIGlzIG5vcm1hbGx5IHJlYWR5IG9uIHRoZSB2ZXJ5IGZpcnN0IHJlYWQuIEZvciBjb21tYW5kcyB0aGVcXG4rICogTUNVIHByb2R1Y2VzIG1vcmUgc2xvd2x5LCBrZWVwIHBvbGxpbmcgYXQgdGhlIHR5cGljYWwgcmVzcG9uc2UgY2FkZW5jZVxcbisgKiB1cCB0byB0aGUgd29yc3QtY2FzZSBjZWlsaW5nLlxcbisgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfSTJDX1JFVFJZX01TXFx0UlRQU0VfTUNVX1JFU1BPTlNFX01TXFxuKyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVNcXHQoUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUyAvIFJUUFNFX01DVV9JMkNfUkVUUllfTVMpXFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSlcXG4re1xcbitcXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtXFx1MDAzZWRldik7XFxuK1xcbitcXHQvKiBTZW5kIG9wY29kZSBhcyBTTUJ1cyBjb21tYW5kIGJ5dGU7IHJlbWFpbmluZyAxMSBieXRlcyBhcyBibG9jayBkYXRhICovXFxuK1xcdHJldHVybiBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCByZXEtXFx1MDAzZW9wY29kZSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgKHU4ICopcmVxICsgMSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXFxuK3tcXG4rXFx0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVxcdTAwM2VkZXYpO1xcbitcXHRpbnQgdHJpZXMsIHJldDtcXG4rXFxuK1xcdGZvciAodHJpZXMgPSAwOyB0cmllcyBcXHUwMDNjIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcysrKSB7XFxuK1xcdFxcdGlmICh0cmllcyBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdG1zbGVlcChSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKTtcXG4rXFxuK1xcdFxcdC8qIE1DVSBuZWVkcyAweDAwIGFzIGNvbW1hbmQgYnl0ZSBmb3IgcmVhZCAqL1xcbitcXHRcXHRyZXQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIDB4MDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAodTggKilyZXNwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFIFxcdTAwMjZcXHUwMDI2IHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX3NtYnVzX29wcyA9IHtcXG4rXFx0LnNlbmQgPSBydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmQsXFxuK1xcdC5yZWN2ID0gcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cXHUwMDNlZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIChjb25zdCB1OCAqKXJlcSwgUlRQU0VfTUNVX01TR19TSVpFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiByZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFID8gMCA6IC1FSU87XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19uYXRpdmVfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcXG4re1xcbitcXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtXFx1MDAzZWRldik7XFxuK1xcdGludCB0cmllcywgcmV0O1xcbitcXG4rXFx0Zm9yICh0cmllcyA9IDA7IHRyaWVzIFxcdTAwM2MgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVM7IHRyaWVzKyspIHtcXG4rXFx0XFx0aWYgKHRyaWVzIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0bXNsZWVwKFJUUFNFX01DVV9JMkNfUkVUUllfTVMpO1xcbitcXG4rXFx0XFx0cmV0ID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgKHU4ICopcmVzcCwgUlRQU0VfTUNVX01TR19TSVpFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFIFxcdTAwMjZcXHUwMDI2IHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgPSB7XFxuK1xcdC5zZW5kID0gcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZCxcXG4rXFx0LnJlY3YgPSBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2O1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZTtcXG4rXFx0Ym9vbCB1c2VfbmF0aXZlID0gZmFsc2U7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xcbitcXHRpZiAoIW1hdGNoKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsIFxcXCJtaXNzaW5nIG1hdGNoIGRhdGFcXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKHJ0cHNlX21jdV9uZWVkc19pMmNfcHJvdG8obWF0Y2gpKSB7XFxuK1xcdFxcdGNvbnN0IGNoYXIgKnByb3RvO1xcbitcXG4rXFx0XFx0cmV0ID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldiwgXFxcInJlYWx0ZWssaTJjLXByb3RvY29sXFxcIiwgXFx1MDAyNnByb3RvKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIm1pc3NpbmcgcmVxdWlyZWQgXFxcXFxcXCJyZWFsdGVrLGkyYy1wcm90b2NvbFxcXFxcXFwiIHByb3BlcnR5XFxcXG5cXFwiKTtcXG4rXFxuK1xcdFxcdGlmICghc3RyY21wKHByb3RvLCBcXFwiaTJjXFxcIikpXFxuK1xcdFxcdFxcdHVzZV9uYXRpdmUgPSB0cnVlO1xcbitcXHRcXHRlbHNlIGlmICghc3RyY21wKHByb3RvLCBcXFwic21idXNcXFwiKSlcXG4rXFx0XFx0XFx0dXNlX25hdGl2ZSA9IGZhbHNlO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwidW5rbm93biByZWFsdGVrLGkyYy1wcm90b2NvbCBcXFxcXFxcIiVzXFxcXFxcXCJcXFxcblxcXCIsIHByb3RvKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHVzZV9uYXRpdmUpIHtcXG4rXFx0XFx0aWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtXFx1MDAzZWFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpXFxuK1xcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVPUE5PVFNVUFAsXFxuK1xcdFxcdFxcdFxcdFxcXCJwbGFpbi1JMkMgTUNVIHByb3RvY29sIHJlcXVpcmVzIEkyQy1jYXBhYmxlIGFkYXB0ZXJcXFxcblxcXCIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC1cXHUwMDNlYWRhcHRlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sgfFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCxcXG4rXFx0XFx0XFx0XFx0XFxcIlNNQnVzIE1DVSBwcm90b2NvbCByZXF1aXJlcyBTTUJ1cyBJMkMtYmxvY2sgc3VwcG9ydFxcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdHBzZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHNlKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHNlKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBzZS1cXHUwMDNlZGV2ID0gZGV2O1xcbitcXHRwc2UtXFx1MDAzZXBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XFxuK1xcdHBzZS1cXHUwMDNldHJhbnNwb3J0ID0gdXNlX25hdGl2ZSA/IFxcdTAwMjZydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgOiBcXHUwMDI2cnRwc2VfbWN1X2kyY19zbWJ1c19vcHM7XFxuK1xcbitcXHRyZXR1cm4gcnRwc2VfbWN1X3JlZ2lzdGVyKHBzZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHBzZS1tY3UtcnRrXFxcIiwgLmRhdGEgPSBcXHUwMDI2cnRwc2VfbWN1X3J0a19kYXRhIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxwc2UtbWN1LWJyY21cXFwiLCAuZGF0YSA9IFxcdTAwMjZydHBzZV9tY3VfYnJjbV9kYXRhIH0sXFxuK1xcdHsgLyogc2VudGluZWwgKi8gfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfaTJjX29mX21hdGNoKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBydHBzZV9tY3VfaTJjX2RyaXZlciA9IHtcXG4rXFx0LmRyaXZlciA9IHtcXG4rXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJyZWFsdGVrLXBzZS1tY3UtaTJjXFxcIixcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlXFx0PSBydHBzZV9tY3VfaTJjX29mX21hdGNoLFxcbitcXHR9LFxcbitcXHQucHJvYmVcXHRcXHQ9IHJ0cHNlX21jdV9pMmNfcHJvYmUsXFxuK307XFxuK21vZHVsZV9pMmNfZHJpdmVyKHJ0cHNlX21jdV9pMmNfZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9BVVRIT1IoXFxcIkpvbmFzIEplbG9uZWsgXFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmVmMDRlMGQ5Mjk2M2I1XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jXFxuQEAgLTAsMCArMSwxNTYgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VyZGV2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGlubG9jay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwicmVhbHRlay1wc2UtbWN1LmhcXFwiXFxuK1xcbisjZGVmaW5lIFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVFxcdDE5MjAwXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVFxcdG1zZWNzX3RvX2ppZmZpZXMoMTAwKVxcbisjZGVmaW5lIFJUUFNFX01DVV9VQVJUX1JYX1RJTUVPVVRcXHRtc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMpXFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQge1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgcHNlO1xcbitcXHRzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2O1xcbitcXHRzdHJ1Y3QgY29tcGxldGlvbiByeF9kb25lO1xcbitcXHRzcGlubG9ja190IHJ4X2xvY2s7XFx0XFx0LyogcHJvdGVjdHMgcnhfYnVmIGFuZCByeF9sZW4gKi9cXG4rXFx0c2l6ZV90IHJ4X2xlbjtcXG4rXFx0dTggcnhfYnVmW1JUUFNFX01DVV9NU0dfU0laRV07XFxuK307XFxuK1xcbisjZGVmaW5lIHRvX3J0cHNlX21jdV91YXJ0KHApICBjb250YWluZXJfb2YocCwgc3RydWN0IHJ0cHNlX21jdV91YXJ0LCBwc2UpXFxuK1xcbisvKlxcbisgKiBObyBmcmFtaW5nIGlzIGRvbmUgaGVyZTogYSBnbGl0Y2hlZCBmcmFtZSBjb3N0cyBvbmUgdHJhbnNhY3Rpb24sIHRoZW5cXG4rICogdGhlIG5leHQgX3NlbmQgcmUtZnJhbWVzIGZyb20gcnhfbGVuIDAuIFJlc3luYyB3b3JrcyBieSByZXR1cm5pbmcgY291bnRcXG4rICogKG5vdCB0YWtlKSwgZHJvcHBpbmcgYW55IG92ZXJmbG93IHNvIHNlcmRldiBrZWVwcyBubyBsZWZ0b3ZlciB0byBibGVlZFxcbisgKiBpbnRvIHRoZSBuZXh0IGZyYW1lLlxcbisgKi9cXG4rc3RhdGljIHNpemVfdCBydHBzZV9tY3VfdWFydF9yZWNlaXZlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gc2VyZGV2X2RldmljZV9nZXRfZHJ2ZGF0YShzZXJkZXYpO1xcbitcXHRzaXplX3QgdGFrZTtcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcXHUwMDI2Y3R4LVxcdTAwM2VyeF9sb2NrKSB7XFxuK1xcdFxcdHRha2UgPSBtaW4oY291bnQsIHNpemVvZihjdHgtXFx1MDAzZXJ4X2J1ZikgLSBjdHgtXFx1MDAzZXJ4X2xlbik7XFxuK1xcdFxcdGlmICh0YWtlKSB7XFxuK1xcdFxcdFxcdG1lbWNweShjdHgtXFx1MDAzZXJ4X2J1ZiArIGN0eC1cXHUwMDNlcnhfbGVuLCBidWYsIHRha2UpO1xcbitcXHRcXHRcXHRjdHgtXFx1MDAzZXJ4X2xlbiArPSB0YWtlO1xcbitcXHRcXHRcXHRpZiAoY3R4LVxcdTAwM2VyeF9sZW4gPT0gc2l6ZW9mKGN0eC1cXHUwMDNlcnhfYnVmKSlcXG4rXFx0XFx0XFx0XFx0Y29tcGxldGUoXFx1MDAyNmN0eC1cXHUwMDNlcnhfZG9uZSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogY29uc3VtZSBhbGwgdG8gYXZvaWQgZGVzeW5jL21pc2FsaWdubWVudCAqL1xcbitcXHRyZXR1cm4gY291bnQ7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VyZGV2X2RldmljZV9vcHMgcnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyA9IHtcXG4rXFx0LnJlY2VpdmVfYnVmID0gcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZSxcXG4rXFx0LndyaXRlX3dha2V1cCA9IHNlcmRldl9kZXZpY2Vfd3JpdGVfd2FrZXVwLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfdWFydF9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTtcXG4rXFx0aW50IHdyaXR0ZW47XFxuK1xcbitcXHQvKiBjbGVhciBhbnkgbGVmdG92ZXIgcnggc3RhdGUgYmVmb3JlIHRyYW5zbWl0dGluZyAqL1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNmN0eC1cXHUwMDNlcnhfbG9jaykge1xcbitcXHRcXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2VyeF9kb25lKTtcXG4rXFx0XFx0Y3R4LVxcdTAwM2VyeF9sZW4gPSAwO1xcbitcXHR9XFxuK1xcbitcXHR3cml0dGVuID0gc2VyZGV2X2RldmljZV93cml0ZShjdHgtXFx1MDAzZXNlcmRldiwgKGNvbnN0IHU4ICopcmVxLCBzaXplb2YoKnJlcSksXFxuK1xcdFxcdFxcdFxcdCAgICAgIFJUUFNFX01DVV9VQVJUX1RYX1RJTUVPVVQpO1xcbitcXHRpZiAod3JpdHRlbiBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB3cml0dGVuO1xcbitcXHRpZiAod3JpdHRlbiAhPSBzaXplb2YoKnJlcSkpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSxcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eCA9IHRvX3J0cHNlX21jdV91YXJ0KHBzZSk7XFxuK1xcbitcXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcXHUwMDI2Y3R4LVxcdTAwM2VyeF9kb25lLCBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUKSlcXG4rXFx0XFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNmN0eC1cXHUwMDNlcnhfbG9jaykge1xcbitcXHRcXHRpZiAoY3R4LVxcdTAwM2VyeF9sZW4gIT0gc2l6ZW9mKCpyZXNwKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRcXHRtZW1jcHkocmVzcCwgY3R4LVxcdTAwM2VyeF9idWYsIHNpemVvZigqcmVzcCkpO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHJ0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHMgPSB7XFxuK1xcdC5zZW5kID0gcnRwc2VfbWN1X3VhcnRfc2VuZCxcXG4rXFx0LnJlY3YgPSBydHBzZV9tY3VfdWFydF9yZWN2LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfdWFydF9wcm9iZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2KVxcbit7XFxuK1xcdHUzMiBzcGVlZCA9IFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVDtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnNlcmRldi1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghY3R4KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGN0eC1cXHUwMDNlc2VyZGV2ID0gc2VyZGV2O1xcbitcXHRjdHgtXFx1MDAzZXBzZS5kZXYgPSBkZXY7XFxuK1xcdGN0eC1cXHUwMDNlcHNlLnBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XFxuK1xcdGN0eC1cXHUwMDNlcHNlLnRyYW5zcG9ydCA9IFxcdTAwMjZydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzO1xcbitcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmN0eC1cXHUwMDNlcnhfZG9uZSk7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZjdHgtXFx1MDAzZXJ4X2xvY2spO1xcbitcXG4rXFx0c2VyZGV2X2RldmljZV9zZXRfZHJ2ZGF0YShzZXJkZXYsIGN0eCk7XFxuK1xcdHNlcmRldl9kZXZpY2Vfc2V0X2NsaWVudF9vcHMoc2VyZGV2LCBcXHUwMDI2cnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX3NlcmRldl9kZXZpY2Vfb3BlbihkZXYsIHNlcmRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcXFwiZmFpbGVkIHRvIG9wZW4gc2VyZGV2XFxcXG5cXFwiKTtcXG4rXFxuK1xcdGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXZfZndub2RlKGRldiksIFxcXCJjdXJyZW50LXNwZWVkXFxcIiwgXFx1MDAyNnNwZWVkKTtcXG4rXFx0c2VyZGV2X2RldmljZV9zZXRfYmF1ZHJhdGUoc2VyZGV2LCBzcGVlZCk7XFxuK1xcdHNlcmRldl9kZXZpY2Vfc2V0X2Zsb3dfY29udHJvbChzZXJkZXYsIGZhbHNlKTtcXG4rXFx0c2VyZGV2X2RldmljZV9zZXRfcGFyaXR5KHNlcmRldiwgU0VSREVWX1BBUklUWV9OT05FKTtcXG4rXFxuK1xcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIoXFx1MDAyNmN0eC1cXHUwMDNlcHNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHBzZS1tY3UtcnRrXFxcIiwgLmRhdGEgPSBcXHUwMDI2cnRwc2VfbWN1X3J0a19kYXRhIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxwc2UtbWN1LWJyY21cXFwiLCAuZGF0YSA9IFxcdTAwMjZydHBzZV9tY3VfYnJjbV9kYXRhIH0sXFxuK1xcdHsgLyogc2VudGluZWwgKi8gfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaCk7XFxuK1xcbitzdGF0aWMgc3RydWN0IHNlcmRldl9kZXZpY2VfZHJpdmVyIHJ0cHNlX21jdV91YXJ0X2RyaXZlciA9IHtcXG4rXFx0LmRyaXZlciA9IHtcXG4rXFx0XFx0Lm5hbWUgPSBcXFwicmVhbHRlay1wc2UtbWN1LXVhcnRcXFwiLFxcbitcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBydHBzZV9tY3VfdWFydF9vZl9tYXRjaCxcXG4rXFx0fSxcXG4rXFx0LnByb2JlICA9IHJ0cHNlX21jdV91YXJ0X3Byb2JlLFxcbit9O1xcbittb2R1bGVfc2VyZGV2X2RldmljZV9kcml2ZXIocnRwc2VfbWN1X3VhcnRfZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9BVVRIT1IoXFxcIkpvbmFzIEplbG9uZWsgXFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KVxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaCBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI5YmYzYjJkZGUwOGI4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaFxcbkBAIC0wLDAgKzEsODcgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rXFxuKyNpZm5kZWYgX1JFQUxURUtfUFNFX01DVV9IXFxuKyNkZWZpbmUgX1JFQUxURUtfUFNFX01DVV9IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuK1xcbisvKlxcbisgKiBUaW1lIHRoZSBNQ1UgaXRzZWxmIG5lZWRzIGJldHdlZW4gYWNjZXB0aW5nIGEgcmVxdWVzdCBhbmQgaGF2aW5nIGFcXG4rICogcmVzcG9uc2UgcmVhZHkuIFRoZXNlIGFyZSBwcm9wZXJ0aWVzIG9mIHRoZSBNQ1UgZmlybXdhcmUsIG5vdCBvZiB0aGVcXG4rICogdW5kZXJseWluZyB0cmFuc3BvcnQ6IHRoZSBjb3JlIHBhY2VzIHRyYW5zYWN0aW9ucyBieSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVNcXG4rICogYW5kIGJvdGggdHJhbnNwb3J0cyBzaXplIHRoZWlyIHBlci10cmFuc2FjdGlvbiByZWN2IGNlaWxpbmcgZnJvbVxcbisgKiBSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TLCBzaW5jZSBzb21lIGNvbW1hbmRzIGFyZSBkb2N1bWVudGVkIGFzXFxuKyAqIG5lZWRpbmcgdXAgdG8gfjFzIHRvIHByb2R1Y2UgYSByZXBseS5cXG4rICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1JFU1BPTlNFX01TXFx0XFx0XFx0MjVcXG4rI2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TXFx0XFx0MTAwMFxcbitcXG4rLypcXG4rICogVG90YWwgdGltZSB0byBrZWVwIHJldHJ5aW5nIHRoZSBmaXJzdCBNQ1UgcmVhZCBhdCBwcm9iZSwgYW5kIHRoZSBwYXVzZVxcbisgKiBiZXR3ZWVuIGF0dGVtcHRzLiBSaWdodCBhZnRlciBlbmFibGUtZ3Bpb3MgaXMgYXNzZXJ0ZWQgdGhlIE1DVSBtYXkgbm90XFxuKyAqIGFuc3dlciBvbiB0aGUgYnVzIHlldDsgZ2l2ZSBpdCBhIGJvdW5kZWQgd2luZG93IHRvIGNvbWUgdXAgYmVmb3JlXFxuKyAqIGRlY2xhcmluZyB0aGUgcHJvYmUgZmFpbGVkLlxcbisgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfQk9PVF9USU1FT1VUX01TXFx0XFx0MzAwMFxcbisjZGVmaW5lIFJUUFNFX01DVV9CT09UX1JFVFJZX01TXFx0XFx0XFx0MTAwXFxuK1xcbisjZGVmaW5lIFJUUFNFX01DVV9NU0dfU0laRVxcdFxcdFxcdDEyXFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X21zZyB7XFxuK1xcdHU4IG9wY29kZTtcXG4rXFx0dTggc2VxX251bTtcXG4rXFx0dTggcGF5bG9hZFs5XTtcXG4rXFx0dTggY2hlY2tzdW07XFxuK30gX19wYWNrZWQ7XFxuK1xcbisvKlxcbisgKiBNQ1Ugc3RhdHVzIG9wY29kZXMgKHNlZW4gb24gdGhlIEJDTSBkaWFsZWN0OyBSVEwgbmV2ZXIgZW1pdHMgdGhlbSkuXFxuKyAqIElOQ09NUExFVEUvQkFEX0NTVU0gYXJlIHRlcm1pbmFsOyBOT1RfUkVBRFkgaXMgdHJhbnNpZW50LlxcbisgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEVcXHRcXHQweGZkXFx0LyogLUVCQURFICAgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNXFx0XFx0MHhmZVxcdC8qIC1FQkFETVNHICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9OT1RfUkVBRFlcXHRcXHQweGZmXFx0LyogLUVBR0FJTiAgKi9cXG4rXFxuKy8qIEEgcG9sbGluZyB0cmFuc3BvcnQgY2FuIHN0b3AgaGVyZTogdGhlIG1hdGNoaW5nIHJlcGx5LCBvciBhIHRlcm1pbmFsIGVycm9yLiAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2wgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXFxuK3tcXG4rXFx0cmV0dXJuIHJlc3AtXFx1MDAzZW9wY29kZSA9PSByZXEtXFx1MDAzZW9wY29kZSB8fFxcbitcXHQgICAgICAgcmVzcC1cXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfSU5DT01QTEVURSB8fFxcbitcXHQgICAgICAgcmVzcC1cXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU07XFxuK31cXG4rXFxuKy8qIE9wYXF1ZSB0byB0cmFuc3BvcnRzOyBkZWZpbmVkIGluIHJlYWx0ZWstcHNlLWNvcmUuYy4gKi9cXG4rc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0O1xcbitzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGE7XFxuK3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvO1xcbitzdHJ1Y3QgcnRwc2VfbWN1X2N0cmw7XFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMge1xcbitcXHRpbnQgKCpzZW5kKShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSk7XFxuK1xcdGludCAoKnJlY3YpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxcbitcXHRcXHQgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9jdHJsIHtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbitcXHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2IHBjZGV2O1xcbitcXHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8qIHNlcmlhbGl6ZXMgTUNVIHJlcXVlc3QvcmVzcG9uc2UgdHJhbnNhY3Rpb25zICovXFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gKmNoaXA7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyAqdHJhbnNwb3J0O1xcbitcXG4rXFx0c3RydWN0IHJlZ3VsYXRvciAqcG9lX3N1cHBseTtcXG4rfTtcXG4rXFxuK2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpO1xcbitcXG4rLyogV2hldGhlciB0aGUgSTJDIHRyYW5zcG9ydCBtdXN0IHJlYWQgXFxcInJlYWx0ZWssaTJjLXByb3RvY29sXFxcIiBmcm9tIERULiAqL1xcbitib29sIHJ0cHNlX21jdV9uZWVkc19pMmNfcHJvdG8oY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaCk7XFxuK1xcbitleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9ydGtfZGF0YTtcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfYnJjbV9kYXRhO1xcbitcXG4rI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjMzOjQzLjkzNjEwNDI4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTczNzQ4MTgwNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX0NPTlRST0xMRVJcIixcbiAgICBcIlBTRV9SRUFMVEVLX01DVV9JMkNcIixcbiAgICBcIlBTRV9SRUFMVEVLX01DVV9VQVJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3NcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9lbmFibGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2Rpc2FibGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdFwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfc2V0X3ByaW9cIixcbiAgICBcInJ0cHNlX21jdV9pMmNfcHJvYmVcIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3Byb2JlXCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9yZWNlaXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciBSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1VzLCB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdmlhIEkyQyBvciBVQVJULiBUaGUgZHJpdmVyIGltcGxlbWVudHMgdGhlIFBTRSBjb250cm9sbGVyIEFQSSBhbmQgcGFyc2VzIHJlc3BvbnNlcyBmcm9tIHRoZSBNQ1UuIEZ1enppbmcgdGhlIEkyQy9VQVJUIGludGVyZmFjZXMgYW5kIHRoZSBQU0UgY29udHJvbGxlciBvcHMgaXMgdmFsdWFibGUgZm9yIGZpbmRpbmcgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlIHByb3RvY29sIHBhcnNpbmcgYW5kIHN0YXRlIG1hbmFnZW1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWNmNmJjZWYxNTA5Y2IzYTFhNjBjNmRhNDFmYjI1NDcwMzk1NTBjZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTU6MzM6NDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmQwZGZhZTIyMGRjMWU5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxuQEAgLTAsMCArMSwxNTQgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVVxuK1xuK21haW50YWluZXJzOlxuKyAgLSBKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246IHxcbisgIE1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHVzaW5nXG4rICBSZWFsdGVrIChSVEw4MjM4QiwgUlRMODIzOSwgUlRMODIzOUMpIG9yIEJyb2FkY29tIChCQ001OTExMSwgQkNNNTkxMjEpXG4rICBQU0UgY2hpcHMuIFRoZSBNQ1UgZXhwb3NlcyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2wgb3ZlciBlaXRoZXJcbisgIEkyQy9TTUJ1cyBvciBVQVJUOyB0aGUgYWN0dWFsIFBTRSBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVGhlXG4rICBSZWFsdGVrIGFuZCBCcm9hZGNvbSB2YXJpYW50cyBzaGFyZSB0aGlzIGRldmljZSB0cmVlIGNvbnRyYWN0IGJ1dCB1c2VcbisgIGRpZmZlcmVudCBwcm90b2NvbCBvcGNvZGVzLCBzZWxlY3RlZCBieSB0aGUgY29tcGF0aWJsZS5cbitcbisgIFRoZSBjb21wYXRpYmxlIGlkZW50aWZpZXMgdGhlIFBTRS1NQ1UgcHJvdG9jb2wgZGlhbGVjdCwgbm90IGEgc3BlY2lmaWNcbisgIHBhcnQuIFRoZSBkZXZpY2UgaGVyZSBpcyB0aGUgTUNVOiBpdCBwcmVzZW50cyBhIHN0YWJsZSBtZXNzYWdlIHByb3RvY29sXG4rICBkb2N1bWVudGVkIGJ5IFJlYWx0ZWssIHdpdGggdGhlIFBTRSBzaWxpY29uIGJlaGluZCBpdCAtIEJyb2FkY29tIG9uXG4rICBvbGRlciBib2FyZHMsIFJlYWx0ZWsgb24gbmV3ZXIgLSBkZXRlY3RlZCBhdCBydW50aW1lIGFuZCBub3QgZGVzY3JpYmVkXG4rICBoZXJlLiBUaGUgTUNVJ3Mgb3duIHNpbGljb24gaXMgZ2VuZXJhbC1wdXJwb3NlIGFuZCB2YXJpZXMgYWNyb3NzXG4rICBib2FyZHMsIHNvIHRoZSAncmVhbHRlaycgdmVuZG9yIHByZWZpeCBuYW1lcyB0aGUgcHJvdG9jb2wgZnJvbnQtZW5kXG4rICAoZm9sbG93aW5nIHRoZSBnb29nbGUsY3Jvcy1lYyBwYXR0ZXJuKTsgdGhlICctcnRrJy8nLWJyY20nIHN1ZmZpeFxuKyAgc2VsZWN0cyB0aGUgUmVhbHRlayBvciBCcm9hZGNvbSBkaWFsZWN0LlxuK1xuKyAgQSBzaW5nbGUgY29tcGF0aWJsZSBwZXIgZGlhbGVjdCBjb3ZlcnMgYm90aCB0aGUgSTJDL1NNQnVzIGFuZCBVQVJUXG4rICBhdHRhY2htZW50czogdGhlIHdpcmUgcHJvdG9jb2wgaXMgaWRlbnRpY2FsIGFjcm9zcyB0aGVtIGFuZCB0aGVcbisgIHRyYW5zcG9ydCBpcyBhbHJlYWR5IGV4cHJlc3NlZCBieSB0aGUgbm9kZSdzIHBhcmVudCBidXMsIHNvIGl0IGlzIG5vdFxuKyAgZW5jb2RlZCBpbiB0aGUgY29tcGF0aWJsZS4gVHJhbnNwb3J0LXNwZWNpZmljIHByb3BlcnRpZXMgZGlmZmVyXG4rICBhY2NvcmRpbmdseSAtIHRoZSBJMkMgYXR0YWNobWVudCBjYXJyaWVzICdyZWcnIChhbmQsIGZvciBSZWFsdGVrLFxuKyAgJ3JlYWx0ZWssaTJjLXByb3RvY29sJyksIHdoaWxlIHRoZSBVQVJUIGF0dGFjaG1lbnQgY2FycmllcyB0aGUgc2VyaWFsXG4rICBwZXJpcGhlcmFsIHByb3BlcnRpZXMgc3VjaCBhcyAnY3VycmVudC1zcGVlZCcuXG4rXG4rcHJvcGVydGllczpcbisgIGNvbXBhdGlibGU6XG4rICAgIGVudW06XG4rICAgICAgLSByZWFsdGVrLHBzZS1tY3UtcnRrXG4rICAgICAgLSByZWFsdGVrLHBzZS1tY3UtYnJjbVxuK1xuKyAgcmVnOlxuKyAgICBtYXhJdGVtczogMVxuK1xuKyAgcG93ZXItc3VwcGx5OlxuKyAgICBkZXNjcmlwdGlvbjogUmVndWxhdG9yIHN1cHBseWluZyB0aGUgUG9FIHBvd2VyIHJhaWwuXG4rXG4rICBlbmFibGUtZ3Bpb3M6XG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rICByZWFsdGVrLGkyYy1wcm90b2NvbDpcbisgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvc3RyaW5nXG4rICAgIGVudW06IFsgaTJjLCBzbWJ1cyBdXG4rICAgIGRlc2NyaXB0aW9uOiB8XG4rICAgICAgV2lyZSBmcmFtaW5nIHRoZSBNQ1UgZmlybXdhcmUgZXhwZWN0cyBvbiB0aGUgSTJDIGJ1cy4gXCJzbWJ1c1wiIG1lYW5zXG4rICAgICAgcmVhZHMgY2FycnkgYSBsZWFkaW5nIGNvbW1hbmQgYnl0ZSAoMHgwMCkgYW5kIGEgcmVwZWF0ZWQgc3RhcnQ7IFwiaTJjXCJcbisgICAgICBtZWFucyBiYXJlIDEyLWJ5dGUgd3JpdGVzIGFuZCByZWFkcyB3aXRoIG5vIGNvbW1hbmQgcHJlZml4LiBPbmx5XG4rICAgICAgYXBwbGllcyB0byB0aGUgUmVhbHRlayBJMkMgYXR0YWNobWVudC5cbitcbityZXF1aXJlZDpcbisgIC0gY29tcGF0aWJsZVxuK1xuK2FsbE9mOlxuKyAgLSAkcmVmOiBwc2UtY29udHJvbGxlci55YW1sI1xuKyAgLSAkcmVmOiAvc2NoZW1hcy9zZXJpYWwvc2VyaWFsLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcbisgICMgVGhlIEkyQyBhdHRhY2htZW50IChpZGVudGlmaWVkIGJ5ICdyZWcnKSBjYW5ub3QgY2Fycnkgc2VyaWFsIGJ1cyBwcm9wcy5cbisgIC0gaWY6XG4rICAgICAgcmVxdWlyZWQ6IFtyZWddXG4rICAgIHRoZW46XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGN1cnJlbnQtc3BlZWQ6IGZhbHNlXG4rICAgICAgICBtYXgtc3BlZWQ6IGZhbHNlXG4rICAjICdyZWFsdGVrLGkyYy1wcm90b2NvbCcgaXMgbWVhbmluZ2Z1bCBvbmx5IGZvciB0aGUgUmVhbHRlayBJMkMgYXR0YWNobWVudDtcbisgICMgdGhlIEJyb2FkY29tIHZhcmlhbnQgYW5kIGFueSBVQVJUIGF0dGFjaG1lbnQgbXVzdCBub3QgY2FycnkgaXQuXG4rICAtIGlmOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgICBjb250YWluczpcbisgICAgICAgICAgICBjb25zdDogcmVhbHRlayxwc2UtbWN1LXJ0a1xuKyAgICAgIHJlcXVpcmVkOiBbcmVnXVxuKyAgICB0aGVuOlxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSByZWFsdGVrLGkyYy1wcm90b2NvbFxuKyAgICBlbHNlOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBcInJlYWx0ZWssaTJjLXByb3RvY29sXCI6IGZhbHNlXG4rXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgIyBSZWFsdGVrIFBTRSBjaGlwLCBJMkMgYXR0YWNobWVudCAoU01CdXMgZnJhbWluZykuXG4rICAtIHxcbisgICAgaTJjIHtcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgIGV0aGVybmV0LXBzZUAyMCB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwicmVhbHRlayxwc2UtbWN1LXJ0a1wiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4MjBcdTAwM2U7XG4rICAgICAgICAgICAgcmVhbHRlayxpMmMtcHJvdG9jb2wgPSBcInNtYnVzXCI7XG4rXG4rICAgICAgICAgICAgcHNlLXBpcyB7XG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7XG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgI3BzZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgfTtcbisgICAgICAgIH07XG4rICAgIH07XG4rXG4rICAjIEJyb2FkY29tIFBTRSBjaGlwLCBJMkMgYXR0YWNobWVudC5cbisgIC0gfFxuKyAgICBpMmMge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgZXRoZXJuZXQtcHNlQDIwIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJyZWFsdGVrLHBzZS1tY3UtYnJjbVwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4MjBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgcHNlLXBpcyB7XG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7XG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgI3BzZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgfTtcbisgICAgICAgIH07XG4rICAgIH07XG4rXG4rICAjIFJlYWx0ZWsgUFNFIGNoaXAsIFVBUlQgYXR0YWNobWVudC5cbisgIC0gfFxuKyAgICBzZXJpYWwge1xuKyAgICAgICAgZXRoZXJuZXQtcHNlIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJyZWFsdGVrLHBzZS1tY3UtcnRrXCI7XG4rICAgICAgICAgICAgY3VycmVudC1zcGVlZCA9IFx1MDAzYzExNTIwMFx1MDAzZTtcbitcbisgICAgICAgICAgICBwc2UtcGlzIHtcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAgICAgfTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA1MmYxYTU1ZWNhOTliZi4uZTNmNDI2YTNiMjAxZmIgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0yMjcxNiw2ICsyMjcxNiwxMyBAQCBTOlx0TWFpbnRhaW5lZFxuIEY6XHRpbmNsdWRlL3NvdW5kL3J0Ki5oXG4gRjpcdHNvdW5kL3NvYy9jb2RlY3MvcnQqXG4gXG4rUkVBTFRFSy9CUk9BRENPTSBQU0UgTUNVIERSSVZFUlxuK006XHRKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXG4rTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbitTOlx0TWFpbnRhaW5lZFxuK0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxuK0Y6XHRkcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1KlxuK1xuIFJFQUxURUsgT1RUTyBXQVRDSERPR1xuIE06XHRTYW5kZXIgVmFuaGV1bGUgXHUwMDNjc2FuZGVyQHN2YW5oZXVsZS5uZXRcdTAwM2VcbiBMOlx0bGludXgtd2F0Y2hkb2dAdmdlci5rZXJuZWwub3JnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWcgYi9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ1xuaW5kZXggN2VmMjk2NTdlZTVkZDEuLjIzZTQ0ZGRlM2RiZmUwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXG5AQCAtMTMsNiArMTMsMzQgQEAgbWVudWNvbmZpZyBQU0VfQ09OVFJPTExFUlxuIFxuIGlmIFBTRV9DT05UUk9MTEVSXG4gXG4rY29uZmlnIFBTRV9SRUFMVEVLX01DVVxuK1x0dHJpc3RhdGVcbitcdGhlbHBcbitcdCAgU2hhcmVkIGNvcmUgZm9yIHRoZSBSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1UgZHJpdmVyLiBUaGlzIGlzXG4rXHQgIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHRyYW5zcG9ydCBvcHRpb25zIGJlbG93LlxuK1xuK2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfSTJDXG4rXHR0cmlzdGF0ZSBcIlJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXCJcbitcdGRlcGVuZHMgb24gSTJDXG4rXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXG4rXHRoZWxwXG4rXHQgIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFXG4rXHQgIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHdpdGggUmVhbHRlayBvciBCcm9hZGNvbSBQU0UgY2hpcHMsIGF0dGFjaGVkXG4rXHQgIHZpYSBJMkMvU01CdXMuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWxcbitcdCAgUFNFIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGFcbitcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS1pMmMuXG4rXG4rY29uZmlnIFBTRV9SRUFMVEVLX01DVV9VQVJUXG4rXHR0cmlzdGF0ZSBcIlJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KVwiXG4rXHRkZXBlbmRzIG9uIFNFUklBTF9ERVZfQlVTXG4rXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXG4rXHRoZWxwXG4rXHQgIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFXG4rXHQgIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHdpdGggUmVhbHRlayBvciBCcm9hZGNvbSBQU0UgY2hpcHMsIGF0dGFjaGVkXG4rXHQgIHZpYSBVQVJULiBUaGUgTUNVIGV4cG9zZXMgYSBtZXNzYWdlLWJhc2VkIHByb3RvY29sOyB0aGUgYWN0dWFsIFBTRVxuK1x0ICBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhXG4rXHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtdWFydC5cbitcbiBjb25maWcgUFNFX1JFR1VMQVRPUlxuIFx0dHJpc3RhdGUgXCJSZWd1bGF0b3IgYmFzZWQgUFNFIGNvbnRyb2xsZXJcIlxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxuaW5kZXggY2M3OGY3ZWE3ZjVmNzEuLjljY2E1OTAwZmUzNDIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcbkBAIC0zLDYgKzMsOSBAQFxuIFxuIG9iai0kKENPTkZJR19QU0VfQ09OVFJPTExFUikgKz0gcHNlX2NvcmUub1xuIFxuK29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1UpICs9IHJlYWx0ZWstcHNlLW1jdS1jb3JlLm9cbitvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVX0kyQykgKz0gcmVhbHRlay1wc2UtbWN1LWkyYy5vXG4rb2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9VQVJUKSArPSByZWFsdGVrLXBzZS1tY3UtdWFydC5vXG4gb2JqLSQoQ09ORklHX1BTRV9SRUdVTEFUT1IpICs9IHBzZV9yZWd1bGF0b3Iub1xuIG9iai0kKENPTkZJR19QU0VfUEQ2OTJYMCkgKz0gcGQ2OTJ4MC5vXG4gb2JqLSQoQ09ORklHX1BTRV9TSTM0NzQpICs9IHNpMzQ3NC5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1jb3JlLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45NjFhYzllOWVlOWM3Y1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1jb3JlLmNcbkBAIC0wLDAgKzEsMTAwNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLypcbisgKiBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgZnJvbnRpbmcgUmVhbHRlayBvciBCcm9hZGNvbSBQU0VcbisgKiBjaGlwcy4gQm90aCB2ZW5kb3JzJyBNQ1VzIHNwZWFrIGEgY2xvc2VseSByZWxhdGVkIDEyLWJ5dGUgZml4ZWQtZnJhbWVcbisgKiBtYW5hZ2VtZW50IHByb3RvY29sOyB0aGlzIGRyaXZlciBjb3ZlcnMgYm90aCB2aWEgYSBwZXItZGlhbGVjdCBvcGNvZGVcbisgKiB0YWJsZSBhbmQgcmVzcG9uc2UgcGFyc2Vycy5cbisgKlxuKyAqIE1hbnkgUG9FIHN3aXRjaCBkZXNpZ25zIHB1dCBhIGRlZGljYXRlZCBtaWNyb2NvbnRyb2xsZXIgaW4gZnJvbnQgb2YgdGhlXG4rICogYWN0dWFsIFBTRSBzaWxpY29uOiB0aGUgaG9zdCBDUFUgdGFsa3MgdG8gdGhlIE1DVSBvdmVyIEkyQy9TTUJ1cyBvclxuKyAqIFVBUlQsIGFuZCB0aGUgTUNVIGluIHR1cm4gbWFuYWdlcyB0aGUgUFNFIGNoaXBzIG9uIHRoZSBib2FyZC4gVGhlIE1DVVxuKyAqIHNwZWFrcyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2wgKDEyLWJ5dGUgZml4ZWQtc2l6ZSBmcmFtZXM7IG9wY29kZVxuKyAqICsgYXJnICsgOSBwYXlsb2FkIGJ5dGVzICsgY2hlY2tzdW0pLiBUaGUgUFNFIGNoaXBzIHRoZW1zZWx2ZXMgYXJlIG5vdFxuKyAqIGFjY2Vzc2VkIGRpcmVjdGx5OyBldmVyeXRoaW5nIGdvZXMgdGhyb3VnaCBNQ1UgY29tbWFuZHMuXG4rICpcbisgKiBUaGlzIGRyaXZlciB0YXJnZXRzIHRoYXQgYXJjaGl0ZWN0dXJlIGZvciB0aGUgUmVhbHRlay1mYW1pbHkgcHJvdG9jb2wuXG4rICogVHdvIGRpYWxlY3RzIGFyZSBzdXBwb3J0ZWQ6IFJlYWx0ZWsgTUNVcyBtYW5hZ2luZyBSVEw4MjN4L1JUTDgyMzkqIFBTRVxuKyAqIGNoaXBzLCBhbmQgQnJvYWRjb20gTUNVcyBtYW5hZ2luZyBCQ001OTB4eCBQU0UgY2hpcHMuIFRoZSB0d28gc2hhcmVcbisgKiBmcmFtZSBmb3JtYXQgYW5kIGEgc3VtLW1vZC0yNTYgY2hlY2tzdW0gYnV0IGRpdmVyZ2Ugb24gb3Bjb2RlIG51bWJlcnNcbisgKiBhbmQgb24gYSBmZXcgcmVzcG9uc2UgbGF5b3V0czsgdGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBwZXItZGlhbGVjdFxuKyAqIG9wY29kZSB0YWJsZSBhbmQgcGFyc2VyIGhvb2tzLlxuKyAqXG4rICogT3V0IG9mIHNjb3BlOiBQU0UgY2hpcHMgdGhhdCBhcmUgaW50ZXJmYWNlZCBkaXJlY3RseSBmcm9tIHRoZSBob3N0XG4rICogd2l0aG91dCBhIG1hbmFnZW1lbnQgTUNVLCBNQ1UgZGVzaWducyB0aGF0IHNwZWFrIGFuIHVucmVsYXRlZCBwcm90b2NvbFxuKyAqIGZhbWlseSwgYW5kIFwiZHVtYiBQU0VcIiBtb2RlcyB3aGVyZSBubyBob3N0IGNvbnRyb2wgaXMgd2lyZWQgdXAgYXQgYWxsLlxuKyAqIFRob3NlLCBpZiBhbmQgd2hlbiB0aGV5IHNob3cgdXAgaW4gdGhlIGtlcm5lbCwgYmVsb25nIGluIHNlcGFyYXRlXG4rICogZHJpdmVycyB1bmRlciBkcml2ZXJzL25ldC9wc2UtcGQvLlxuKyAqXG4rICogVGhpcyBjb3JlIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCwgZGVjb2RpbmcvZW5jb2Rpbmcgb2YgTUNVXG4rICogcmVzcG9uc2VzLCBhbmQgdGhlIHBzZV9jb250cm9sbGVyX29wcyBpbnRlZ3JhdGlvbi4gVHJhbnNwb3J0IG1vZHVsZXNcbisgKiAocmVhbHRlay1wc2UtaTJjLCByZWFsdGVrLXBzZS11YXJ0KSBwcm92aWRlIHRoZSBzZW5kL3JlY3YgY2FsbGJhY2tzLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ncGlvL2NvbnN1bWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInJlYWx0ZWstcHNlLW1jdS5oXCJcbitcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEJcdFx0MHgwMTM4XG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlcdFx0MHgwMDM5XG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDXHRcdDB4MDEzOVxuKyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMVx0XHQweGUxMTFcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjFcdFx0MHhlMTIxXG4rXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRURcdFx0MHgwMFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElOR1x0XHQweDAxXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklOR1x0XHQweDAyXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfVEVTVFx0XHRcdDB4MDNcdC8qIEJyb2FkY29tOyByZXNlcnZlZCBvbiBSZWFsdGVrICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRkFVTFRcdFx0MHgwNFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUXHRcdDB4MDVcdC8qIEJyb2FkY29tOyByZXNlcnZlZCBvbiBSZWFsdGVrICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElOR1x0XHQweDA2XG4rXG4rLyogUlRQU0VfTUNVX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUgdmFsdWVzICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVJcdDB4MDJcbitcbisjZGVmaW5lIFJUUFNFX01DVV9NQVhfUE9SVFNcdFx0XHQ0OFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZXHRcdDNcbitcbitlbnVtIHJ0cHNlX21jdV9jbWQge1xuK1x0UlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFLFxuK1x0UlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk8sXG4rXHRSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHLFxuK1xuK1x0UlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRSxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4rXHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFksXG4rXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVUyxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFMsXG4rXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJRyxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJRyxcbitcbitcdFJUUFNFX01DVV9OVU1fQ01EUyxcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlIHtcbitcdHU4IG9wO1xuK1x0Ym9vbCB2YWxpZDtcbit9O1xuK1xuKy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1Aob3BjKVx0eyAub3AgPSAob3BjKSwgLnZhbGlkID0gdHJ1ZSB9XG4rXG4rLyogUGFyc2VkIE1DVSByZXNwb25zZSBzdHJ1Y3R1cmVzIChkZWNvZGVkIGZyb20gcnRwc2VfbWN1X21zZyByZXBsaWVzKSAqL1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfaW5mbyB7XG4rXHR1OCBtYXhfcG9ydHM7XG4rXHRib29sIHN5c3RlbV9lbmFibGU7XG4rXHR1MTYgZGV2aWNlX2lkO1xuK1x0dTggc3dfdmVyO1xuK1x0dTggbWN1X3R5cGU7XG4rXHR1OCBjb25maWdfc3RhdHVzO1xuK1x0dTggZXh0X3Zlcjtcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyB7XG4rXHR1OCB1dmxvO1xuK1x0dTggb3ZsbztcbitcdGJvb2wgcHJlYWxsb2NfZW5hYmxlO1xuK1x0dTggbnVtX29mX3BzZXM7XG4rfTtcbitcbitzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHtcbitcdHU4IHN0czE7XG4rXHR1OCBzdHMyO1xuK1x0dTggc3RzMztcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCB7XG4rXHR1MTYgdm9sdGFnZV9yYXc7XHQvKiA2NC40NW1WL0xTQiAqL1xuK1x0dTE2IGN1cnJlbnRfcmF3O1x0LyogMW1BL0xTQiAqL1xuK1x0dTE2IHRlbXBlcmF0dXJlX3JhdztcdC8qIFQobUMpID0gMTI1MCAqICgyMjAgLSByYXcpICovXG4rXHR1MTYgcG93ZXJfcmF3O1x0XHQvKiAxMDBtVy9MU0IgKi9cbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcge1xuK1x0Ym9vbCBlbmFibGU7XG4rfTtcbitcbitzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyB7XG4rXHR1OCBtYXhfcG93ZXI7XG4rXHR1OCBwcmlvcml0eTtcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCB7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSBvcGNvZGVbUlRQU0VfTUNVX05VTV9DTURTXTtcbitcbitcdC8qXG4rXHQgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2hcbitcdCAqIGRpYWxlY3Qgc3VwcGxpZXMgaXRzIG93bi4gT3RoZXIgcmVzcG9uc2VzIHNoYXJlIG9uZSBsYXlvdXQgYW5kIGFyZVxuK1x0ICogZGVjb2RlZCBkaXJlY3RseSAtIGEgZGlhbGVjdCB0aGF0IGRpdmVyZ2VzIHRoZXJlIG11c3QgYWRkIGEgaG9vayxcbitcdCAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS5cbitcdCAqL1xuK1x0dm9pZCAoKnBhcnNlX3N5c3RlbV9pbmZvKShjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKTtcbitcdGludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7XG4rXHRjb25zdCBjaGFyICooKm1jdV90eXBlX3N0cikodW5zaWduZWQgaW50IG1jdV90eXBlKTtcbit9O1xuK1xuKy8qXG4rICogUGVyLWNvbXBhdGlibGUgbWF0Y2ggZGF0YTogc2VsZWN0ZWQgYnkgdGhlIERUL0kyQyBjb21wYXRpYmxlLCBpdCBidW5kbGVzXG4rICogdGhlIHByb3RvY29sIGRpYWxlY3Qgd2l0aCBhdHRhY2htZW50IHF1aXJrcyB0aGF0IHRoZSBleGFjdCBNQ1Ugc2lsaWNvblxuKyAqIGRvZXMgbm90IGRldGVybWluZSAob25seSBpdHMgZmlybXdhcmUgcHJvdG9jb2wgYW5kIHRoZSBob3N0IGJ1cyBkbykuXG4rICovXG4rc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHtcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDtcbitcdC8qIEkyQyBmcmFtaW5nIG11c3QgY29tZSBmcm9tIERUIChyZWFsdGVrLGkyYy1wcm90b2NvbCk7IGVsc2UgU01CdXMuICovXG4rXHRib29sIGkyY19wcm90b19kdF9yZXF1aXJlZDtcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rXHR1MTYgZGV2aWNlX2lkO1xuK1x0dTMyIG1heF9tV19wZXJfcG9ydDtcbitcdGVudW0gcnRwc2VfbWN1X2NtZCBwd19zZXRfY21kO1x0LyogY29tbWFuZCB1c2VkIGJ5IHNldF9wd19saW1pdCAqL1xuK1x0dTMyIHB3X3NldF9sc2JfbVc7XHRcdC8qIExTQiBvZiBwd19zZXRfY21kIHZhbHVlLCBpbiBtVyAqL1xuK1x0dTMyIHB3X3JlYWRfbHNiX21XO1x0XHQvKiBMU0Igb2YgZXh0X2NvbmZpZy5tYXhfcG93ZXIgcmVhZC1iYWNrLCBpbiBtVyAqL1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzhiX2luZm8gPSB7XG4rXHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QixcbitcdC5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCxcbitcdC5uYW1lID0gXCJSVEw4MjM4QlwiLFxuK1x0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxuK1x0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxuK1x0LnB3X3NldF9sc2JfbVcgPSAyMDAsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOV9pbmZvID0ge1xuK1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOSxcbitcdC5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCxcbitcdC5uYW1lID0gXCJSVEw4MjM5XCIsXG4rXHQucHdfcmVhZF9sc2JfbVcgPSA0MDAsXG4rXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuK1x0LnB3X3NldF9sc2JfbVcgPSA0MDAsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOWNfaW5mbyA9IHtcbitcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDLFxuK1x0Lm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLFxuK1x0Lm5hbWUgPSBcIlJUTDgyMzlDXCIsXG4rXHQucHdfcmVhZF9sc2JfbVcgPSA0MDAsXG4rXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuK1x0LnB3X3NldF9sc2JfbVcgPSA0MDAsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gYmNtNTkxMTFfaW5mbyA9IHtcbitcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExLFxuK1x0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxuK1x0Lm5hbWUgPSBcIkJDTTU5MTExXCIsXG4rXHQucHdfcmVhZF9sc2JfbVcgPSAyMDAsXG4rXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4rXHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBiY201OTEyMV9pbmZvID0ge1xuK1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjEsXG4rXHQvKlxuK1x0ICogQkNNNTkxMjEgaXMgYSA2MFcgVHlwZS0zIHBhcnQsIGJ1dCBrbm93biBib2FyZHMgcnVuIGl0IGF0IDgwMi4zYXRcbitcdCAqIGFuZCB0aGUgQkNNIGRpYWxlY3QgaGFzIG9ubHkgdGhlIDgtYml0LzAuMlcgc2V0IGNvbW1hbmQgKFx1MDAzYz01MVcpO1xuK1x0ICogY2FwIGF0IHRoZSAzMFcgdGhlIGhhcmR3YXJlIGFjdHVhbGx5IG9mZmVycy5cbitcdCAqL1xuK1x0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxuK1x0Lm5hbWUgPSBcIkJDTTU5MTIxXCIsXG4rXHQucHdfcmVhZF9sc2JfbVcgPSAyMDAsXG4rXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4rXHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcbit9O1xuK1xuKy8qIEhlbHBlcnMgYW5kIGJhc2ljIGZ1bmN0aW9ucyAqL1xuK1xuK3N0YXRpYyBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnRvX3J0cHNlX21jdV9jdHJsKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuK3tcbitcdHJldHVybiBjb250YWluZXJfb2YocGNkZXYsIHN0cnVjdCBydHBzZV9tY3VfY3RybCwgcGNkZXYpO1xuK31cbitcbitib29sIHJ0cHNlX21jdV9uZWVkc19pMmNfcHJvdG8oY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaClcbit7XG4rXHRyZXR1cm4gbWF0Y2gtXHUwMDNlaTJjX3Byb3RvX2R0X3JlcXVpcmVkO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfbmVlZHNfaTJjX3Byb3RvKTtcbitcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfbXNnX2luaXQoc3RydWN0IHJ0cHNlX21jdV9tc2cgKm1zZywgdTggb3Bjb2RlKVxuK3tcbitcdG1lbXNldChtc2csIDB4ZmYsIHNpemVvZigqbXNnKSk7XG4rXHRtc2ctXHUwMDNlb3Bjb2RlID0gb3Bjb2RlO1xuK31cbitcbitzdGF0aWMgdTggcnRwc2VfbWN1X2NoZWNrc3VtKGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0dTggc3VtID0gMDtcbitcbitcdHdoaWxlIChsZW4tLSlcbitcdFx0c3VtICs9ICpidWYrKztcbitcdHJldHVybiBzdW07XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2RvX3hmZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmVxLVx1MDAzZWNoZWNrc3VtID0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlcSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSk7XG4rXG4rXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnBzZS1cdTAwM2VtdXRleCkge1xuK1x0XHRyZXQgPSBwc2UtXHUwMDNldHJhbnNwb3J0LVx1MDAzZXNlbmQocHNlLCByZXEpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBNQ1UgbmVlZHMgYSBmaXhlZCBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHJlY2VpdmluZyBhIHJlcXVlc3RcbitcdFx0ICogYW5kIGhhdmluZyB0aGUgcmVzcG9uc2UgcmVhZHksIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBieXRlcyBnZXQgdG9cbitcdFx0ICogdXMuIFBhY2UgdGhlIHRyYW5zYWN0aW9uIGhlcmUgc28gZWFjaCB0cmFuc3BvcnQgY2FuIGtlZXAgaXRzIHJlY3ZcbitcdFx0ICogcGF0aCBzaW1wbGU6IGEgc2luZ2xlIGJvdW5kZWQgd2FpdCByYXRoZXIgdGhhbiBhIGdlbmVyaWMgcmV0cnkuXG4rXHRcdCAqL1xuK1x0XHRtc2xlZXAoUlRQU0VfTUNVX1JFU1BPTlNFX01TKTtcbitcbitcdFx0bWVtc2V0KHJlc3AsIDAsIHNpemVvZigqcmVzcCkpO1xuK1x0XHRyZXQgPSBwc2UtXHUwMDNldHJhbnNwb3J0LVx1MDAzZXJlY3YocHNlLCByZXEsIHJlc3ApO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRXhwbGljaXQgTUNVIGVycm9yIG9wY29kZXMgKG9ic2VydmVkIG9uIHRoZSBCQ00gZGlhbGVjdDsgaGFybWxlc3NcbitcdCAqIHRvIGNoZWNrIGZvciBSVEwgdG9vKS4gQ2F0Y2ggdGhlc2UgYmVmb3JlIHRoZSBnZW5lcmljIG9wY29kZS9DUkNcbitcdCAqIG1pc21hdGNoIHBhdGggc28gY2FsbGVycyBzZWUgYSBtZWFuaW5nZnVsIGVycm5vLlxuK1x0ICovXG4rXHRzd2l0Y2ggKHJlc3AtXHUwMDNlb3Bjb2RlKSB7XG4rXHRjYXNlIFJUUFNFX01DVV9PUENPREVfSU5DT01QTEVURTpcbitcdFx0cmV0dXJuIC1FQkFERTtcbitcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9CQURfQ1NVTTpcbitcdFx0cmV0dXJuIC1FQkFETVNHO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX05PVF9SRUFEWTpcbitcdFx0cmV0dXJuIC1FQUdBSU47XG4rXHR9XG4rXG4rXHRpZiAocmVzcC1cdTAwM2VvcGNvZGUgIT0gcmVxLVx1MDAzZW9wY29kZSB8fFxuK1x0ICAgIHJlc3AtXHUwMDNlc2VxX251bSAhPSByZXEtXHUwMDNlc2VxX251bSB8fFxuK1x0ICAgIHJlc3AtXHUwMDNlY2hlY2tzdW0gIT0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlc3AsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEpKVxuK1x0XHRyZXR1cm4gLUVCQURNU0c7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9xdWVyeShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSxcbitcdFx0XHRcdHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcTtcbitcdGludCByZXQ7XG4rXG4rXHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGNvZGUpO1xuK1x0cmVxLnBheWxvYWRbMF0gPSBwb3J0O1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcdTAwMjZyZXEsIHJlc3ApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChyZXNwLVx1MDAzZXBheWxvYWRbMF0gIT0gcG9ydClcbitcdFx0cmV0dXJuIC1FSU87XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9jbWQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCB1OCBvcGNvZGUsIHU4IGFyZylcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3Bjb2RlKTtcbitcdHJlcS5wYXlsb2FkWzBdID0gcG9ydDtcbitcdHJlcS5wYXlsb2FkWzFdID0gYXJnO1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcdTAwMjZyZXEsIFx1MDAyNnJlc3ApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChyZXNwLnBheWxvYWRbMF0gIT0gcG9ydCB8fCByZXNwLnBheWxvYWRbMV0gIT0gMClcbitcdFx0cmV0dXJuIC1FSU87XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogR2xvYmFsIG9wZXJhdGlvbnMgKi9cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfaW5mbyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXTtcbitcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGMtXHUwMDNlb3ApO1xuK1x0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcdTAwMjZyZXEsIFx1MDAyNnJlc3ApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3N5c3RlbV9pbmZvKHJlc3AucGF5bG9hZCwgaW5mbyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyAqY29uZmlnKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wYy1cdTAwM2VvcCk7XG4rXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Y29uZmlnLVx1MDAzZXV2bG8gPSByZXNwLnBheWxvYWRbMF07XG4rXHRjb25maWctXHUwMDNlb3ZsbyA9IHJlc3AucGF5bG9hZFs1XTtcbitcdGNvbmZpZy1cdTAwM2VwcmVhbGxvY19lbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDB4MSk7XG4rXHRjb25maWctXHUwMDNlbnVtX29mX3BzZXMgPSByZXNwLnBheWxvYWRbNl07XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgYm9vbCBlbmFibGUpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFXTtcbitcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGMtXHUwMDNlb3ApO1xuK1x0cmVxLnBheWxvYWRbMF0gPSBlbmFibGUgPyAweDEgOiAweDA7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIChyZXNwLnBheWxvYWRbMF0gPT0gMHgwKSA/IDAgOiAtRUlPO1xuK31cbitcbisvKiBQb3J0IG9wZXJhdGlvbnMgKi9cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XG4rXHRpbnQgcmV0O1xuK1xuK1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXTtcbitcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0c3RhdHVzLVx1MDAzZXN0czEgPSByZXNwLnBheWxvYWRbMV07XG4rXHRzdGF0dXMtXHUwMDNlc3RzMiA9IHJlc3AucGF5bG9hZFsyXTtcbitcdHN0YXR1cy1cdTAwM2VzdHMzID0gcmVzcC5wYXlsb2FkWzNdO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X21lYXN1cmVtZW50KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQgKm1lYXN1cmVtZW50KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuK1x0aW50IHJldDtcbitcbitcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXTtcbitcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0bWVhc3VyZW1lbnQtXHUwMDNldm9sdGFnZV9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cmVzcC5wYXlsb2FkWzFdKTtcbitcdG1lYXN1cmVtZW50LVx1MDAzZWN1cnJlbnRfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFszXSk7XG4rXHRtZWFzdXJlbWVudC1cdTAwM2V0ZW1wZXJhdHVyZV9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cmVzcC5wYXlsb2FkWzVdKTtcbitcdG1lYXN1cmVtZW50LVx1MDAzZXBvd2VyX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZyZXNwLnBheWxvYWRbN10pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgKmNvbmZpZylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRjb25maWctXHUwMDNlZW5hYmxlID0gKHJlc3AucGF5bG9hZFsxXSA9PSAxKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcbitcdFx0XHRcdFx0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnICpjb25maWcpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XG4rXHRpbnQgcmV0O1xuK1xuK1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR107XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXHUwMDNlb3AsIFx1MDAyNnJlc3ApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGNvbmZpZy1cdTAwM2VtYXhfcG93ZXIgPSByZXNwLnBheWxvYWRbM107XG4rXHRjb25maWctXHUwMDNlcHJpb3JpdHkgPSByZXNwLnBheWxvYWRbNF07XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCBib29sIGVuYWJsZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1xuK1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBwb3J0LCBvcGMtXHUwMDNlb3AsIGVuYWJsZSA/IDB4MSA6IDB4MCk7XG4rfVxuK1xuKy8qIFBTRSBjb250cm9sbGVyIG9wcyAqL1xuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4rXHRcdFx0XHRcdCAgc3RydWN0IHBzZV9hZG1pbl9zdGF0ZSAqYWRtaW5fc3RhdGUpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfY29uZmlnIGNvbmZpZztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfY29uZmlnKHBzZSwgaWQsIFx1MDAyNmNvbmZpZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0YWRtaW5fc3RhdGUtXHUwMDNlYzMzX2FkbWluX3N0YXRlID0gY29uZmlnLmVuYWJsZSA/IEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEIDpcbitcdFx0XHRcdFx0XHQgICAgICAgRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0RJU0FCTEVEO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgcHNlX3B3X3N0YXR1cyAqcHdfc3RhdHVzKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyBzdGF0dXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhwc2UsIGlkLCBcdTAwMjZzdGF0dXMpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHN3aXRjaCAoc3RhdHVzLnN0czEpIHtcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEOlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19ESVNBQkxFRDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkc6XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19TRUFSQ0hJTkc7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzpcbitcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfREVMSVZFUklORztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19URVNUOlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19URVNUO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUOlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19GQVVMVDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVDpcbitcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfT1RIRVJGQVVMVDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19VTktOT1dOO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyBzdGF0dXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhwc2UsIGlkLCBcdTAwMjZzdGF0dXMpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qXG4rXHQgKiBzdHMyIGhvbGRzIHRoZSBjbGFzcyBvbmx5IGluIHRoZSBvcGVyYXRpb25hbCBzdGF0ZXMgYmVsb3cuIEluIGFcbitcdCAqIGZhdWx0L3Rlc3Qgc3RhdGUgKG9yIGEgY29kZSByZXNlcnZlZCBvbiB0aGUgY3VycmVudCBkaWFsZWN0KSBpdFxuK1x0ICogZG9lcyBub3QsIHNvIHRoZXJlIGlzIG5vIGNsYXNzIHRvIHJlcG9ydCBhbmQgd2UgcmV0dXJuIDAuIFRoYXQgaXNcbitcdCAqIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSByZWFsIGNsYXNzLTAgUEQ7IHVzZXJzcGFjZSBkaXNhbWJpZ3VhdGVzXG4rXHQgKiB2aWEgdGhlIHBvd2VyIHN0YXR1cy5cbitcdCAqL1xuK1x0c3dpdGNoIChzdGF0dXMuc3RzMSkge1xuK1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkc6XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOlxuK1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElORzpcbitcdFx0cmV0dXJuIHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3BvcnRfY2xhc3MoXHUwMDI2c3RhdHVzKTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgXHUwMDI2bWVhc3VyZW1lbnQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIDEwMG1XIHBlciBMU0IgKi9cbitcdHJldHVybiBtZWFzdXJlbWVudC5wb3dlcl9yYXcgKiAxMDBVO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQgbWVhc3VyZW1lbnQ7XG4rXHRpbnQgcmV0O1xuK1x0dTMyIHVWO1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X21lYXN1cmVtZW50KHBzZSwgaWQsIFx1MDAyNm1lYXN1cmVtZW50KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiA2NC40NW1WIHBlciBMU0IgKi9cbitcdHVWID0gbWVhc3VyZW1lbnQudm9sdGFnZV9yYXcgKiA2NDQ1MFU7XG4rXHRyZXR1cm4gbWluX3QodTMyLCB1ViwgSU5UX01BWCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZW5hYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4re1xuK1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZSh0b19ydHBzZV9tY3VfY3RybChwY2RldiksIGlkLCB0cnVlKTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9kaXNhYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4re1xuK1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZSh0b19ydHBzZV9tY3VfY3RybChwY2RldiksIGlkLCBmYWxzZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gY29uZmlnLm1heF9wb3dlciAqIHBzZS1cdTAwM2VjaGlwLVx1MDAzZXB3X3JlYWRfbHNiX21XO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLCBpbnQgbWF4X21XKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICp0eXBlX29wYywgKnZhbF9vcGM7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwID0gcHNlLVx1MDAzZWNoaXA7XG4rXHR1OCBwcmdfdmFsO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChtYXhfbVcgXHUwMDNjIDAgfHwgbWF4X21XIFx1MDAzZSBjaGlwLVx1MDAzZW1heF9tV19wZXJfcG9ydClcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHR0eXBlX29wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdO1xuK1x0dmFsX29wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtjaGlwLVx1MDAzZXB3X3NldF9jbWRdO1xuK1x0LyogcHdfc2V0X2xzYl9tVyBpcyB0aGUgZGl2aXNvciBiZWxvdzsgcmVqZWN0IGEgY2hpcCB0aGF0IGxhY2tzIGl0LiAqL1xuK1x0aWYgKCF0eXBlX29wYy1cdTAwM2V2YWxpZCB8fCAhdmFsX29wYy1cdTAwM2V2YWxpZCB8fCAhY2hpcC1cdTAwM2Vwd19zZXRfbHNiX21XKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHQvKlxuK1x0ICogU3dpdGNoIHRoZSBwb3J0IHRvIHVzZXItZGVmaW5lZCBsaW1pdCBtb2RlIGZpcnN0LCB0aGVuIHByb2dyYW0gdGhlXG4rXHQgKiBsaW1pdCB2YWx1ZS4gSWYgdGhlIHNlY29uZCBjbWQgZmFpbHMsIHRoZSBwb3J0IGlzIGxlZnQgaW5cbitcdCAqIHVzZXItZGVmaW5lZCBtb2RlIGJ1dCB3aXRoIHRoZSBwcmV2aW91cyBsaW1pdCB2YWx1ZTsgdGhlIG5leHRcbitcdCAqIHN1Y2Nlc3NmdWwgc2V0X3B3X2xpbWl0IGNhbGwgcmVjb3ZlcnMgaXQuXG4rXHQgKi9cbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCB0eXBlX29wYy1cdTAwM2VvcCwgUlRQU0VfTUNVX1BPUlRfUFdfTElNSVRfVFlQRV9VU0VSKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRwcmdfdmFsID0gbWluX3QodW5zaWduZWQgaW50LCBtYXhfbVcgLyBjaGlwLVx1MDAzZXB3X3NldF9sc2JfbVcsIFU4X01BWCk7XG4rXG4rXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIHZhbF9vcGMtXHUwMDNlb3AsIHByZ192YWwpO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcbitcdFx0XHRcdFx0ICAgICAgc3RydWN0IHBzZV9wd19saW1pdF9yYW5nZXMgKm91dClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBldGh0b29sX2MzM19wc2VfcHdfbGltaXRfcmFuZ2UgKnJhbmdlO1xuK1xuK1x0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UpO1xuK1x0aWYgKCFyYW5nZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyYW5nZVswXS5taW4gPSAwO1xuK1x0cmFuZ2VbMF0ubWF4ID0gcHNlLVx1MDAzZWNoaXAtXHUwMDNlbWF4X21XX3Blcl9wb3J0O1xuK1xuK1x0b3V0LVx1MDAzZWMzM19wd19saW1pdF9yYW5nZXMgPSByYW5nZTtcbitcdHJldHVybiAxO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gY29uZmlnLnByaW9yaXR5O1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcmlvKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcbitcdGlmIChwcmlvIFx1MDAzZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFkpXG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1xuK1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgb3BjLVx1MDAzZW9wLCBwcmlvKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9vcHMgcnRwc2VfbWN1X29wcyA9IHtcbitcdC5waV9nZXRfYWRtaW5fc3RhdGUgPSBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUsXG4rXHQucGlfZ2V0X3B3X3N0YXR1cyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMsXG4rXHQucGlfZ2V0X3B3X2NsYXNzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzLFxuK1x0LnBpX2dldF9hY3R1YWxfcHcgPSBydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3LFxuK1x0LnBpX2VuYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2VuYWJsZSxcbitcdC5waV9kaXNhYmxlID0gcnRwc2VfbWN1X3BvcnRfZGlzYWJsZSxcbitcdC5waV9nZXRfdm9sdGFnZSA9IHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlLFxuK1x0LnBpX2dldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdCxcbitcdC5waV9zZXRfcHdfbGltaXQgPSBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXQsXG4rXHQucGlfZ2V0X3B3X2xpbWl0X3JhbmdlcyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMsXG4rXHQucGlfZ2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9nZXRfcHJpbyxcbitcdC5waV9zZXRfcHJpbyA9IHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvLFxuK307XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfZGlzY292ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgZXh0X2NvbmZpZztcbitcdHVuc2lnbmVkIGxvbmcgZGVhZGxpbmU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LypcbitcdCAqIEEgYm9vdGluZyBNQ1UgbWF5IHN0YXkgc2lsZW50ICgtRVRJTUVET1VUKSwgbm90IEFDSyBpdHMgYWRkcmVzc1xuK1x0ICogKC1FTlhJTyAvIC1FUkVNT1RFSU8pLCByZXBvcnQgbm90LXJlYWR5ICgtRUFHQUlOKSwgb3IgZW1pdCBhXG4rXHQgKiBjb3JydXB0L3BhcnRpYWwgZnJhbWUgKC1FQkFETVNHIC8gLUVCQURFKS4gUmV0cnkgdGhvc2Ugd2l0aGluIGFcbitcdCAqIGJvdW5kZWQgd2luZG93OyBvdGhlciBlcnJvcnMgKGUuZy4gLUVPUE5PVFNVUFApIGFyZSBmYXRhbCBhbmQgZmFpbFxuK1x0ICogaW1tZWRpYXRlbHkuXG4rXHQgKi9cbitcdGRlYWRsaW5lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUlRQU0VfTUNVX0JPT1RfVElNRU9VVF9NUyk7XG4rXHRkbyB7XG4rXHRcdHJldCA9IHJ0cHNlX21jdV9nZXRfaW5mbyhwc2UsIGluZm8pO1xuK1x0XHRpZiAocmV0ICE9IC1FVElNRURPVVQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU5YSU8gXHUwMDI2XHUwMDI2IHJldCAhPSAtRVJFTU9URUlPIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcmV0ICE9IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHJldCAhPSAtRUJBRE1TRyBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQkFERSlcbitcdFx0XHRicmVhaztcbitcdFx0bXNsZWVwKFJUUFNFX01DVV9CT09UX1JFVFJZX01TKTtcbitcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsIFwiZmFpbGVkIHRvIHJlYWQgTUNVIGluZm9cXG5cIik7XG4rXG4rXHRzd2l0Y2ggKGluZm8tXHUwMDNlZGV2aWNlX2lkKSB7XG4rXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEI6XG4rXHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2cnRsODIzOGJfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOTpcbitcdFx0cHNlLVx1MDAzZWNoaXAgPSBcdTAwMjZydGw4MjM5X2luZm87XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDOlxuK1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNnJ0bDgyMzljX2luZm87XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExOlxuK1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNmJjbTU5MTExX2luZm87XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxOlxuK1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNmJjbTU5MTIxX2luZm87XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVJTlZBTCwgXCJ1bmtub3duIFBTRSBpZCAweCV4XFxuXCIsXG4rXHRcdFx0XHQgICAgIGluZm8tXHUwMDNlZGV2aWNlX2lkKTtcbitcdH1cbitcbitcdGlmICghaW5mby1cdTAwM2VtYXhfcG9ydHMgfHwgaW5mby1cdTAwM2VtYXhfcG9ydHMgXHUwMDNlIFJUUFNFX01DVV9NQVhfUE9SVFMpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgIFwiTUNVIHJlcG9ydHMgaW52YWxpZCBwb3J0IGNvdW50ICV1XFxuXCIsIGluZm8tXHUwMDNlbWF4X3BvcnRzKTtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9nZXRfZXh0X2NvbmZpZyhwc2UsIFx1MDAyNmV4dF9jb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgcmV0LCBcImZhaWxlZCB0byByZWFkIE1DVSBleHQgY29uZmlnXFxuXCIpO1xuK1xuK1x0ZGV2X2luZm8ocHNlLVx1MDAzZWRldiwgXCIlcyBNQ1UsICVzIChpZCAweCUwNHgpLCAldSBwb3J0cyBhY3Jvc3MgJXUgUFNFIGNoaXAocylcXG5cIixcbitcdFx0IHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW1jdV90eXBlX3N0cihpbmZvLVx1MDAzZW1jdV90eXBlKSwgcHNlLVx1MDAzZWNoaXAtXHUwMDNlbmFtZSxcbitcdFx0IGluZm8tXHUwMDNlZGV2aWNlX2lkLCBpbmZvLVx1MDAzZW1heF9wb3J0cywgZXh0X2NvbmZpZy5udW1fb2ZfcHNlcyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X3JlZ3VsYXRvcl9kaXNhYmxlKHZvaWQgKmRhdGEpXG4re1xuK1x0cmVndWxhdG9yX2Rpc2FibGUoZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nbG9iYWxfZGlzYWJsZSh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gZGF0YTtcbitcbitcdHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHBzZSwgZmFsc2UpO1xuK31cbitcbitpbnQgcnRwc2VfbWN1X3JlZ2lzdGVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2g7XG4rXHRzdHJ1Y3QgZ3Bpb19kZXNjICplbmFibGVfZ3BpbztcbitcdHN0cnVjdCBydHBzZV9tY3VfaW5mbyBpbmZvO1xuK1x0aW50IHJldDtcbitcbitcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHJ0cHNlX21jdV9tc2cpICE9IFJUUFNFX01DVV9NU0dfU0laRSk7XG4rXG4rXHRyZXQgPSBkZXZtX211dGV4X2luaXQocHNlLVx1MDAzZWRldiwgXHUwMDI2cHNlLVx1MDAzZW11dGV4KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRtYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShwc2UtXHUwMDNlZGV2KTtcbitcdGlmICghbWF0Y2gpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIC1FTk9ERVYsIFwibWlzc2luZyBtYXRjaCBkYXRhXFxuXCIpO1xuK1x0cHNlLVx1MDAzZWRpYWxlY3QgPSBtYXRjaC1cdTAwM2VkaWFsZWN0O1xuK1xuK1x0LypcbitcdCAqIENhdGNoIGEgZGlhbGVjdCB0aGF0IGZvcmdvdCB0byBzZXQgb25lIG9mIHRoZSByZXF1aXJlZCBob29rcyBhdFxuK1x0ICogcHJvYmUgdGltZSwgcmF0aGVyIHRoYW4gTlVMTC1kZXJlZidpbmcgbGF0ZXIgZnJvbSBhIGZhc3QgcGF0aC5cbitcdCAqL1xuK1x0aWYgKCFwc2UtXHUwMDNlZGlhbGVjdCB8fFxuK1x0ICAgICFwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VwYXJzZV9zeXN0ZW1faW5mbyB8fFxuK1x0ICAgICFwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VwYXJzZV9wb3J0X2NsYXNzIHx8XG4rXHQgICAgIXBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW1jdV90eXBlX3N0cilcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICAgXCJkaWFsZWN0IGZvciBjaGlwIGlzIGluY29tcGxldGVcXG5cIik7XG4rXG4rXHRwc2UtXHUwMDNlcG9lX3N1cHBseSA9IGRldm1fcmVndWxhdG9yX2dldChwc2UtXHUwMDNlZGV2LCBcInBvd2VyXCIpO1xuK1x0aWYgKElTX0VSUihwc2UtXHUwMDNlcG9lX3N1cHBseSkpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIFBUUl9FUlIocHNlLVx1MDAzZXBvZV9zdXBwbHkpLFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBnZXQgUG9FIHN1cHBseVxcblwiKTtcbitcbitcdGVuYWJsZV9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwocHNlLVx1MDAzZWRldiwgXCJlbmFibGVcIiwgR1BJT0RfT1VUX0hJR0gpO1xuK1x0aWYgKElTX0VSUihlbmFibGVfZ3BpbykpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIFBUUl9FUlIoZW5hYmxlX2dwaW8pLFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBnZXQgZW5hYmxlIGdwaW9cXG5cIik7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfZGlzY292ZXIocHNlLCBcdTAwMjZpbmZvKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHBzZS1cdTAwM2Vwb2Vfc3VwcGx5KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIHJldCwgXCJmYWlsZWQgdG8gZW5hYmxlIFBvRSBzdXBwbHlcXG5cIik7XG4rXG4rXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQocHNlLVx1MDAzZWRldiwgcnRwc2VfbWN1X3JlZ3VsYXRvcl9kaXNhYmxlLCBwc2UtXHUwMDNlcG9lX3N1cHBseSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKCFpbmZvLnN5c3RlbV9lbmFibGUpIHtcbitcdFx0cmV0ID0gcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCB0cnVlKTtcbitcdFx0LyogRGlhbGVjdHMgd2l0aG91dCBhIGdsb2JhbC1zdGF0ZSBjb25jZXB0IChlLmcuIEJDTSkgcmV0dXJuXG4rXHRcdCAqIC1FT1BOT1RTVVBQOyB0cmVhdCB0aGF0IGFzIFwibm8gc2VwYXJhdGUgZW5hYmxlIHJlcXVpcmVkXCIuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVPUE5PVFNVUFApXG4rXHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGVuYWJsZSBQU0Ugc3lzdGVtXFxuXCIpO1xuK1x0XHRpZiAoIXJldCkge1xuK1x0XHRcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChwc2UtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHRcdCAgICAgICBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUsIHBzZSk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qXG4rXHQgKiBEZXBlbmRpbmcgb24gdGhlIE1DVSBmaXJtd2FyZSBjb25maWd1cmF0aW9uICh3aGljaCBtaWdodCBiZSBkaWZmZXJlbnRcbitcdCAqIGZvciBldmVyeSBib2FyZCksIGl0IGlzbid0IGtub3duIHdoZXRoZXIgdGhlIFBvRSBzdWJzeXN0ZW0gaXMgYWN0aXZlIG9yXG4rXHQgKiBpbmFjdGl2ZSBieSBkZWZhdWx0LiBBdCB0aGlzIHN0YWdlLCB0aGUgUFNFIGNoaXBzIG1pZ2h0IGFscmVhZHkgZGVsaXZlclxuK1x0ICogcG93ZXIgdG8gUERzIHdpdGhvdXQgYW55IGV4cGxpY2l0IGVuYWJsZS5cbitcdCAqL1xuK1xuK1x0LyogcGNkZXYub3duZXIgaXMgc2V0IGJ5IHRoZSB0cmFuc3BvcnQsIHNvIHRoZSByZWdpc3RlcmVkIGNvbnRyb2xsZXJcbitcdCAqIHBpbnMgdGhlIHRyYW5zcG9ydCBtb2R1bGUgdGhhdCBvd25zIHRoZSBsaXZlIGRldmljZSwgbm90IHRoZSBjb3JlLlxuK1x0ICovXG4rXHRwc2UtXHUwMDNlcGNkZXYub3BzICAgICAgPSBcdTAwMjZydHBzZV9tY3Vfb3BzO1xuK1x0cHNlLVx1MDAzZXBjZGV2LmRldiAgICAgID0gcHNlLVx1MDAzZWRldjtcbitcdHBzZS1cdTAwM2VwY2Rldi50eXBlcyAgICA9IEVUSFRPT0xfUFNFX0MzMztcbitcdHBzZS1cdTAwM2VwY2Rldi5ucl9saW5lcyA9IGluZm8ubWF4X3BvcnRzO1xuK1x0cHNlLVx1MDAzZXBjZGV2LnBpc19wcmlvX21heCA9IFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWTtcbitcdHBzZS1cdTAwM2VwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQztcbitcbitcdHJldHVybiBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHBzZS1cdTAwM2VkZXYsIFx1MDAyNnBzZS1cdTAwM2VwY2Rldik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9yZWdpc3Rlcik7XG4rXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X3J0bF9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuK3tcbitcdGluZm8tXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcbitcdGluZm8tXHUwMDNlc3lzdGVtX2VuYWJsZSA9IChwYXlsb2FkWzJdID09IDB4MSk7XG4rXHRpbmZvLVx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZwYXlsb2FkWzNdKTtcbitcdGluZm8tXHUwMDNlc3dfdmVyID0gcGF5bG9hZFs1XTtcbitcdGluZm8tXHUwMDNlbWN1X3R5cGUgPSBwYXlsb2FkWzZdO1xuK1x0aW5mby1cdTAwM2Vjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTtcbitcdGluZm8tXHUwMDNlZXh0X3ZlciA9IHBheWxvYWRbOF07XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3J0bF9wYXJzZV9wb3J0X2NsYXNzKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbit7XG4rXHQvKiBDbGFzcyBsaXZlcyBpbiB0aGUgdXBwZXIgbmliYmxlIG9mIHN0czIuICovXG4rXHRyZXR1cm4gRklFTERfR0VUKEdFTk1BU0soNywgNCksIHN0YXR1cy1cdTAwM2VzdHMyKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9ydGxfbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSlcbit7XG4rXHRzd2l0Y2ggKG1jdV90eXBlKSB7XG4rXHRjYXNlIDB4MDA6XHRyZXR1cm4gXCJHaWdhRGV2aWNlIEdEMzJGMzEwXCI7XG4rXHRjYXNlIDB4MDE6XHRyZXR1cm4gXCJHaWdhRGV2aWNlIEdEMzJGMjMwXCI7XG4rXHRjYXNlIDB4MDI6XHRyZXR1cm4gXCJHaWdhRGV2aWNlIEdEMzJGMzAzXCI7XG4rXHRjYXNlIDB4MDM6XHRyZXR1cm4gXCJHaWdhRGV2aWNlIEdEMzJGMTAzXCI7XG4rXHRjYXNlIDB4MDQ6XHRyZXR1cm4gXCJHaWdhRGV2aWNlIEdEMzJFMTAzXCI7XG4rXHRjYXNlIDB4MTA6XHRyZXR1cm4gXCJOdXZvdG9uIE0wNTE2XCI7XG4rXHRjYXNlIDB4MTE6XHRyZXR1cm4gXCJOdXZvdG9uIE0wNTY0XCI7XG4rXHRjYXNlIDB4MTI6XHRyZXR1cm4gXCJOdXZvdG9uIE5VQzAyOVwiO1xuK1x0ZGVmYXVsdDpcdHJldHVybiBcInVua25vd25cIjtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X2JyY21fcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcbit7XG4rXHRpbmZvLVx1MDAzZW1heF9wb3J0cyA9IHBheWxvYWRbMV07XG4rXHQvKiBCQ00gaGFzIG5vIGV4cGxpY2l0IHN5c3RlbV9lbmFibGUgYnl0ZTsgdGhlIGNsb3Nlc3QgYW5hbG9nIGlzIHRoZVxuK1x0ICogXCJyZW1vdGUgZW5hYmxlXCIgYml0IGluIHRoZSBzeXN0ZW0tc3RhdHVzIGZsYWdzIGF0IHBheWxvYWRbN10uXG4rXHQgKi9cbitcdGluZm8tXHUwMDNlc3lzdGVtX2VuYWJsZSA9ICEhKHBheWxvYWRbN10gXHUwMDI2IEJJVCgyKSk7XG4rXHRpbmZvLVx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZwYXlsb2FkWzNdKTtcbitcdGluZm8tXHUwMDNlc3dfdmVyID0gcGF5bG9hZFs1XTtcbitcdGluZm8tXHUwMDNlbWN1X3R5cGUgPSBwYXlsb2FkWzZdO1xuK1x0aW5mby1cdTAwM2Vjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTtcbitcdGluZm8tXHUwMDNlZXh0X3ZlciA9IHBheWxvYWRbOF07XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2JyY21fcGFyc2VfcG9ydF9jbGFzcyhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpXG4re1xuK1x0LyogQkNNIHB1dHMgdGhlIGRldGVjdGVkIGNsYXNzIGluIHBheWxvYWRbM10gKD09IHN0czMpIGRpcmVjdGx5LlxuK1x0ICogTWFzayB0byB0aGUgbG93IG5pYmJsZTsgY2xhc3MgaXMgMC4uOCBhbmQgYW55IGhpZ2ggYml0cyB3b3VsZCBiZVxuK1x0ICogbm9pc2UuXG4rXHQgKi9cbitcdHJldHVybiBzdGF0dXMtXHUwMDNlc3RzMyBcdTAwMjYgMHgwZjtcbit9XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9icmNtX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpXG4re1xuK1x0c3dpdGNoIChtY3VfdHlwZSkge1xuK1x0Y2FzZSAweDAwOlx0cmV0dXJuIFwiU1QgTWljcm8gU1QzMkYxMDBcIjtcbitcdGNhc2UgMHgwMTpcdHJldHVybiBcIk51dm90b24gTTA1eHggTEFOXCI7XG4rXHRjYXNlIDB4MDI6XHRyZXR1cm4gXCJTVCBNaWNybyBTVEYwMzBDOFwiO1xuK1x0Y2FzZSAweDAzOlx0cmV0dXJuIFwiTnV2b3RvbiBNMDU4U0FOXCI7XG4rXHRjYXNlIDB4MDQ6XHRyZXR1cm4gXCJOdXZvdG9uIE5VQzEyMlwiO1xuK1x0ZGVmYXVsdDpcdHJldHVybiBcInVua25vd25cIjtcbitcdH1cbit9XG4rXG4rLyogTWFwIGVhY2ggbG9naWNhbCBjb21tYW5kIHRoZSBjb3JlIGlzc3VlcyB0byBpdHMgcGVyLWRpYWxlY3Qgb3Bjb2RlLiAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgcnRwc2VfbWN1X2RpYWxlY3RfcnRrID0ge1xuK1x0LnBhcnNlX3N5c3RlbV9pbmZvID0gcnRwc2VfbWN1X3J0bF9wYXJzZV9zeXN0ZW1faW5mbyxcbitcdC5wYXJzZV9wb3J0X2NsYXNzICA9IHJ0cHNlX21jdV9ydGxfcGFyc2VfcG9ydF9jbGFzcyxcbitcdC5tY3VfdHlwZV9zdHIgICAgICA9IHJ0cHNlX21jdV9ydGxfbWN1X3R5cGVfc3RyLFxuK1x0Lm9wY29kZSA9IHtcbitcdFx0W1JUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURV1cdD0gUlRQU0VfTUNVX09QKDB4MDApLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dXHRcdD0gUlRQU0VfTUNVX09QKDB4NDApLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0YSksXG4rXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXVx0XHQ9IFJUUFNFX01DVV9PUCgweDAxKSxcbitcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxMiksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVx0PSBSVFBTRV9NQ1VfT1AoMHgxMyksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVF0gPSBSVFBTRV9NQ1VfT1AoMHgxNCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXVx0PSBSVFBTRV9NQ1VfT1AoMHgxNSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0MiksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXVx0PSBSVFBTRV9NQ1VfT1AoMHg0NCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0OCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddXHQ9IFJUUFNFX01DVV9PUCgweDQ5KSxcbitcdH0sXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHJ0cHNlX21jdV9kaWFsZWN0X2JyY20gPSB7XG4rXHQucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfYnJjbV9wYXJzZV9zeXN0ZW1faW5mbyxcbitcdC5wYXJzZV9wb3J0X2NsYXNzICA9IHJ0cHNlX21jdV9icmNtX3BhcnNlX3BvcnRfY2xhc3MsXG4rXHQubWN1X3R5cGVfc3RyICAgICAgPSBydHBzZV9tY3VfYnJjbV9tY3VfdHlwZV9zdHIsXG4rXHQub3Bjb2RlID0ge1xuK1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dXHRcdD0gUlRQU0VfTUNVX09QKDB4MjApLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHgyYiksXG4rXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXVx0XHQ9IFJUUFNFX01DVV9PUCgweDAwKSxcbitcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxNSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVx0PSBSVFBTRV9NQ1VfT1AoMHgxNiksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXVx0PSBSVFBTRV9NQ1VfT1AoMHgxYSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU11cdFx0PSBSVFBTRV9NQ1VfT1AoMHgyMSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXVx0PSBSVFBTRV9NQ1VfT1AoMHgzMCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHgyNSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddXHQ9IFJUUFNFX01DVV9PUCgweDI2KSxcbitcdH0sXG4rfTtcbitcbitjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X3J0a19kYXRhID0ge1xuK1x0LmRpYWxlY3QgPSBcdTAwMjZydHBzZV9tY3VfZGlhbGVjdF9ydGssXG4rXHQuaTJjX3Byb3RvX2R0X3JlcXVpcmVkID0gdHJ1ZSxcbit9O1xuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9ydGtfZGF0YSk7XG4rXG4rY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9icmNtX2RhdGEgPSB7XG4rXHQuZGlhbGVjdCA9IFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X2JyY20sXG4rfTtcbitFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfYnJjbV9kYXRhKTtcbitcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1UgZHJpdmVyIChjb3JlKVwiKTtcbitNT0RVTEVfQVVUSE9SKFwiSm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42ZTZlMzY0NWM1MDkwM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xuQEAgLTAsMCArMSwxNjMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwicmVhbHRlay1wc2UtbWN1LmhcIlxuK1xuKy8qXG4rICogVGhlIGNvcmUgaGFzIGFscmVhZHkgd2FpdGVkIFJUUFNFX01DVV9SRVNQT05TRV9NUyBiZWZvcmUgY2FsbGluZyB1cywgc29cbisgKiB0aGUgcmVzcG9uc2UgaXMgbm9ybWFsbHkgcmVhZHkgb24gdGhlIHZlcnkgZmlyc3QgcmVhZC4gRm9yIGNvbW1hbmRzIHRoZVxuKyAqIE1DVSBwcm9kdWNlcyBtb3JlIHNsb3dseSwga2VlcCBwb2xsaW5nIGF0IHRoZSB0eXBpY2FsIHJlc3BvbnNlIGNhZGVuY2VcbisgKiB1cCB0byB0aGUgd29yc3QtY2FzZSBjZWlsaW5nLlxuKyAqL1xuKyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19SRVRSWV9NU1x0UlRQU0VfTUNVX1JFU1BPTlNFX01TXG4rI2RlZmluZSBSVFBTRV9NQ1VfSTJDX01BWF9UUklFU1x0KFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMgLyBSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuK3tcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuK1xuK1x0LyogU2VuZCBvcGNvZGUgYXMgU01CdXMgY29tbWFuZCBieXRlOyByZW1haW5pbmcgMTEgYnl0ZXMgYXMgYmxvY2sgZGF0YSAqL1xuK1x0cmV0dXJuIGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShjbGllbnQsIHJlcS1cdTAwM2VvcGNvZGUsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEsXG4rXHRcdFx0XHRcdCAgICAgICh1OCAqKXJlcSArIDEpO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbit7XG4rXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtXHUwMDNlZGV2KTtcbitcdGludCB0cmllcywgcmV0O1xuK1xuK1x0Zm9yICh0cmllcyA9IDA7IHRyaWVzIFx1MDAzYyBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUzsgdHJpZXMrKykge1xuK1x0XHRpZiAodHJpZXMgXHUwMDNlIDApXG4rXHRcdFx0bXNsZWVwKFJUUFNFX01DVV9JMkNfUkVUUllfTVMpO1xuK1xuK1x0XHQvKiBNQ1UgbmVlZHMgMHgwMCBhcyBjb21tYW5kIGJ5dGUgZm9yIHJlYWQgKi9cbitcdFx0cmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCAweDAwLFxuK1x0XHRcdFx0XHRcdCAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsXG4rXHRcdFx0XHRcdFx0ICAgICh1OCAqKXJlc3ApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFIFx1MDAyNlx1MDAyNiBydHBzZV9tY3VfcmVzcF9pc19maW5hbChyZXEsIHJlc3ApKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FVElNRURPVVQ7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X2kyY19zbWJ1c19vcHMgPSB7XG4rXHQuc2VuZCA9IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZCxcbitcdC5yZWN2ID0gcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2LFxuK307XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuK3tcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIChjb25zdCB1OCAqKXJlcSwgUlRQU0VfTUNVX01TR19TSVpFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gcmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSA/IDAgOiAtRUlPO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuK3tcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuK1x0aW50IHRyaWVzLCByZXQ7XG4rXG4rXHRmb3IgKHRyaWVzID0gMDsgdHJpZXMgXHUwMDNjIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcysrKSB7XG4rXHRcdGlmICh0cmllcyBcdTAwM2UgMClcbitcdFx0XHRtc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7XG4rXG4rXHRcdHJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsICh1OCAqKXJlc3AsIFJUUFNFX01DVV9NU0dfU0laRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUgXHUwMDI2XHUwMDI2IHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgPSB7XG4rXHQuc2VuZCA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3NlbmQsXG4rXHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YsXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZjbGllbnQtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaDtcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlO1xuK1x0Ym9vbCB1c2VfbmF0aXZlID0gZmFsc2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bWF0Y2ggPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcbitcdGlmICghbWF0Y2gpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwgXCJtaXNzaW5nIG1hdGNoIGRhdGFcXG5cIik7XG4rXG4rXHRpZiAocnRwc2VfbWN1X25lZWRzX2kyY19wcm90byhtYXRjaCkpIHtcbitcdFx0Y29uc3QgY2hhciAqcHJvdG87XG4rXG4rXHRcdHJldCA9IGRldmljZV9wcm9wZXJ0eV9yZWFkX3N0cmluZyhkZXYsIFwicmVhbHRlayxpMmMtcHJvdG9jb2xcIiwgXHUwMDI2cHJvdG8pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgIFwibWlzc2luZyByZXF1aXJlZCBcXFwicmVhbHRlayxpMmMtcHJvdG9jb2xcXFwiIHByb3BlcnR5XFxuXCIpO1xuK1xuK1x0XHRpZiAoIXN0cmNtcChwcm90bywgXCJpMmNcIikpXG4rXHRcdFx0dXNlX25hdGl2ZSA9IHRydWU7XG4rXHRcdGVsc2UgaWYgKCFzdHJjbXAocHJvdG8sIFwic21idXNcIikpXG4rXHRcdFx0dXNlX25hdGl2ZSA9IGZhbHNlO1xuK1x0XHRlbHNlXG4rXHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgIFwidW5rbm93biByZWFsdGVrLGkyYy1wcm90b2NvbCBcXFwiJXNcXFwiXFxuXCIsIHByb3RvKTtcbitcdH1cbitcbitcdGlmICh1c2VfbmF0aXZlKSB7XG4rXHRcdGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LVx1MDAzZWFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpXG4rXHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCxcbitcdFx0XHRcdFwicGxhaW4tSTJDIE1DVSBwcm90b2NvbCByZXF1aXJlcyBJMkMtY2FwYWJsZSBhZGFwdGVyXFxuXCIpO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtXHUwMDNlYWRhcHRlcixcbitcdFx0XHRcdFx0ICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sgfFxuK1x0XHRcdFx0XHQgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLKSlcbitcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLFxuK1x0XHRcdFx0XCJTTUJ1cyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgU01CdXMgSTJDLWJsb2NrIHN1cHBvcnRcXG5cIik7XG4rXHR9XG4rXG4rXHRwc2UgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBzZSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwc2UpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cHNlLVx1MDAzZWRldiA9IGRldjtcbitcdHBzZS1cdTAwM2VwY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xuK1x0cHNlLVx1MDAzZXRyYW5zcG9ydCA9IHVzZV9uYXRpdmUgPyBcdTAwMjZydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgOiBcdTAwMjZydHBzZV9tY3VfaTJjX3NtYnVzX29wcztcbitcbitcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIocHNlKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X2kyY19vZl9tYXRjaFtdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxwc2UtbWN1LXJ0a1wiLCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9ydGtfZGF0YSB9LFxuK1x0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxwc2UtbWN1LWJyY21cIiwgLmRhdGEgPSBcdTAwMjZydHBzZV9tY3VfYnJjbV9kYXRhIH0sXG4rXHR7IC8qIHNlbnRpbmVsICovIH1cbit9O1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2gpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBydHBzZV9tY3VfaTJjX2RyaXZlciA9IHtcbitcdC5kcml2ZXIgPSB7XG4rXHRcdC5uYW1lXHRcdD0gXCJyZWFsdGVrLXBzZS1tY3UtaTJjXCIsXG4rXHRcdC5vZl9tYXRjaF90YWJsZVx0PSBydHBzZV9tY3VfaTJjX29mX21hdGNoLFxuK1x0fSxcbitcdC5wcm9iZVx0XHQ9IHJ0cHNlX21jdV9pMmNfcHJvYmUsXG4rfTtcbittb2R1bGVfaTJjX2RyaXZlcihydHBzZV9tY3VfaTJjX2RyaXZlcik7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiUmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydClcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lZjA0ZTBkOTI5NjNiNVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmNcbkBAIC0wLDAgKzEsMTU2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2VyZGV2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInJlYWx0ZWstcHNlLW1jdS5oXCJcbitcbisjZGVmaW5lIFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVFx0MTkyMDBcbisjZGVmaW5lIFJUUFNFX01DVV9VQVJUX1RYX1RJTUVPVVRcdG1zZWNzX3RvX2ppZmZpZXMoMTAwKVxuKyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfUlhfVElNRU9VVFx0bXNlY3NfdG9famlmZmllcyhSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TKVxuK1xuK3N0cnVjdCBydHBzZV9tY3VfdWFydCB7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgcHNlO1xuK1x0c3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldjtcbitcdHN0cnVjdCBjb21wbGV0aW9uIHJ4X2RvbmU7XG4rXHRzcGlubG9ja190IHJ4X2xvY2s7XHRcdC8qIHByb3RlY3RzIHJ4X2J1ZiBhbmQgcnhfbGVuICovXG4rXHRzaXplX3QgcnhfbGVuO1xuK1x0dTggcnhfYnVmW1JUUFNFX01DVV9NU0dfU0laRV07XG4rfTtcbitcbisjZGVmaW5lIHRvX3J0cHNlX21jdV91YXJ0KHApICBjb250YWluZXJfb2YocCwgc3RydWN0IHJ0cHNlX21jdV91YXJ0LCBwc2UpXG4rXG4rLypcbisgKiBObyBmcmFtaW5nIGlzIGRvbmUgaGVyZTogYSBnbGl0Y2hlZCBmcmFtZSBjb3N0cyBvbmUgdHJhbnNhY3Rpb24sIHRoZW5cbisgKiB0aGUgbmV4dCBfc2VuZCByZS1mcmFtZXMgZnJvbSByeF9sZW4gMC4gUmVzeW5jIHdvcmtzIGJ5IHJldHVybmluZyBjb3VudFxuKyAqIChub3QgdGFrZSksIGRyb3BwaW5nIGFueSBvdmVyZmxvdyBzbyBzZXJkZXYga2VlcHMgbm8gbGVmdG92ZXIgdG8gYmxlZWRcbisgKiBpbnRvIHRoZSBuZXh0IGZyYW1lLlxuKyAqL1xuK3N0YXRpYyBzaXplX3QgcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2LFxuK1x0XHRcdFx0ICAgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgY291bnQpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSBzZXJkZXZfZGV2aWNlX2dldF9kcnZkYXRhKHNlcmRldik7XG4rXHRzaXplX3QgdGFrZTtcbitcbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjdHgtXHUwMDNlcnhfbG9jaykge1xuK1x0XHR0YWtlID0gbWluKGNvdW50LCBzaXplb2YoY3R4LVx1MDAzZXJ4X2J1ZikgLSBjdHgtXHUwMDNlcnhfbGVuKTtcbitcdFx0aWYgKHRha2UpIHtcbitcdFx0XHRtZW1jcHkoY3R4LVx1MDAzZXJ4X2J1ZiArIGN0eC1cdTAwM2VyeF9sZW4sIGJ1ZiwgdGFrZSk7XG4rXHRcdFx0Y3R4LVx1MDAzZXJ4X2xlbiArPSB0YWtlO1xuK1x0XHRcdGlmIChjdHgtXHUwMDNlcnhfbGVuID09IHNpemVvZihjdHgtXHUwMDNlcnhfYnVmKSlcbitcdFx0XHRcdGNvbXBsZXRlKFx1MDAyNmN0eC1cdTAwM2VyeF9kb25lKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogY29uc3VtZSBhbGwgdG8gYXZvaWQgZGVzeW5jL21pc2FsaWdubWVudCAqL1xuK1x0cmV0dXJuIGNvdW50O1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcmRldl9kZXZpY2Vfb3BzIHJ0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMgPSB7XG4rXHQucmVjZWl2ZV9idWYgPSBydHBzZV9tY3VfdWFydF9yZWNlaXZlLFxuK1x0LndyaXRlX3dha2V1cCA9IHNlcmRldl9kZXZpY2Vfd3JpdGVfd2FrZXVwLFxuK307XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfdWFydF9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTtcbitcdGludCB3cml0dGVuO1xuK1xuK1x0LyogY2xlYXIgYW55IGxlZnRvdmVyIHJ4IHN0YXRlIGJlZm9yZSB0cmFuc21pdHRpbmcgKi9cbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjdHgtXHUwMDNlcnhfbG9jaykge1xuK1x0XHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZjdHgtXHUwMDNlcnhfZG9uZSk7XG4rXHRcdGN0eC1cdTAwM2VyeF9sZW4gPSAwO1xuK1x0fVxuK1xuK1x0d3JpdHRlbiA9IHNlcmRldl9kZXZpY2Vfd3JpdGUoY3R4LVx1MDAzZXNlcmRldiwgKGNvbnN0IHU4ICopcmVxLCBzaXplb2YoKnJlcSksXG4rXHRcdFx0XHQgICAgICBSVFBTRV9NQ1VfVUFSVF9UWF9USU1FT1VUKTtcbitcdGlmICh3cml0dGVuIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gd3JpdHRlbjtcbitcdGlmICh3cml0dGVuICE9IHNpemVvZigqcmVxKSlcbitcdFx0cmV0dXJuIC1FSU87XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfdWFydF9yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eCA9IHRvX3J0cHNlX21jdV91YXJ0KHBzZSk7XG4rXG4rXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZjdHgtXHUwMDNlcnhfZG9uZSwgUlRQU0VfTUNVX1VBUlRfUlhfVElNRU9VVCkpXG4rXHRcdHJldHVybiAtRVRJTUVET1VUO1xuK1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmN0eC1cdTAwM2VyeF9sb2NrKSB7XG4rXHRcdGlmIChjdHgtXHUwMDNlcnhfbGVuICE9IHNpemVvZigqcmVzcCkpXG4rXHRcdFx0cmV0dXJuIC1FSU87XG4rXG4rXHRcdG1lbWNweShyZXNwLCBjdHgtXHUwMDNlcnhfYnVmLCBzaXplb2YoKnJlc3ApKTtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHJ0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHMgPSB7XG4rXHQuc2VuZCA9IHJ0cHNlX21jdV91YXJ0X3NlbmQsXG4rXHQucmVjdiA9IHJ0cHNlX21jdV91YXJ0X3JlY3YsXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpXG4re1xuK1x0dTMyIHNwZWVkID0gUlRQU0VfTUNVX1VBUlRfQkFVRF9ERUZBVUxUO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2c2VyZGV2LVx1MDAzZWRldjtcbitcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4O1xuK1x0aW50IHJldDtcbitcbitcdGN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWN0eClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRjdHgtXHUwMDNlc2VyZGV2ID0gc2VyZGV2O1xuK1x0Y3R4LVx1MDAzZXBzZS5kZXYgPSBkZXY7XG4rXHRjdHgtXHUwMDNlcHNlLnBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XG4rXHRjdHgtXHUwMDNlcHNlLnRyYW5zcG9ydCA9IFx1MDAyNnJ0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHM7XG4rXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUpO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y3R4LVx1MDAzZXJ4X2xvY2spO1xuK1xuK1x0c2VyZGV2X2RldmljZV9zZXRfZHJ2ZGF0YShzZXJkZXYsIGN0eCk7XG4rXHRzZXJkZXZfZGV2aWNlX3NldF9jbGllbnRfb3BzKHNlcmRldiwgXHUwMDI2cnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyk7XG4rXG4rXHRyZXQgPSBkZXZtX3NlcmRldl9kZXZpY2Vfb3BlbihkZXYsIHNlcmRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCJmYWlsZWQgdG8gb3BlbiBzZXJkZXZcXG5cIik7XG4rXG4rXHRmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZGV2X2Z3bm9kZShkZXYpLCBcImN1cnJlbnQtc3BlZWRcIiwgXHUwMDI2c3BlZWQpO1xuK1x0c2VyZGV2X2RldmljZV9zZXRfYmF1ZHJhdGUoc2VyZGV2LCBzcGVlZCk7XG4rXHRzZXJkZXZfZGV2aWNlX3NldF9mbG93X2NvbnRyb2woc2VyZGV2LCBmYWxzZSk7XG4rXHRzZXJkZXZfZGV2aWNlX3NldF9wYXJpdHkoc2VyZGV2LCBTRVJERVZfUEFSSVRZX05PTkUpO1xuK1xuK1x0cmV0dXJuIHJ0cHNlX21jdV9yZWdpc3RlcihcdTAwMjZjdHgtXHUwMDNlcHNlKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2hbXSA9IHtcbitcdHsgLmNvbXBhdGlibGUgPSBcInJlYWx0ZWsscHNlLW1jdS1ydGtcIiwgLmRhdGEgPSBcdTAwMjZydHBzZV9tY3VfcnRrX2RhdGEgfSxcbitcdHsgLmNvbXBhdGlibGUgPSBcInJlYWx0ZWsscHNlLW1jdS1icmNtXCIsIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2JyY21fZGF0YSB9LFxuK1x0eyAvKiBzZW50aW5lbCAqLyB9XG4rfTtcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaCk7XG4rXG4rc3RhdGljIHN0cnVjdCBzZXJkZXZfZGV2aWNlX2RyaXZlciBydHBzZV9tY3VfdWFydF9kcml2ZXIgPSB7XG4rXHQuZHJpdmVyID0ge1xuK1x0XHQubmFtZSA9IFwicmVhbHRlay1wc2UtbWN1LXVhcnRcIixcbitcdFx0Lm9mX21hdGNoX3RhYmxlID0gcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2gsXG4rXHR9LFxuK1x0LnByb2JlICA9IHJ0cHNlX21jdV91YXJ0X3Byb2JlLFxuK307XG4rbW9kdWxlX3NlcmRldl9kZXZpY2VfZHJpdmVyKHJ0cHNlX21jdV91YXJ0X2RyaXZlcik7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiUmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaCBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iOWJmM2IyZGRlMDhiOFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oXG5AQCAtMCwwICsxLDg3IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbitcbisjaWZuZGVmIF9SRUFMVEVLX1BTRV9NQ1VfSFxuKyNkZWZpbmUgX1JFQUxURUtfUFNFX01DVV9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbisvKlxuKyAqIFRpbWUgdGhlIE1DVSBpdHNlbGYgbmVlZHMgYmV0d2VlbiBhY2NlcHRpbmcgYSByZXF1ZXN0IGFuZCBoYXZpbmcgYVxuKyAqIHJlc3BvbnNlIHJlYWR5LiBUaGVzZSBhcmUgcHJvcGVydGllcyBvZiB0aGUgTUNVIGZpcm13YXJlLCBub3Qgb2YgdGhlXG4rICogdW5kZXJseWluZyB0cmFuc3BvcnQ6IHRoZSBjb3JlIHBhY2VzIHRyYW5zYWN0aW9ucyBieSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVNcbisgKiBhbmQgYm90aCB0cmFuc3BvcnRzIHNpemUgdGhlaXIgcGVyLXRyYW5zYWN0aW9uIHJlY3YgY2VpbGluZyBmcm9tXG4rICogUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUywgc2luY2Ugc29tZSBjb21tYW5kcyBhcmUgZG9jdW1lbnRlZCBhc1xuKyAqIG5lZWRpbmcgdXAgdG8gfjFzIHRvIHByb2R1Y2UgYSByZXBseS5cbisgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NU1x0XHRcdDI1XG4rI2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TXHRcdDEwMDBcbitcbisvKlxuKyAqIFRvdGFsIHRpbWUgdG8ga2VlcCByZXRyeWluZyB0aGUgZmlyc3QgTUNVIHJlYWQgYXQgcHJvYmUsIGFuZCB0aGUgcGF1c2VcbisgKiBiZXR3ZWVuIGF0dGVtcHRzLiBSaWdodCBhZnRlciBlbmFibGUtZ3Bpb3MgaXMgYXNzZXJ0ZWQgdGhlIE1DVSBtYXkgbm90XG4rICogYW5zd2VyIG9uIHRoZSBidXMgeWV0OyBnaXZlIGl0IGEgYm91bmRlZCB3aW5kb3cgdG8gY29tZSB1cCBiZWZvcmVcbisgKiBkZWNsYXJpbmcgdGhlIHByb2JlIGZhaWxlZC5cbisgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVNcdFx0MzAwMFxuKyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfUkVUUllfTVNcdFx0XHQxMDBcbitcbisjZGVmaW5lIFJUUFNFX01DVV9NU0dfU0laRVx0XHRcdDEyXG4rXG4rc3RydWN0IHJ0cHNlX21jdV9tc2cge1xuK1x0dTggb3Bjb2RlO1xuK1x0dTggc2VxX251bTtcbitcdHU4IHBheWxvYWRbOV07XG4rXHR1OCBjaGVja3N1bTtcbit9IF9fcGFja2VkO1xuK1xuKy8qXG4rICogTUNVIHN0YXR1cyBvcGNvZGVzIChzZWVuIG9uIHRoZSBCQ00gZGlhbGVjdDsgUlRMIG5ldmVyIGVtaXRzIHRoZW0pLlxuKyAqIElOQ09NUExFVEUvQkFEX0NTVU0gYXJlIHRlcm1pbmFsOyBOT1RfUkVBRFkgaXMgdHJhbnNpZW50LlxuKyAqL1xuKyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFXHRcdDB4ZmRcdC8qIC1FQkFERSAgICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNXHRcdDB4ZmVcdC8qIC1FQkFETVNHICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX05PVF9SRUFEWVx0XHQweGZmXHQvKiAtRUFHQUlOICAqL1xuK1xuKy8qIEEgcG9sbGluZyB0cmFuc3BvcnQgY2FuIHN0b3AgaGVyZTogdGhlIG1hdGNoaW5nIHJlcGx5LCBvciBhIHRlcm1pbmFsIGVycm9yLiAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBydHBzZV9tY3VfcmVzcF9pc19maW5hbChjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuK1x0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbit7XG4rXHRyZXR1cm4gcmVzcC1cdTAwM2VvcGNvZGUgPT0gcmVxLVx1MDAzZW9wY29kZSB8fFxuK1x0ICAgICAgIHJlc3AtXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfSU5DT01QTEVURSB8fFxuK1x0ICAgICAgIHJlc3AtXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU07XG4rfVxuK1xuKy8qIE9wYXF1ZSB0byB0cmFuc3BvcnRzOyBkZWZpbmVkIGluIHJlYWx0ZWstcHNlLWNvcmUuYy4gKi9cbitzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3Q7XG4rc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhO1xuK3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvO1xuK3N0cnVjdCBydHBzZV9tY3VfY3RybDtcbitcbitzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMge1xuK1x0aW50ICgqc2VuZCkoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpO1xuK1x0aW50ICgqcmVjdikoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4rXHRcdCAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCk7XG4rfTtcbitcbitzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwge1xuK1x0c3RydWN0IGRldmljZSAqZGV2O1xuK1x0c3RydWN0IHBzZV9jb250cm9sbGVyX2RldiBwY2RldjtcbitcdHN0cnVjdCBtdXRleCBtdXRleDsgLyogc2VyaWFsaXplcyBNQ1UgcmVxdWVzdC9yZXNwb25zZSB0cmFuc2FjdGlvbnMgKi9cbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDtcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzICp0cmFuc3BvcnQ7XG4rXG4rXHRzdHJ1Y3QgcmVndWxhdG9yICpwb2Vfc3VwcGx5O1xuK307XG4rXG4raW50IHJ0cHNlX21jdV9yZWdpc3RlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSk7XG4rXG4rLyogV2hldGhlciB0aGUgSTJDIHRyYW5zcG9ydCBtdXN0IHJlYWQgXCJyZWFsdGVrLGkyYy1wcm90b2NvbFwiIGZyb20gRFQuICovXG4rYm9vbCBydHBzZV9tY3VfbmVlZHNfaTJjX3Byb3RvKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2gpO1xuK1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X3J0a19kYXRhO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2JyY21fZGF0YTtcbitcbisjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjMzOjQzLjkzNjEwNjAxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MTg5MDQyMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgbmV3IGRyaXZlciBmb3IgYSBSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1UsIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3BzZS1wZC9gLiBJdCBzdXBwb3J0cyBib3RoIEkyQyBhbmQgVUFSVCwgd2hpY2ggaXMgZ29vZCBiZWNhdXNlIGl0IGdpdmVzIHVzIG11bHRpcGxlIGF0dGFjayBzdXJmYWNlcy4gIEl0J3MgYSBuZXcgZHJpdmVyLCBzbyBpdCBkZWZpbml0ZWx5IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGdvZXMgdG8gZnV6emluZy4gR2l2ZW4gdGhlIGludGVyZmFjZXMsIEkyQyBhbmQgVUFSVCAodmlhIHNlcmRldiksIGl0J3MgcmVhZGlseSB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkyQyBzdHViLCBzZXJkZXYvdHR5IGVtdWxhdGlvbiwgb3IgZXZlbiBkaXJlY3QgZnV6emluZyBvZiB0aGUgaW50ZXJmYWNlcyBhcmUgYWxsIHZpYWJsZS4gRXhjZWxsZW50LCBiZWNhdXNlIHN5emthbGxlciAqYWxyZWFkeSogaGFzIHNvbWUgc3VwcG9ydCBmb3IgSTJDIGFuZCBUVFkvc2VyZGV2IVxuXG5MZXQncyBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSBjb3JyZWN0IEtjb25maWcgb3B0aW9ucyBzZXQuICBgQ09ORklHX1BTRV9DT05UUk9MTEVSYCwgYENPTkZJR19QU0VfUkVBTFRFS19NQ1VgLCBgQ09ORklHX1BTRV9SRUFMVEVLX01DVV9JMkNgLCBhbmQgYENPTkZJR19QU0VfUkVBTFRFS19NQ1VfVUFSVGAgYXJlIHRoZSBrZXlzLiAgSSdsbCB2ZXJpZnkgdGhlc2UgZGVwZW5kZW5jaWVzIGluIHRoZSBgZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgYFBTRV9SRUFMVEVLX01DVV9JMkNgIGRlcGVuZHMgb24gYEkyQ2AsIGFuZCBgUFNFX1JFQUxURUtfTUNVX1VBUlRgIGRlcGVuZHMgb24gYFNFUklBTF9ERVZfQlVTYC5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBTY2FubmluZyB0aGUgY29kZSwgaGVyZSdzIHdoYXQganVtcHMgb3V0IGF0IG1lOlxuXG5Gcm9tIGByZWFsdGVrLXBzZS1tY3UtY29yZS5jYDpcbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VgLCBgcnRwc2VfbWN1X3BvcnRfZW5hYmxlYCwgYHJ0cHNlX21jdV9wb3J0X2Rpc2FibGVgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0YCwgYHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdGAsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvYCwgYHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvYCwgYHJ0cHNlX21jdV9kaXNjb3ZlcmAsIGBydHBzZV9tY3VfcmVnaXN0ZXJgXG5cbkZyb20gYHJlYWx0ZWstcHNlLW1jdS1pMmMuY2A6XG4qICAgYHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZGAsIGBydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3ZgLCBgcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZGAsIGBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2YCwgYHJ0cHNlX21jdV9pMmNfcHJvYmVgXG5cbkZyb20gYHJlYWx0ZWstcHNlLW1jdS11YXJ0LmNgOlxuKiAgIGBydHBzZV9tY3VfdWFydF9yZWNlaXZlYCwgYHJ0cHNlX21jdV91YXJ0X3NlbmRgLCBgcnRwc2VfbWN1X3VhcnRfcmVjdmAsIGBydHBzZV9tY3VfdWFydF9wcm9iZWBcblxuSSdsbCBsZWFuIGhlYXZpbHkgb24gYHNldC1yZXN1bHRzYCB0byBwcm9jZXNzIHRoaXMgaW5mb3JtYXRpb24uXG5cblJlZ2FyZGluZyBzeXprYWxsZXIsIGNhbiBpdCByZWFjaCB0aGlzIGRyaXZlcj8gIERlZmluaXRlbHkuIFdlIGNhbiBjcmVhdGUgSTJDIGRldmljZXMgd2l0aCBgc3l6X2kyY19zZXR1cGAgb3Igc2ltaWxhci4gRXZlbiBqdXN0IGxvYWRpbmcgdGhlIG1vZHVsZSBhbmQgcHJvYmluZyBpdCwgaWYgd2UgZnV6eiB0aGUgZGV2aWNlIHRyZWUsIG9yIGV2ZW4gaWYgaXQncyBpbnN0YW50aWF0ZWQgdmlhIHN5c2ZzLCB3aWxsIGRvLiAgSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIEkyQyBkZXZpY2VzIGluc3RhbnRpYXRlZCB2aWEgYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0qL25ld19kZXZpY2VgLiBTZXJkZXYgZGV2aWNlcyBhcmUgYSBsaXR0bGUgaGFyZGVyIGR5bmFtaWNhbGx5IGZyb20gdXNlcnNwYWNlLCBidXQgdGhlIGNvcmUgbG9naWMgaXMgc3RpbGwgZnV6emFibGUgaWYgaW5zdGFudGlhdGVkLlxuXG5IZXJlJ3MgdGhlIGxpc3Qgb2YgY29uZmlncywgYWdhaW46XG5gUFNFX0NPTlRST0xMRVJgXG5gUFNFX1JFQUxURUtfTUNVX0kyQ2BcbmBQU0VfUkVBTFRFS19NQ1VfVUFSVGBcblxuQW5kIHRoZSBmdW5jdGlvbiBjYWxsIHRhcmdldHMgSSBuZWVkIHRvIGZlZWQgdG8gc2V0LXJlc3VsdHM6XG5gcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VgLCBgcnRwc2VfbWN1X3BvcnRfZW5hYmxlYCwgYHJ0cHNlX21jdV9wb3J0X2Rpc2FibGVgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0YCwgYHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdGAsIGBydFxuXG4iLCJJbnB1dFRva2VucyI6MjM1MDAsIk91dHB1dFRva2VucyI6MzUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjM0OjAxLjEyNTE1MDg5MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1NzYzODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX0kyQ1wiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX1VBUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2VuYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZGlzYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wcmlvXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X2kyY19wcm9iZVwiLFxuICAgIFwicnRwc2VfbWN1X3VhcnRfcHJvYmVcIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3JlY2VpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVXMsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIFRoZSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgUFNFIGNvbnRyb2xsZXIgQVBJIGFuZCBwYXJzZXMgcmVzcG9uc2VzIGZyb20gdGhlIE1DVS4gRnV6emluZyB0aGUgSTJDL1VBUlQgaW50ZXJmYWNlcyBhbmQgdGhlIFBTRSBjb250cm9sbGVyIG9wcyBpcyB2YWx1YWJsZSBmb3IgZmluZGluZyBwb3RlbnRpYWwgYnVncyBpbiB0aGUgcHJvdG9jb2wgcGFyc2luZyBhbmQgc3RhdGUgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX0kyQ1wiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX1VBUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2VuYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZGlzYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wcmlvXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X2kyY19wcm9iZVwiLFxuICAgIFwicnRwc2VfbWN1X3VhcnRfcHJvYmVcIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3JlY2VpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVXMsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIFRoZSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgUFNFIGNvbnRyb2xsZXIgQVBJIGFuZCBwYXJzZXMgcmVzcG9uc2VzIGZyb20gdGhlIE1DVS4gRnV6emluZyB0aGUgSTJDL1VBUlQgaW50ZXJmYWNlcyBhbmQgdGhlIFBTRSBjb250cm9sbGVyIG9wcyBpcyB2YWx1YWJsZSBmb3IgZmluZGluZyBwb3RlbnRpYWwgYnVncyBpbiB0aGUgcHJvdG9jb2wgcGFyc2luZyBhbmQgc3RhdGUgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowwqfxw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-06 15:24:56 +0000 UTC FinishedAt: 2026-07-06 15:34:03 +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": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REALTEK_MCU_I2C", "PSE_REALTEK_MCU_UART" ], "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": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REALTEK_MCU_I2C", "PSE_REALTEK_MCU_UART" ], "series_id": "1bcd238b-8599-4c6d-8593-69f19e6e4566" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtpse_mcu_port_get_admin_state", "rtpse_mcu_port_get_pw_status", "rtpse_mcu_port_get_pw_class", "rtpse_mcu_port_get_actual_pw", "rtpse_mcu_port_get_voltage", "rtpse_mcu_port_enable", "rtpse_mcu_port_disable", "rtpse_mcu_port_get_pw_limit", "rtpse_mcu_port_set_pw_limit", "rtpse_mcu_port_get_pw_limit_ranges", "rtpse_mcu_port_get_prio", "rtpse_mcu_port_set_prio", "rtpse_mcu_i2c_probe", "rtpse_mcu_uart_probe", "rtpse_mcu_uart_receive" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA2IDE1OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9DT05UUk9MTEVSJiMzNDssCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9JMkMmIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX1VBUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9lbmFibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2kyY19wcm9iZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfdWFydF9wcm9iZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfdWFydF9yZWNlaXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciBmb3IgUmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVcywgd2hpY2ggY2FuIGJlIGF0dGFjaGVkIHZpYSBJMkMgb3IgVUFSVC4gVGhlIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBQU0UgY29udHJvbGxlciBBUEkgYW5kIHBhcnNlcyByZXNwb25zZXMgZnJvbSB0aGUgTUNVLiBGdXp6aW5nIHRoZSBJMkMvVUFSVCBpbnRlcmZhY2VzIGFuZCB0aGUgUFNFIGNvbnRyb2xsZXIgb3BzIGlzIHZhbHVhYmxlIGZvciBmaW5kaW5nIHBvdGVudGlhbCBidWdzIGluIHRoZSBwcm90b2NvbCBwYXJzaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE1OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWNmNmJjZWYxNTA5Y2IzYTFhNjBjNmRhNDFmYjI1NDcwMzk1NTBjZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTU6MzM6NDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kMGRmYWUyMjBkYzFlOVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWxcbkBAIC0wLDAgJiM0MzsxLDE1NCBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbiYjNDM7JVlBTUwgMS4yXG4mIzQzOy0tLVxuJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwjXG4mIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuJiM0MztcbiYjNDM7dGl0bGU6IFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVVxuJiM0MztcbiYjNDM7bWFpbnRhaW5lcnM6XG4mIzQzOyAgLSBKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXG4mIzQzO1xuJiM0MztkZXNjcmlwdGlvbjogfFxuJiM0MzsgIE1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHVzaW5nXG4mIzQzOyAgUmVhbHRlayAoUlRMODIzOEIsIFJUTDgyMzksIFJUTDgyMzlDKSBvciBCcm9hZGNvbSAoQkNNNTkxMTEsIEJDTTU5MTIxKVxuJiM0MzsgIFBTRSBjaGlwcy4gVGhlIE1DVSBleHBvc2VzIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbCBvdmVyIGVpdGhlclxuJiM0MzsgIEkyQy9TTUJ1cyBvciBVQVJUOyB0aGUgYWN0dWFsIFBTRSBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVGhlXG4mIzQzOyAgUmVhbHRlayBhbmQgQnJvYWRjb20gdmFyaWFudHMgc2hhcmUgdGhpcyBkZXZpY2UgdHJlZSBjb250cmFjdCBidXQgdXNlXG4mIzQzOyAgZGlmZmVyZW50IHByb3RvY29sIG9wY29kZXMsIHNlbGVjdGVkIGJ5IHRoZSBjb21wYXRpYmxlLlxuJiM0MztcbiYjNDM7ICBUaGUgY29tcGF0aWJsZSBpZGVudGlmaWVzIHRoZSBQU0UtTUNVIHByb3RvY29sIGRpYWxlY3QsIG5vdCBhIHNwZWNpZmljXG4mIzQzOyAgcGFydC4gVGhlIGRldmljZSBoZXJlIGlzIHRoZSBNQ1U6IGl0IHByZXNlbnRzIGEgc3RhYmxlIG1lc3NhZ2UgcHJvdG9jb2xcbiYjNDM7ICBkb2N1bWVudGVkIGJ5IFJlYWx0ZWssIHdpdGggdGhlIFBTRSBzaWxpY29uIGJlaGluZCBpdCAtIEJyb2FkY29tIG9uXG4mIzQzOyAgb2xkZXIgYm9hcmRzLCBSZWFsdGVrIG9uIG5ld2VyIC0gZGV0ZWN0ZWQgYXQgcnVudGltZSBhbmQgbm90IGRlc2NyaWJlZFxuJiM0MzsgIGhlcmUuIFRoZSBNQ1UmIzM5O3Mgb3duIHNpbGljb24gaXMgZ2VuZXJhbC1wdXJwb3NlIGFuZCB2YXJpZXMgYWNyb3NzXG4mIzQzOyAgYm9hcmRzLCBzbyB0aGUgJiMzOTtyZWFsdGVrJiMzOTsgdmVuZG9yIHByZWZpeCBuYW1lcyB0aGUgcHJvdG9jb2wgZnJvbnQtZW5kXG4mIzQzOyAgKGZvbGxvd2luZyB0aGUgZ29vZ2xlLGNyb3MtZWMgcGF0dGVybik7IHRoZSAmIzM5Oy1ydGsmIzM5Oy8mIzM5Oy1icmNtJiMzOTsgc3VmZml4XG4mIzQzOyAgc2VsZWN0cyB0aGUgUmVhbHRlayBvciBCcm9hZGNvbSBkaWFsZWN0LlxuJiM0MztcbiYjNDM7ICBBIHNpbmdsZSBjb21wYXRpYmxlIHBlciBkaWFsZWN0IGNvdmVycyBib3RoIHRoZSBJMkMvU01CdXMgYW5kIFVBUlRcbiYjNDM7ICBhdHRhY2htZW50czogdGhlIHdpcmUgcHJvdG9jb2wgaXMgaWRlbnRpY2FsIGFjcm9zcyB0aGVtIGFuZCB0aGVcbiYjNDM7ICB0cmFuc3BvcnQgaXMgYWxyZWFkeSBleHByZXNzZWQgYnkgdGhlIG5vZGUmIzM5O3MgcGFyZW50IGJ1cywgc28gaXQgaXMgbm90XG4mIzQzOyAgZW5jb2RlZCBpbiB0aGUgY29tcGF0aWJsZS4gVHJhbnNwb3J0LXNwZWNpZmljIHByb3BlcnRpZXMgZGlmZmVyXG4mIzQzOyAgYWNjb3JkaW5nbHkgLSB0aGUgSTJDIGF0dGFjaG1lbnQgY2FycmllcyAmIzM5O3JlZyYjMzk7IChhbmQsIGZvciBSZWFsdGVrLFxuJiM0MzsgICYjMzk7cmVhbHRlayxpMmMtcHJvdG9jb2wmIzM5OyksIHdoaWxlIHRoZSBVQVJUIGF0dGFjaG1lbnQgY2FycmllcyB0aGUgc2VyaWFsXG4mIzQzOyAgcGVyaXBoZXJhbCBwcm9wZXJ0aWVzIHN1Y2ggYXMgJiMzOTtjdXJyZW50LXNwZWVkJiMzOTsuXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBlbnVtOlxuJiM0MzsgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1ydGtcbiYjNDM7ICAgICAgLSByZWFsdGVrLHBzZS1tY3UtYnJjbVxuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7ICBwb3dlci1zdXBwbHk6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjogUmVndWxhdG9yIHN1cHBseWluZyB0aGUgUG9FIHBvd2VyIHJhaWwuXG4mIzQzO1xuJiM0MzsgIGVuYWJsZS1ncGlvczpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzO1xuJiM0MzsgIHJlYWx0ZWssaTJjLXByb3RvY29sOlxuJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvc3RyaW5nXG4mIzQzOyAgICBlbnVtOiBbIGkyYywgc21idXMgXVxuJiM0MzsgICAgZGVzY3JpcHRpb246IHxcbiYjNDM7ICAgICAgV2lyZSBmcmFtaW5nIHRoZSBNQ1UgZmlybXdhcmUgZXhwZWN0cyBvbiB0aGUgSTJDIGJ1cy4gXCYjMzQ7c21idXNcJiMzNDsgbWVhbnNcbiYjNDM7ICAgICAgcmVhZHMgY2FycnkgYSBsZWFkaW5nIGNvbW1hbmQgYnl0ZSAoMHgwMCkgYW5kIGEgcmVwZWF0ZWQgc3RhcnQ7IFwmIzM0O2kyY1wmIzM0O1xuJiM0MzsgICAgICBtZWFucyBiYXJlIDEyLWJ5dGUgd3JpdGVzIGFuZCByZWFkcyB3aXRoIG5vIGNvbW1hbmQgcHJlZml4LiBPbmx5XG4mIzQzOyAgICAgIGFwcGxpZXMgdG8gdGhlIFJlYWx0ZWsgSTJDIGF0dGFjaG1lbnQuXG4mIzQzO1xuJiM0MztyZXF1aXJlZDpcbiYjNDM7ICAtIGNvbXBhdGlibGVcbiYjNDM7XG4mIzQzO2FsbE9mOlxuJiM0MzsgIC0gJHJlZjogcHNlLWNvbnRyb2xsZXIueWFtbCNcbiYjNDM7ICAtICRyZWY6IC9zY2hlbWFzL3NlcmlhbC9zZXJpYWwtcGVyaXBoZXJhbC1wcm9wcy55YW1sI1xuJiM0MzsgICMgVGhlIEkyQyBhdHRhY2htZW50IChpZGVudGlmaWVkIGJ5ICYjMzk7cmVnJiMzOTspIGNhbm5vdCBjYXJyeSBzZXJpYWwgYnVzIHByb3BzLlxuJiM0MzsgIC0gaWY6XG4mIzQzOyAgICAgIHJlcXVpcmVkOiBbcmVnXVxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjdXJyZW50LXNwZWVkOiBmYWxzZVxuJiM0MzsgICAgICAgIG1heC1zcGVlZDogZmFsc2VcbiYjNDM7ICAjICYjMzk7cmVhbHRlayxpMmMtcHJvdG9jb2wmIzM5OyBpcyBtZWFuaW5nZnVsIG9ubHkgZm9yIHRoZSBSZWFsdGVrIEkyQyBhdHRhY2htZW50O1xuJiM0MzsgICMgdGhlIEJyb2FkY29tIHZhcmlhbnQgYW5kIGFueSBVQVJUIGF0dGFjaG1lbnQgbXVzdCBub3QgY2FycnkgaXQuXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgY29udGFpbnM6XG4mIzQzOyAgICAgICAgICAgIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtcnRrXG4mIzQzOyAgICAgIHJlcXVpcmVkOiBbcmVnXVxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgICAgLSByZWFsdGVrLGkyYy1wcm90b2NvbFxuJiM0MzsgICAgZWxzZTpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBcJiMzNDtyZWFsdGVrLGkyYy1wcm90b2NvbFwmIzM0OzogZmFsc2VcbiYjNDM7XG4mIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgICMgUmVhbHRlayBQU0UgY2hpcCwgSTJDIGF0dGFjaG1lbnQgKFNNQnVzIGZyYW1pbmcpLlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgaTJjIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldC1wc2VAMjAge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxwc2UtbWN1LXJ0a1wmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgyMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgcmVhbHRlayxpMmMtcHJvdG9jb2wgPSBcJiMzNDtzbWJ1c1wmIzM0OztcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHBzZS1waXMge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7XG4mIzQzOyAgIyBCcm9hZGNvbSBQU0UgY2hpcCwgSTJDIGF0dGFjaG1lbnQuXG4mIzQzOyAgLSB8XG4mIzQzOyAgICBpMmMge1xuJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgIGV0aGVybmV0LXBzZUAyMCB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtYnJjbVwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgyMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHBzZS1waXMge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7XG4mIzQzOyAgIyBSZWFsdGVrIFBTRSBjaGlwLCBVQVJUIGF0dGFjaG1lbnQuXG4mIzQzOyAgLSB8XG4mIzQzOyAgICBzZXJpYWwge1xuJiM0MzsgICAgICAgIGV0aGVybmV0LXBzZSB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtcnRrXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICBjdXJyZW50LXNwZWVkID0gXHUwMDNjMTE1MjAwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgcHNlLXBpcyB7XG4mIzQzOyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICAgICAgcHNlLXBpQDAge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgI3BzZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDUyZjFhNTVlY2E5OWJmLi5lM2Y0MjZhM2IyMDFmYiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTIyNzE2LDYgJiM0MzsyMjcxNiwxMyBAQCBTOlx0TWFpbnRhaW5lZFxuIEY6XHRpbmNsdWRlL3NvdW5kL3J0Ki5oXG4gRjpcdHNvdW5kL3NvYy9jb2RlY3MvcnQqXG4gXG4mIzQzO1JFQUxURUsvQlJPQURDT00gUFNFIE1DVSBEUklWRVJcbiYjNDM7TTpcdEpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcbiYjNDM7TDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiYjNDM7UzpcdE1haW50YWluZWRcbiYjNDM7RjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1KlxuJiM0MztcbiBSRUFMVEVLIE9UVE8gV0FUQ0hET0dcbiBNOlx0U2FuZGVyIFZhbmhldWxlIFx1MDAzY3NhbmRlckBzdmFuaGV1bGUubmV0XHUwMDNlXG4gTDpcdGxpbnV4LXdhdGNoZG9nQHZnZXIua2VybmVsLm9yZ1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnIGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcbmluZGV4IDdlZjI5NjU3ZWU1ZGQxLi4yM2U0NGRkZTNkYmZlMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ1xuQEAgLTEzLDYgJiM0MzsxMywzNCBAQCBtZW51Y29uZmlnIFBTRV9DT05UUk9MTEVSXG4gXG4gaWYgUFNFX0NPTlRST0xMRVJcbiBcbiYjNDM7Y29uZmlnIFBTRV9SRUFMVEVLX01DVVxuJiM0MztcdHRyaXN0YXRlXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgU2hhcmVkIGNvcmUgZm9yIHRoZSBSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1UgZHJpdmVyLiBUaGlzIGlzXG4mIzQzO1x0ICBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSB0cmFuc3BvcnQgb3B0aW9ucyBiZWxvdy5cbiYjNDM7XG4mIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfSTJDXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydClcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQ1xuJiM0MztcdHNlbGVjdCBQU0VfUkVBTFRFS19NQ1VcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxuJiM0MztcdCAgaGFyZHdhcmUgb24gc3dpdGNoZXMgd2l0aCBSZWFsdGVrIG9yIEJyb2FkY29tIFBTRSBjaGlwcywgYXR0YWNoZWRcbiYjNDM7XHQgIHZpYSBJMkMvU01CdXMuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWxcbiYjNDM7XHQgIFBTRSBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhXG4mIzQzO1x0ICBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcmVhbHRlay1wc2UtbWN1LWkyYy5cbiYjNDM7XG4mIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfVUFSVFxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KVwmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gU0VSSUFMX0RFVl9CVVNcbiYjNDM7XHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIHRoYXQgZnJvbnRzIHRoZSBQU0VcbiYjNDM7XHQgIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHdpdGggUmVhbHRlayBvciBCcm9hZGNvbSBQU0UgY2hpcHMsIGF0dGFjaGVkXG4mIzQzO1x0ICB2aWEgVUFSVC4gVGhlIE1DVSBleHBvc2VzIGEgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDsgdGhlIGFjdHVhbCBQU0VcbiYjNDM7XHQgIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGFcbiYjNDM7XHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtdWFydC5cbiYjNDM7XG4gY29uZmlnIFBTRV9SRUdVTEFUT1JcbiBcdHRyaXN0YXRlIFwmIzM0O1JlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlclwmIzM0O1xuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxuaW5kZXggY2M3OGY3ZWE3ZjVmNzEuLjljY2E1OTAwZmUzNDIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcbkBAIC0zLDYgJiM0MzszLDkgQEBcbiBcbiBvYmotJChDT05GSUdfUFNFX0NPTlRST0xMRVIpICYjNDM7PSBwc2VfY29yZS5vXG4gXG4mIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1UpICYjNDM7PSByZWFsdGVrLXBzZS1tY3UtY29yZS5vXG4mIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfSTJDKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LWkyYy5vXG4mIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfVUFSVCkgJiM0Mzs9IHJlYWx0ZWstcHNlLW1jdS11YXJ0Lm9cbiBvYmotJChDT05GSUdfUFNFX1JFR1VMQVRPUikgJiM0Mzs9IHBzZV9yZWd1bGF0b3Iub1xuIG9iai0kKENPTkZJR19QU0VfUEQ2OTJYMCkgJiM0Mzs9IHBkNjkyeDAub1xuIG9iai0kKENPTkZJR19QU0VfU0kzNDc0KSAmIzQzOz0gc2kzNDc0Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjk2MWFjOWU5ZWU5YzdjXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuY1xuQEAgLTAsMCAmIzQzOzEsMTAwNiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsvKlxuJiM0MzsgKiBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgZnJvbnRpbmcgUmVhbHRlayBvciBCcm9hZGNvbSBQU0VcbiYjNDM7ICogY2hpcHMuIEJvdGggdmVuZG9ycyYjMzk7IE1DVXMgc3BlYWsgYSBjbG9zZWx5IHJlbGF0ZWQgMTItYnl0ZSBmaXhlZC1mcmFtZVxuJiM0MzsgKiBtYW5hZ2VtZW50IHByb3RvY29sOyB0aGlzIGRyaXZlciBjb3ZlcnMgYm90aCB2aWEgYSBwZXItZGlhbGVjdCBvcGNvZGVcbiYjNDM7ICogdGFibGUgYW5kIHJlc3BvbnNlIHBhcnNlcnMuXG4mIzQzOyAqXG4mIzQzOyAqIE1hbnkgUG9FIHN3aXRjaCBkZXNpZ25zIHB1dCBhIGRlZGljYXRlZCBtaWNyb2NvbnRyb2xsZXIgaW4gZnJvbnQgb2YgdGhlXG4mIzQzOyAqIGFjdHVhbCBQU0Ugc2lsaWNvbjogdGhlIGhvc3QgQ1BVIHRhbGtzIHRvIHRoZSBNQ1Ugb3ZlciBJMkMvU01CdXMgb3JcbiYjNDM7ICogVUFSVCwgYW5kIHRoZSBNQ1UgaW4gdHVybiBtYW5hZ2VzIHRoZSBQU0UgY2hpcHMgb24gdGhlIGJvYXJkLiBUaGUgTUNVXG4mIzQzOyAqIHNwZWFrcyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2wgKDEyLWJ5dGUgZml4ZWQtc2l6ZSBmcmFtZXM7IG9wY29kZVxuJiM0MzsgKiAmIzQzOyBhcmcgJiM0MzsgOSBwYXlsb2FkIGJ5dGVzICYjNDM7IGNoZWNrc3VtKS4gVGhlIFBTRSBjaGlwcyB0aGVtc2VsdmVzIGFyZSBub3RcbiYjNDM7ICogYWNjZXNzZWQgZGlyZWN0bHk7IGV2ZXJ5dGhpbmcgZ29lcyB0aHJvdWdoIE1DVSBjb21tYW5kcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBkcml2ZXIgdGFyZ2V0cyB0aGF0IGFyY2hpdGVjdHVyZSBmb3IgdGhlIFJlYWx0ZWstZmFtaWx5IHByb3RvY29sLlxuJiM0MzsgKiBUd28gZGlhbGVjdHMgYXJlIHN1cHBvcnRlZDogUmVhbHRlayBNQ1VzIG1hbmFnaW5nIFJUTDgyM3gvUlRMODIzOSogUFNFXG4mIzQzOyAqIGNoaXBzLCBhbmQgQnJvYWRjb20gTUNVcyBtYW5hZ2luZyBCQ001OTB4eCBQU0UgY2hpcHMuIFRoZSB0d28gc2hhcmVcbiYjNDM7ICogZnJhbWUgZm9ybWF0IGFuZCBhIHN1bS1tb2QtMjU2IGNoZWNrc3VtIGJ1dCBkaXZlcmdlIG9uIG9wY29kZSBudW1iZXJzXG4mIzQzOyAqIGFuZCBvbiBhIGZldyByZXNwb25zZSBsYXlvdXRzOyB0aGlzIGlzIGhhbmRsZWQgYnkgdGhlIHBlci1kaWFsZWN0XG4mIzQzOyAqIG9wY29kZSB0YWJsZSBhbmQgcGFyc2VyIGhvb2tzLlxuJiM0MzsgKlxuJiM0MzsgKiBPdXQgb2Ygc2NvcGU6IFBTRSBjaGlwcyB0aGF0IGFyZSBpbnRlcmZhY2VkIGRpcmVjdGx5IGZyb20gdGhlIGhvc3RcbiYjNDM7ICogd2l0aG91dCBhIG1hbmFnZW1lbnQgTUNVLCBNQ1UgZGVzaWducyB0aGF0IHNwZWFrIGFuIHVucmVsYXRlZCBwcm90b2NvbFxuJiM0MzsgKiBmYW1pbHksIGFuZCBcJiMzNDtkdW1iIFBTRVwmIzM0OyBtb2RlcyB3aGVyZSBubyBob3N0IGNvbnRyb2wgaXMgd2lyZWQgdXAgYXQgYWxsLlxuJiM0MzsgKiBUaG9zZSwgaWYgYW5kIHdoZW4gdGhleSBzaG93IHVwIGluIHRoZSBrZXJuZWwsIGJlbG9uZyBpbiBzZXBhcmF0ZVxuJiM0MzsgKiBkcml2ZXJzIHVuZGVyIGRyaXZlcnMvbmV0L3BzZS1wZC8uXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgY29yZSBtb2R1bGUgaW1wbGVtZW50cyB0aGUgcHJvdG9jb2wsIGRlY29kaW5nL2VuY29kaW5nIG9mIE1DVVxuJiM0MzsgKiByZXNwb25zZXMsIGFuZCB0aGUgcHNlX2NvbnRyb2xsZXJfb3BzIGludGVncmF0aW9uLiBUcmFuc3BvcnQgbW9kdWxlc1xuJiM0MzsgKiAocmVhbHRlay1wc2UtaTJjLCByZWFsdGVrLXBzZS11YXJ0KSBwcm92aWRlIHRoZSBzZW5kL3JlY3YgY2FsbGJhY2tzLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZ3Bpby9jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ppZmZpZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2RfZGV2aWNldGFibGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cmVhbHRlay1wc2UtbWN1LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4Qlx0XHQweDAxMzhcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlcdFx0MHgwMDM5XG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5Q1x0XHQweDAxMzlcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExXHRcdDB4ZTExMVxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjFcdFx0MHhlMTIxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRFx0XHQweDAwXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElOR1x0XHQweDAxXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkdcdFx0MHgwMlxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19URVNUXHRcdFx0MHgwM1x0LyogQnJvYWRjb207IHJlc2VydmVkIG9uIFJlYWx0ZWsgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRkFVTFRcdFx0MHgwNFxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVFx0XHQweDA1XHQvKiBCcm9hZGNvbTsgcmVzZXJ2ZWQgb24gUmVhbHRlayAqL1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HXHRcdDB4MDZcbiYjNDM7XG4mIzQzOy8qIFJUUFNFX01DVV9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFIHZhbHVlcyAqL1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUlx0MHgwMlxuJiM0MztcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfTUFYX1BPUlRTXHRcdFx0NDhcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFlcdFx0M1xuJiM0MztcbiYjNDM7ZW51bSBydHBzZV9tY3VfY21kIHtcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEUsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk8sXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJRyxcbiYjNDM7XG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRSxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZLFxuJiM0MztcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTLFxuJiM0MztcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFMsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUcsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHLFxuJiM0MztcbiYjNDM7XHRSVFBTRV9NQ1VfTlVNX0NNRFMsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSB7XG4mIzQzO1x0dTggb3A7XG4mIzQzO1x0Ym9vbCB2YWxpZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX09QKG9wYylcdHsgLm9wID0gKG9wYyksIC52YWxpZCA9IHRydWUgfVxuJiM0MztcbiYjNDM7LyogUGFyc2VkIE1DVSByZXNwb25zZSBzdHJ1Y3R1cmVzIChkZWNvZGVkIGZyb20gcnRwc2VfbWN1X21zZyByZXBsaWVzKSAqL1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9pbmZvIHtcbiYjNDM7XHR1OCBtYXhfcG9ydHM7XG4mIzQzO1x0Ym9vbCBzeXN0ZW1fZW5hYmxlO1xuJiM0MztcdHUxNiBkZXZpY2VfaWQ7XG4mIzQzO1x0dTggc3dfdmVyO1xuJiM0MztcdHU4IG1jdV90eXBlO1xuJiM0MztcdHU4IGNvbmZpZ19zdGF0dXM7XG4mIzQzO1x0dTggZXh0X3ZlcjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyB7XG4mIzQzO1x0dTggdXZsbztcbiYjNDM7XHR1OCBvdmxvO1xuJiM0MztcdGJvb2wgcHJlYWxsb2NfZW5hYmxlO1xuJiM0MztcdHU4IG51bV9vZl9wc2VzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyB7XG4mIzQzO1x0dTggc3RzMTtcbiYjNDM7XHR1OCBzdHMyO1xuJiM0MztcdHU4IHN0czM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQge1xuJiM0MztcdHUxNiB2b2x0YWdlX3JhdztcdC8qIDY0LjQ1bVYvTFNCICovXG4mIzQzO1x0dTE2IGN1cnJlbnRfcmF3O1x0LyogMW1BL0xTQiAqL1xuJiM0MztcdHUxNiB0ZW1wZXJhdHVyZV9yYXc7XHQvKiBUKG1DKSA9IDEyNTAgKiAoMjIwIC0gcmF3KSAqL1xuJiM0MztcdHUxNiBwb3dlcl9yYXc7XHRcdC8qIDEwMG1XL0xTQiAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyB7XG4mIzQzO1x0Ym9vbCBlbmFibGU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyB7XG4mIzQzO1x0dTggbWF4X3Bvd2VyO1xuJiM0MztcdHU4IHByaW9yaXR5O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSBvcGNvZGVbUlRQU0VfTUNVX05VTV9DTURTXTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2hcbiYjNDM7XHQgKiBkaWFsZWN0IHN1cHBsaWVzIGl0cyBvd24uIE90aGVyIHJlc3BvbnNlcyBzaGFyZSBvbmUgbGF5b3V0IGFuZCBhcmVcbiYjNDM7XHQgKiBkZWNvZGVkIGRpcmVjdGx5IC0gYSBkaWFsZWN0IHRoYXQgZGl2ZXJnZXMgdGhlcmUgbXVzdCBhZGQgYSBob29rLFxuJiM0MztcdCAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2b2lkICgqcGFyc2Vfc3lzdGVtX2luZm8pKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pO1xuJiM0MztcdGludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7XG4mIzQzO1x0Y29uc3QgY2hhciAqKCptY3VfdHlwZV9zdHIpKHVuc2lnbmVkIGludCBtY3VfdHlwZSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQZXItY29tcGF0aWJsZSBtYXRjaCBkYXRhOiBzZWxlY3RlZCBieSB0aGUgRFQvSTJDIGNvbXBhdGlibGUsIGl0IGJ1bmRsZXNcbiYjNDM7ICogdGhlIHByb3RvY29sIGRpYWxlY3Qgd2l0aCBhdHRhY2htZW50IHF1aXJrcyB0aGF0IHRoZSBleGFjdCBNQ1Ugc2lsaWNvblxuJiM0MzsgKiBkb2VzIG5vdCBkZXRlcm1pbmUgKG9ubHkgaXRzIGZpcm13YXJlIHByb3RvY29sIGFuZCB0aGUgaG9zdCBidXMgZG8pLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgKmRpYWxlY3Q7XG4mIzQzO1x0LyogSTJDIGZyYW1pbmcgbXVzdCBjb21lIGZyb20gRFQgKHJlYWx0ZWssaTJjLXByb3RvY29sKTsgZWxzZSBTTUJ1cy4gKi9cbiYjNDM7XHRib29sIGkyY19wcm90b19kdF9yZXF1aXJlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHtcbiYjNDM7XHRjb25zdCBjaGFyICpuYW1lO1xuJiM0MztcdHUxNiBkZXZpY2VfaWQ7XG4mIzQzO1x0dTMyIG1heF9tV19wZXJfcG9ydDtcbiYjNDM7XHRlbnVtIHJ0cHNlX21jdV9jbWQgcHdfc2V0X2NtZDtcdC8qIGNvbW1hbmQgdXNlZCBieSBzZXRfcHdfbGltaXQgKi9cbiYjNDM7XHR1MzIgcHdfc2V0X2xzYl9tVztcdFx0LyogTFNCIG9mIHB3X3NldF9jbWQgdmFsdWUsIGluIG1XICovXG4mIzQzO1x0dTMyIHB3X3JlYWRfbHNiX21XO1x0XHQvKiBMU0Igb2YgZXh0X2NvbmZpZy5tYXhfcG93ZXIgcmVhZC1iYWNrLCBpbiBtVyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzhiX2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEIsXG4mIzQzO1x0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7UlRMODIzOEJcJiMzNDssXG4mIzQzO1x0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxuJiM0MztcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbiYjNDM7XHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5X2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOSxcbiYjNDM7XHQubWF4X21XX3Blcl9wb3J0ID0gOTAwMDAsXG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtSVEw4MjM5XCYjMzQ7LFxuJiM0MztcdC5wd19yZWFkX2xzYl9tVyA9IDQwMCxcbiYjNDM7XHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuJiM0MztcdC5wd19zZXRfbHNiX21XID0gNDAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzljX2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMsXG4mIzQzO1x0Lm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7UlRMODIzOUNcJiMzNDssXG4mIzQzO1x0LnB3X3JlYWRfbHNiX21XID0gNDAwLFxuJiM0MztcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXG4mIzQzO1x0LnB3X3NldF9sc2JfbVcgPSA0MDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gYmNtNTkxMTFfaW5mbyA9IHtcbiYjNDM7XHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMSxcbiYjNDM7XHQubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsXG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtCQ001OTExMVwmIzM0OyxcbiYjNDM7XHQucHdfcmVhZF9sc2JfbVcgPSAyMDAsXG4mIzQzO1x0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxuJiM0MztcdC5wd19zZXRfbHNiX21XID0gMjAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTIxX2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjEsXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCQ001OTEyMSBpcyBhIDYwVyBUeXBlLTMgcGFydCwgYnV0IGtub3duIGJvYXJkcyBydW4gaXQgYXQgODAyLjNhdFxuJiM0MztcdCAqIGFuZCB0aGUgQkNNIGRpYWxlY3QgaGFzIG9ubHkgdGhlIDgtYml0LzAuMlcgc2V0IGNvbW1hbmQgKFx1MDAzYz01MVcpO1xuJiM0MztcdCAqIGNhcCBhdCB0aGUgMzBXIHRoZSBoYXJkd2FyZSBhY3R1YWxseSBvZmZlcnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7QkNNNTkxMjFcJiMzNDssXG4mIzQzO1x0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxuJiM0MztcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbiYjNDM7XHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIEhlbHBlcnMgYW5kIGJhc2ljIGZ1bmN0aW9ucyAqL1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBydHBzZV9tY3VfY3RybCAqdG9fcnRwc2VfbWN1X2N0cmwoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY29udGFpbmVyX29mKHBjZGV2LCBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwsIHBjZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBydHBzZV9tY3VfbmVlZHNfaTJjX3Byb3RvKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2gpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbWF0Y2gtXHUwMDNlaTJjX3Byb3RvX2R0X3JlcXVpcmVkO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9uZWVkc19pMmNfcHJvdG8pO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X21zZ19pbml0KHN0cnVjdCBydHBzZV9tY3VfbXNnICptc2csIHU4IG9wY29kZSlcbiYjNDM7e1xuJiM0MztcdG1lbXNldChtc2csIDB4ZmYsIHNpemVvZigqbXNnKSk7XG4mIzQzO1x0bXNnLVx1MDAzZW9wY29kZSA9IG9wY29kZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHU4IHJ0cHNlX21jdV9jaGVja3N1bShjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0dTggc3VtID0gMDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGxlbi0tKVxuJiM0MztcdFx0c3VtICYjNDM7PSAqYnVmJiM0MzsmIzQzOztcbiYjNDM7XHRyZXR1cm4gc3VtO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9kb194ZmVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWNoZWNrc3VtID0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlcSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSk7XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHNlLVx1MDAzZW11dGV4KSB7XG4mIzQzO1x0XHRyZXQgPSBwc2UtXHUwMDNldHJhbnNwb3J0LVx1MDAzZXNlbmQocHNlLCByZXEpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIE1DVSBuZWVkcyBhIGZpeGVkIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gcmVjZWl2aW5nIGEgcmVxdWVzdFxuJiM0MztcdFx0ICogYW5kIGhhdmluZyB0aGUgcmVzcG9uc2UgcmVhZHksIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBieXRlcyBnZXQgdG9cbiYjNDM7XHRcdCAqIHVzLiBQYWNlIHRoZSB0cmFuc2FjdGlvbiBoZXJlIHNvIGVhY2ggdHJhbnNwb3J0IGNhbiBrZWVwIGl0cyByZWN2XG4mIzQzO1x0XHQgKiBwYXRoIHNpbXBsZTogYSBzaW5nbGUgYm91bmRlZCB3YWl0IHJhdGhlciB0aGFuIGEgZ2VuZXJpYyByZXRyeS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bXNsZWVwKFJUUFNFX01DVV9SRVNQT05TRV9NUyk7XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KHJlc3AsIDAsIHNpemVvZigqcmVzcCkpO1xuJiM0MztcdFx0cmV0ID0gcHNlLVx1MDAzZXRyYW5zcG9ydC1cdTAwM2VyZWN2KHBzZSwgcmVxLCByZXNwKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEV4cGxpY2l0IE1DVSBlcnJvciBvcGNvZGVzIChvYnNlcnZlZCBvbiB0aGUgQkNNIGRpYWxlY3Q7IGhhcm1sZXNzXG4mIzQzO1x0ICogdG8gY2hlY2sgZm9yIFJUTCB0b28pLiBDYXRjaCB0aGVzZSBiZWZvcmUgdGhlIGdlbmVyaWMgb3Bjb2RlL0NSQ1xuJiM0MztcdCAqIG1pc21hdGNoIHBhdGggc28gY2FsbGVycyBzZWUgYSBtZWFuaW5nZnVsIGVycm5vLlxuJiM0MztcdCAqL1xuJiM0MztcdHN3aXRjaCAocmVzcC1cdTAwM2VvcGNvZGUpIHtcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9PUENPREVfSU5DT01QTEVURTpcbiYjNDM7XHRcdHJldHVybiAtRUJBREU7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNOlxuJiM0MztcdFx0cmV0dXJuIC1FQkFETVNHO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9OT1RfUkVBRFk6XG4mIzQzO1x0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChyZXNwLVx1MDAzZW9wY29kZSAhPSByZXEtXHUwMDNlb3Bjb2RlIHx8XG4mIzQzO1x0ICAgIHJlc3AtXHUwMDNlc2VxX251bSAhPSByZXEtXHUwMDNlc2VxX251bSB8fFxuJiM0MztcdCAgICByZXNwLVx1MDAzZWNoZWNrc3VtICE9IHJ0cHNlX21jdV9jaGVja3N1bSgodTggKilyZXNwLCBSVFBTRV9NQ1VfTVNHX1NJWkUgLSAxKSlcbiYjNDM7XHRcdHJldHVybiAtRUJBRE1TRztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfcXVlcnkoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCB1OCBvcGNvZGUsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3Bjb2RlKTtcbiYjNDM7XHRyZXEucGF5bG9hZFswXSA9IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXHUwMDI2cmVxLCByZXNwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlc3AtXHUwMDNlcGF5bG9hZFswXSAhPSBwb3J0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2NtZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSwgdTggYXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wY29kZSk7XG4mIzQzO1x0cmVxLnBheWxvYWRbMF0gPSBwb3J0O1xuJiM0MztcdHJlcS5wYXlsb2FkWzFdID0gYXJnO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChyZXNwLnBheWxvYWRbMF0gIT0gcG9ydCB8fCByZXNwLnBheWxvYWRbMV0gIT0gMClcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogR2xvYmFsIG9wZXJhdGlvbnMgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dldF9pbmZvKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGMtXHUwMDNlb3ApO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXHUwMDI2cmVxLCBcdTAwMjZyZXNwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2Vfc3lzdGVtX2luZm8ocmVzcC5wYXlsb2FkLCBpbmZvKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGMtXHUwMDNlb3ApO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXHUwMDI2cmVxLCBcdTAwMjZyZXNwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Y29uZmlnLVx1MDAzZXV2bG8gPSByZXNwLnBheWxvYWRbMF07XG4mIzQzO1x0Y29uZmlnLVx1MDAzZW92bG8gPSByZXNwLnBheWxvYWRbNV07XG4mIzQzO1x0Y29uZmlnLVx1MDAzZXByZWFsbG9jX2VuYWJsZSA9IChyZXNwLnBheWxvYWRbMV0gPT0gMHgxKTtcbiYjNDM7XHRjb25maWctXHUwMDNlbnVtX29mX3BzZXMgPSByZXNwLnBheWxvYWRbNl07XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGMtXHUwMDNlb3ApO1xuJiM0MztcdHJlcS5wYXlsb2FkWzBdID0gZW5hYmxlID8gMHgxIDogMHgwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAocmVzcC5wYXlsb2FkWzBdID09IDB4MCkgPyAwIDogLUVJTztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUG9ydCBvcGVyYXRpb25zICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU107XG4mIzQzO1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0c3RhdHVzLVx1MDAzZXN0czEgPSByZXNwLnBheWxvYWRbMV07XG4mIzQzO1x0c3RhdHVzLVx1MDAzZXN0czIgPSByZXNwLnBheWxvYWRbMl07XG4mIzQzO1x0c3RhdHVzLVx1MDAzZXN0czMgPSByZXNwLnBheWxvYWRbM107XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCAqbWVhc3VyZW1lbnQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdG1lYXN1cmVtZW50LVx1MDAzZXZvbHRhZ2VfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFsxXSk7XG4mIzQzO1x0bWVhc3VyZW1lbnQtXHUwMDNlY3VycmVudF9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cmVzcC5wYXlsb2FkWzNdKTtcbiYjNDM7XHRtZWFzdXJlbWVudC1cdTAwM2V0ZW1wZXJhdHVyZV9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cmVzcC5wYXlsb2FkWzVdKTtcbiYjNDM7XHRtZWFzdXJlbWVudC1cdTAwM2Vwb3dlcl9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cmVzcC5wYXlsb2FkWzddKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfY29uZmlnICpjb25maWcpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfQ09ORklHXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXHUwMDNlb3AsIFx1MDAyNnJlc3ApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRjb25maWctXHUwMDNlZW5hYmxlID0gKHJlc3AucGF5bG9hZFsxXSA9PSAxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnICpjb25maWcpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR107XG4mIzQzO1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Y29uZmlnLVx1MDAzZW1heF9wb3dlciA9IHJlc3AucGF5bG9hZFszXTtcbiYjNDM7XHRjb25maWctXHUwMDNlcHJpb3JpdHkgPSByZXNwLnBheWxvYWRbNF07XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgZW5hYmxlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBlbmFibGUgPyAweDEgOiAweDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBQU0UgY29udHJvbGxlciBvcHMgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBwc2VfYWRtaW5fc3RhdGUgKmFkbWluX3N0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyBjb25maWc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhwc2UsIGlkLCBcdTAwMjZjb25maWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRhZG1pbl9zdGF0ZS1cdTAwM2VjMzNfYWRtaW5fc3RhdGUgPSBjb25maWcuZW5hYmxlID8gRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0VOQUJMRUQgOlxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0RJU0FCTEVEO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBwc2VfcHdfc3RhdHVzICpwd19zdGF0dXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFx1MDAyNnN0YXR1cyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc3RhdHVzLnN0czEpIHtcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRDpcbiYjNDM7XHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RJU0FCTEVEO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfU0VBUkNISU5HOlxuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkc6XG4mIzQzO1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19TRUFSQ0hJTkc7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfREVMSVZFUklORztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1RFU1Q6XG4mIzQzO1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19URVNUO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRkFVTFQ6XG4mIzQzO1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19GQVVMVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUOlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfT1RIRVJGQVVMVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19VTktOT1dOO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3Moc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgc3RhdHVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMocHNlLCBpZCwgXHUwMDI2c3RhdHVzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBzdHMyIGhvbGRzIHRoZSBjbGFzcyBvbmx5IGluIHRoZSBvcGVyYXRpb25hbCBzdGF0ZXMgYmVsb3cuIEluIGFcbiYjNDM7XHQgKiBmYXVsdC90ZXN0IHN0YXRlIChvciBhIGNvZGUgcmVzZXJ2ZWQgb24gdGhlIGN1cnJlbnQgZGlhbGVjdCkgaXRcbiYjNDM7XHQgKiBkb2VzIG5vdCwgc28gdGhlcmUgaXMgbm8gY2xhc3MgdG8gcmVwb3J0IGFuZCB3ZSByZXR1cm4gMC4gVGhhdCBpc1xuJiM0MztcdCAqIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSByZWFsIGNsYXNzLTAgUEQ7IHVzZXJzcGFjZSBkaXNhbWJpZ3VhdGVzXG4mIzQzO1x0ICogdmlhIHRoZSBwb3dlciBzdGF0dXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3dpdGNoIChzdGF0dXMuc3RzMSkge1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEOlxuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOlxuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkc6XG4mIzQzO1x0XHRyZXR1cm4gcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2VfcG9ydF9jbGFzcyhcdTAwMjZzdGF0dXMpO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChwc2UsIGlkLCBcdTAwMjZtZWFzdXJlbWVudCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIDEwMG1XIHBlciBMU0IgKi9cbiYjNDM7XHRyZXR1cm4gbWVhc3VyZW1lbnQucG93ZXJfcmF3ICogMTAwVTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTMyIHVWO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgXHUwMDI2bWVhc3VyZW1lbnQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiA2NC40NW1WIHBlciBMU0IgKi9cbiYjNDM7XHR1ViA9IG1lYXN1cmVtZW50LnZvbHRhZ2VfcmF3ICogNjQ0NTBVO1xuJiM0MztcdHJldHVybiBtaW5fdCh1MzIsIHVWLCBJTlRfTUFYKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9lbmFibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUodG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpLCBpZCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZGlzYWJsZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZSh0b19ydHBzZV9tY3VfY3RybChwY2RldiksIGlkLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvbmZpZy5tYXhfcG93ZXIgKiBwc2UtXHUwMDNlY2hpcC1cdTAwM2Vwd19yZWFkX2xzYl9tVztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXQoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwgaW50IG1heF9tVylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICp0eXBlX29wYywgKnZhbF9vcGM7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gKmNoaXAgPSBwc2UtXHUwMDNlY2hpcDtcbiYjNDM7XHR1OCBwcmdfdmFsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChtYXhfbVcgXHUwMDNjIDAgfHwgbWF4X21XIFx1MDAzZSBjaGlwLVx1MDAzZW1heF9tV19wZXJfcG9ydClcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcbiYjNDM7XHR0eXBlX29wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdO1xuJiM0MztcdHZhbF9vcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbY2hpcC1cdTAwM2Vwd19zZXRfY21kXTtcbiYjNDM7XHQvKiBwd19zZXRfbHNiX21XIGlzIHRoZSBkaXZpc29yIGJlbG93OyByZWplY3QgYSBjaGlwIHRoYXQgbGFja3MgaXQuICovXG4mIzQzO1x0aWYgKCF0eXBlX29wYy1cdTAwM2V2YWxpZCB8fCAhdmFsX29wYy1cdTAwM2V2YWxpZCB8fCAhY2hpcC1cdTAwM2Vwd19zZXRfbHNiX21XKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFN3aXRjaCB0aGUgcG9ydCB0byB1c2VyLWRlZmluZWQgbGltaXQgbW9kZSBmaXJzdCwgdGhlbiBwcm9ncmFtIHRoZVxuJiM0MztcdCAqIGxpbWl0IHZhbHVlLiBJZiB0aGUgc2Vjb25kIGNtZCBmYWlscywgdGhlIHBvcnQgaXMgbGVmdCBpblxuJiM0MztcdCAqIHVzZXItZGVmaW5lZCBtb2RlIGJ1dCB3aXRoIHRoZSBwcmV2aW91cyBsaW1pdCB2YWx1ZTsgdGhlIG5leHRcbiYjNDM7XHQgKiBzdWNjZXNzZnVsIHNldF9wd19saW1pdCBjYWxsIHJlY292ZXJzIGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCB0eXBlX29wYy1cdTAwM2VvcCwgUlRQU0VfTUNVX1BPUlRfUFdfTElNSVRfVFlQRV9VU0VSKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cHJnX3ZhbCA9IG1pbl90KHVuc2lnbmVkIGludCwgbWF4X21XIC8gY2hpcC1cdTAwM2Vwd19zZXRfbHNiX21XLCBVOF9NQVgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIHZhbF9vcGMtXHUwMDNlb3AsIHByZ192YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBwc2VfcHdfbGltaXRfcmFuZ2VzICpvdXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9jMzNfcHNlX3B3X2xpbWl0X3JhbmdlICpyYW5nZTtcbiYjNDM7XG4mIzQzO1x0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UpO1xuJiM0MztcdGlmICghcmFuZ2UpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmFuZ2VbMF0ubWluID0gMDtcbiYjNDM7XHRyYW5nZVswXS5tYXggPSBwc2UtXHUwMDNlY2hpcC1cdTAwM2VtYXhfbVdfcGVyX3BvcnQ7XG4mIzQzO1xuJiM0MztcdG91dC1cdTAwM2VjMzNfcHdfbGltaXRfcmFuZ2VzID0gcmFuZ2U7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhwc2UsIGlkLCBcdTAwMjZjb25maWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY29uZmlnLnByaW9yaXR5O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XG4mIzQzO1x0aWYgKHByaW8gXHUwMDNlIFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWSlcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcbiYjNDM7XHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV07XG4mIzQzO1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgb3BjLVx1MDAzZW9wLCBwcmlvKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9vcHMgcnRwc2VfbWN1X29wcyA9IHtcbiYjNDM7XHQucGlfZ2V0X2FkbWluX3N0YXRlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlLFxuJiM0MztcdC5waV9nZXRfcHdfc3RhdHVzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyxcbiYjNDM7XHQucGlfZ2V0X3B3X2NsYXNzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzLFxuJiM0MztcdC5waV9nZXRfYWN0dWFsX3B3ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyxcbiYjNDM7XHQucGlfZW5hYmxlID0gcnRwc2VfbWN1X3BvcnRfZW5hYmxlLFxuJiM0MztcdC5waV9kaXNhYmxlID0gcnRwc2VfbWN1X3BvcnRfZGlzYWJsZSxcbiYjNDM7XHQucGlfZ2V0X3ZvbHRhZ2UgPSBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSxcbiYjNDM7XHQucGlfZ2V0X3B3X2xpbWl0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0LFxuJiM0MztcdC5waV9zZXRfcHdfbGltaXQgPSBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXQsXG4mIzQzO1x0LnBpX2dldF9wd19saW1pdF9yYW5nZXMgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzLFxuJiM0MztcdC5waV9nZXRfcHJpbyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvLFxuJiM0MztcdC5waV9zZXRfcHJpbyA9IHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZGlzY292ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyBleHRfY29uZmlnO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZGVhZGxpbmU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIGJvb3RpbmcgTUNVIG1heSBzdGF5IHNpbGVudCAoLUVUSU1FRE9VVCksIG5vdCBBQ0sgaXRzIGFkZHJlc3NcbiYjNDM7XHQgKiAoLUVOWElPIC8gLUVSRU1PVEVJTyksIHJlcG9ydCBub3QtcmVhZHkgKC1FQUdBSU4pLCBvciBlbWl0IGFcbiYjNDM7XHQgKiBjb3JydXB0L3BhcnRpYWwgZnJhbWUgKC1FQkFETVNHIC8gLUVCQURFKS4gUmV0cnkgdGhvc2Ugd2l0aGluIGFcbiYjNDM7XHQgKiBib3VuZGVkIHdpbmRvdzsgb3RoZXIgZXJyb3JzIChlLmcuIC1FT1BOT1RTVVBQKSBhcmUgZmF0YWwgYW5kIGZhaWxcbiYjNDM7XHQgKiBpbW1lZGlhdGVseS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkZWFkbGluZSA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhSVFBTRV9NQ1VfQk9PVF9USU1FT1VUX01TKTtcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRyZXQgPSBydHBzZV9tY3VfZ2V0X2luZm8ocHNlLCBpbmZvKTtcbiYjNDM7XHRcdGlmIChyZXQgIT0gLUVUSU1FRE9VVCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FTlhJTyBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FUkVNT1RFSU8gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcmV0ICE9IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHJldCAhPSAtRUJBRE1TRyBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQkFERSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRtc2xlZXAoUlRQU0VfTUNVX0JPT1RfUkVUUllfTVMpO1xuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIHJldCwgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgTUNVIGluZm9cXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGluZm8tXHUwMDNlZGV2aWNlX2lkKSB7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCOlxuJiM0MztcdFx0cHNlLVx1MDAzZWNoaXAgPSBcdTAwMjZydGw4MjM4Yl9pbmZvO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzk6XG4mIzQzO1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNnJ0bDgyMzlfaW5mbztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5QzpcbiYjNDM7XHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2cnRsODIzOWNfaW5mbztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMTpcbiYjNDM7XHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2YmNtNTkxMTFfaW5mbztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTEyMTpcbiYjNDM7XHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2YmNtNTkxMjFfaW5mbztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCAtRUlOVkFMLCBcJiMzNDt1bmtub3duIFBTRSBpZCAweCV4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgaW5mby1cdTAwM2VkZXZpY2VfaWQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFpbmZvLVx1MDAzZW1heF9wb3J0cyB8fCBpbmZvLVx1MDAzZW1heF9wb3J0cyBcdTAwM2UgUlRQU0VfTUNVX01BWF9QT1JUUylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtNQ1UgcmVwb3J0cyBpbnZhbGlkIHBvcnQgY291bnQgJXVcXG5cJiMzNDssIGluZm8tXHUwMDNlbWF4X3BvcnRzKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHBzZSwgXHUwMDI2ZXh0X2NvbmZpZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIHJldCwgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgTUNVIGV4dCBjb25maWdcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRkZXZfaW5mbyhwc2UtXHUwMDNlZGV2LCBcJiMzNDslcyBNQ1UsICVzIChpZCAweCUwNHgpLCAldSBwb3J0cyBhY3Jvc3MgJXUgUFNFIGNoaXAocylcXG5cJiMzNDssXG4mIzQzO1x0XHQgcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlbWN1X3R5cGVfc3RyKGluZm8tXHUwMDNlbWN1X3R5cGUpLCBwc2UtXHUwMDNlY2hpcC1cdTAwM2VuYW1lLFxuJiM0MztcdFx0IGluZm8tXHUwMDNlZGV2aWNlX2lkLCBpbmZvLVx1MDAzZW1heF9wb3J0cywgZXh0X2NvbmZpZy5udW1fb2ZfcHNlcyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9yZWd1bGF0b3JfZGlzYWJsZSh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0cmVndWxhdG9yX2Rpc2FibGUoZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nbG9iYWxfZGlzYWJsZSh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShwc2UsIGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHJ0cHNlX21jdV9yZWdpc3RlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2g7XG4mIzQzO1x0c3RydWN0IGdwaW9fZGVzYyAqZW5hYmxlX2dwaW87XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9pbmZvIGluZm87XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgcnRwc2VfbWN1X21zZykgIT0gUlRQU0VfTUNVX01TR19TSVpFKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9tdXRleF9pbml0KHBzZS1cdTAwM2VkZXYsIFx1MDAyNnBzZS1cdTAwM2VtdXRleCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHBzZS1cdTAwM2VkZXYpO1xuJiM0MztcdGlmICghbWF0Y2gpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCAtRU5PREVWLCBcJiMzNDttaXNzaW5nIG1hdGNoIGRhdGFcXG5cJiMzNDspO1xuJiM0MztcdHBzZS1cdTAwM2VkaWFsZWN0ID0gbWF0Y2gtXHUwMDNlZGlhbGVjdDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYXRjaCBhIGRpYWxlY3QgdGhhdCBmb3Jnb3QgdG8gc2V0IG9uZSBvZiB0aGUgcmVxdWlyZWQgaG9va3MgYXRcbiYjNDM7XHQgKiBwcm9iZSB0aW1lLCByYXRoZXIgdGhhbiBOVUxMLWRlcmVmJiMzOTtpbmcgbGF0ZXIgZnJvbSBhIGZhc3QgcGF0aC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXBzZS1cdTAwM2VkaWFsZWN0IHx8XG4mIzQzO1x0ICAgICFwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VwYXJzZV9zeXN0ZW1faW5mbyB8fFxuJiM0MztcdCAgICAhcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2VfcG9ydF9jbGFzcyB8fFxuJiM0MztcdCAgICAhcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlbWN1X3R5cGVfc3RyKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2RpYWxlY3QgZm9yIGNoaXAgaXMgaW5jb21wbGV0ZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHBzZS1cdTAwM2Vwb2Vfc3VwcGx5ID0gZGV2bV9yZWd1bGF0b3JfZ2V0KHBzZS1cdTAwM2VkZXYsIFwmIzM0O3Bvd2VyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBzZS1cdTAwM2Vwb2Vfc3VwcGx5KSlcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIFBUUl9FUlIocHNlLVx1MDAzZXBvZV9zdXBwbHkpLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBQb0Ugc3VwcGx5XFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZW5hYmxlX2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwc2UtXHUwMDNlZGV2LCBcJiMzNDtlbmFibGVcJiMzNDssIEdQSU9EX09VVF9ISUdIKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGVuYWJsZV9ncGlvKSlcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIFBUUl9FUlIoZW5hYmxlX2dwaW8pLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBlbmFibGUgZ3Bpb1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9kaXNjb3Zlcihwc2UsIFx1MDAyNmluZm8pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHBzZS1cdTAwM2Vwb2Vfc3VwcGx5KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgcmV0LCBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIFBvRSBzdXBwbHlcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQocHNlLVx1MDAzZWRldiwgcnRwc2VfbWN1X3JlZ3VsYXRvcl9kaXNhYmxlLCBwc2UtXHUwMDNlcG9lX3N1cHBseSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghaW5mby5zeXN0ZW1fZW5hYmxlKSB7XG4mIzQzO1x0XHRyZXQgPSBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShwc2UsIHRydWUpO1xuJiM0MztcdFx0LyogRGlhbGVjdHMgd2l0aG91dCBhIGdsb2JhbC1zdGF0ZSBjb25jZXB0IChlLmcuIEJDTSkgcmV0dXJuXG4mIzQzO1x0XHQgKiAtRU9QTk9UU1VQUDsgdHJlYXQgdGhhdCBhcyBcJiMzNDtubyBzZXBhcmF0ZSBlbmFibGUgcmVxdWlyZWRcJiMzNDsuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUClcbiYjNDM7XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIFBTRSBzeXN0ZW1cXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdFx0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHBzZS1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUsIHBzZSk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGVwZW5kaW5nIG9uIHRoZSBNQ1UgZmlybXdhcmUgY29uZmlndXJhdGlvbiAod2hpY2ggbWlnaHQgYmUgZGlmZmVyZW50XG4mIzQzO1x0ICogZm9yIGV2ZXJ5IGJvYXJkKSwgaXQgaXNuJiMzOTt0IGtub3duIHdoZXRoZXIgdGhlIFBvRSBzdWJzeXN0ZW0gaXMgYWN0aXZlIG9yXG4mIzQzO1x0ICogaW5hY3RpdmUgYnkgZGVmYXVsdC4gQXQgdGhpcyBzdGFnZSwgdGhlIFBTRSBjaGlwcyBtaWdodCBhbHJlYWR5IGRlbGl2ZXJcbiYjNDM7XHQgKiBwb3dlciB0byBQRHMgd2l0aG91dCBhbnkgZXhwbGljaXQgZW5hYmxlLlxuJiM0MztcdCAqL1xuJiM0MztcbiYjNDM7XHQvKiBwY2Rldi5vd25lciBpcyBzZXQgYnkgdGhlIHRyYW5zcG9ydCwgc28gdGhlIHJlZ2lzdGVyZWQgY29udHJvbGxlclxuJiM0MztcdCAqIHBpbnMgdGhlIHRyYW5zcG9ydCBtb2R1bGUgdGhhdCBvd25zIHRoZSBsaXZlIGRldmljZSwgbm90IHRoZSBjb3JlLlxuJiM0MztcdCAqL1xuJiM0MztcdHBzZS1cdTAwM2VwY2Rldi5vcHMgICAgICA9IFx1MDAyNnJ0cHNlX21jdV9vcHM7XG4mIzQzO1x0cHNlLVx1MDAzZXBjZGV2LmRldiAgICAgID0gcHNlLVx1MDAzZWRldjtcbiYjNDM7XHRwc2UtXHUwMDNlcGNkZXYudHlwZXMgICAgPSBFVEhUT09MX1BTRV9DMzM7XG4mIzQzO1x0cHNlLVx1MDAzZXBjZGV2Lm5yX2xpbmVzID0gaW5mby5tYXhfcG9ydHM7XG4mIzQzO1x0cHNlLVx1MDAzZXBjZGV2LnBpc19wcmlvX21heCA9IFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWTtcbiYjNDM7XHRwc2UtXHUwMDNlcGNkZXYuc3VwcF9idWRnZXRfZXZhbF9zdHJhdGVnaWVzID0gUFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHBzZS1cdTAwM2VkZXYsIFx1MDAyNnBzZS1cdTAwM2VwY2Rldik7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X3JlZ2lzdGVyKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9ydGxfcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdGluZm8tXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcbiYjNDM7XHRpbmZvLVx1MDAzZXN5c3RlbV9lbmFibGUgPSAocGF5bG9hZFsyXSA9PSAweDEpO1xuJiM0MztcdGluZm8tXHUwMDNlZGV2aWNlX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnBheWxvYWRbM10pO1xuJiM0MztcdGluZm8tXHUwMDNlc3dfdmVyID0gcGF5bG9hZFs1XTtcbiYjNDM7XHRpbmZvLVx1MDAzZW1jdV90eXBlID0gcGF5bG9hZFs2XTtcbiYjNDM7XHRpbmZvLVx1MDAzZWNvbmZpZ19zdGF0dXMgPSBwYXlsb2FkWzddO1xuJiM0MztcdGluZm8tXHUwMDNlZXh0X3ZlciA9IHBheWxvYWRbOF07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3J0bF9wYXJzZV9wb3J0X2NsYXNzKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbiYjNDM7e1xuJiM0MztcdC8qIENsYXNzIGxpdmVzIGluIHRoZSB1cHBlciBuaWJibGUgb2Ygc3RzMi4gKi9cbiYjNDM7XHRyZXR1cm4gRklFTERfR0VUKEdFTk1BU0soNywgNCksIHN0YXR1cy1cdTAwM2VzdHMyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9ydGxfbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAobWN1X3R5cGUpIHtcbiYjNDM7XHRjYXNlIDB4MDA6XHRyZXR1cm4gXCYjMzQ7R2lnYURldmljZSBHRDMyRjMxMFwmIzM0OztcbiYjNDM7XHRjYXNlIDB4MDE6XHRyZXR1cm4gXCYjMzQ7R2lnYURldmljZSBHRDMyRjIzMFwmIzM0OztcbiYjNDM7XHRjYXNlIDB4MDI6XHRyZXR1cm4gXCYjMzQ7R2lnYURldmljZSBHRDMyRjMwM1wmIzM0OztcbiYjNDM7XHRjYXNlIDB4MDM6XHRyZXR1cm4gXCYjMzQ7R2lnYURldmljZSBHRDMyRjEwM1wmIzM0OztcbiYjNDM7XHRjYXNlIDB4MDQ6XHRyZXR1cm4gXCYjMzQ7R2lnYURldmljZSBHRDMyRTEwM1wmIzM0OztcbiYjNDM7XHRjYXNlIDB4MTA6XHRyZXR1cm4gXCYjMzQ7TnV2b3RvbiBNMDUxNlwmIzM0OztcbiYjNDM7XHRjYXNlIDB4MTE6XHRyZXR1cm4gXCYjMzQ7TnV2b3RvbiBNMDU2NFwmIzM0OztcbiYjNDM7XHRjYXNlIDB4MTI6XHRyZXR1cm4gXCYjMzQ7TnV2b3RvbiBOVUMwMjlcJiMzNDs7XG4mIzQzO1x0ZGVmYXVsdDpcdHJldHVybiBcJiMzNDt1bmtub3duXCYjMzQ7O1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X2JyY21fcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdGluZm8tXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcbiYjNDM7XHQvKiBCQ00gaGFzIG5vIGV4cGxpY2l0IHN5c3RlbV9lbmFibGUgYnl0ZTsgdGhlIGNsb3Nlc3QgYW5hbG9nIGlzIHRoZVxuJiM0MztcdCAqIFwmIzM0O3JlbW90ZSBlbmFibGVcJiMzNDsgYml0IGluIHRoZSBzeXN0ZW0tc3RhdHVzIGZsYWdzIGF0IHBheWxvYWRbN10uXG4mIzQzO1x0ICovXG4mIzQzO1x0aW5mby1cdTAwM2VzeXN0ZW1fZW5hYmxlID0gISEocGF5bG9hZFs3XSBcdTAwMjYgQklUKDIpKTtcbiYjNDM7XHRpbmZvLVx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZwYXlsb2FkWzNdKTtcbiYjNDM7XHRpbmZvLVx1MDAzZXN3X3ZlciA9IHBheWxvYWRbNV07XG4mIzQzO1x0aW5mby1cdTAwM2VtY3VfdHlwZSA9IHBheWxvYWRbNl07XG4mIzQzO1x0aW5mby1cdTAwM2Vjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTtcbiYjNDM7XHRpbmZvLVx1MDAzZWV4dF92ZXIgPSBwYXlsb2FkWzhdO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9icmNtX3BhcnNlX3BvcnRfY2xhc3MoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0LyogQkNNIHB1dHMgdGhlIGRldGVjdGVkIGNsYXNzIGluIHBheWxvYWRbM10gKD09IHN0czMpIGRpcmVjdGx5LlxuJiM0MztcdCAqIE1hc2sgdG8gdGhlIGxvdyBuaWJibGU7IGNsYXNzIGlzIDAuLjggYW5kIGFueSBoaWdoIGJpdHMgd291bGQgYmVcbiYjNDM7XHQgKiBub2lzZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gc3RhdHVzLVx1MDAzZXN0czMgXHUwMDI2IDB4MGY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyICpydHBzZV9tY3VfYnJjbV9tY3VfdHlwZV9zdHIodW5zaWduZWQgaW50IG1jdV90eXBlKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChtY3VfdHlwZSkge1xuJiM0MztcdGNhc2UgMHgwMDpcdHJldHVybiBcJiMzNDtTVCBNaWNybyBTVDMyRjEwMFwmIzM0OztcbiYjNDM7XHRjYXNlIDB4MDE6XHRyZXR1cm4gXCYjMzQ7TnV2b3RvbiBNMDV4eCBMQU5cJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDAyOlx0cmV0dXJuIFwmIzM0O1NUIE1pY3JvIFNURjAzMEM4XCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwMzpcdHJldHVybiBcJiMzNDtOdXZvdG9uIE0wNThTQU5cJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDA0Olx0cmV0dXJuIFwmIzM0O051dm90b24gTlVDMTIyXCYjMzQ7O1xuJiM0MztcdGRlZmF1bHQ6XHRyZXR1cm4gXCYjMzQ7dW5rbm93blwmIzM0OztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE1hcCBlYWNoIGxvZ2ljYWwgY29tbWFuZCB0aGUgY29yZSBpc3N1ZXMgdG8gaXRzIHBlci1kaWFsZWN0IG9wY29kZS4gKi9cbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9ydGsgPSB7XG4mIzQzO1x0LnBhcnNlX3N5c3RlbV9pbmZvID0gcnRwc2VfbWN1X3J0bF9wYXJzZV9zeXN0ZW1faW5mbyxcbiYjNDM7XHQucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfcnRsX3BhcnNlX3BvcnRfY2xhc3MsXG4mIzQzO1x0Lm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X3J0bF9tY3VfdHlwZV9zdHIsXG4mIzQzO1x0Lm9wY29kZSA9IHtcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdXHQ9IFJUUFNFX01DVV9PUCgweDAwKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GT11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0MCksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0YSksXG4mIzQzO1xuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdXHRcdD0gUlRQU0VfTUNVX09QKDB4MDEpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxMiksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF1cdD0gUlRQU0VfTUNVX09QKDB4MTMpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhUXSA9IFJUUFNFX01DVV9PUCgweDE0KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXVx0PSBSVFBTRV9NQ1VfT1AoMHgxNSksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdXHRcdD0gUlRQU0VfTUNVX09QKDB4NDIpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdXHQ9IFJUUFNFX01DVV9PUCgweDQ0KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0OCksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXVx0PSBSVFBTRV9NQ1VfT1AoMHg0OSksXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgcnRwc2VfbWN1X2RpYWxlY3RfYnJjbSA9IHtcbiYjNDM7XHQucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfYnJjbV9wYXJzZV9zeXN0ZW1faW5mbyxcbiYjNDM7XHQucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfYnJjbV9wYXJzZV9wb3J0X2NsYXNzLFxuJiM0MztcdC5tY3VfdHlwZV9zdHIgICAgICA9IHJ0cHNlX21jdV9icmNtX21jdV90eXBlX3N0cixcbiYjNDM7XHQub3Bjb2RlID0ge1xuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXVx0XHQ9IFJUUFNFX01DVV9PUCgweDIwKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXVx0XHQ9IFJUUFNFX01DVV9PUCgweDJiKSxcbiYjNDM7XG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV1cdFx0PSBSVFBTRV9NQ1VfT1AoMHgwMCksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFXSA9IFJUUFNFX01DVV9PUCgweDE1KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVx0PSBSVFBTRV9NQ1VfT1AoMHgxNiksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV1cdD0gUlRQU0VfTUNVX09QKDB4MWEpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXVx0XHQ9IFJUUFNFX01DVV9PUCgweDIxKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXVx0PSBSVFBTRV9NQ1VfT1AoMHgzMCksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddXHRcdD0gUlRQU0VfTUNVX09QKDB4MjUpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR11cdD0gUlRQU0VfTUNVX09QKDB4MjYpLFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X3J0a19kYXRhID0ge1xuJiM0MztcdC5kaWFsZWN0ID0gXHUwMDI2cnRwc2VfbWN1X2RpYWxlY3RfcnRrLFxuJiM0MztcdC5pMmNfcHJvdG9fZHRfcmVxdWlyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfcnRrX2RhdGEpO1xuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9icmNtX2RhdGEgPSB7XG4mIzQzO1x0LmRpYWxlY3QgPSBcdTAwMjZydHBzZV9tY3VfZGlhbGVjdF9icmNtLFxuJiM0Mzt9O1xuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfYnJjbV9kYXRhKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1UgZHJpdmVyIChjb3JlKVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7Sm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtaTJjLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNmU2ZTM2NDVjNTA5MDNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtaTJjLmNcbkBAIC0wLDAgJiM0MzsxLDE2MyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cmVhbHRlay1wc2UtbWN1LmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBjb3JlIGhhcyBhbHJlYWR5IHdhaXRlZCBSVFBTRV9NQ1VfUkVTUE9OU0VfTVMgYmVmb3JlIGNhbGxpbmcgdXMsIHNvXG4mIzQzOyAqIHRoZSByZXNwb25zZSBpcyBub3JtYWxseSByZWFkeSBvbiB0aGUgdmVyeSBmaXJzdCByZWFkLiBGb3IgY29tbWFuZHMgdGhlXG4mIzQzOyAqIE1DVSBwcm9kdWNlcyBtb3JlIHNsb3dseSwga2VlcCBwb2xsaW5nIGF0IHRoZSB0eXBpY2FsIHJlc3BvbnNlIGNhZGVuY2VcbiYjNDM7ICogdXAgdG8gdGhlIHdvcnN0LWNhc2UgY2VpbGluZy5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19SRVRSWV9NU1x0UlRQU0VfTUNVX1JFU1BPTlNFX01TXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVNcdChSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TIC8gUlRQU0VfTUNVX0kyQ19SRVRSWV9NUylcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdC8qIFNlbmQgb3Bjb2RlIGFzIFNNQnVzIGNvbW1hbmQgYnl0ZTsgcmVtYWluaW5nIDExIGJ5dGVzIGFzIGJsb2NrIGRhdGEgKi9cbiYjNDM7XHRyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVxLVx1MDAzZW9wY29kZSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICh1OCAqKXJlcSAmIzQzOyAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4mIzQzO1x0aW50IHRyaWVzLCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAodHJpZXMgPSAwOyB0cmllcyBcdTAwM2MgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVM7IHRyaWVzJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHRyaWVzIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRtc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7XG4mIzQzO1xuJiM0MztcdFx0LyogTUNVIG5lZWRzIDB4MDAgYXMgY29tbWFuZCBieXRlIGZvciByZWFkICovXG4mIzQzO1x0XHRyZXQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIDB4MDAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAodTggKilyZXNwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRpZiAocmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSBcdTAwMjZcdTAwMjYgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwocmVxLCByZXNwKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX3NtYnVzX29wcyA9IHtcbiYjNDM7XHQuc2VuZCA9IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZCxcbiYjNDM7XHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIChjb25zdCB1OCAqKXJlcSwgUlRQU0VfTUNVX01TR19TSVpFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gcmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSA/IDAgOiAtRUlPO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuJiM0MztcdGludCB0cmllcywgcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKHRyaWVzID0gMDsgdHJpZXMgXHUwMDNjIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICh0cmllcyBcdTAwM2UgMClcbiYjNDM7XHRcdFx0bXNsZWVwKFJUUFNFX01DVV9JMkNfUkVUUllfTVMpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsICh1OCAqKXJlc3AsIFJUUFNFX01DVV9NU0dfU0laRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUgXHUwMDI2XHUwMDI2IHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X2kyY19uYXRpdmVfb3BzID0ge1xuJiM0MztcdC5zZW5kID0gcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZCxcbiYjNDM7XHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmNsaWVudC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaDtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZTtcbiYjNDM7XHRib29sIHVzZV9uYXRpdmUgPSBmYWxzZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xuJiM0MztcdGlmICghbWF0Y2gpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsIFwmIzM0O21pc3NpbmcgbWF0Y2ggZGF0YVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChydHBzZV9tY3VfbmVlZHNfaTJjX3Byb3RvKG1hdGNoKSkge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqcHJvdG87XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldiwgXCYjMzQ7cmVhbHRlayxpMmMtcHJvdG9jb2xcJiMzNDssIFx1MDAyNnByb3RvKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDttaXNzaW5nIHJlcXVpcmVkIFxcXCYjMzQ7cmVhbHRlayxpMmMtcHJvdG9jb2xcXFwmIzM0OyBwcm9wZXJ0eVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzdHJjbXAocHJvdG8sIFwmIzM0O2kyY1wmIzM0OykpXG4mIzQzO1x0XHRcdHVzZV9uYXRpdmUgPSB0cnVlO1xuJiM0MztcdFx0ZWxzZSBpZiAoIXN0cmNtcChwcm90bywgXCYjMzQ7c21idXNcJiMzNDspKVxuJiM0MztcdFx0XHR1c2VfbmF0aXZlID0gZmFsc2U7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7dW5rbm93biByZWFsdGVrLGkyYy1wcm90b2NvbCBcXFwmIzM0OyVzXFxcJiMzNDtcXG5cJiMzNDssIHByb3RvKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh1c2VfbmF0aXZlKSB7XG4mIzQzO1x0XHRpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC1cdTAwM2VhZGFwdGVyLCBJMkNfRlVOQ19JMkMpKVxuJiM0MztcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLFxuJiM0MztcdFx0XHRcdFwmIzM0O3BsYWluLUkyQyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgSTJDLWNhcGFibGUgYWRhcHRlclxcblwmIzM0Oyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LVx1MDAzZWFkYXB0ZXIsXG4mIzQzO1x0XHRcdFx0XHQgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DSyB8XG4mIzQzO1x0XHRcdFx0XHQgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCxcbiYjNDM7XHRcdFx0XHRcJiMzNDtTTUJ1cyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgU01CdXMgSTJDLWJsb2NrIHN1cHBvcnRcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHNlID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwc2UpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXBzZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwc2UtXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdHBzZS1cdTAwM2VwY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xuJiM0MztcdHBzZS1cdTAwM2V0cmFuc3BvcnQgPSB1c2VfbmF0aXZlID8gXHUwMDI2cnRwc2VfbWN1X2kyY19uYXRpdmVfb3BzIDogXHUwMDI2cnRwc2VfbWN1X2kyY19zbWJ1c19vcHM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIocHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X2kyY19vZl9tYXRjaFtdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtcnRrXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9ydGtfZGF0YSB9LFxuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtYnJjbVwmIzM0OywgLmRhdGEgPSBcdTAwMjZydHBzZV9tY3VfYnJjbV9kYXRhIH0sXG4mIzQzO1x0eyAvKiBzZW50aW5lbCAqLyB9XG4mIzQzO307XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2gpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHJ0cHNlX21jdV9pMmNfZHJpdmVyID0ge1xuJiM0MztcdC5kcml2ZXIgPSB7XG4mIzQzO1x0XHQubmFtZVx0XHQ9IFwmIzM0O3JlYWx0ZWstcHNlLW1jdS1pMmNcJiMzNDssXG4mIzQzO1x0XHQub2ZfbWF0Y2hfdGFibGVcdD0gcnRwc2VfbWN1X2kyY19vZl9tYXRjaCxcbiYjNDM7XHR9LFxuJiM0MztcdC5wcm9iZVx0XHQ9IHJ0cHNlX21jdV9pMmNfcHJvYmUsXG4mIzQzO307XG4mIzQzO21vZHVsZV9pMmNfZHJpdmVyKHJ0cHNlX21jdV9pMmNfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7Sm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1UgZHJpdmVyIChJMkMgdHJhbnNwb3J0KVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lZjA0ZTBkOTI5NjNiNVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmNcbkBAIC0wLDAgJiM0MzsxLDE1NiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcmRldi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3JlYWx0ZWstcHNlLW1jdS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVFx0MTkyMDBcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9UWF9USU1FT1VUXHRtc2Vjc190b19qaWZmaWVzKDEwMClcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUXHRtc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQge1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCBwc2U7XG4mIzQzO1x0c3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldjtcbiYjNDM7XHRzdHJ1Y3QgY29tcGxldGlvbiByeF9kb25lO1xuJiM0MztcdHNwaW5sb2NrX3QgcnhfbG9jaztcdFx0LyogcHJvdGVjdHMgcnhfYnVmIGFuZCByeF9sZW4gKi9cbiYjNDM7XHRzaXplX3QgcnhfbGVuO1xuJiM0MztcdHU4IHJ4X2J1ZltSVFBTRV9NQ1VfTVNHX1NJWkVdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSB0b19ydHBzZV9tY3VfdWFydChwKSAgY29udGFpbmVyX29mKHAsIHN0cnVjdCBydHBzZV9tY3VfdWFydCwgcHNlKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogTm8gZnJhbWluZyBpcyBkb25lIGhlcmU6IGEgZ2xpdGNoZWQgZnJhbWUgY29zdHMgb25lIHRyYW5zYWN0aW9uLCB0aGVuXG4mIzQzOyAqIHRoZSBuZXh0IF9zZW5kIHJlLWZyYW1lcyBmcm9tIHJ4X2xlbiAwLiBSZXN5bmMgd29ya3MgYnkgcmV0dXJuaW5nIGNvdW50XG4mIzQzOyAqIChub3QgdGFrZSksIGRyb3BwaW5nIGFueSBvdmVyZmxvdyBzbyBzZXJkZXYga2VlcHMgbm8gbGVmdG92ZXIgdG8gYmxlZWRcbiYjNDM7ICogaW50byB0aGUgbmV4dCBmcmFtZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzaXplX3QgcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSBzZXJkZXZfZGV2aWNlX2dldF9kcnZkYXRhKHNlcmRldik7XG4mIzQzO1x0c2l6ZV90IHRha2U7XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjdHgtXHUwMDNlcnhfbG9jaykge1xuJiM0MztcdFx0dGFrZSA9IG1pbihjb3VudCwgc2l6ZW9mKGN0eC1cdTAwM2VyeF9idWYpIC0gY3R4LVx1MDAzZXJ4X2xlbik7XG4mIzQzO1x0XHRpZiAodGFrZSkge1xuJiM0MztcdFx0XHRtZW1jcHkoY3R4LVx1MDAzZXJ4X2J1ZiAmIzQzOyBjdHgtXHUwMDNlcnhfbGVuLCBidWYsIHRha2UpO1xuJiM0MztcdFx0XHRjdHgtXHUwMDNlcnhfbGVuICYjNDM7PSB0YWtlO1xuJiM0MztcdFx0XHRpZiAoY3R4LVx1MDAzZXJ4X2xlbiA9PSBzaXplb2YoY3R4LVx1MDAzZXJ4X2J1ZikpXG4mIzQzO1x0XHRcdFx0Y29tcGxldGUoXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogY29uc3VtZSBhbGwgdG8gYXZvaWQgZGVzeW5jL21pc2FsaWdubWVudCAqL1xuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBzZXJkZXZfZGV2aWNlX29wcyBydHBzZV9tY3VfdWFydF9zZXJkZXZfb3BzID0ge1xuJiM0MztcdC5yZWNlaXZlX2J1ZiA9IHJ0cHNlX21jdV91YXJ0X3JlY2VpdmUsXG4mIzQzO1x0LndyaXRlX3dha2V1cCA9IHNlcmRldl9kZXZpY2Vfd3JpdGVfd2FrZXVwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfdWFydF9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSB0b19ydHBzZV9tY3VfdWFydChwc2UpO1xuJiM0MztcdGludCB3cml0dGVuO1xuJiM0MztcbiYjNDM7XHQvKiBjbGVhciBhbnkgbGVmdG92ZXIgcnggc3RhdGUgYmVmb3JlIHRyYW5zbWl0dGluZyAqL1xuJiM0MztcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjdHgtXHUwMDNlcnhfbG9jaykge1xuJiM0MztcdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUpO1xuJiM0MztcdFx0Y3R4LVx1MDAzZXJ4X2xlbiA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3cml0dGVuID0gc2VyZGV2X2RldmljZV93cml0ZShjdHgtXHUwMDNlc2VyZGV2LCAoY29uc3QgdTggKilyZXEsIHNpemVvZigqcmVxKSxcbiYjNDM7XHRcdFx0XHQgICAgICBSVFBTRV9NQ1VfVUFSVF9UWF9USU1FT1VUKTtcbiYjNDM7XHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiB3cml0dGVuO1xuJiM0MztcdGlmICh3cml0dGVuICE9IHNpemVvZigqcmVxKSlcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfdWFydF9yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLFxuJiM0MztcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSB0b19ydHBzZV9tY3VfdWFydChwc2UpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZjdHgtXHUwMDNlcnhfZG9uZSwgUlRQU0VfTUNVX1VBUlRfUlhfVElNRU9VVCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmN0eC1cdTAwM2VyeF9sb2NrKSB7XG4mIzQzO1x0XHRpZiAoY3R4LVx1MDAzZXJ4X2xlbiAhPSBzaXplb2YoKnJlc3ApKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0XHRtZW1jcHkocmVzcCwgY3R4LVx1MDAzZXJ4X2J1Ziwgc2l6ZW9mKCpyZXNwKSk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHJ0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHMgPSB7XG4mIzQzO1x0LnNlbmQgPSBydHBzZV9tY3VfdWFydF9zZW5kLFxuJiM0MztcdC5yZWN2ID0gcnRwc2VfbWN1X3VhcnRfcmVjdixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldilcbiYjNDM7e1xuJiM0MztcdHUzMiBzcGVlZCA9IFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVDtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZzZXJkZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFjdHgpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZXNlcmRldiA9IHNlcmRldjtcbiYjNDM7XHRjdHgtXHUwMDNlcHNlLmRldiA9IGRldjtcbiYjNDM7XHRjdHgtXHUwMDNlcHNlLnBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XG4mIzQzO1x0Y3R4LVx1MDAzZXBzZS50cmFuc3BvcnQgPSBcdTAwMjZydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzO1xuJiM0MztcdGluaXRfY29tcGxldGlvbihcdTAwMjZjdHgtXHUwMDNlcnhfZG9uZSk7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y3R4LVx1MDAzZXJ4X2xvY2spO1xuJiM0MztcbiYjNDM7XHRzZXJkZXZfZGV2aWNlX3NldF9kcnZkYXRhKHNlcmRldiwgY3R4KTtcbiYjNDM7XHRzZXJkZXZfZGV2aWNlX3NldF9jbGllbnRfb3BzKHNlcmRldiwgXHUwMDI2cnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fc2VyZGV2X2RldmljZV9vcGVuKGRldiwgc2VyZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byBvcGVuIHNlcmRldlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXZfZndub2RlKGRldiksIFwmIzM0O2N1cnJlbnQtc3BlZWRcJiMzNDssIFx1MDAyNnNwZWVkKTtcbiYjNDM7XHRzZXJkZXZfZGV2aWNlX3NldF9iYXVkcmF0ZShzZXJkZXYsIHNwZWVkKTtcbiYjNDM7XHRzZXJkZXZfZGV2aWNlX3NldF9mbG93X2NvbnRyb2woc2VyZGV2LCBmYWxzZSk7XG4mIzQzO1x0c2VyZGV2X2RldmljZV9zZXRfcGFyaXR5KHNlcmRldiwgU0VSREVWX1BBUklUWV9OT05FKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ0cHNlX21jdV9yZWdpc3RlcihcdTAwMjZjdHgtXHUwMDNlcHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2hbXSA9IHtcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxwc2UtbWN1LXJ0a1wmIzM0OywgLmRhdGEgPSBcdTAwMjZydHBzZV9tY3VfcnRrX2RhdGEgfSxcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxwc2UtbWN1LWJyY21cJiMzNDssIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2JyY21fZGF0YSB9LFxuJiM0MztcdHsgLyogc2VudGluZWwgKi8gfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHNlcmRldl9kZXZpY2VfZHJpdmVyIHJ0cHNlX21jdV91YXJ0X2RyaXZlciA9IHtcbiYjNDM7XHQuZHJpdmVyID0ge1xuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtyZWFsdGVrLXBzZS1tY3UtdWFydFwmIzM0OyxcbiYjNDM7XHRcdC5vZl9tYXRjaF90YWJsZSA9IHJ0cHNlX21jdV91YXJ0X29mX21hdGNoLFxuJiM0MztcdH0sXG4mIzQzO1x0LnByb2JlICA9IHJ0cHNlX21jdV91YXJ0X3Byb2JlLFxuJiM0Mzt9O1xuJiM0Mzttb2R1bGVfc2VyZGV2X2RldmljZV9kcml2ZXIocnRwc2VfbWN1X3VhcnRfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7Sm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1UgZHJpdmVyIChVQVJUIHRyYW5zcG9ydClcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaCBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iOWJmM2IyZGRlMDhiOFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oXG5AQCAtMCwwICYjNDM7MSw4NyBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfUkVBTFRFS19QU0VfTUNVX0hcbiYjNDM7I2RlZmluZSBfUkVBTFRFS19QU0VfTUNVX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRpbWUgdGhlIE1DVSBpdHNlbGYgbmVlZHMgYmV0d2VlbiBhY2NlcHRpbmcgYSByZXF1ZXN0IGFuZCBoYXZpbmcgYVxuJiM0MzsgKiByZXNwb25zZSByZWFkeS4gVGhlc2UgYXJlIHByb3BlcnRpZXMgb2YgdGhlIE1DVSBmaXJtd2FyZSwgbm90IG9mIHRoZVxuJiM0MzsgKiB1bmRlcmx5aW5nIHRyYW5zcG9ydDogdGhlIGNvcmUgcGFjZXMgdHJhbnNhY3Rpb25zIGJ5IFJUUFNFX01DVV9SRVNQT05TRV9NU1xuJiM0MzsgKiBhbmQgYm90aCB0cmFuc3BvcnRzIHNpemUgdGhlaXIgcGVyLXRyYW5zYWN0aW9uIHJlY3YgY2VpbGluZyBmcm9tXG4mIzQzOyAqIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMsIHNpbmNlIHNvbWUgY29tbWFuZHMgYXJlIGRvY3VtZW50ZWQgYXNcbiYjNDM7ICogbmVlZGluZyB1cCB0byB+MXMgdG8gcHJvZHVjZSBhIHJlcGx5LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVNcdFx0XHQyNVxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVNcdFx0MTAwMFxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVG90YWwgdGltZSB0byBrZWVwIHJldHJ5aW5nIHRoZSBmaXJzdCBNQ1UgcmVhZCBhdCBwcm9iZSwgYW5kIHRoZSBwYXVzZVxuJiM0MzsgKiBiZXR3ZWVuIGF0dGVtcHRzLiBSaWdodCBhZnRlciBlbmFibGUtZ3Bpb3MgaXMgYXNzZXJ0ZWQgdGhlIE1DVSBtYXkgbm90XG4mIzQzOyAqIGFuc3dlciBvbiB0aGUgYnVzIHlldDsgZ2l2ZSBpdCBhIGJvdW5kZWQgd2luZG93IHRvIGNvbWUgdXAgYmVmb3JlXG4mIzQzOyAqIGRlY2xhcmluZyB0aGUgcHJvYmUgZmFpbGVkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfQk9PVF9USU1FT1VUX01TXHRcdDMwMDBcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfQk9PVF9SRVRSWV9NU1x0XHRcdDEwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfTVNHX1NJWkVcdFx0XHQxMlxuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9tc2cge1xuJiM0MztcdHU4IG9wY29kZTtcbiYjNDM7XHR1OCBzZXFfbnVtO1xuJiM0MztcdHU4IHBheWxvYWRbOV07XG4mIzQzO1x0dTggY2hlY2tzdW07XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBNQ1Ugc3RhdHVzIG9wY29kZXMgKHNlZW4gb24gdGhlIEJDTSBkaWFsZWN0OyBSVEwgbmV2ZXIgZW1pdHMgdGhlbSkuXG4mIzQzOyAqIElOQ09NUExFVEUvQkFEX0NTVU0gYXJlIHRlcm1pbmFsOyBOT1RfUkVBRFkgaXMgdHJhbnNpZW50LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEVcdFx0MHhmZFx0LyogLUVCQURFICAgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNXHRcdDB4ZmVcdC8qIC1FQkFETVNHICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9OT1RfUkVBRFlcdFx0MHhmZlx0LyogLUVBR0FJTiAgKi9cbiYjNDM7XG4mIzQzOy8qIEEgcG9sbGluZyB0cmFuc3BvcnQgY2FuIHN0b3AgaGVyZTogdGhlIG1hdGNoaW5nIHJlcGx5LCBvciBhIHRlcm1pbmFsIGVycm9yLiAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbiYjNDM7XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlc3AtXHUwMDNlb3Bjb2RlID09IHJlcS1cdTAwM2VvcGNvZGUgfHxcbiYjNDM7XHQgICAgICAgcmVzcC1cdTAwM2VvcGNvZGUgPT0gUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFIHx8XG4mIzQzO1x0ICAgICAgIHJlc3AtXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU07XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE9wYXF1ZSB0byB0cmFuc3BvcnRzOyBkZWZpbmVkIGluIHJlYWx0ZWstcHNlLWNvcmUuYy4gKi9cbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0O1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGE7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2N0cmw7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMge1xuJiM0MztcdGludCAoKnNlbmQpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKTtcbiYjNDM7XHRpbnQgKCpyZWN2KShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwge1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiYjNDM7XHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2IHBjZGV2O1xuJiM0MztcdHN0cnVjdCBtdXRleCBtdXRleDsgLyogc2VyaWFsaXplcyBNQ1UgcmVxdWVzdC9yZXNwb25zZSB0cmFuc2FjdGlvbnMgKi9cbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgKmRpYWxlY3Q7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gKmNoaXA7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzICp0cmFuc3BvcnQ7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCByZWd1bGF0b3IgKnBvZV9zdXBwbHk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztpbnQgcnRwc2VfbWN1X3JlZ2lzdGVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlKTtcbiYjNDM7XG4mIzQzOy8qIFdoZXRoZXIgdGhlIEkyQyB0cmFuc3BvcnQgbXVzdCByZWFkIFwmIzM0O3JlYWx0ZWssaTJjLXByb3RvY29sXCYjMzQ7IGZyb20gRFQuICovXG4mIzQzO2Jvb2wgcnRwc2VfbWN1X25lZWRzX2kyY19wcm90byhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoKTtcbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X3J0a19kYXRhO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9icmNtX2RhdGE7XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNTozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQU0VfQ09OVFJPTExFUiYjMzQ7LAogICAgJiMzNDtQU0VfUkVBTFRFS19NQ1VfSTJDJiMzNDssCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9VQVJUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2Rpc2FibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3VhcnRfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3VhcnRfcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVXMsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIFRoZSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgUFNFIGNvbnRyb2xsZXIgQVBJIGFuZCBwYXJzZXMgcmVzcG9uc2VzIGZyb20gdGhlIE1DVS4gRnV6emluZyB0aGUgSTJDL1VBUlQgaW50ZXJmYWNlcyBhbmQgdGhlIFBTRSBjb250cm9sbGVyIG9wcyBpcyB2YWx1YWJsZSBmb3IgZmluZGluZyBwb3RlbnRpYWwgYnVncyBpbiB0aGUgcHJvdG9jb2wgcGFyc2luZyBhbmQgc3RhdGUgbWFuYWdlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWNmNmJjZWYxNTA5Y2IzYTFhNjBjNmRhNDFmYjI1NDcwMzk1NTBjZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDYgMTU6MzM6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kMGRmYWUyMjBkYzFlOQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sCkBAIC0wLDAgJiM0MzsxLDE1NCBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKQomIzQzOyVZQU1MIDEuMgomIzQzOy0tLQomIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogUmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIEpvbmFzIEplbG9uZWsgJmx0O2plbG9uZWsuam9uYXNAZ21haWwuY29tJmd0OwomIzQzOwomIzQzO2Rlc2NyaXB0aW9uOiB8CiYjNDM7ICBNaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRSBoYXJkd2FyZSBvbiBzd2l0Y2hlcyB1c2luZwomIzQzOyAgUmVhbHRlayAoUlRMODIzOEIsIFJUTDgyMzksIFJUTDgyMzlDKSBvciBCcm9hZGNvbSAoQkNNNTkxMTEsIEJDTTU5MTIxKQomIzQzOyAgUFNFIGNoaXBzLiBUaGUgTUNVIGV4cG9zZXMgYSBzbWFsbCBtZXNzYWdlLWJhc2VkIHByb3RvY29sIG92ZXIgZWl0aGVyCiYjNDM7ICBJMkMvU01CdXMgb3IgVUFSVDsgdGhlIGFjdHVhbCBQU0Ugc2lsaWNvbiBpcyBub3QgYWNjZXNzZWQgZGlyZWN0bHkuIFRoZQomIzQzOyAgUmVhbHRlayBhbmQgQnJvYWRjb20gdmFyaWFudHMgc2hhcmUgdGhpcyBkZXZpY2UgdHJlZSBjb250cmFjdCBidXQgdXNlCiYjNDM7ICBkaWZmZXJlbnQgcHJvdG9jb2wgb3Bjb2Rlcywgc2VsZWN0ZWQgYnkgdGhlIGNvbXBhdGlibGUuCiYjNDM7CiYjNDM7ICBUaGUgY29tcGF0aWJsZSBpZGVudGlmaWVzIHRoZSBQU0UtTUNVIHByb3RvY29sIGRpYWxlY3QsIG5vdCBhIHNwZWNpZmljCiYjNDM7ICBwYXJ0LiBUaGUgZGV2aWNlIGhlcmUgaXMgdGhlIE1DVTogaXQgcHJlc2VudHMgYSBzdGFibGUgbWVzc2FnZSBwcm90b2NvbAomIzQzOyAgZG9jdW1lbnRlZCBieSBSZWFsdGVrLCB3aXRoIHRoZSBQU0Ugc2lsaWNvbiBiZWhpbmQgaXQgLSBCcm9hZGNvbSBvbgomIzQzOyAgb2xkZXIgYm9hcmRzLCBSZWFsdGVrIG9uIG5ld2VyIC0gZGV0ZWN0ZWQgYXQgcnVudGltZSBhbmQgbm90IGRlc2NyaWJlZAomIzQzOyAgaGVyZS4gVGhlIE1DVSYjMzk7cyBvd24gc2lsaWNvbiBpcyBnZW5lcmFsLXB1cnBvc2UgYW5kIHZhcmllcyBhY3Jvc3MKJiM0MzsgIGJvYXJkcywgc28gdGhlICYjMzk7cmVhbHRlayYjMzk7IHZlbmRvciBwcmVmaXggbmFtZXMgdGhlIHByb3RvY29sIGZyb250LWVuZAomIzQzOyAgKGZvbGxvd2luZyB0aGUgZ29vZ2xlLGNyb3MtZWMgcGF0dGVybik7IHRoZSAmIzM5Oy1ydGsmIzM5Oy8mIzM5Oy1icmNtJiMzOTsgc3VmZml4CiYjNDM7ICBzZWxlY3RzIHRoZSBSZWFsdGVrIG9yIEJyb2FkY29tIGRpYWxlY3QuCiYjNDM7CiYjNDM7ICBBIHNpbmdsZSBjb21wYXRpYmxlIHBlciBkaWFsZWN0IGNvdmVycyBib3RoIHRoZSBJMkMvU01CdXMgYW5kIFVBUlQKJiM0MzsgIGF0dGFjaG1lbnRzOiB0aGUgd2lyZSBwcm90b2NvbCBpcyBpZGVudGljYWwgYWNyb3NzIHRoZW0gYW5kIHRoZQomIzQzOyAgdHJhbnNwb3J0IGlzIGFscmVhZHkgZXhwcmVzc2VkIGJ5IHRoZSBub2RlJiMzOTtzIHBhcmVudCBidXMsIHNvIGl0IGlzIG5vdAomIzQzOyAgZW5jb2RlZCBpbiB0aGUgY29tcGF0aWJsZS4gVHJhbnNwb3J0LXNwZWNpZmljIHByb3BlcnRpZXMgZGlmZmVyCiYjNDM7ICBhY2NvcmRpbmdseSAtIHRoZSBJMkMgYXR0YWNobWVudCBjYXJyaWVzICYjMzk7cmVnJiMzOTsgKGFuZCwgZm9yIFJlYWx0ZWssCiYjNDM7ICAmIzM5O3JlYWx0ZWssaTJjLXByb3RvY29sJiMzOTspLCB3aGlsZSB0aGUgVUFSVCBhdHRhY2htZW50IGNhcnJpZXMgdGhlIHNlcmlhbAomIzQzOyAgcGVyaXBoZXJhbCBwcm9wZXJ0aWVzIHN1Y2ggYXMgJiMzOTtjdXJyZW50LXNwZWVkJiMzOTsuCiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGVudW06CiYjNDM7ICAgICAgLSByZWFsdGVrLHBzZS1tY3UtcnRrCiYjNDM7ICAgICAgLSByZWFsdGVrLHBzZS1tY3UtYnJjbQomIzQzOwomIzQzOyAgcmVnOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzOyAgcG93ZXItc3VwcGx5OgomIzQzOyAgICBkZXNjcmlwdGlvbjogUmVndWxhdG9yIHN1cHBseWluZyB0aGUgUG9FIHBvd2VyIHJhaWwuCiYjNDM7CiYjNDM7ICBlbmFibGUtZ3Bpb3M6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7ICByZWFsdGVrLGkyYy1wcm90b2NvbDoKJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvc3RyaW5nCiYjNDM7ICAgIGVudW06IFsgaTJjLCBzbWJ1cyBdCiYjNDM7ICAgIGRlc2NyaXB0aW9uOiB8CiYjNDM7ICAgICAgV2lyZSBmcmFtaW5nIHRoZSBNQ1UgZmlybXdhcmUgZXhwZWN0cyBvbiB0aGUgSTJDIGJ1cy4gJiMzNDtzbWJ1cyYjMzQ7IG1lYW5zCiYjNDM7ICAgICAgcmVhZHMgY2FycnkgYSBsZWFkaW5nIGNvbW1hbmQgYnl0ZSAoMHgwMCkgYW5kIGEgcmVwZWF0ZWQgc3RhcnQ7ICYjMzQ7aTJjJiMzNDsKJiM0MzsgICAgICBtZWFucyBiYXJlIDEyLWJ5dGUgd3JpdGVzIGFuZCByZWFkcyB3aXRoIG5vIGNvbW1hbmQgcHJlZml4LiBPbmx5CiYjNDM7ICAgICAgYXBwbGllcyB0byB0aGUgUmVhbHRlayBJMkMgYXR0YWNobWVudC4KJiM0MzsKJiM0MztyZXF1aXJlZDoKJiM0MzsgIC0gY29tcGF0aWJsZQomIzQzOwomIzQzO2FsbE9mOgomIzQzOyAgLSAkcmVmOiBwc2UtY29udHJvbGxlci55YW1sIwomIzQzOyAgLSAkcmVmOiAvc2NoZW1hcy9zZXJpYWwvc2VyaWFsLXBlcmlwaGVyYWwtcHJvcHMueWFtbCMKJiM0MzsgICMgVGhlIEkyQyBhdHRhY2htZW50IChpZGVudGlmaWVkIGJ5ICYjMzk7cmVnJiMzOTspIGNhbm5vdCBjYXJyeSBzZXJpYWwgYnVzIHByb3BzLgomIzQzOyAgLSBpZjoKJiM0MzsgICAgICByZXF1aXJlZDogW3JlZ10KJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY3VycmVudC1zcGVlZDogZmFsc2UKJiM0MzsgICAgICAgIG1heC1zcGVlZDogZmFsc2UKJiM0MzsgICMgJiMzOTtyZWFsdGVrLGkyYy1wcm90b2NvbCYjMzk7IGlzIG1lYW5pbmdmdWwgb25seSBmb3IgdGhlIFJlYWx0ZWsgSTJDIGF0dGFjaG1lbnQ7CiYjNDM7ICAjIHRoZSBCcm9hZGNvbSB2YXJpYW50IGFuZCBhbnkgVUFSVCBhdHRhY2htZW50IG11c3Qgbm90IGNhcnJ5IGl0LgomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29udGFpbnM6CiYjNDM7ICAgICAgICAgICAgY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1ydGsKJiM0MzsgICAgICByZXF1aXJlZDogW3JlZ10KJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0gcmVhbHRlayxpMmMtcHJvdG9jb2wKJiM0MzsgICAgZWxzZToKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgJiMzNDtyZWFsdGVrLGkyYy1wcm90b2NvbCYjMzQ7OiBmYWxzZQomIzQzOwomIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2UKJiM0MzsKJiM0MztleGFtcGxlczoKJiM0MzsgICMgUmVhbHRlayBQU0UgY2hpcCwgSTJDIGF0dGFjaG1lbnQgKFNNQnVzIGZyYW1pbmcpLgomIzQzOyAgLSB8CiYjNDM7ICAgIGkyYyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcHNlQDIwIHsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHBzZS1tY3UtcnRrJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzB4MjAmZ3Q7OwomIzQzOyAgICAgICAgICAgIHJlYWx0ZWssaTJjLXByb3RvY29sID0gJiMzNDtzbWJ1cyYjMzQ7OwomIzQzOwomIzQzOyAgICAgICAgICAgIHBzZS1waXMgewomIzQzOyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CiYjNDM7CiYjNDM7ICAjIEJyb2FkY29tIFBTRSBjaGlwLCBJMkMgYXR0YWNobWVudC4KJiM0MzsgIC0gfAomIzQzOyAgICBpMmMgewomIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgIGV0aGVybmV0LXBzZUAyMCB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxwc2UtbWN1LWJyY20mIzM0OzsKJiM0MzsgICAgICAgICAgICByZWcgPSAmbHQ7MHgyMCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgcHNlLXBpcyB7CiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgcHNlLXBpQDAgewomIzQzOyAgICAgICAgICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgI3BzZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgfTsKJiM0MzsgICAgfTsKJiM0MzsKJiM0MzsgICMgUmVhbHRlayBQU0UgY2hpcCwgVUFSVCBhdHRhY2htZW50LgomIzQzOyAgLSB8CiYjNDM7ICAgIHNlcmlhbCB7CiYjNDM7ICAgICAgICBldGhlcm5ldC1wc2UgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscHNlLW1jdS1ydGsmIzM0OzsKJiM0MzsgICAgICAgICAgICBjdXJyZW50LXNwZWVkID0gJmx0OzExNTIwMCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgcHNlLXBpcyB7CiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgcHNlLXBpQDAgewomIzQzOyAgICAgICAgICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgI3BzZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgfTsKJiM0MzsgICAgfTsKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNTJmMWE1NWVjYTk5YmYuLmUzZjQyNmEzYjIwMWZiIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMjI3MTYsNiAmIzQzOzIyNzE2LDEzIEBAIFM6CU1haW50YWluZWQKIEY6CWluY2x1ZGUvc291bmQvcnQqLmgKIEY6CXNvdW5kL3NvYy9jb2RlY3MvcnQqCiAKJiM0MztSRUFMVEVLL0JST0FEQ09NIFBTRSBNQ1UgRFJJVkVSCiYjNDM7TToJSm9uYXMgSmVsb25layAmbHQ7amVsb25lay5qb25hc0BnbWFpbC5jb20mZ3Q7CiYjNDM7TDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwomIzQzO1M6CU1haW50YWluZWQKJiM0MztGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbAomIzQzO0Y6CWRyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UqCiYjNDM7CiBSRUFMVEVLIE9UVE8gV0FUQ0hET0cKIE06CVNhbmRlciBWYW5oZXVsZSAmbHQ7c2FuZGVyQHN2YW5oZXVsZS5uZXQmZ3Q7CiBMOglsaW51eC13YXRjaGRvZ0B2Z2VyLmtlcm5lbC5vcmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnIGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWcKaW5kZXggN2VmMjk2NTdlZTVkZDEuLjIzZTQ0ZGRlM2RiZmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZwpAQCAtMTMsNiAmIzQzOzEzLDM0IEBAIG1lbnVjb25maWcgUFNFX0NPTlRST0xMRVIKIAogaWYgUFNFX0NPTlRST0xMRVIKIAomIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1UKJiM0MzsJdHJpc3RhdGUKJiM0MzsJaGVscAomIzQzOwkgIFNoYXJlZCBjb3JlIGZvciB0aGUgUmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlci4gVGhpcyBpcwomIzQzOwkgIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHRyYW5zcG9ydCBvcHRpb25zIGJlbG93LgomIzQzOwomIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfSTJDCiYjNDM7CXRyaXN0YXRlICYjMzQ7UmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydCkmIzM0OwomIzQzOwlkZXBlbmRzIG9uIEkyQwomIzQzOwlzZWxlY3QgUFNFX1JFQUxURUtfTUNVCiYjNDM7CWhlbHAKJiM0MzsJICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRQomIzQzOwkgIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHdpdGggUmVhbHRlayBvciBCcm9hZGNvbSBQU0UgY2hpcHMsIGF0dGFjaGVkCiYjNDM7CSAgdmlhIEkyQy9TTUJ1cy4gVGhlIE1DVSBleHBvc2VzIGEgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDsgdGhlIGFjdHVhbAomIzQzOwkgIFBTRSBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhCiYjNDM7CSAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS1pMmMuCiYjNDM7CiYjNDM7Y29uZmlnIFBTRV9SRUFMVEVLX01DVV9VQVJUCiYjNDM7CXRyaXN0YXRlICYjMzQ7UmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVUwomIzQzOwlzZWxlY3QgUFNFX1JFQUxURUtfTUNVCiYjNDM7CWhlbHAKJiM0MzsJICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRQomIzQzOwkgIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHdpdGggUmVhbHRlayBvciBCcm9hZGNvbSBQU0UgY2hpcHMsIGF0dGFjaGVkCiYjNDM7CSAgdmlhIFVBUlQuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWwgUFNFCiYjNDM7CSAgc2lsaWNvbiBpcyBub3QgYWNjZXNzZWQgZGlyZWN0bHkuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYQomIzQzOwkgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtdWFydC4KJiM0MzsKIGNvbmZpZyBQU0VfUkVHVUxBVE9SCiAJdHJpc3RhdGUgJiMzNDtSZWd1bGF0b3IgYmFzZWQgUFNFIGNvbnRyb2xsZXImIzM0OwogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZQppbmRleCBjYzc4ZjdlYTdmNWY3MS4uOWNjYTU5MDBmZTM0MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGUKQEAgLTMsNiAmIzQzOzMsOSBAQAogCiBvYmotJChDT05GSUdfUFNFX0NPTlRST0xMRVIpICYjNDM7PSBwc2VfY29yZS5vCiAKJiM0MztvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LWNvcmUubwomIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfSTJDKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LWkyYy5vCiYjNDM7b2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9VQVJUKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LXVhcnQubwogb2JqLSQoQ09ORklHX1BTRV9SRUdVTEFUT1IpICYjNDM7PSBwc2VfcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19QU0VfUEQ2OTJYMCkgJiM0Mzs9IHBkNjkyeDAubwogb2JqLSQoQ09ORklHX1BTRV9TSTM0NzQpICYjNDM7PSBzaTM0NzQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1jb3JlLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uOTYxYWM5ZTllZTljN2MKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYwpAQCAtMCwwICYjNDM7MSwxMDA2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSBmcm9udGluZyBSZWFsdGVrIG9yIEJyb2FkY29tIFBTRQomIzQzOyAqIGNoaXBzLiBCb3RoIHZlbmRvcnMmIzM5OyBNQ1VzIHNwZWFrIGEgY2xvc2VseSByZWxhdGVkIDEyLWJ5dGUgZml4ZWQtZnJhbWUKJiM0MzsgKiBtYW5hZ2VtZW50IHByb3RvY29sOyB0aGlzIGRyaXZlciBjb3ZlcnMgYm90aCB2aWEgYSBwZXItZGlhbGVjdCBvcGNvZGUKJiM0MzsgKiB0YWJsZSBhbmQgcmVzcG9uc2UgcGFyc2Vycy4KJiM0MzsgKgomIzQzOyAqIE1hbnkgUG9FIHN3aXRjaCBkZXNpZ25zIHB1dCBhIGRlZGljYXRlZCBtaWNyb2NvbnRyb2xsZXIgaW4gZnJvbnQgb2YgdGhlCiYjNDM7ICogYWN0dWFsIFBTRSBzaWxpY29uOiB0aGUgaG9zdCBDUFUgdGFsa3MgdG8gdGhlIE1DVSBvdmVyIEkyQy9TTUJ1cyBvcgomIzQzOyAqIFVBUlQsIGFuZCB0aGUgTUNVIGluIHR1cm4gbWFuYWdlcyB0aGUgUFNFIGNoaXBzIG9uIHRoZSBib2FyZC4gVGhlIE1DVQomIzQzOyAqIHNwZWFrcyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2wgKDEyLWJ5dGUgZml4ZWQtc2l6ZSBmcmFtZXM7IG9wY29kZQomIzQzOyAqICYjNDM7IGFyZyAmIzQzOyA5IHBheWxvYWQgYnl0ZXMgJiM0MzsgY2hlY2tzdW0pLiBUaGUgUFNFIGNoaXBzIHRoZW1zZWx2ZXMgYXJlIG5vdAomIzQzOyAqIGFjY2Vzc2VkIGRpcmVjdGx5OyBldmVyeXRoaW5nIGdvZXMgdGhyb3VnaCBNQ1UgY29tbWFuZHMuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGRyaXZlciB0YXJnZXRzIHRoYXQgYXJjaGl0ZWN0dXJlIGZvciB0aGUgUmVhbHRlay1mYW1pbHkgcHJvdG9jb2wuCiYjNDM7ICogVHdvIGRpYWxlY3RzIGFyZSBzdXBwb3J0ZWQ6IFJlYWx0ZWsgTUNVcyBtYW5hZ2luZyBSVEw4MjN4L1JUTDgyMzkqIFBTRQomIzQzOyAqIGNoaXBzLCBhbmQgQnJvYWRjb20gTUNVcyBtYW5hZ2luZyBCQ001OTB4eCBQU0UgY2hpcHMuIFRoZSB0d28gc2hhcmUKJiM0MzsgKiBmcmFtZSBmb3JtYXQgYW5kIGEgc3VtLW1vZC0yNTYgY2hlY2tzdW0gYnV0IGRpdmVyZ2Ugb24gb3Bjb2RlIG51bWJlcnMKJiM0MzsgKiBhbmQgb24gYSBmZXcgcmVzcG9uc2UgbGF5b3V0czsgdGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBwZXItZGlhbGVjdAomIzQzOyAqIG9wY29kZSB0YWJsZSBhbmQgcGFyc2VyIGhvb2tzLgomIzQzOyAqCiYjNDM7ICogT3V0IG9mIHNjb3BlOiBQU0UgY2hpcHMgdGhhdCBhcmUgaW50ZXJmYWNlZCBkaXJlY3RseSBmcm9tIHRoZSBob3N0CiYjNDM7ICogd2l0aG91dCBhIG1hbmFnZW1lbnQgTUNVLCBNQ1UgZGVzaWducyB0aGF0IHNwZWFrIGFuIHVucmVsYXRlZCBwcm90b2NvbAomIzQzOyAqIGZhbWlseSwgYW5kICYjMzQ7ZHVtYiBQU0UmIzM0OyBtb2RlcyB3aGVyZSBubyBob3N0IGNvbnRyb2wgaXMgd2lyZWQgdXAgYXQgYWxsLgomIzQzOyAqIFRob3NlLCBpZiBhbmQgd2hlbiB0aGV5IHNob3cgdXAgaW4gdGhlIGtlcm5lbCwgYmVsb25nIGluIHNlcGFyYXRlCiYjNDM7ICogZHJpdmVycyB1bmRlciBkcml2ZXJzL25ldC9wc2UtcGQvLgomIzQzOyAqCiYjNDM7ICogVGhpcyBjb3JlIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCwgZGVjb2RpbmcvZW5jb2Rpbmcgb2YgTUNVCiYjNDM7ICogcmVzcG9uc2VzLCBhbmQgdGhlIHBzZV9jb250cm9sbGVyX29wcyBpbnRlZ3JhdGlvbi4gVHJhbnNwb3J0IG1vZHVsZXMKJiM0MzsgKiAocmVhbHRlay1wc2UtaTJjLCByZWFsdGVrLXBzZS11YXJ0KSBwcm92aWRlIHRoZSBzZW5kL3JlY3YgY2FsbGJhY2tzLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbnRhaW5lcl9vZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ncGlvL2NvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ppZmZpZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlubWF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHNlLXBkL3BzZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3JlYWx0ZWstcHNlLW1jdS5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEIJCTB4MDEzOAomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5CQkweDAwMzkKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMJCTB4MDEzOQomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMQkJMHhlMTExCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxCQkweGUxMjEKJiM0MzsKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRAkJMHgwMAomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORwkJMHgwMQomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkcJCTB4MDIKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19URVNUCQkJMHgwMwkvKiBCcm9hZGNvbTsgcmVzZXJ2ZWQgb24gUmVhbHRlayAqLwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUCQkweDA0CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfT1RIRVJfRkFVTFQJCTB4MDUJLyogQnJvYWRjb207IHJlc2VydmVkIG9uIFJlYWx0ZWsgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HCQkweDA2CiYjNDM7CiYjNDM7LyogUlRQU0VfTUNVX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUgdmFsdWVzICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVIJMHgwMgomIzQzOwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX01BWF9QT1JUUwkJCTQ4CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFkJCTMKJiM0MzsKJiM0MztlbnVtIHJ0cHNlX21jdV9jbWQgewomIzQzOwlSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEUsCiYjNDM7CVJUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPLAomIzQzOwlSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHLAomIzQzOwomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFLAomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUsCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULAomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZLAomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVUywKJiM0MzsJUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUUywKJiM0MzsJUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUcsCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJRywKJiM0MzsKJiM0MzsJUlRQU0VfTUNVX05VTV9DTURTLAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgewomIzQzOwl1OCBvcDsKJiM0MzsJYm9vbCB2YWxpZDsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1Aob3BjKQl7IC5vcCA9IChvcGMpLCAudmFsaWQgPSB0cnVlIH0KJiM0MzsKJiM0MzsvKiBQYXJzZWQgTUNVIHJlc3BvbnNlIHN0cnVjdHVyZXMgKGRlY29kZWQgZnJvbSBydHBzZV9tY3VfbXNnIHJlcGxpZXMpICovCiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9pbmZvIHsKJiM0MzsJdTggbWF4X3BvcnRzOwomIzQzOwlib29sIHN5c3RlbV9lbmFibGU7CiYjNDM7CXUxNiBkZXZpY2VfaWQ7CiYjNDM7CXU4IHN3X3ZlcjsKJiM0MzsJdTggbWN1X3R5cGU7CiYjNDM7CXU4IGNvbmZpZ19zdGF0dXM7CiYjNDM7CXU4IGV4dF92ZXI7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgewomIzQzOwl1OCB1dmxvOwomIzQzOwl1OCBvdmxvOwomIzQzOwlib29sIHByZWFsbG9jX2VuYWJsZTsKJiM0MzsJdTggbnVtX29mX3BzZXM7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHsKJiM0MzsJdTggc3RzMTsKJiM0MzsJdTggc3RzMjsKJiM0MzsJdTggc3RzMzsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCB7CiYjNDM7CXUxNiB2b2x0YWdlX3JhdzsJLyogNjQuNDVtVi9MU0IgKi8KJiM0MzsJdTE2IGN1cnJlbnRfcmF3OwkvKiAxbUEvTFNCICovCiYjNDM7CXUxNiB0ZW1wZXJhdHVyZV9yYXc7CS8qIFQobUMpID0gMTI1MCAqICgyMjAgLSByYXcpICovCiYjNDM7CXUxNiBwb3dlcl9yYXc7CQkvKiAxMDBtVy9MU0IgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgewomIzQzOwlib29sIGVuYWJsZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIHsKJiM0MzsJdTggbWF4X3Bvd2VyOwomIzQzOwl1OCBwcmlvcml0eTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCB7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlIG9wY29kZVtSVFBTRV9NQ1VfTlVNX0NNRFNdOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2gKJiM0MzsJICogZGlhbGVjdCBzdXBwbGllcyBpdHMgb3duLiBPdGhlciByZXNwb25zZXMgc2hhcmUgb25lIGxheW91dCBhbmQgYXJlCiYjNDM7CSAqIGRlY29kZWQgZGlyZWN0bHkgLSBhIGRpYWxlY3QgdGhhdCBkaXZlcmdlcyB0aGVyZSBtdXN0IGFkZCBhIGhvb2ssCiYjNDM7CSAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS4KJiM0MzsJICovCiYjNDM7CXZvaWQgKCpwYXJzZV9zeXN0ZW1faW5mbykoY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbyk7CiYjNDM7CWludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7CiYjNDM7CWNvbnN0IGNoYXIgKigqbWN1X3R5cGVfc3RyKSh1bnNpZ25lZCBpbnQgbWN1X3R5cGUpOwomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQZXItY29tcGF0aWJsZSBtYXRjaCBkYXRhOiBzZWxlY3RlZCBieSB0aGUgRFQvSTJDIGNvbXBhdGlibGUsIGl0IGJ1bmRsZXMKJiM0MzsgKiB0aGUgcHJvdG9jb2wgZGlhbGVjdCB3aXRoIGF0dGFjaG1lbnQgcXVpcmtzIHRoYXQgdGhlIGV4YWN0IE1DVSBzaWxpY29uCiYjNDM7ICogZG9lcyBub3QgZGV0ZXJtaW5lIChvbmx5IGl0cyBmaXJtd2FyZSBwcm90b2NvbCBhbmQgdGhlIGhvc3QgYnVzIGRvKS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgKmRpYWxlY3Q7CiYjNDM7CS8qIEkyQyBmcmFtaW5nIG11c3QgY29tZSBmcm9tIERUIChyZWFsdGVrLGkyYy1wcm90b2NvbCk7IGVsc2UgU01CdXMuICovCiYjNDM7CWJvb2wgaTJjX3Byb3RvX2R0X3JlcXVpcmVkOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gewomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzOwl1MTYgZGV2aWNlX2lkOwomIzQzOwl1MzIgbWF4X21XX3Blcl9wb3J0OwomIzQzOwllbnVtIHJ0cHNlX21jdV9jbWQgcHdfc2V0X2NtZDsJLyogY29tbWFuZCB1c2VkIGJ5IHNldF9wd19saW1pdCAqLwomIzQzOwl1MzIgcHdfc2V0X2xzYl9tVzsJCS8qIExTQiBvZiBwd19zZXRfY21kIHZhbHVlLCBpbiBtVyAqLwomIzQzOwl1MzIgcHdfcmVhZF9sc2JfbVc7CQkvKiBMU0Igb2YgZXh0X2NvbmZpZy5tYXhfcG93ZXIgcmVhZC1iYWNrLCBpbiBtVyAqLwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzhiX2luZm8gPSB7CiYjNDM7CS5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCLAomIzQzOwkubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsCiYjNDM7CS5uYW1lID0gJiMzNDtSVEw4MjM4QiYjMzQ7LAomIzQzOwkucHdfcmVhZF9sc2JfbVcgPSAyMDAsCiYjNDM7CS5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCwKJiM0MzsJLnB3X3NldF9sc2JfbVcgPSAyMDAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOV9pbmZvID0gewomIzQzOwkuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5LAomIzQzOwkubWF4X21XX3Blcl9wb3J0ID0gOTAwMDAsCiYjNDM7CS5uYW1lID0gJiMzNDtSVEw4MjM5JiMzNDssCiYjNDM7CS5wd19yZWFkX2xzYl9tVyA9IDQwMCwKJiM0MzsJLnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCwKJiM0MzsJLnB3X3NldF9sc2JfbVcgPSA0MDAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOWNfaW5mbyA9IHsKJiM0MzsJLmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMsCiYjNDM7CS5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCwKJiM0MzsJLm5hbWUgPSAmIzM0O1JUTDgyMzlDJiMzNDssCiYjNDM7CS5wd19yZWFkX2xzYl9tVyA9IDQwMCwKJiM0MzsJLnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCwKJiM0MzsJLnB3X3NldF9sc2JfbVcgPSA0MDAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gYmNtNTkxMTFfaW5mbyA9IHsKJiM0MzsJLmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTEsCiYjNDM7CS5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCwKJiM0MzsJLm5hbWUgPSAmIzM0O0JDTTU5MTExJiMzNDssCiYjNDM7CS5wd19yZWFkX2xzYl9tVyA9IDIwMCwKJiM0MzsJLnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULAomIzQzOwkucHdfc2V0X2xzYl9tVyA9IDIwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBiY201OTEyMV9pbmZvID0gewomIzQzOwkuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTEyMSwKJiM0MzsJLyoKJiM0MzsJICogQkNNNTkxMjEgaXMgYSA2MFcgVHlwZS0zIHBhcnQsIGJ1dCBrbm93biBib2FyZHMgcnVuIGl0IGF0IDgwMi4zYXQKJiM0MzsJICogYW5kIHRoZSBCQ00gZGlhbGVjdCBoYXMgb25seSB0aGUgOC1iaXQvMC4yVyBzZXQgY29tbWFuZCAoJmx0Oz01MVcpOwomIzQzOwkgKiBjYXAgYXQgdGhlIDMwVyB0aGUgaGFyZHdhcmUgYWN0dWFsbHkgb2ZmZXJzLgomIzQzOwkgKi8KJiM0MzsJLm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLAomIzQzOwkubmFtZSA9ICYjMzQ7QkNNNTkxMjEmIzM0OywKJiM0MzsJLnB3X3JlYWRfbHNiX21XID0gMjAwLAomIzQzOwkucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsCiYjNDM7CS5wd19zZXRfbHNiX21XID0gMjAwLAomIzQzO307CiYjNDM7CiYjNDM7LyogSGVscGVycyBhbmQgYmFzaWMgZnVuY3Rpb25zICovCiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBydHBzZV9tY3VfY3RybCAqdG9fcnRwc2VfbWN1X2N0cmwoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gY29udGFpbmVyX29mKHBjZGV2LCBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwsIHBjZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBydHBzZV9tY3VfbmVlZHNfaTJjX3Byb3RvKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2gpCiYjNDM7ewomIzQzOwlyZXR1cm4gbWF0Y2gtJmd0O2kyY19wcm90b19kdF9yZXF1aXJlZDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X25lZWRzX2kyY19wcm90byk7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X21zZ19pbml0KHN0cnVjdCBydHBzZV9tY3VfbXNnICptc2csIHU4IG9wY29kZSkKJiM0Mzt7CiYjNDM7CW1lbXNldChtc2csIDB4ZmYsIHNpemVvZigqbXNnKSk7CiYjNDM7CW1zZy0mZ3Q7b3Bjb2RlID0gb3Bjb2RlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTggcnRwc2VfbWN1X2NoZWNrc3VtKGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwl1OCBzdW0gPSAwOwomIzQzOwomIzQzOwl3aGlsZSAobGVuLS0pCiYjNDM7CQlzdW0gJiM0Mzs9ICpidWYmIzQzOyYjNDM7OwomIzQzOwlyZXR1cm4gc3VtOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9kb194ZmVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLAomIzQzOwkJCSAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXEtJmd0O2NoZWNrc3VtID0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlcSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSk7CiYjNDM7CiYjNDM7CXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtwc2UtJmd0O211dGV4KSB7CiYjNDM7CQlyZXQgPSBwc2UtJmd0O3RyYW5zcG9ydC0mZ3Q7c2VuZChwc2UsIHJlcSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIE1DVSBuZWVkcyBhIGZpeGVkIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gcmVjZWl2aW5nIGEgcmVxdWVzdAomIzQzOwkJICogYW5kIGhhdmluZyB0aGUgcmVzcG9uc2UgcmVhZHksIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBieXRlcyBnZXQgdG8KJiM0MzsJCSAqIHVzLiBQYWNlIHRoZSB0cmFuc2FjdGlvbiBoZXJlIHNvIGVhY2ggdHJhbnNwb3J0IGNhbiBrZWVwIGl0cyByZWN2CiYjNDM7CQkgKiBwYXRoIHNpbXBsZTogYSBzaW5nbGUgYm91bmRlZCB3YWl0IHJhdGhlciB0aGFuIGEgZ2VuZXJpYyByZXRyeS4KJiM0MzsJCSAqLwomIzQzOwkJbXNsZWVwKFJUUFNFX01DVV9SRVNQT05TRV9NUyk7CiYjNDM7CiYjNDM7CQltZW1zZXQocmVzcCwgMCwgc2l6ZW9mKCpyZXNwKSk7CiYjNDM7CQlyZXQgPSBwc2UtJmd0O3RyYW5zcG9ydC0mZ3Q7cmVjdihwc2UsIHJlcSwgcmVzcCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRXhwbGljaXQgTUNVIGVycm9yIG9wY29kZXMgKG9ic2VydmVkIG9uIHRoZSBCQ00gZGlhbGVjdDsgaGFybWxlc3MKJiM0MzsJICogdG8gY2hlY2sgZm9yIFJUTCB0b28pLiBDYXRjaCB0aGVzZSBiZWZvcmUgdGhlIGdlbmVyaWMgb3Bjb2RlL0NSQwomIzQzOwkgKiBtaXNtYXRjaCBwYXRoIHNvIGNhbGxlcnMgc2VlIGEgbWVhbmluZ2Z1bCBlcnJuby4KJiM0MzsJICovCiYjNDM7CXN3aXRjaCAocmVzcC0mZ3Q7b3Bjb2RlKSB7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFOgomIzQzOwkJcmV0dXJuIC1FQkFERTsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNOgomIzQzOwkJcmV0dXJuIC1FQkFETVNHOwomIzQzOwljYXNlIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZOgomIzQzOwkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJlc3AtJmd0O29wY29kZSAhPSByZXEtJmd0O29wY29kZSB8fAomIzQzOwkgICAgcmVzcC0mZ3Q7c2VxX251bSAhPSByZXEtJmd0O3NlcV9udW0gfHwKJiM0MzsJICAgIHJlc3AtJmd0O2NoZWNrc3VtICE9IHJ0cHNlX21jdV9jaGVja3N1bSgodTggKilyZXNwLCBSVFBTRV9NQ1VfTVNHX1NJWkUgLSAxKSkKJiM0MzsJCXJldHVybiAtRUJBRE1TRzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfcXVlcnkoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCB1OCBvcGNvZGUsCiYjNDM7CQkJCXN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlydHBzZV9tY3VfbXNnX2luaXQoJmFtcDtyZXEsIG9wY29kZSk7CiYjNDM7CXJlcS5wYXlsb2FkWzBdID0gcG9ydDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCAmYW1wO3JlcSwgcmVzcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocmVzcC0mZ3Q7cGF5bG9hZFswXSAhPSBwb3J0KQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2NtZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSwgdTggYXJnKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlydHBzZV9tY3VfbXNnX2luaXQoJmFtcDtyZXEsIG9wY29kZSk7CiYjNDM7CXJlcS5wYXlsb2FkWzBdID0gcG9ydDsKJiM0MzsJcmVxLnBheWxvYWRbMV0gPSBhcmc7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgJmFtcDtyZXEsICZhbXA7cmVzcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocmVzcC5wYXlsb2FkWzBdICE9IHBvcnQgfHwgcmVzcC5wYXlsb2FkWzFdICE9IDApCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIEdsb2JhbCBvcGVyYXRpb25zICovCiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZ2V0X2luZm8oc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GT107CiYjNDM7CWlmICghb3BjLSZndDt2YWxpZCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcnRwc2VfbWN1X21zZ19pbml0KCZhbXA7cmVxLCBvcGMtJmd0O29wKTsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCAmYW1wO3JlcSwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXBzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7cGFyc2Vfc3lzdGVtX2luZm8ocmVzcC5wYXlsb2FkLCBpbmZvKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgKmNvbmZpZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlydHBzZV9tY3VfbXNnX2luaXQoJmFtcDtyZXEsIG9wYy0mZ3Q7b3ApOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsICZhbXA7cmVxLCAmYW1wO3Jlc3ApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJY29uZmlnLSZndDt1dmxvID0gcmVzcC5wYXlsb2FkWzBdOwomIzQzOwljb25maWctJmd0O292bG8gPSByZXNwLnBheWxvYWRbNV07CiYjNDM7CWNvbmZpZy0mZ3Q7cHJlYWxsb2NfZW5hYmxlID0gKHJlc3AucGF5bG9hZFsxXSA9PSAweDEpOwomIzQzOwljb25maWctJmd0O251bV9vZl9wc2VzID0gcmVzcC5wYXlsb2FkWzZdOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgYm9vbCBlbmFibGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW9wYyA9ICZhbXA7cHNlLSZndDtkaWFsZWN0LSZndDtvcGNvZGVbUlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlydHBzZV9tY3VfbXNnX2luaXQoJmFtcDtyZXEsIG9wYy0mZ3Q7b3ApOwomIzQzOwlyZXEucGF5bG9hZFswXSA9IGVuYWJsZSA/IDB4MSA6IDB4MDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCAmYW1wO3JlcSwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiAocmVzcC5wYXlsb2FkWzBdID09IDB4MCkgPyAwIDogLUVJTzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUG9ydCBvcGVyYXRpb25zICovCiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy0mZ3Q7b3AsICZhbXA7cmVzcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlzdGF0dXMtJmd0O3N0czEgPSByZXNwLnBheWxvYWRbMV07CiYjNDM7CXN0YXR1cy0mZ3Q7c3RzMiA9IHJlc3AucGF5bG9hZFsyXTsKJiM0MzsJc3RhdHVzLSZndDtzdHMzID0gcmVzcC5wYXlsb2FkWzNdOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LAomIzQzOwkJCQkJICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQgKm1lYXN1cmVtZW50KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy0mZ3Q7b3AsICZhbXA7cmVzcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwltZWFzdXJlbWVudC0mZ3Q7dm9sdGFnZV9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmFtcDtyZXNwLnBheWxvYWRbMV0pOwomIzQzOwltZWFzdXJlbWVudC0mZ3Q7Y3VycmVudF9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmFtcDtyZXNwLnBheWxvYWRbM10pOwomIzQzOwltZWFzdXJlbWVudC0mZ3Q7dGVtcGVyYXR1cmVfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KCZhbXA7cmVzcC5wYXlsb2FkWzVdKTsKJiM0MzsJbWVhc3VyZW1lbnQtJmd0O3Bvd2VyX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNigmYW1wO3Jlc3AucGF5bG9hZFs3XSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LAomIzQzOwkJCQkgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgKmNvbmZpZykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW9wYyA9ICZhbXA7cHNlLSZndDtkaWFsZWN0LSZndDtvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLSZndDtvcCwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWNvbmZpZy0mZ3Q7ZW5hYmxlID0gKHJlc3AucGF5bG9hZFsxXSA9PSAxKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LAomIzQzOwkJCQkJIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnICpjb25maWcpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR107CiYjNDM7CWlmICghb3BjLSZndDt2YWxpZCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtJmd0O29wLCAmYW1wO3Jlc3ApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJY29uZmlnLSZndDttYXhfcG93ZXIgPSByZXNwLnBheWxvYWRbM107CiYjNDM7CWNvbmZpZy0mZ3Q7cHJpb3JpdHkgPSByZXNwLnBheWxvYWRbNF07CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgcG9ydCwgb3BjLSZndDtvcCwgZW5hYmxlID8gMHgxIDogMHgwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUFNFIGNvbnRyb2xsZXIgb3BzICovCiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwKJiM0MzsJCQkJCSAgc3RydWN0IHBzZV9hZG1pbl9zdGF0ZSAqYWRtaW5fc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyBjb25maWc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcocHNlLCBpZCwgJmFtcDtjb25maWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJYWRtaW5fc3RhdGUtJmd0O2MzM19hZG1pbl9zdGF0ZSA9IGNvbmZpZy5lbmFibGUgPyBFVEhUT09MX0MzM19QU0VfQURNSU5fU1RBVEVfRU5BQkxFRCA6CiYjNDM7CQkJCQkJICAgICAgIEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9ESVNBQkxFRDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLAomIzQzOwkJCQkJc3RydWN0IHBzZV9wd19zdGF0dXMgKnB3X3N0YXR1cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1czsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhwc2UsIGlkLCAmYW1wO3N0YXR1cyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlzd2l0Y2ggKHN0YXR1cy5zdHMxKSB7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RJU0FCTEVEOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzoKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElORzoKJiM0MzsJCXB3X3N0YXR1cy0mZ3Q7YzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19TRUFSQ0hJTkc7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzoKJiM0MzsJCXB3X3N0YXR1cy0mZ3Q7YzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19ERUxJVkVSSU5HOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1RFU1Q6CiYjNDM7CQlwd19zdGF0dXMtJmd0O2MzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfVEVTVDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUUFNFX01DVV9QT1JUX1NUU19GQVVMVDoKJiM0MzsJCXB3X3N0YXR1cy0mZ3Q7YzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19GQVVMVDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVDoKJiM0MzsJCXB3X3N0YXR1cy0mZ3Q7YzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19PVEhFUkZBVUxUOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlwd19zdGF0dXMtJmd0O2MzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfVU5LTk9XTjsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgc3RhdHVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsICZhbXA7c3RhdHVzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHN0czIgaG9sZHMgdGhlIGNsYXNzIG9ubHkgaW4gdGhlIG9wZXJhdGlvbmFsIHN0YXRlcyBiZWxvdy4gSW4gYQomIzQzOwkgKiBmYXVsdC90ZXN0IHN0YXRlIChvciBhIGNvZGUgcmVzZXJ2ZWQgb24gdGhlIGN1cnJlbnQgZGlhbGVjdCkgaXQKJiM0MzsJICogZG9lcyBub3QsIHNvIHRoZXJlIGlzIG5vIGNsYXNzIHRvIHJlcG9ydCBhbmQgd2UgcmV0dXJuIDAuIFRoYXQgaXMKJiM0MzsJICogaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIHJlYWwgY2xhc3MtMCBQRDsgdXNlcnNwYWNlIGRpc2FtYmlndWF0ZXMKJiM0MzsJICogdmlhIHRoZSBwb3dlciBzdGF0dXMuCiYjNDM7CSAqLwomIzQzOwlzd2l0Y2ggKHN0YXR1cy5zdHMxKSB7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEOgomIzQzOwljYXNlIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkc6CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkc6CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkc6CiYjNDM7CQlyZXR1cm4gcHNlLSZndDtkaWFsZWN0LSZndDtwYXJzZV9wb3J0X2NsYXNzKCZhbXA7c3RhdHVzKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X21lYXN1cmVtZW50KHBzZSwgaWQsICZhbXA7bWVhc3VyZW1lbnQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogMTAwbVcgcGVyIExTQiAqLwomIzQzOwlyZXR1cm4gbWVhc3VyZW1lbnQucG93ZXJfcmF3ICogMTAwVTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDsKJiM0MzsJaW50IHJldDsKJiM0MzsJdTMyIHVWOwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgJmFtcDttZWFzdXJlbWVudCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiA2NC40NW1WIHBlciBMU0IgKi8KJiM0MzsJdVYgPSBtZWFzdXJlbWVudC52b2x0YWdlX3JhdyAqIDY0NDUwVTsKJiM0MzsJcmV0dXJuIG1pbl90KHUzMiwgdVYsIElOVF9NQVgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2VuYWJsZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZSh0b19ydHBzZV9tY3VfY3RybChwY2RldiksIGlkLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9kaXNhYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHBzZSwgaWQsICZhbXA7Y29uZmlnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBjb25maWcubWF4X3Bvd2VyICogcHNlLSZndDtjaGlwLSZndDtwd19yZWFkX2xzYl9tVzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXQoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwgaW50IG1heF9tVykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICp0eXBlX29wYywgKnZhbF9vcGM7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyAqY2hpcCA9IHBzZS0mZ3Q7Y2hpcDsKJiM0MzsJdTggcHJnX3ZhbDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKG1heF9tVyAmbHQ7IDAgfHwgbWF4X21XICZndDsgY2hpcC0mZ3Q7bWF4X21XX3Blcl9wb3J0KQomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CiYjNDM7CXR5cGVfb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdOwomIzQzOwl2YWxfb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtjaGlwLSZndDtwd19zZXRfY21kXTsKJiM0MzsJLyogcHdfc2V0X2xzYl9tVyBpcyB0aGUgZGl2aXNvciBiZWxvdzsgcmVqZWN0IGEgY2hpcCB0aGF0IGxhY2tzIGl0LiAqLwomIzQzOwlpZiAoIXR5cGVfb3BjLSZndDt2YWxpZCB8fCAhdmFsX29wYy0mZ3Q7dmFsaWQgfHwgIWNoaXAtJmd0O3B3X3NldF9sc2JfbVcpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFN3aXRjaCB0aGUgcG9ydCB0byB1c2VyLWRlZmluZWQgbGltaXQgbW9kZSBmaXJzdCwgdGhlbiBwcm9ncmFtIHRoZQomIzQzOwkgKiBsaW1pdCB2YWx1ZS4gSWYgdGhlIHNlY29uZCBjbWQgZmFpbHMsIHRoZSBwb3J0IGlzIGxlZnQgaW4KJiM0MzsJICogdXNlci1kZWZpbmVkIG1vZGUgYnV0IHdpdGggdGhlIHByZXZpb3VzIGxpbWl0IHZhbHVlOyB0aGUgbmV4dAomIzQzOwkgKiBzdWNjZXNzZnVsIHNldF9wd19saW1pdCBjYWxsIHJlY292ZXJzIGl0LgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIHR5cGVfb3BjLSZndDtvcCwgUlRQU0VfTUNVX1BPUlRfUFdfTElNSVRfVFlQRV9VU0VSKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXByZ192YWwgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG1heF9tVyAvIGNoaXAtJmd0O3B3X3NldF9sc2JfbVcsIFU4X01BWCk7CiYjNDM7CiYjNDM7CXJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdmFsX29wYy0mZ3Q7b3AsIHByZ192YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwKJiM0MzsJCQkJCSAgICAgIHN0cnVjdCBwc2VfcHdfbGltaXRfcmFuZ2VzICpvdXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IGV0aHRvb2xfYzMzX3BzZV9wd19saW1pdF9yYW5nZSAqcmFuZ2U7CiYjNDM7CiYjNDM7CXJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlKTsKJiM0MzsJaWYgKCFyYW5nZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlyYW5nZVswXS5taW4gPSAwOwomIzQzOwlyYW5nZVswXS5tYXggPSBwc2UtJmd0O2NoaXAtJmd0O21heF9tV19wZXJfcG9ydDsKJiM0MzsKJiM0MzsJb3V0LSZndDtjMzNfcHdfbGltaXRfcmFuZ2VzID0gcmFuZ2U7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgY29uZmlnOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhwc2UsIGlkLCAmYW1wO2NvbmZpZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gY29uZmlnLnByaW9yaXR5OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7CiYjNDM7CiYjNDM7CWlmIChwcmlvICZndDsgUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZKQomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CiYjNDM7CW9wYyA9ICZhbXA7cHNlLSZndDtkaWFsZWN0LSZndDtvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV07CiYjNDM7CWlmICghb3BjLSZndDt2YWxpZCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCBvcGMtJmd0O29wLCBwcmlvKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9vcHMgcnRwc2VfbWN1X29wcyA9IHsKJiM0MzsJLnBpX2dldF9hZG1pbl9zdGF0ZSA9IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZSwKJiM0MzsJLnBpX2dldF9wd19zdGF0dXMgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzLAomIzQzOwkucGlfZ2V0X3B3X2NsYXNzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzLAomIzQzOwkucGlfZ2V0X2FjdHVhbF9wdyA9IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcsCiYjNDM7CS5waV9lbmFibGUgPSBydHBzZV9tY3VfcG9ydF9lbmFibGUsCiYjNDM7CS5waV9kaXNhYmxlID0gcnRwc2VfbWN1X3BvcnRfZGlzYWJsZSwKJiM0MzsJLnBpX2dldF92b2x0YWdlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UsCiYjNDM7CS5waV9nZXRfcHdfbGltaXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQsCiYjNDM7CS5waV9zZXRfcHdfbGltaXQgPSBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXQsCiYjNDM7CS5waV9nZXRfcHdfbGltaXRfcmFuZ2VzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcywKJiM0MzsJLnBpX2dldF9wcmlvID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8sCiYjNDM7CS5waV9zZXRfcHJpbyA9IHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZGlzY292ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyBleHRfY29uZmlnOwomIzQzOwl1bnNpZ25lZCBsb25nIGRlYWRsaW5lOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBIGJvb3RpbmcgTUNVIG1heSBzdGF5IHNpbGVudCAoLUVUSU1FRE9VVCksIG5vdCBBQ0sgaXRzIGFkZHJlc3MKJiM0MzsJICogKC1FTlhJTyAvIC1FUkVNT1RFSU8pLCByZXBvcnQgbm90LXJlYWR5ICgtRUFHQUlOKSwgb3IgZW1pdCBhCiYjNDM7CSAqIGNvcnJ1cHQvcGFydGlhbCBmcmFtZSAoLUVCQURNU0cgLyAtRUJBREUpLiBSZXRyeSB0aG9zZSB3aXRoaW4gYQomIzQzOwkgKiBib3VuZGVkIHdpbmRvdzsgb3RoZXIgZXJyb3JzIChlLmcuIC1FT1BOT1RTVVBQKSBhcmUgZmF0YWwgYW5kIGZhaWwKJiM0MzsJICogaW1tZWRpYXRlbHkuCiYjNDM7CSAqLwomIzQzOwlkZWFkbGluZSA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhSVFBTRV9NQ1VfQk9PVF9USU1FT1VUX01TKTsKJiM0MzsJZG8gewomIzQzOwkJcmV0ID0gcnRwc2VfbWN1X2dldF9pbmZvKHBzZSwgaW5mbyk7CiYjNDM7CQlpZiAocmV0ICE9IC1FVElNRURPVVQgJmFtcDsmYW1wOyByZXQgIT0gLUVOWElPICZhbXA7JmFtcDsgcmV0ICE9IC1FUkVNT1RFSU8gJmFtcDsmYW1wOwomIzQzOwkJICAgIHJldCAhPSAtRUFHQUlOICZhbXA7JmFtcDsgcmV0ICE9IC1FQkFETVNHICZhbXA7JmFtcDsgcmV0ICE9IC1FQkFERSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCW1zbGVlcChSVFBTRV9NQ1VfQk9PVF9SRVRSWV9NUyk7CiYjNDM7CX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgcmV0LCAmIzM0O2ZhaWxlZCB0byByZWFkIE1DVSBpbmZvXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoaW5mby0mZ3Q7ZGV2aWNlX2lkKSB7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QjoKJiM0MzsJCXBzZS0mZ3Q7Y2hpcCA9ICZhbXA7cnRsODIzOGJfaW5mbzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOToKJiM0MzsJCXBzZS0mZ3Q7Y2hpcCA9ICZhbXA7cnRsODIzOV9pbmZvOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5QzoKJiM0MzsJCXBzZS0mZ3Q7Y2hpcCA9ICZhbXA7cnRsODIzOWNfaW5mbzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTE6CiYjNDM7CQlwc2UtJmd0O2NoaXAgPSAmYW1wO2JjbTU5MTExX2luZm87CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxOgomIzQzOwkJcHNlLSZndDtjaGlwID0gJmFtcDtiY201OTEyMV9pbmZvOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgLUVJTlZBTCwgJiMzNDt1bmtub3duIFBTRSBpZCAweCV4XG4mIzM0OywKJiM0MzsJCQkJICAgICBpbmZvLSZndDtkZXZpY2VfaWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghaW5mby0mZ3Q7bWF4X3BvcnRzIHx8IGluZm8tJmd0O21heF9wb3J0cyAmZ3Q7IFJUUFNFX01DVV9NQVhfUE9SVFMpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICAmIzM0O01DVSByZXBvcnRzIGludmFsaWQgcG9ydCBjb3VudCAldVxuJiMzNDssIGluZm8tJmd0O21heF9wb3J0cyk7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9nZXRfZXh0X2NvbmZpZyhwc2UsICZhbXA7ZXh0X2NvbmZpZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgcmV0LCAmIzM0O2ZhaWxlZCB0byByZWFkIE1DVSBleHQgY29uZmlnXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWRldl9pbmZvKHBzZS0mZ3Q7ZGV2LCAmIzM0OyVzIE1DVSwgJXMgKGlkIDB4JTA0eCksICV1IHBvcnRzIGFjcm9zcyAldSBQU0UgY2hpcChzKVxuJiMzNDssCiYjNDM7CQkgcHNlLSZndDtkaWFsZWN0LSZndDttY3VfdHlwZV9zdHIoaW5mby0mZ3Q7bWN1X3R5cGUpLCBwc2UtJmd0O2NoaXAtJmd0O25hbWUsCiYjNDM7CQkgaW5mby0mZ3Q7ZGV2aWNlX2lkLCBpbmZvLSZndDttYXhfcG9ydHMsIGV4dF9jb25maWcubnVtX29mX3BzZXMpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X3JlZ3VsYXRvcl9kaXNhYmxlKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlyZWd1bGF0b3JfZGlzYWJsZShkYXRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X2dsb2JhbF9kaXNhYmxlKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IGRhdGE7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHBzZSwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgcnRwc2VfbWN1X3JlZ2lzdGVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaDsKJiM0MzsJc3RydWN0IGdwaW9fZGVzYyAqZW5hYmxlX2dwaW87CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfaW5mbyBpbmZvOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBydHBzZV9tY3VfbXNnKSAhPSBSVFBTRV9NQ1VfTVNHX1NJWkUpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX211dGV4X2luaXQocHNlLSZndDtkZXYsICZhbXA7cHNlLSZndDttdXRleCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwltYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShwc2UtJmd0O2Rldik7CiYjNDM7CWlmICghbWF0Y2gpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgLUVOT0RFViwgJiMzNDttaXNzaW5nIG1hdGNoIGRhdGFcbiYjMzQ7KTsKJiM0MzsJcHNlLSZndDtkaWFsZWN0ID0gbWF0Y2gtJmd0O2RpYWxlY3Q7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENhdGNoIGEgZGlhbGVjdCB0aGF0IGZvcmdvdCB0byBzZXQgb25lIG9mIHRoZSByZXF1aXJlZCBob29rcyBhdAomIzQzOwkgKiBwcm9iZSB0aW1lLCByYXRoZXIgdGhhbiBOVUxMLWRlcmVmJiMzOTtpbmcgbGF0ZXIgZnJvbSBhIGZhc3QgcGF0aC4KJiM0MzsJICovCiYjNDM7CWlmICghcHNlLSZndDtkaWFsZWN0IHx8CiYjNDM7CSAgICAhcHNlLSZndDtkaWFsZWN0LSZndDtwYXJzZV9zeXN0ZW1faW5mbyB8fAomIzQzOwkgICAgIXBzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7cGFyc2VfcG9ydF9jbGFzcyB8fAomIzQzOwkgICAgIXBzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7bWN1X3R5cGVfc3RyKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLSZndDtkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAgJiMzNDtkaWFsZWN0IGZvciBjaGlwIGlzIGluY29tcGxldGVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcHNlLSZndDtwb2Vfc3VwcGx5ID0gZGV2bV9yZWd1bGF0b3JfZ2V0KHBzZS0mZ3Q7ZGV2LCAmIzM0O3Bvd2VyJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHBzZS0mZ3Q7cG9lX3N1cHBseSkpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgUFRSX0VSUihwc2UtJmd0O3BvZV9zdXBwbHkpLAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGdldCBQb0Ugc3VwcGx5XG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWVuYWJsZV9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwocHNlLSZndDtkZXYsICYjMzQ7ZW5hYmxlJiMzNDssIEdQSU9EX09VVF9ISUdIKTsKJiM0MzsJaWYgKElTX0VSUihlbmFibGVfZ3BpbykpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgUFRSX0VSUihlbmFibGVfZ3BpbyksCiYjNDM7CQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IGVuYWJsZSBncGlvXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9kaXNjb3Zlcihwc2UsICZhbXA7aW5mbyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHBzZS0mZ3Q7cG9lX3N1cHBseSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgcmV0LCAmIzM0O2ZhaWxlZCB0byBlbmFibGUgUG9FIHN1cHBseVxuJiMzNDspOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQocHNlLSZndDtkZXYsIHJ0cHNlX21jdV9yZWd1bGF0b3JfZGlzYWJsZSwgcHNlLSZndDtwb2Vfc3VwcGx5KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmICghaW5mby5zeXN0ZW1fZW5hYmxlKSB7CiYjNDM7CQlyZXQgPSBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShwc2UsIHRydWUpOwomIzQzOwkJLyogRGlhbGVjdHMgd2l0aG91dCBhIGdsb2JhbC1zdGF0ZSBjb25jZXB0IChlLmcuIEJDTSkgcmV0dXJuCiYjNDM7CQkgKiAtRU9QTk9UU1VQUDsgdHJlYXQgdGhhdCBhcyAmIzM0O25vIHNlcGFyYXRlIGVuYWJsZSByZXF1aXJlZCYjMzQ7LgomIzQzOwkJICovCiYjNDM7CQlpZiAocmV0ICZhbXA7JmFtcDsgcmV0ICE9IC1FT1BOT1RTVVBQKQomIzQzOwkJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCByZXQsCiYjNDM7CQkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBQU0Ugc3lzdGVtXG4mIzM0Oyk7CiYjNDM7CQlpZiAoIXJldCkgewomIzQzOwkJCXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChwc2UtJmd0O2RldiwKJiM0MzsJCQkJCQkgICAgICAgcnRwc2VfbWN1X2dsb2JhbF9kaXNhYmxlLCBwc2UpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRGVwZW5kaW5nIG9uIHRoZSBNQ1UgZmlybXdhcmUgY29uZmlndXJhdGlvbiAod2hpY2ggbWlnaHQgYmUgZGlmZmVyZW50CiYjNDM7CSAqIGZvciBldmVyeSBib2FyZCksIGl0IGlzbiYjMzk7dCBrbm93biB3aGV0aGVyIHRoZSBQb0Ugc3Vic3lzdGVtIGlzIGFjdGl2ZSBvcgomIzQzOwkgKiBpbmFjdGl2ZSBieSBkZWZhdWx0LiBBdCB0aGlzIHN0YWdlLCB0aGUgUFNFIGNoaXBzIG1pZ2h0IGFscmVhZHkgZGVsaXZlcgomIzQzOwkgKiBwb3dlciB0byBQRHMgd2l0aG91dCBhbnkgZXhwbGljaXQgZW5hYmxlLgomIzQzOwkgKi8KJiM0MzsKJiM0MzsJLyogcGNkZXYub3duZXIgaXMgc2V0IGJ5IHRoZSB0cmFuc3BvcnQsIHNvIHRoZSByZWdpc3RlcmVkIGNvbnRyb2xsZXIKJiM0MzsJICogcGlucyB0aGUgdHJhbnNwb3J0IG1vZHVsZSB0aGF0IG93bnMgdGhlIGxpdmUgZGV2aWNlLCBub3QgdGhlIGNvcmUuCiYjNDM7CSAqLwomIzQzOwlwc2UtJmd0O3BjZGV2Lm9wcyAgICAgID0gJmFtcDtydHBzZV9tY3Vfb3BzOwomIzQzOwlwc2UtJmd0O3BjZGV2LmRldiAgICAgID0gcHNlLSZndDtkZXY7CiYjNDM7CXBzZS0mZ3Q7cGNkZXYudHlwZXMgICAgPSBFVEhUT09MX1BTRV9DMzM7CiYjNDM7CXBzZS0mZ3Q7cGNkZXYubnJfbGluZXMgPSBpbmZvLm1heF9wb3J0czsKJiM0MzsJcHNlLSZndDtwY2Rldi5waXNfcHJpb19tYXggPSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFk7CiYjNDM7CXBzZS0mZ3Q7cGNkZXYuc3VwcF9idWRnZXRfZXZhbF9zdHJhdGVnaWVzID0gUFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUM7CiYjNDM7CiYjNDM7CXJldHVybiBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHBzZS0mZ3Q7ZGV2LCAmYW1wO3BzZS0mZ3Q7cGNkZXYpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfcmVnaXN0ZXIpOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9ydGxfcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CWluZm8tJmd0O21heF9wb3J0cyA9IHBheWxvYWRbMV07CiYjNDM7CWluZm8tJmd0O3N5c3RlbV9lbmFibGUgPSAocGF5bG9hZFsyXSA9PSAweDEpOwomIzQzOwlpbmZvLSZndDtkZXZpY2VfaWQgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmFtcDtwYXlsb2FkWzNdKTsKJiM0MzsJaW5mby0mZ3Q7c3dfdmVyID0gcGF5bG9hZFs1XTsKJiM0MzsJaW5mby0mZ3Q7bWN1X3R5cGUgPSBwYXlsb2FkWzZdOwomIzQzOwlpbmZvLSZndDtjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTsKJiM0MzsJaW5mby0mZ3Q7ZXh0X3ZlciA9IHBheWxvYWRbOF07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3J0bF9wYXJzZV9wb3J0X2NsYXNzKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cykKJiM0Mzt7CiYjNDM7CS8qIENsYXNzIGxpdmVzIGluIHRoZSB1cHBlciBuaWJibGUgb2Ygc3RzMi4gKi8KJiM0MzsJcmV0dXJuIEZJRUxEX0dFVChHRU5NQVNLKDcsIDQpLCBzdGF0dXMtJmd0O3N0czIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqcnRwc2VfbWN1X3J0bF9tY3VfdHlwZV9zdHIodW5zaWduZWQgaW50IG1jdV90eXBlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChtY3VfdHlwZSkgewomIzQzOwljYXNlIDB4MDA6CXJldHVybiAmIzM0O0dpZ2FEZXZpY2UgR0QzMkYzMTAmIzM0OzsKJiM0MzsJY2FzZSAweDAxOglyZXR1cm4gJiMzNDtHaWdhRGV2aWNlIEdEMzJGMjMwJiMzNDs7CiYjNDM7CWNhc2UgMHgwMjoJcmV0dXJuICYjMzQ7R2lnYURldmljZSBHRDMyRjMwMyYjMzQ7OwomIzQzOwljYXNlIDB4MDM6CXJldHVybiAmIzM0O0dpZ2FEZXZpY2UgR0QzMkYxMDMmIzM0OzsKJiM0MzsJY2FzZSAweDA0OglyZXR1cm4gJiMzNDtHaWdhRGV2aWNlIEdEMzJFMTAzJiMzNDs7CiYjNDM7CWNhc2UgMHgxMDoJcmV0dXJuICYjMzQ7TnV2b3RvbiBNMDUxNiYjMzQ7OwomIzQzOwljYXNlIDB4MTE6CXJldHVybiAmIzM0O051dm90b24gTTA1NjQmIzM0OzsKJiM0MzsJY2FzZSAweDEyOglyZXR1cm4gJiMzNDtOdXZvdG9uIE5VQzAyOSYjMzQ7OwomIzQzOwlkZWZhdWx0OglyZXR1cm4gJiMzNDt1bmtub3duJiMzNDs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X2JyY21fcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CWluZm8tJmd0O21heF9wb3J0cyA9IHBheWxvYWRbMV07CiYjNDM7CS8qIEJDTSBoYXMgbm8gZXhwbGljaXQgc3lzdGVtX2VuYWJsZSBieXRlOyB0aGUgY2xvc2VzdCBhbmFsb2cgaXMgdGhlCiYjNDM7CSAqICYjMzQ7cmVtb3RlIGVuYWJsZSYjMzQ7IGJpdCBpbiB0aGUgc3lzdGVtLXN0YXR1cyBmbGFncyBhdCBwYXlsb2FkWzddLgomIzQzOwkgKi8KJiM0MzsJaW5mby0mZ3Q7c3lzdGVtX2VuYWJsZSA9ICEhKHBheWxvYWRbN10gJmFtcDsgQklUKDIpKTsKJiM0MzsJaW5mby0mZ3Q7ZGV2aWNlX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KCZhbXA7cGF5bG9hZFszXSk7CiYjNDM7CWluZm8tJmd0O3N3X3ZlciA9IHBheWxvYWRbNV07CiYjNDM7CWluZm8tJmd0O21jdV90eXBlID0gcGF5bG9hZFs2XTsKJiM0MzsJaW5mby0mZ3Q7Y29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107CiYjNDM7CWluZm8tJmd0O2V4dF92ZXIgPSBwYXlsb2FkWzhdOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9icmNtX3BhcnNlX3BvcnRfY2xhc3MoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKQomIzQzO3sKJiM0MzsJLyogQkNNIHB1dHMgdGhlIGRldGVjdGVkIGNsYXNzIGluIHBheWxvYWRbM10gKD09IHN0czMpIGRpcmVjdGx5LgomIzQzOwkgKiBNYXNrIHRvIHRoZSBsb3cgbmliYmxlOyBjbGFzcyBpcyAwLi44IGFuZCBhbnkgaGlnaCBiaXRzIHdvdWxkIGJlCiYjNDM7CSAqIG5vaXNlLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIHN0YXR1cy0mZ3Q7c3RzMyAmYW1wOyAweDBmOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqcnRwc2VfbWN1X2JyY21fbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAobWN1X3R5cGUpIHsKJiM0MzsJY2FzZSAweDAwOglyZXR1cm4gJiMzNDtTVCBNaWNybyBTVDMyRjEwMCYjMzQ7OwomIzQzOwljYXNlIDB4MDE6CXJldHVybiAmIzM0O051dm90b24gTTA1eHggTEFOJiMzNDs7CiYjNDM7CWNhc2UgMHgwMjoJcmV0dXJuICYjMzQ7U1QgTWljcm8gU1RGMDMwQzgmIzM0OzsKJiM0MzsJY2FzZSAweDAzOglyZXR1cm4gJiMzNDtOdXZvdG9uIE0wNThTQU4mIzM0OzsKJiM0MzsJY2FzZSAweDA0OglyZXR1cm4gJiMzNDtOdXZvdG9uIE5VQzEyMiYjMzQ7OwomIzQzOwlkZWZhdWx0OglyZXR1cm4gJiMzNDt1bmtub3duJiMzNDs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyogTWFwIGVhY2ggbG9naWNhbCBjb21tYW5kIHRoZSBjb3JlIGlzc3VlcyB0byBpdHMgcGVyLWRpYWxlY3Qgb3Bjb2RlLiAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgcnRwc2VfbWN1X2RpYWxlY3RfcnRrID0gewomIzQzOwkucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfcnRsX3BhcnNlX3N5c3RlbV9pbmZvLAomIzQzOwkucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfcnRsX3BhcnNlX3BvcnRfY2xhc3MsCiYjNDM7CS5tY3VfdHlwZV9zdHIgICAgICA9IHJ0cHNlX21jdV9ydGxfbWN1X3R5cGVfc3RyLAomIzQzOwkub3Bjb2RlID0gewomIzQzOwkJW1JUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURV0JPSBSVFBTRV9NQ1VfT1AoMHgwMCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dCQk9IFJUUFNFX01DVV9PUCgweDQwKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXQkJPSBSVFBTRV9NQ1VfT1AoMHg0YSksCiYjNDM7CiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV0JCT0gUlRQU0VfTUNVX09QKDB4MDEpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxMiksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF0JPSBSVFBTRV9NQ1VfT1AoMHgxMyksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFRdID0gUlRQU0VfTUNVX09QKDB4MTQpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldCT0gUlRQU0VfTUNVX09QKDB4MTUpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXQkJPSBSVFBTRV9NQ1VfT1AoMHg0MiksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU10JPSBSVFBTRV9NQ1VfT1AoMHg0NCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddCQk9IFJUUFNFX01DVV9PUCgweDQ4KSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddCT0gUlRQU0VfTUNVX09QKDB4NDkpLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9icmNtID0gewomIzQzOwkucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfYnJjbV9wYXJzZV9zeXN0ZW1faW5mbywKJiM0MzsJLnBhcnNlX3BvcnRfY2xhc3MgID0gcnRwc2VfbWN1X2JyY21fcGFyc2VfcG9ydF9jbGFzcywKJiM0MzsJLm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2JyY21fbWN1X3R5cGVfc3RyLAomIzQzOwkub3Bjb2RlID0gewomIzQzOwkJW1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXQkJPSBSVFBTRV9NQ1VfT1AoMHgyMCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR10JCT0gUlRQU0VfTUNVX09QKDB4MmIpLAomIzQzOwomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdCQk9IFJUUFNFX01DVV9PUCgweDAwKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdID0gUlRQU0VfTUNVX09QKDB4MTUpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRdCT0gUlRQU0VfTUNVX09QKDB4MTYpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldCT0gUlRQU0VfTUNVX09QKDB4MWEpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXQkJPSBSVFBTRV9NQ1VfT1AoMHgyMSksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU10JPSBSVFBTRV9NQ1VfT1AoMHgzMCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddCQk9IFJUUFNFX01DVV9PUCgweDI1KSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddCT0gUlRQU0VfTUNVX09QKDB4MjYpLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9ydGtfZGF0YSA9IHsKJiM0MzsJLmRpYWxlY3QgPSAmYW1wO3J0cHNlX21jdV9kaWFsZWN0X3J0aywKJiM0MzsJLmkyY19wcm90b19kdF9yZXF1aXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MztFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfcnRrX2RhdGEpOwomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfYnJjbV9kYXRhID0gewomIzQzOwkuZGlhbGVjdCA9ICZhbXA7cnRwc2VfbWN1X2RpYWxlY3RfYnJjbSwKJiM0Mzt9OwomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9icmNtX2RhdGEpOwomIzQzOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O1JlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKGNvcmUpJiMzNDspOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKb25hcyBKZWxvbmVrICZsdDtqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNmU2ZTM2NDVjNTA5MDMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jCkBAIC0wLDAgJiM0MzsxLDE2MyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2kyYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHNlLXBkL3BzZS5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7cmVhbHRlay1wc2UtbWN1LmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIGNvcmUgaGFzIGFscmVhZHkgd2FpdGVkIFJUUFNFX01DVV9SRVNQT05TRV9NUyBiZWZvcmUgY2FsbGluZyB1cywgc28KJiM0MzsgKiB0aGUgcmVzcG9uc2UgaXMgbm9ybWFsbHkgcmVhZHkgb24gdGhlIHZlcnkgZmlyc3QgcmVhZC4gRm9yIGNvbW1hbmRzIHRoZQomIzQzOyAqIE1DVSBwcm9kdWNlcyBtb3JlIHNsb3dseSwga2VlcCBwb2xsaW5nIGF0IHRoZSB0eXBpY2FsIHJlc3BvbnNlIGNhZGVuY2UKJiM0MzsgKiB1cCB0byB0aGUgd29yc3QtY2FzZSBjZWlsaW5nLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19SRVRSWV9NUwlSVFBTRV9NQ1VfUkVTUE9OU0VfTVMKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTCShSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TIC8gUlRQU0VfTUNVX0kyQ19SRVRSWV9NUykKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJLyogU2VuZCBvcGNvZGUgYXMgU01CdXMgY29tbWFuZCBieXRlOyByZW1haW5pbmcgMTEgYnl0ZXMgYXMgYmxvY2sgZGF0YSAqLwomIzQzOwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVxLSZndDtvcGNvZGUsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEsCiYjNDM7CQkJCQkgICAgICAodTggKilyZXEgJiM0MzsgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLAomIzQzOwkJCQkgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtJmd0O2Rldik7CiYjNDM7CWludCB0cmllcywgcmV0OwomIzQzOwomIzQzOwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgJmx0OyBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUzsgdHJpZXMmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodHJpZXMgJmd0OyAwKQomIzQzOwkJCW1zbGVlcChSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKTsKJiM0MzsKJiM0MzsJCS8qIE1DVSBuZWVkcyAweDAwIGFzIGNvbW1hbmQgYnl0ZSBmb3IgcmVhZCAqLwomIzQzOwkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCAweDAwLAomIzQzOwkJCQkJCSAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsCiYjNDM7CQkJCQkJICAgICh1OCAqKXJlc3ApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFICZhbXA7JmFtcDsgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwocmVxLCByZXNwKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX3NtYnVzX29wcyA9IHsKJiM0MzsJLnNlbmQgPSBydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmQsCiYjNDM7CS5yZWN2ID0gcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLSZndDtkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCAoY29uc3QgdTggKilyZXEsIFJUUFNFX01DVV9NU0dfU0laRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUgPyAwIDogLUVJTzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLAomIzQzOwkJCQkgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKQomIzQzO3sKJiM0MzsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLSZndDtkZXYpOwomIzQzOwlpbnQgdHJpZXMsIHJldDsKJiM0MzsKJiM0MzsJZm9yICh0cmllcyA9IDA7IHRyaWVzICZsdDsgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVM7IHRyaWVzJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHRyaWVzICZndDsgMCkKJiM0MzsJCQltc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7CiYjNDM7CiYjNDM7CQlyZXQgPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCAodTggKilyZXNwLCBSVFBTRV9NQ1VfTVNHX1NJWkUpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFICZhbXA7JmFtcDsgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwocmVxLCByZXNwKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgPSB7CiYjNDM7CS5zZW5kID0gcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZCwKJiM0MzsJLnJlY3YgPSBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2NsaWVudC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZTsKJiM0MzsJYm9vbCB1c2VfbmF0aXZlID0gZmFsc2U7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7CiYjNDM7CWlmICghbWF0Y2gpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsICYjMzQ7bWlzc2luZyBtYXRjaCBkYXRhXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChydHBzZV9tY3VfbmVlZHNfaTJjX3Byb3RvKG1hdGNoKSkgewomIzQzOwkJY29uc3QgY2hhciAqcHJvdG87CiYjNDM7CiYjNDM7CQlyZXQgPSBkZXZpY2VfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LCAmIzM0O3JlYWx0ZWssaTJjLXByb3RvY29sJiMzNDssICZhbXA7cHJvdG8pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAgJiMzNDttaXNzaW5nIHJlcXVpcmVkIFwmIzM0O3JlYWx0ZWssaTJjLXByb3RvY29sXCYjMzQ7IHByb3BlcnR5XG4mIzM0Oyk7CiYjNDM7CiYjNDM7CQlpZiAoIXN0cmNtcChwcm90bywgJiMzNDtpMmMmIzM0OykpCiYjNDM7CQkJdXNlX25hdGl2ZSA9IHRydWU7CiYjNDM7CQllbHNlIGlmICghc3RyY21wKHByb3RvLCAmIzM0O3NtYnVzJiMzNDspKQomIzQzOwkJCXVzZV9uYXRpdmUgPSBmYWxzZTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkgICAgICYjMzQ7dW5rbm93biByZWFsdGVrLGkyYy1wcm90b2NvbCBcJiMzNDslc1wmIzM0O1xuJiMzNDssIHByb3RvKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodXNlX25hdGl2ZSkgewomIzQzOwkJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtJmd0O2FkYXB0ZXIsIEkyQ19GVU5DX0kyQykpCiYjNDM7CQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCwKJiM0MzsJCQkJJiMzNDtwbGFpbi1JMkMgTUNVIHByb3RvY29sIHJlcXVpcmVzIEkyQy1jYXBhYmxlIGFkYXB0ZXJcbiYjMzQ7KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LSZndDthZGFwdGVyLAomIzQzOwkJCQkJICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sgfAomIzQzOwkJCQkJICAgICBJMkNfRlVOQ19TTUJVU19SRUFEX0kyQ19CTE9DSykpCiYjNDM7CQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCwKJiM0MzsJCQkJJiMzNDtTTUJ1cyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgU01CdXMgSTJDLWJsb2NrIHN1cHBvcnRcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlwc2UgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBzZSksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXBzZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwc2UtJmd0O2RldiA9IGRldjsKJiM0MzsJcHNlLSZndDtwY2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwomIzQzOwlwc2UtJmd0O3RyYW5zcG9ydCA9IHVzZV9uYXRpdmUgPyAmYW1wO3J0cHNlX21jdV9pMmNfbmF0aXZlX29wcyA6ICZhbXA7cnRwc2VfbWN1X2kyY19zbWJ1c19vcHM7CiYjNDM7CiYjNDM7CXJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIocHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X2kyY19vZl9tYXRjaFtdID0gewomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHBzZS1tY3UtcnRrJiMzNDssIC5kYXRhID0gJmFtcDtydHBzZV9tY3VfcnRrX2RhdGEgfSwKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxwc2UtbWN1LWJyY20mIzM0OywgLmRhdGEgPSAmYW1wO3J0cHNlX21jdV9icmNtX2RhdGEgfSwKJiM0MzsJeyAvKiBzZW50aW5lbCAqLyB9CiYjNDM7fTsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfaTJjX29mX21hdGNoKTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcnRwc2VfbWN1X2kyY19kcml2ZXIgPSB7CiYjNDM7CS5kcml2ZXIgPSB7CiYjNDM7CQkubmFtZQkJPSAmIzM0O3JlYWx0ZWstcHNlLW1jdS1pMmMmIzM0OywKJiM0MzsJCS5vZl9tYXRjaF90YWJsZQk9IHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2gsCiYjNDM7CX0sCiYjNDM7CS5wcm9iZQkJPSBydHBzZV9tY3VfaTJjX3Byb2JlLAomIzQzO307CiYjNDM7bW9kdWxlX2kyY19kcml2ZXIocnRwc2VfbWN1X2kyY19kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKb25hcyBKZWxvbmVrICZsdDtqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7UmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydCkmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lZjA0ZTBkOTI5NjNiNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jCkBAIC0wLDAgJiM0MzsxLDE1NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGxldGlvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHNlLXBkL3BzZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zZXJkZXYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtyZWFsdGVrLXBzZS1tY3UuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9CQVVEX0RFRkFVTFQJMTkyMDAKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9VQVJUX1RYX1RJTUVPVVQJbXNlY3NfdG9famlmZmllcygxMDApCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUCW1zZWNzX3RvX2ppZmZpZXMoUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUykKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgcHNlOwomIzQzOwlzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2OwomIzQzOwlzdHJ1Y3QgY29tcGxldGlvbiByeF9kb25lOwomIzQzOwlzcGlubG9ja190IHJ4X2xvY2s7CQkvKiBwcm90ZWN0cyByeF9idWYgYW5kIHJ4X2xlbiAqLwomIzQzOwlzaXplX3QgcnhfbGVuOwomIzQzOwl1OCByeF9idWZbUlRQU0VfTUNVX01TR19TSVpFXTsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgdG9fcnRwc2VfbWN1X3VhcnQocCkgIGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQsIHBzZSkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIE5vIGZyYW1pbmcgaXMgZG9uZSBoZXJlOiBhIGdsaXRjaGVkIGZyYW1lIGNvc3RzIG9uZSB0cmFuc2FjdGlvbiwgdGhlbgomIzQzOyAqIHRoZSBuZXh0IF9zZW5kIHJlLWZyYW1lcyBmcm9tIHJ4X2xlbiAwLiBSZXN5bmMgd29ya3MgYnkgcmV0dXJuaW5nIGNvdW50CiYjNDM7ICogKG5vdCB0YWtlKSwgZHJvcHBpbmcgYW55IG92ZXJmbG93IHNvIHNlcmRldiBrZWVwcyBubyBsZWZ0b3ZlciB0byBibGVlZAomIzQzOyAqIGludG8gdGhlIG5leHQgZnJhbWUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHNpemVfdCBydHBzZV9tY3VfdWFydF9yZWNlaXZlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYsCiYjNDM7CQkJCSAgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSBzZXJkZXZfZGV2aWNlX2dldF9kcnZkYXRhKHNlcmRldik7CiYjNDM7CXNpemVfdCB0YWtlOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDtjdHgtJmd0O3J4X2xvY2spIHsKJiM0MzsJCXRha2UgPSBtaW4oY291bnQsIHNpemVvZihjdHgtJmd0O3J4X2J1ZikgLSBjdHgtJmd0O3J4X2xlbik7CiYjNDM7CQlpZiAodGFrZSkgewomIzQzOwkJCW1lbWNweShjdHgtJmd0O3J4X2J1ZiAmIzQzOyBjdHgtJmd0O3J4X2xlbiwgYnVmLCB0YWtlKTsKJiM0MzsJCQljdHgtJmd0O3J4X2xlbiAmIzQzOz0gdGFrZTsKJiM0MzsJCQlpZiAoY3R4LSZndDtyeF9sZW4gPT0gc2l6ZW9mKGN0eC0mZ3Q7cnhfYnVmKSkKJiM0MzsJCQkJY29tcGxldGUoJmFtcDtjdHgtJmd0O3J4X2RvbmUpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGNvbnN1bWUgYWxsIHRvIGF2b2lkIGRlc3luYy9taXNhbGlnbm1lbnQgKi8KJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHNlcmRldl9kZXZpY2Vfb3BzIHJ0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMgPSB7CiYjNDM7CS5yZWNlaXZlX2J1ZiA9IHJ0cHNlX21jdV91YXJ0X3JlY2VpdmUsCiYjNDM7CS53cml0ZV93YWtldXAgPSBzZXJkZXZfZGV2aWNlX3dyaXRlX3dha2V1cCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTsKJiM0MzsJaW50IHdyaXR0ZW47CiYjNDM7CiYjNDM7CS8qIGNsZWFyIGFueSBsZWZ0b3ZlciByeCBzdGF0ZSBiZWZvcmUgdHJhbnNtaXR0aW5nICovCiYjNDM7CXNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCAmYW1wO2N0eC0mZ3Q7cnhfbG9jaykgewomIzQzOwkJcmVpbml0X2NvbXBsZXRpb24oJmFtcDtjdHgtJmd0O3J4X2RvbmUpOwomIzQzOwkJY3R4LSZndDtyeF9sZW4gPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXdyaXR0ZW4gPSBzZXJkZXZfZGV2aWNlX3dyaXRlKGN0eC0mZ3Q7c2VyZGV2LCAoY29uc3QgdTggKilyZXEsIHNpemVvZigqcmVxKSwKJiM0MzsJCQkJICAgICAgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVCk7CiYjNDM7CWlmICh3cml0dGVuICZsdDsgMCkKJiM0MzsJCXJldHVybiB3cml0dGVuOwomIzQzOwlpZiAod3JpdHRlbiAhPSBzaXplb2YoKnJlcSkpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSwKJiM0MzsJCQkgICAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eCA9IHRvX3J0cHNlX21jdV91YXJ0KHBzZSk7CiYjNDM7CiYjNDM7CWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZhbXA7Y3R4LSZndDtyeF9kb25lLCBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUKSkKJiM0MzsJCXJldHVybiAtRVRJTUVET1VUOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDtjdHgtJmd0O3J4X2xvY2spIHsKJiM0MzsJCWlmIChjdHgtJmd0O3J4X2xlbiAhPSBzaXplb2YoKnJlc3ApKQomIzQzOwkJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwkJbWVtY3B5KHJlc3AsIGN0eC0mZ3Q7cnhfYnVmLCBzaXplb2YoKnJlc3ApKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzID0gewomIzQzOwkuc2VuZCA9IHJ0cHNlX21jdV91YXJ0X3NlbmQsCiYjNDM7CS5yZWN2ID0gcnRwc2VfbWN1X3VhcnRfcmVjdiwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldikKJiM0Mzt7CiYjNDM7CXUzMiBzcGVlZCA9IFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVDsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtzZXJkZXYtJmd0O2RldjsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHg7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghY3R4KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7c2VyZGV2ID0gc2VyZGV2OwomIzQzOwljdHgtJmd0O3BzZS5kZXYgPSBkZXY7CiYjNDM7CWN0eC0mZ3Q7cHNlLnBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CiYjNDM7CWN0eC0mZ3Q7cHNlLnRyYW5zcG9ydCA9ICZhbXA7cnRwc2VfbWN1X3VhcnRfdHJhbnNwb3J0X29wczsKJiM0MzsJaW5pdF9jb21wbGV0aW9uKCZhbXA7Y3R4LSZndDtyeF9kb25lKTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtjdHgtJmd0O3J4X2xvY2spOwomIzQzOwomIzQzOwlzZXJkZXZfZGV2aWNlX3NldF9kcnZkYXRhKHNlcmRldiwgY3R4KTsKJiM0MzsJc2VyZGV2X2RldmljZV9zZXRfY2xpZW50X29wcyhzZXJkZXYsICZhbXA7cnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyk7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fc2VyZGV2X2RldmljZV9vcGVuKGRldiwgc2VyZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAmIzM0O2ZhaWxlZCB0byBvcGVuIHNlcmRldlxuJiMzNDspOwomIzQzOwomIzQzOwlmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZGV2X2Z3bm9kZShkZXYpLCAmIzM0O2N1cnJlbnQtc3BlZWQmIzM0OywgJmFtcDtzcGVlZCk7CiYjNDM7CXNlcmRldl9kZXZpY2Vfc2V0X2JhdWRyYXRlKHNlcmRldiwgc3BlZWQpOwomIzQzOwlzZXJkZXZfZGV2aWNlX3NldF9mbG93X2NvbnRyb2woc2VyZGV2LCBmYWxzZSk7CiYjNDM7CXNlcmRldl9kZXZpY2Vfc2V0X3Bhcml0eShzZXJkZXYsIFNFUkRFVl9QQVJJVFlfTk9ORSk7CiYjNDM7CiYjNDM7CXJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIoJmFtcDtjdHgtJmd0O3BzZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJ0cHNlX21jdV91YXJ0X29mX21hdGNoW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscHNlLW1jdS1ydGsmIzM0OywgLmRhdGEgPSAmYW1wO3J0cHNlX21jdV9ydGtfZGF0YSB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHBzZS1tY3UtYnJjbSYjMzQ7LCAuZGF0YSA9ICZhbXA7cnRwc2VfbWN1X2JyY21fZGF0YSB9LAomIzQzOwl7IC8qIHNlbnRpbmVsICovIH0KJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0cHNlX21jdV91YXJ0X29mX21hdGNoKTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHNlcmRldl9kZXZpY2VfZHJpdmVyIHJ0cHNlX21jdV91YXJ0X2RyaXZlciA9IHsKJiM0MzsJLmRyaXZlciA9IHsKJiM0MzsJCS5uYW1lID0gJiMzNDtyZWFsdGVrLXBzZS1tY3UtdWFydCYjMzQ7LAomIzQzOwkJLm9mX21hdGNoX3RhYmxlID0gcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2gsCiYjNDM7CX0sCiYjNDM7CS5wcm9iZSAgPSBydHBzZV9tY3VfdWFydF9wcm9iZSwKJiM0Mzt9OwomIzQzO21vZHVsZV9zZXJkZXZfZGV2aWNlX2RyaXZlcihydHBzZV9tY3VfdWFydF9kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKb25hcyBKZWxvbmVrICZsdDtqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7UmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iOWJmM2IyZGRlMDhiOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaApAQCAtMCwwICYjNDM7MSw4NyBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfUkVBTFRFS19QU0VfTUNVX0gKJiM0MzsjZGVmaW5lIF9SRUFMVEVLX1BTRV9NQ1VfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wc2UtcGQvcHNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaW1lIHRoZSBNQ1UgaXRzZWxmIG5lZWRzIGJldHdlZW4gYWNjZXB0aW5nIGEgcmVxdWVzdCBhbmQgaGF2aW5nIGEKJiM0MzsgKiByZXNwb25zZSByZWFkeS4gVGhlc2UgYXJlIHByb3BlcnRpZXMgb2YgdGhlIE1DVSBmaXJtd2FyZSwgbm90IG9mIHRoZQomIzQzOyAqIHVuZGVybHlpbmcgdHJhbnNwb3J0OiB0aGUgY29yZSBwYWNlcyB0cmFuc2FjdGlvbnMgYnkgUlRQU0VfTUNVX1JFU1BPTlNFX01TCiYjNDM7ICogYW5kIGJvdGggdHJhbnNwb3J0cyBzaXplIHRoZWlyIHBlci10cmFuc2FjdGlvbiByZWN2IGNlaWxpbmcgZnJvbQomIzQzOyAqIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMsIHNpbmNlIHNvbWUgY29tbWFuZHMgYXJlIGRvY3VtZW50ZWQgYXMKJiM0MzsgKiBuZWVkaW5nIHVwIHRvIH4xcyB0byBwcm9kdWNlIGEgcmVwbHkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVMJCQkyNQomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUwkJMTAwMAomIzQzOwomIzQzOy8qCiYjNDM7ICogVG90YWwgdGltZSB0byBrZWVwIHJldHJ5aW5nIHRoZSBmaXJzdCBNQ1UgcmVhZCBhdCBwcm9iZSwgYW5kIHRoZSBwYXVzZQomIzQzOyAqIGJldHdlZW4gYXR0ZW1wdHMuIFJpZ2h0IGFmdGVyIGVuYWJsZS1ncGlvcyBpcyBhc3NlcnRlZCB0aGUgTUNVIG1heSBub3QKJiM0MzsgKiBhbnN3ZXIgb24gdGhlIGJ1cyB5ZXQ7IGdpdmUgaXQgYSBib3VuZGVkIHdpbmRvdyB0byBjb21lIHVwIGJlZm9yZQomIzQzOyAqIGRlY2xhcmluZyB0aGUgcHJvYmUgZmFpbGVkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfVElNRU9VVF9NUwkJMzAwMAomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfUkVUUllfTVMJCQkxMDAKJiM0MzsKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9NU0dfU0laRQkJCTEyCiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9tc2cgewomIzQzOwl1OCBvcGNvZGU7CiYjNDM7CXU4IHNlcV9udW07CiYjNDM7CXU4IHBheWxvYWRbOV07CiYjNDM7CXU4IGNoZWNrc3VtOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBNQ1Ugc3RhdHVzIG9wY29kZXMgKHNlZW4gb24gdGhlIEJDTSBkaWFsZWN0OyBSVEwgbmV2ZXIgZW1pdHMgdGhlbSkuCiYjNDM7ICogSU5DT01QTEVURS9CQURfQ1NVTSBhcmUgdGVybWluYWw7IE5PVF9SRUFEWSBpcyB0cmFuc2llbnQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEUJCTB4ZmQJLyogLUVCQURFICAgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU0JCTB4ZmUJLyogLUVCQURNU0cgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZCQkweGZmCS8qIC1FQUdBSU4gICovCiYjNDM7CiYjNDM7LyogQSBwb2xsaW5nIHRyYW5zcG9ydCBjYW4gc3RvcCBoZXJlOiB0aGUgbWF0Y2hpbmcgcmVwbHksIG9yIGEgdGVybWluYWwgZXJyb3IuICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsCiYjNDM7CQkJCQkgICBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZXNwLSZndDtvcGNvZGUgPT0gcmVxLSZndDtvcGNvZGUgfHwKJiM0MzsJICAgICAgIHJlc3AtJmd0O29wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEUgfHwKJiM0MzsJICAgICAgIHJlc3AtJmd0O29wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNOwomIzQzO30KJiM0MzsKJiM0MzsvKiBPcGFxdWUgdG8gdHJhbnNwb3J0czsgZGVmaW5lZCBpbiByZWFsdGVrLXBzZS1jb3JlLmMuICovCiYjNDM7c3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0OwomIzQzO3N0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YTsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2N0cmw7CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHsKJiM0MzsJaW50ICgqc2VuZCkoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpOwomIzQzOwlpbnQgKCpyZWN2KShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSwKJiM0MzsJCSAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCk7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiYjNDM7CXN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgcGNkZXY7CiYjNDM7CXN0cnVjdCBtdXRleCBtdXRleDsgLyogc2VyaWFsaXplcyBNQ1UgcmVxdWVzdC9yZXNwb25zZSB0cmFuc2FjdGlvbnMgKi8KJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0ICpkaWFsZWN0OwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyAqY2hpcDsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzICp0cmFuc3BvcnQ7CiYjNDM7CiYjNDM7CXN0cnVjdCByZWd1bGF0b3IgKnBvZV9zdXBwbHk7CiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgcnRwc2VfbWN1X3JlZ2lzdGVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlKTsKJiM0MzsKJiM0MzsvKiBXaGV0aGVyIHRoZSBJMkMgdHJhbnNwb3J0IG11c3QgcmVhZCAmIzM0O3JlYWx0ZWssaTJjLXByb3RvY29sJiMzNDsgZnJvbSBEVC4gKi8KJiM0Mztib29sIHJ0cHNlX21jdV9uZWVkc19pMmNfcHJvdG8oY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaCk7CiYjNDM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfcnRrX2RhdGE7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfYnJjbV9kYXRhOwomIzQzOwomIzQzOyNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzUwMAoJCQkJCQkJb3V0cHV0OiAzNTIKCQkJCQkJCXRob3VnaHRzOiAxMjY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV3IFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBEcml2ZXIqKgoKT2theSwgc28gd2UgaGF2ZSBhIG5ldyBkcml2ZXIgZm9yIGEgUmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVLCBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC9wc2UtcGQvYC4gSXQgc3VwcG9ydHMgYm90aCBJMkMgYW5kIFVBUlQsIHdoaWNoIGlzIGdvb2QgYmVjYXVzZSBpdCBnaXZlcyB1cyBtdWx0aXBsZSBhdHRhY2sgc3VyZmFjZXMuICBJdCYjMzk7cyBhIG5ldyBkcml2ZXIsIHNvIGl0IGRlZmluaXRlbHkgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbC4gSW1tZWRpYXRlbHksIG15IG1pbmQgZ29lcyB0byBmdXp6aW5nLiBHaXZlbiB0aGUgaW50ZXJmYWNlcywgSTJDIGFuZCBVQVJUICh2aWEgc2VyZGV2KSwgaXQmIzM5O3MgcmVhZGlseSB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkyQyBzdHViLCBzZXJkZXYvdHR5IGVtdWxhdGlvbiwgb3IgZXZlbiBkaXJlY3QgZnV6emluZyBvZiB0aGUgaW50ZXJmYWNlcyBhcmUgYWxsIHZpYWJsZS4gRXhjZWxsZW50LCBiZWNhdXNlIHN5emthbGxlciAqYWxyZWFkeSogaGFzIHNvbWUgc3VwcG9ydCBmb3IgSTJDIGFuZCBUVFkvc2VyZGV2IQoKTGV0JiMzOTtzIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IHRoZSBjb3JyZWN0IEtjb25maWcgb3B0aW9ucyBzZXQuICBgQ09ORklHX1BTRV9DT05UUk9MTEVSYCwgYENPTkZJR19QU0VfUkVBTFRFS19NQ1VgLCBgQ09ORklHX1BTRV9SRUFMVEVLX01DVV9JMkNgLCBhbmQgYENPTkZJR19QU0VfUkVBTFRFS19NQ1VfVUFSVGAgYXJlIHRoZSBrZXlzLiAgSSYjMzk7bGwgdmVyaWZ5IHRoZXNlIGRlcGVuZGVuY2llcyBpbiB0aGUgYGRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIGBQU0VfUkVBTFRFS19NQ1VfSTJDYCBkZXBlbmRzIG9uIGBJMkNgLCBhbmQgYFBTRV9SRUFMVEVLX01DVV9VQVJUYCBkZXBlbmRzIG9uIGBTRVJJQUxfREVWX0JVU2AuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBTY2FubmluZyB0aGUgY29kZSwgaGVyZSYjMzk7cyB3aGF0IGp1bXBzIG91dCBhdCBtZToKCkZyb20gYHJlYWx0ZWstcHNlLW1jdS1jb3JlLmNgOgoqICAgYHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZWAsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc2AsIGBydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3YCwgYHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlYCwgYHJ0cHNlX21jdV9wb3J0X2VuYWJsZWAsIGBydHBzZV9tY3VfcG9ydF9kaXNhYmxlYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdGAsIGBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3Jhbmdlc2AsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHJpb2AsIGBydHBzZV9tY3VfcG9ydF9zZXRfcHJpb2AsIGBydHBzZV9tY3VfZGlzY292ZXJgLCBgcnRwc2VfbWN1X3JlZ2lzdGVyYAoKRnJvbSBgcmVhbHRlay1wc2UtbWN1LWkyYy5jYDoKKiAgIGBydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmRgLCBgcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2YCwgYHJ0cHNlX21jdV9pMmNfbmF0aXZlX3NlbmRgLCBgcnRwc2VfbWN1X2kyY19uYXRpdmVfcmVjdmAsIGBydHBzZV9tY3VfaTJjX3Byb2JlYAoKRnJvbSBgcmVhbHRlay1wc2UtbWN1LXVhcnQuY2A6CiogICBgcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZWAsIGBydHBzZV9tY3VfdWFydF9zZW5kYCwgYHJ0cHNlX21jdV91YXJ0X3JlY3ZgLCBgcnRwc2VfbWN1X3VhcnRfcHJvYmVgCgpJJiMzOTtsbCBsZWFuIGhlYXZpbHkgb24gYHNldC1yZXN1bHRzYCB0byBwcm9jZXNzIHRoaXMgaW5mb3JtYXRpb24uCgpSZWdhcmRpbmcgc3l6a2FsbGVyLCBjYW4gaXQgcmVhY2ggdGhpcyBkcml2ZXI/ICBEZWZpbml0ZWx5LiBXZSBjYW4gY3JlYXRlIEkyQyBkZXZpY2VzIHdpdGggYHN5el9pMmNfc2V0dXBgIG9yIHNpbWlsYXIuIEV2ZW4ganVzdCBsb2FkaW5nIHRoZSBtb2R1bGUgYW5kIHByb2JpbmcgaXQsIGlmIHdlIGZ1enogdGhlIGRldmljZSB0cmVlLCBvciBldmVuIGlmIGl0JiMzOTtzIGluc3RhbnRpYXRlZCB2aWEgc3lzZnMsIHdpbGwgZG8uICBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIEkyQyBkZXZpY2VzIGluc3RhbnRpYXRlZCB2aWEgYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0qL25ld19kZXZpY2VgLiBTZXJkZXYgZGV2aWNlcyBhcmUgYSBsaXR0bGUgaGFyZGVyIGR5bmFtaWNhbGx5IGZyb20gdXNlcnNwYWNlLCBidXQgdGhlIGNvcmUgbG9naWMgaXMgc3RpbGwgZnV6emFibGUgaWYgaW5zdGFudGlhdGVkLgoKSGVyZSYjMzk7cyB0aGUgbGlzdCBvZiBjb25maWdzLCBhZ2FpbjoKYFBTRV9DT05UUk9MTEVSYApgUFNFX1JFQUxURUtfTUNVX0kyQ2AKYFBTRV9SRUFMVEVLX01DVV9VQVJUYAoKQW5kIHRoZSBmdW5jdGlvbiBjYWxsIHRhcmdldHMgSSBuZWVkIHRvIGZlZWQgdG8gc2V0LXJlc3VsdHM6CmBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1c2AsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3NgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd2AsIGBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZWAsIGBydHBzZV9tY3VfcG9ydF9lbmFibGVgLCBgcnRwc2VfbWN1X3BvcnRfZGlzYWJsZWAsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRgLCBgcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0YCwgYHJ0Cgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFNFX0NPTlRST0xMRVImIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX0kyQyYjMzQ7LAogICAgJiMzNDtQU0VfUkVBTFRFS19NQ1VfVUFSVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzcyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2VuYWJsZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9kaXNhYmxlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXQmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHJpbyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9zZXRfcHJpbyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfaTJjX3Byb2JlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3JlY2VpdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciBSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1VzLCB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdmlhIEkyQyBvciBVQVJULiBUaGUgZHJpdmVyIGltcGxlbWVudHMgdGhlIFBTRSBjb250cm9sbGVyIEFQSSBhbmQgcGFyc2VzIHJlc3BvbnNlcyBmcm9tIHRoZSBNQ1UuIEZ1enppbmcgdGhlIEkyQy9VQVJUIGludGVyZmFjZXMgYW5kIHRoZSBQU0UgY29udHJvbGxlciBvcHMgaXMgdmFsdWFibGUgZm9yIGZpbmRpbmcgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlIHByb3RvY29sIHBhcnNpbmcgYW5kIHN0YXRlIG1hbmFnZW1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9DT05UUk9MTEVSJiMzNDssCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9JMkMmIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX1VBUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9lbmFibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2kyY19wcm9iZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfdWFydF9wcm9iZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfdWFydF9yZWNlaXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciBmb3IgUmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVcywgd2hpY2ggY2FuIGJlIGF0dGFjaGVkIHZpYSBJMkMgb3IgVUFSVC4gVGhlIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBQU0UgY29udHJvbGxlciBBUEkgYW5kIHBhcnNlcyByZXNwb25zZXMgZnJvbSB0aGUgTUNVLiBGdXp6aW5nIHRoZSBJMkMvVUFSVCBpbnRlcmZhY2VzIGFuZCB0aGUgUFNFIGNvbnRyb2xsZXIgb3BzIGlzIHZhbHVhYmxlIGZvciBmaW5kaW5nIHBvdGVudGlhbCBidWdzIGluIHRoZSBwcm90b2NvbCBwYXJzaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDZUMTU6MzM6NDMuMjQ4MDg2NTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA2Mjg0ODM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX0kyQ1wiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX1VBUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2VuYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZGlzYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wcmlvXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X2kyY19wcm9iZVwiLFxuICAgIFwicnRwc2VfbWN1X3VhcnRfcHJvYmVcIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3JlY2VpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVXMsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIFRoZSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgUFNFIGNvbnRyb2xsZXIgQVBJIGFuZCBwYXJzZXMgcmVzcG9uc2VzIGZyb20gdGhlIE1DVS4gRnV6emluZyB0aGUgSTJDL1VBUlQgaW50ZXJmYWNlcyBhbmQgdGhlIFBTRSBjb250cm9sbGVyIG9wcyBpcyB2YWx1YWJsZSBmb3IgZmluZGluZyBwb3RlbnRpYWwgYnVncyBpbiB0aGUgcHJvdG9jb2wgcGFyc2luZyBhbmQgc3RhdGUgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTU6MzM6NDMuMjQ4MDkyMThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NzA1NDIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVjZjZiY2VmMTUwOWNiM2ExYTYwYzZkYTQxZmIyNTQ3MDM5NTUwY2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgNiAxNTozMzo0MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZDBkZmFlMjIwZGMxZTlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWxcXG5AQCAtMCwwICsxLDE1NCBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcXG4rJVlBTUwgMS4yXFxuKy0tLVxcbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVVxcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBKb25hcyBKZWxvbmVrIFxcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOiB8XFxuKyAgTWljcm9jb250cm9sbGVyIChNQ1UpIHRoYXQgZnJvbnRzIHRoZSBQU0UgaGFyZHdhcmUgb24gc3dpdGNoZXMgdXNpbmdcXG4rICBSZWFsdGVrIChSVEw4MjM4QiwgUlRMODIzOSwgUlRMODIzOUMpIG9yIEJyb2FkY29tIChCQ001OTExMSwgQkNNNTkxMjEpXFxuKyAgUFNFIGNoaXBzLiBUaGUgTUNVIGV4cG9zZXMgYSBzbWFsbCBtZXNzYWdlLWJhc2VkIHByb3RvY29sIG92ZXIgZWl0aGVyXFxuKyAgSTJDL1NNQnVzIG9yIFVBUlQ7IHRoZSBhY3R1YWwgUFNFIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUaGVcXG4rICBSZWFsdGVrIGFuZCBCcm9hZGNvbSB2YXJpYW50cyBzaGFyZSB0aGlzIGRldmljZSB0cmVlIGNvbnRyYWN0IGJ1dCB1c2VcXG4rICBkaWZmZXJlbnQgcHJvdG9jb2wgb3Bjb2Rlcywgc2VsZWN0ZWQgYnkgdGhlIGNvbXBhdGlibGUuXFxuK1xcbisgIFRoZSBjb21wYXRpYmxlIGlkZW50aWZpZXMgdGhlIFBTRS1NQ1UgcHJvdG9jb2wgZGlhbGVjdCwgbm90IGEgc3BlY2lmaWNcXG4rICBwYXJ0LiBUaGUgZGV2aWNlIGhlcmUgaXMgdGhlIE1DVTogaXQgcHJlc2VudHMgYSBzdGFibGUgbWVzc2FnZSBwcm90b2NvbFxcbisgIGRvY3VtZW50ZWQgYnkgUmVhbHRlaywgd2l0aCB0aGUgUFNFIHNpbGljb24gYmVoaW5kIGl0IC0gQnJvYWRjb20gb25cXG4rICBvbGRlciBib2FyZHMsIFJlYWx0ZWsgb24gbmV3ZXIgLSBkZXRlY3RlZCBhdCBydW50aW1lIGFuZCBub3QgZGVzY3JpYmVkXFxuKyAgaGVyZS4gVGhlIE1DVSdzIG93biBzaWxpY29uIGlzIGdlbmVyYWwtcHVycG9zZSBhbmQgdmFyaWVzIGFjcm9zc1xcbisgIGJvYXJkcywgc28gdGhlICdyZWFsdGVrJyB2ZW5kb3IgcHJlZml4IG5hbWVzIHRoZSBwcm90b2NvbCBmcm9udC1lbmRcXG4rICAoZm9sbG93aW5nIHRoZSBnb29nbGUsY3Jvcy1lYyBwYXR0ZXJuKTsgdGhlICctcnRrJy8nLWJyY20nIHN1ZmZpeFxcbisgIHNlbGVjdHMgdGhlIFJlYWx0ZWsgb3IgQnJvYWRjb20gZGlhbGVjdC5cXG4rXFxuKyAgQSBzaW5nbGUgY29tcGF0aWJsZSBwZXIgZGlhbGVjdCBjb3ZlcnMgYm90aCB0aGUgSTJDL1NNQnVzIGFuZCBVQVJUXFxuKyAgYXR0YWNobWVudHM6IHRoZSB3aXJlIHByb3RvY29sIGlzIGlkZW50aWNhbCBhY3Jvc3MgdGhlbSBhbmQgdGhlXFxuKyAgdHJhbnNwb3J0IGlzIGFscmVhZHkgZXhwcmVzc2VkIGJ5IHRoZSBub2RlJ3MgcGFyZW50IGJ1cywgc28gaXQgaXMgbm90XFxuKyAgZW5jb2RlZCBpbiB0aGUgY29tcGF0aWJsZS4gVHJhbnNwb3J0LXNwZWNpZmljIHByb3BlcnRpZXMgZGlmZmVyXFxuKyAgYWNjb3JkaW5nbHkgLSB0aGUgSTJDIGF0dGFjaG1lbnQgY2FycmllcyAncmVnJyAoYW5kLCBmb3IgUmVhbHRlayxcXG4rICAncmVhbHRlayxpMmMtcHJvdG9jb2wnKSwgd2hpbGUgdGhlIFVBUlQgYXR0YWNobWVudCBjYXJyaWVzIHRoZSBzZXJpYWxcXG4rICBwZXJpcGhlcmFsIHByb3BlcnRpZXMgc3VjaCBhcyAnY3VycmVudC1zcGVlZCcuXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBlbnVtOlxcbisgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1ydGtcXG4rICAgICAgLSByZWFsdGVrLHBzZS1tY3UtYnJjbVxcbitcXG4rICByZWc6XFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rICBwb3dlci1zdXBwbHk6XFxuKyAgICBkZXNjcmlwdGlvbjogUmVndWxhdG9yIHN1cHBseWluZyB0aGUgUG9FIHBvd2VyIHJhaWwuXFxuK1xcbisgIGVuYWJsZS1ncGlvczpcXG4rICAgIG1heEl0ZW1zOiAxXFxuK1xcbisgIHJlYWx0ZWssaTJjLXByb3RvY29sOlxcbisgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvc3RyaW5nXFxuKyAgICBlbnVtOiBbIGkyYywgc21idXMgXVxcbisgICAgZGVzY3JpcHRpb246IHxcXG4rICAgICAgV2lyZSBmcmFtaW5nIHRoZSBNQ1UgZmlybXdhcmUgZXhwZWN0cyBvbiB0aGUgSTJDIGJ1cy4gXFxcInNtYnVzXFxcIiBtZWFuc1xcbisgICAgICByZWFkcyBjYXJyeSBhIGxlYWRpbmcgY29tbWFuZCBieXRlICgweDAwKSBhbmQgYSByZXBlYXRlZCBzdGFydDsgXFxcImkyY1xcXCJcXG4rICAgICAgbWVhbnMgYmFyZSAxMi1ieXRlIHdyaXRlcyBhbmQgcmVhZHMgd2l0aCBubyBjb21tYW5kIHByZWZpeC4gT25seVxcbisgICAgICBhcHBsaWVzIHRvIHRoZSBSZWFsdGVrIEkyQyBhdHRhY2htZW50LlxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IHBzZS1jb250cm9sbGVyLnlhbWwjXFxuKyAgLSAkcmVmOiAvc2NoZW1hcy9zZXJpYWwvc2VyaWFsLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcXG4rICAjIFRoZSBJMkMgYXR0YWNobWVudCAoaWRlbnRpZmllZCBieSAncmVnJykgY2Fubm90IGNhcnJ5IHNlcmlhbCBidXMgcHJvcHMuXFxuKyAgLSBpZjpcXG4rICAgICAgcmVxdWlyZWQ6IFtyZWddXFxuKyAgICB0aGVuOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGN1cnJlbnQtc3BlZWQ6IGZhbHNlXFxuKyAgICAgICAgbWF4LXNwZWVkOiBmYWxzZVxcbisgICMgJ3JlYWx0ZWssaTJjLXByb3RvY29sJyBpcyBtZWFuaW5nZnVsIG9ubHkgZm9yIHRoZSBSZWFsdGVrIEkyQyBhdHRhY2htZW50O1xcbisgICMgdGhlIEJyb2FkY29tIHZhcmlhbnQgYW5kIGFueSBVQVJUIGF0dGFjaG1lbnQgbXVzdCBub3QgY2FycnkgaXQuXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29udGFpbnM6XFxuKyAgICAgICAgICAgIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtcnRrXFxuKyAgICAgIHJlcXVpcmVkOiBbcmVnXVxcbisgICAgdGhlbjpcXG4rICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgLSByZWFsdGVrLGkyYy1wcm90b2NvbFxcbisgICAgZWxzZTpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBcXFwicmVhbHRlayxpMmMtcHJvdG9jb2xcXFwiOiBmYWxzZVxcbitcXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rZXhhbXBsZXM6XFxuKyAgIyBSZWFsdGVrIFBTRSBjaGlwLCBJMkMgYXR0YWNobWVudCAoU01CdXMgZnJhbWluZykuXFxuKyAgLSB8XFxuKyAgICBpMmMge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1wc2VAMjAge1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscHNlLW1jdS1ydGtcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHgyMFxcdTAwM2U7XFxuKyAgICAgICAgICAgIHJlYWx0ZWssaTJjLXByb3RvY29sID0gXFxcInNtYnVzXFxcIjtcXG4rXFxuKyAgICAgICAgICAgIHBzZS1waXMge1xcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7XFxuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbitcXG4rICAjIEJyb2FkY29tIFBTRSBjaGlwLCBJMkMgYXR0YWNobWVudC5cXG4rICAtIHxcXG4rICAgIGkyYyB7XFxuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgIGV0aGVybmV0LXBzZUAyMCB7XFxuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxwc2UtbWN1LWJyY21cXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHgyMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICBwc2UtcGlzIHtcXG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICAgICAgcHNlLXBpQDAge1xcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgfTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rXFxuKyAgIyBSZWFsdGVrIFBTRSBjaGlwLCBVQVJUIGF0dGFjaG1lbnQuXFxuKyAgLSB8XFxuKyAgICBzZXJpYWwge1xcbisgICAgICAgIGV0aGVybmV0LXBzZSB7XFxuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxwc2UtbWN1LXJ0a1xcXCI7XFxuKyAgICAgICAgICAgIGN1cnJlbnQtc3BlZWQgPSBcXHUwMDNjMTE1MjAwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgIHBzZS1waXMge1xcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7XFxuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggNTJmMWE1NWVjYTk5YmYuLmUzZjQyNmEzYjIwMWZiIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMjI3MTYsNiArMjI3MTYsMTMgQEAgUzpcXHRNYWludGFpbmVkXFxuIEY6XFx0aW5jbHVkZS9zb3VuZC9ydCouaFxcbiBGOlxcdHNvdW5kL3NvYy9jb2RlY3MvcnQqXFxuIFxcbitSRUFMVEVLL0JST0FEQ09NIFBTRSBNQ1UgRFJJVkVSXFxuK006XFx0Sm9uYXMgSmVsb25layBcXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cXHUwMDNlXFxuK0w6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbitTOlxcdE1haW50YWluZWRcXG4rRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxcbitGOlxcdGRyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UqXFxuK1xcbiBSRUFMVEVLIE9UVE8gV0FUQ0hET0dcXG4gTTpcXHRTYW5kZXIgVmFuaGV1bGUgXFx1MDAzY3NhbmRlckBzdmFuaGV1bGUubmV0XFx1MDAzZVxcbiBMOlxcdGxpbnV4LXdhdGNoZG9nQHZnZXIua2VybmVsLm9yZ1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXFxuaW5kZXggN2VmMjk2NTdlZTVkZDEuLjIzZTQ0ZGRlM2RiZmUwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcXG5AQCAtMTMsNiArMTMsMzQgQEAgbWVudWNvbmZpZyBQU0VfQ09OVFJPTExFUlxcbiBcXG4gaWYgUFNFX0NPTlRST0xMRVJcXG4gXFxuK2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VcXG4rXFx0dHJpc3RhdGVcXG4rXFx0aGVscFxcbitcXHQgIFNoYXJlZCBjb3JlIGZvciB0aGUgUmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlci4gVGhpcyBpc1xcbitcXHQgIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHRyYW5zcG9ydCBvcHRpb25zIGJlbG93LlxcbitcXG4rY29uZmlnIFBTRV9SRUFMVEVLX01DVV9JMkNcXG4rXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXFxcIlxcbitcXHRkZXBlbmRzIG9uIEkyQ1xcbitcXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXFxuK1xcdGhlbHBcXG4rXFx0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxcbitcXHQgIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHdpdGggUmVhbHRlayBvciBCcm9hZGNvbSBQU0UgY2hpcHMsIGF0dGFjaGVkXFxuK1xcdCAgdmlhIEkyQy9TTUJ1cy4gVGhlIE1DVSBleHBvc2VzIGEgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDsgdGhlIGFjdHVhbFxcbitcXHQgIFBTRSBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhXFxuK1xcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS1pMmMuXFxuK1xcbitjb25maWcgUFNFX1JFQUxURUtfTUNVX1VBUlRcXG4rXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KVxcXCJcXG4rXFx0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVU1xcbitcXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXFxuK1xcdGhlbHBcXG4rXFx0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxcbitcXHQgIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHdpdGggUmVhbHRlayBvciBCcm9hZGNvbSBQU0UgY2hpcHMsIGF0dGFjaGVkXFxuK1xcdCAgdmlhIFVBUlQuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWwgUFNFXFxuK1xcdCAgc2lsaWNvbiBpcyBub3QgYWNjZXNzZWQgZGlyZWN0bHkuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYVxcbitcXHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtdWFydC5cXG4rXFxuIGNvbmZpZyBQU0VfUkVHVUxBVE9SXFxuIFxcdHRyaXN0YXRlIFxcXCJSZWd1bGF0b3IgYmFzZWQgUFNFIGNvbnRyb2xsZXJcXFwiXFxuIFxcdGhlbHBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXFxuaW5kZXggY2M3OGY3ZWE3ZjVmNzEuLjljY2E1OTAwZmUzNDIxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxcbkBAIC0zLDYgKzMsOSBAQFxcbiBcXG4gb2JqLSQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSArPSBwc2VfY29yZS5vXFxuIFxcbitvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVKSArPSByZWFsdGVrLXBzZS1tY3UtY29yZS5vXFxuK29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfSTJDKSArPSByZWFsdGVrLXBzZS1tY3UtaTJjLm9cXG4rb2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9VQVJUKSArPSByZWFsdGVrLXBzZS1tY3UtdWFydC5vXFxuIG9iai0kKENPTkZJR19QU0VfUkVHVUxBVE9SKSArPSBwc2VfcmVndWxhdG9yLm9cXG4gb2JqLSQoQ09ORklHX1BTRV9QRDY5MlgwKSArPSBwZDY5MngwLm9cXG4gb2JqLSQoQ09ORklHX1BTRV9TSTM0NzQpICs9IHNpMzQ3NC5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1jb3JlLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45NjFhYzllOWVlOWM3Y1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuY1xcbkBAIC0wLDAgKzEsMTAwNiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgZnJvbnRpbmcgUmVhbHRlayBvciBCcm9hZGNvbSBQU0VcXG4rICogY2hpcHMuIEJvdGggdmVuZG9ycycgTUNVcyBzcGVhayBhIGNsb3NlbHkgcmVsYXRlZCAxMi1ieXRlIGZpeGVkLWZyYW1lXFxuKyAqIG1hbmFnZW1lbnQgcHJvdG9jb2w7IHRoaXMgZHJpdmVyIGNvdmVycyBib3RoIHZpYSBhIHBlci1kaWFsZWN0IG9wY29kZVxcbisgKiB0YWJsZSBhbmQgcmVzcG9uc2UgcGFyc2Vycy5cXG4rICpcXG4rICogTWFueSBQb0Ugc3dpdGNoIGRlc2lnbnMgcHV0IGEgZGVkaWNhdGVkIG1pY3JvY29udHJvbGxlciBpbiBmcm9udCBvZiB0aGVcXG4rICogYWN0dWFsIFBTRSBzaWxpY29uOiB0aGUgaG9zdCBDUFUgdGFsa3MgdG8gdGhlIE1DVSBvdmVyIEkyQy9TTUJ1cyBvclxcbisgKiBVQVJULCBhbmQgdGhlIE1DVSBpbiB0dXJuIG1hbmFnZXMgdGhlIFBTRSBjaGlwcyBvbiB0aGUgYm9hcmQuIFRoZSBNQ1VcXG4rICogc3BlYWtzIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbCAoMTItYnl0ZSBmaXhlZC1zaXplIGZyYW1lczsgb3Bjb2RlXFxuKyAqICsgYXJnICsgOSBwYXlsb2FkIGJ5dGVzICsgY2hlY2tzdW0pLiBUaGUgUFNFIGNoaXBzIHRoZW1zZWx2ZXMgYXJlIG5vdFxcbisgKiBhY2Nlc3NlZCBkaXJlY3RseTsgZXZlcnl0aGluZyBnb2VzIHRocm91Z2ggTUNVIGNvbW1hbmRzLlxcbisgKlxcbisgKiBUaGlzIGRyaXZlciB0YXJnZXRzIHRoYXQgYXJjaGl0ZWN0dXJlIGZvciB0aGUgUmVhbHRlay1mYW1pbHkgcHJvdG9jb2wuXFxuKyAqIFR3byBkaWFsZWN0cyBhcmUgc3VwcG9ydGVkOiBSZWFsdGVrIE1DVXMgbWFuYWdpbmcgUlRMODIzeC9SVEw4MjM5KiBQU0VcXG4rICogY2hpcHMsIGFuZCBCcm9hZGNvbSBNQ1VzIG1hbmFnaW5nIEJDTTU5MHh4IFBTRSBjaGlwcy4gVGhlIHR3byBzaGFyZVxcbisgKiBmcmFtZSBmb3JtYXQgYW5kIGEgc3VtLW1vZC0yNTYgY2hlY2tzdW0gYnV0IGRpdmVyZ2Ugb24gb3Bjb2RlIG51bWJlcnNcXG4rICogYW5kIG9uIGEgZmV3IHJlc3BvbnNlIGxheW91dHM7IHRoaXMgaXMgaGFuZGxlZCBieSB0aGUgcGVyLWRpYWxlY3RcXG4rICogb3Bjb2RlIHRhYmxlIGFuZCBwYXJzZXIgaG9va3MuXFxuKyAqXFxuKyAqIE91dCBvZiBzY29wZTogUFNFIGNoaXBzIHRoYXQgYXJlIGludGVyZmFjZWQgZGlyZWN0bHkgZnJvbSB0aGUgaG9zdFxcbisgKiB3aXRob3V0IGEgbWFuYWdlbWVudCBNQ1UsIE1DVSBkZXNpZ25zIHRoYXQgc3BlYWsgYW4gdW5yZWxhdGVkIHByb3RvY29sXFxuKyAqIGZhbWlseSwgYW5kIFxcXCJkdW1iIFBTRVxcXCIgbW9kZXMgd2hlcmUgbm8gaG9zdCBjb250cm9sIGlzIHdpcmVkIHVwIGF0IGFsbC5cXG4rICogVGhvc2UsIGlmIGFuZCB3aGVuIHRoZXkgc2hvdyB1cCBpbiB0aGUga2VybmVsLCBiZWxvbmcgaW4gc2VwYXJhdGVcXG4rICogZHJpdmVycyB1bmRlciBkcml2ZXJzL25ldC9wc2UtcGQvLlxcbisgKlxcbisgKiBUaGlzIGNvcmUgbW9kdWxlIGltcGxlbWVudHMgdGhlIHByb3RvY29sLCBkZWNvZGluZy9lbmNvZGluZyBvZiBNQ1VcXG4rICogcmVzcG9uc2VzLCBhbmQgdGhlIHBzZV9jb250cm9sbGVyX29wcyBpbnRlZ3JhdGlvbi4gVHJhbnNwb3J0IG1vZHVsZXNcXG4rICogKHJlYWx0ZWstcHNlLWkyYywgcmVhbHRlay1wc2UtdWFydCkgcHJvdmlkZSB0aGUgc2VuZC9yZWN2IGNhbGxiYWNrcy5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ppZmZpZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pbm1heC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kX2RldmljZXRhYmxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJyZWFsdGVrLXBzZS1tY3UuaFxcXCJcXG4rXFxuKyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QlxcdFxcdDB4MDEzOFxcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOVxcdFxcdDB4MDAzOVxcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUNcXHRcXHQweDAxMzlcXG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExXFx0XFx0MHhlMTExXFxuKyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTEyMVxcdFxcdDB4ZTEyMVxcbitcXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRURcXHRcXHQweDAwXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElOR1xcdFxcdDB4MDFcXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklOR1xcdFxcdDB4MDJcXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfVEVTVFxcdFxcdFxcdDB4MDNcXHQvKiBCcm9hZGNvbTsgcmVzZXJ2ZWQgb24gUmVhbHRlayAqL1xcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19GQVVMVFxcdFxcdDB4MDRcXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfT1RIRVJfRkFVTFRcXHRcXHQweDA1XFx0LyogQnJvYWRjb207IHJlc2VydmVkIG9uIFJlYWx0ZWsgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElOR1xcdFxcdDB4MDZcXG4rXFxuKy8qIFJUUFNFX01DVV9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFIHZhbHVlcyAqL1xcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUlxcdDB4MDJcXG4rXFxuKyNkZWZpbmUgUlRQU0VfTUNVX01BWF9QT1JUU1xcdFxcdFxcdDQ4XFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZXFx0XFx0M1xcbitcXG4rZW51bSBydHBzZV9tY3VfY21kIHtcXG4rXFx0UlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFLFxcbitcXHRSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GTyxcXG4rXFx0UlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJRyxcXG4rXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9FTkFCTEUsXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFksXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTLFxcbitcXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTLFxcbitcXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJRyxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHLFxcbitcXG4rXFx0UlRQU0VfTUNVX05VTV9DTURTLFxcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUge1xcbitcXHR1OCBvcDtcXG4rXFx0Ym9vbCB2YWxpZDtcXG4rfTtcXG4rXFxuKy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX09QKG9wYylcXHR7IC5vcCA9IChvcGMpLCAudmFsaWQgPSB0cnVlIH1cXG4rXFxuKy8qIFBhcnNlZCBNQ1UgcmVzcG9uc2Ugc3RydWN0dXJlcyAoZGVjb2RlZCBmcm9tIHJ0cHNlX21jdV9tc2cgcmVwbGllcykgKi9cXG4rXFxuK3N0cnVjdCBydHBzZV9tY3VfaW5mbyB7XFxuK1xcdHU4IG1heF9wb3J0cztcXG4rXFx0Ym9vbCBzeXN0ZW1fZW5hYmxlO1xcbitcXHR1MTYgZGV2aWNlX2lkO1xcbitcXHR1OCBzd192ZXI7XFxuK1xcdHU4IG1jdV90eXBlO1xcbitcXHR1OCBjb25maWdfc3RhdHVzO1xcbitcXHR1OCBleHRfdmVyO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnIHtcXG4rXFx0dTggdXZsbztcXG4rXFx0dTggb3ZsbztcXG4rXFx0Ym9vbCBwcmVhbGxvY19lbmFibGU7XFxuK1xcdHU4IG51bV9vZl9wc2VzO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyB7XFxuK1xcdHU4IHN0czE7XFxuK1xcdHU4IHN0czI7XFxuK1xcdHU4IHN0czM7XFxuK307XFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQge1xcbitcXHR1MTYgdm9sdGFnZV9yYXc7XFx0LyogNjQuNDVtVi9MU0IgKi9cXG4rXFx0dTE2IGN1cnJlbnRfcmF3O1xcdC8qIDFtQS9MU0IgKi9cXG4rXFx0dTE2IHRlbXBlcmF0dXJlX3JhdztcXHQvKiBUKG1DKSA9IDEyNTAgKiAoMjIwIC0gcmF3KSAqL1xcbitcXHR1MTYgcG93ZXJfcmF3O1xcdFxcdC8qIDEwMG1XL0xTQiAqL1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyB7XFxuK1xcdGJvb2wgZW5hYmxlO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcge1xcbitcXHR1OCBtYXhfcG93ZXI7XFxuK1xcdHU4IHByaW9yaXR5O1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgb3Bjb2RlW1JUUFNFX01DVV9OVU1fQ01EU107XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2hcXG4rXFx0ICogZGlhbGVjdCBzdXBwbGllcyBpdHMgb3duLiBPdGhlciByZXNwb25zZXMgc2hhcmUgb25lIGxheW91dCBhbmQgYXJlXFxuK1xcdCAqIGRlY29kZWQgZGlyZWN0bHkgLSBhIGRpYWxlY3QgdGhhdCBkaXZlcmdlcyB0aGVyZSBtdXN0IGFkZCBhIGhvb2ssXFxuK1xcdCAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS5cXG4rXFx0ICovXFxuK1xcdHZvaWQgKCpwYXJzZV9zeXN0ZW1faW5mbykoY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbyk7XFxuK1xcdGludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7XFxuK1xcdGNvbnN0IGNoYXIgKigqbWN1X3R5cGVfc3RyKSh1bnNpZ25lZCBpbnQgbWN1X3R5cGUpO1xcbit9O1xcbitcXG4rLypcXG4rICogUGVyLWNvbXBhdGlibGUgbWF0Y2ggZGF0YTogc2VsZWN0ZWQgYnkgdGhlIERUL0kyQyBjb21wYXRpYmxlLCBpdCBidW5kbGVzXFxuKyAqIHRoZSBwcm90b2NvbCBkaWFsZWN0IHdpdGggYXR0YWNobWVudCBxdWlya3MgdGhhdCB0aGUgZXhhY3QgTUNVIHNpbGljb25cXG4rICogZG9lcyBub3QgZGV0ZXJtaW5lIChvbmx5IGl0cyBmaXJtd2FyZSBwcm90b2NvbCBhbmQgdGhlIGhvc3QgYnVzIGRvKS5cXG4rICovXFxuK3N0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSB7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDtcXG4rXFx0LyogSTJDIGZyYW1pbmcgbXVzdCBjb21lIGZyb20gRFQgKHJlYWx0ZWssaTJjLXByb3RvY29sKTsgZWxzZSBTTUJ1cy4gKi9cXG4rXFx0Ym9vbCBpMmNfcHJvdG9fZHRfcmVxdWlyZWQ7XFxuK307XFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyB7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdHUxNiBkZXZpY2VfaWQ7XFxuK1xcdHUzMiBtYXhfbVdfcGVyX3BvcnQ7XFxuK1xcdGVudW0gcnRwc2VfbWN1X2NtZCBwd19zZXRfY21kO1xcdC8qIGNvbW1hbmQgdXNlZCBieSBzZXRfcHdfbGltaXQgKi9cXG4rXFx0dTMyIHB3X3NldF9sc2JfbVc7XFx0XFx0LyogTFNCIG9mIHB3X3NldF9jbWQgdmFsdWUsIGluIG1XICovXFxuK1xcdHUzMiBwd19yZWFkX2xzYl9tVztcXHRcXHQvKiBMU0Igb2YgZXh0X2NvbmZpZy5tYXhfcG93ZXIgcmVhZC1iYWNrLCBpbiBtVyAqL1xcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzhiX2luZm8gPSB7XFxuK1xcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCLFxcbitcXHQubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsXFxuK1xcdC5uYW1lID0gXFxcIlJUTDgyMzhCXFxcIixcXG4rXFx0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxcbitcXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXFxuK1xcdC5wd19zZXRfbHNiX21XID0gMjAwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzlfaW5mbyA9IHtcXG4rXFx0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOSxcXG4rXFx0Lm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLFxcbitcXHQubmFtZSA9IFxcXCJSVEw4MjM5XFxcIixcXG4rXFx0LnB3X3JlYWRfbHNiX21XID0gNDAwLFxcbitcXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxcbitcXHQucHdfc2V0X2xzYl9tVyA9IDQwMCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5Y19pbmZvID0ge1xcbitcXHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5QyxcXG4rXFx0Lm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLFxcbitcXHQubmFtZSA9IFxcXCJSVEw4MjM5Q1xcXCIsXFxuK1xcdC5wd19yZWFkX2xzYl9tVyA9IDQwMCxcXG4rXFx0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCxcXG4rXFx0LnB3X3NldF9sc2JfbVcgPSA0MDAsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gYmNtNTkxMTFfaW5mbyA9IHtcXG4rXFx0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTEsXFxuK1xcdC5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCxcXG4rXFx0Lm5hbWUgPSBcXFwiQkNNNTkxMTFcXFwiLFxcbitcXHQucHdfcmVhZF9sc2JfbVcgPSAyMDAsXFxuK1xcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcXG4rXFx0LnB3X3NldF9sc2JfbVcgPSAyMDAsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gYmNtNTkxMjFfaW5mbyA9IHtcXG4rXFx0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjEsXFxuK1xcdC8qXFxuK1xcdCAqIEJDTTU5MTIxIGlzIGEgNjBXIFR5cGUtMyBwYXJ0LCBidXQga25vd24gYm9hcmRzIHJ1biBpdCBhdCA4MDIuM2F0XFxuK1xcdCAqIGFuZCB0aGUgQkNNIGRpYWxlY3QgaGFzIG9ubHkgdGhlIDgtYml0LzAuMlcgc2V0IGNvbW1hbmQgKFxcdTAwM2M9NTFXKTtcXG4rXFx0ICogY2FwIGF0IHRoZSAzMFcgdGhlIGhhcmR3YXJlIGFjdHVhbGx5IG9mZmVycy5cXG4rXFx0ICovXFxuK1xcdC5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCxcXG4rXFx0Lm5hbWUgPSBcXFwiQkNNNTkxMjFcXFwiLFxcbitcXHQucHdfcmVhZF9sc2JfbVcgPSAyMDAsXFxuK1xcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcXG4rXFx0LnB3X3NldF9sc2JfbVcgPSAyMDAsXFxuK307XFxuK1xcbisvKiBIZWxwZXJzIGFuZCBiYXNpYyBmdW5jdGlvbnMgKi9cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnRvX3J0cHNlX21jdV9jdHJsKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbit7XFxuK1xcdHJldHVybiBjb250YWluZXJfb2YocGNkZXYsIHN0cnVjdCBydHBzZV9tY3VfY3RybCwgcGNkZXYpO1xcbit9XFxuK1xcbitib29sIHJ0cHNlX21jdV9uZWVkc19pMmNfcHJvdG8oY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaClcXG4re1xcbitcXHRyZXR1cm4gbWF0Y2gtXFx1MDAzZWkyY19wcm90b19kdF9yZXF1aXJlZDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfbmVlZHNfaTJjX3Byb3RvKTtcXG4rXFxuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9tc2dfaW5pdChzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqbXNnLCB1OCBvcGNvZGUpXFxuK3tcXG4rXFx0bWVtc2V0KG1zZywgMHhmZiwgc2l6ZW9mKCptc2cpKTtcXG4rXFx0bXNnLVxcdTAwM2VvcGNvZGUgPSBvcGNvZGU7XFxuK31cXG4rXFxuK3N0YXRpYyB1OCBydHBzZV9tY3VfY2hlY2tzdW0oY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHR1OCBzdW0gPSAwO1xcbitcXG4rXFx0d2hpbGUgKGxlbi0tKVxcbitcXHRcXHRzdW0gKz0gKmJ1ZisrO1xcbitcXHRyZXR1cm4gc3VtO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9kb194ZmVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXEtXFx1MDAzZWNoZWNrc3VtID0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlcSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSk7XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwc2UtXFx1MDAzZW11dGV4KSB7XFxuK1xcdFxcdHJldCA9IHBzZS1cXHUwMDNldHJhbnNwb3J0LVxcdTAwM2VzZW5kKHBzZSwgcmVxKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBNQ1UgbmVlZHMgYSBmaXhlZCBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHJlY2VpdmluZyBhIHJlcXVlc3RcXG4rXFx0XFx0ICogYW5kIGhhdmluZyB0aGUgcmVzcG9uc2UgcmVhZHksIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBieXRlcyBnZXQgdG9cXG4rXFx0XFx0ICogdXMuIFBhY2UgdGhlIHRyYW5zYWN0aW9uIGhlcmUgc28gZWFjaCB0cmFuc3BvcnQgY2FuIGtlZXAgaXRzIHJlY3ZcXG4rXFx0XFx0ICogcGF0aCBzaW1wbGU6IGEgc2luZ2xlIGJvdW5kZWQgd2FpdCByYXRoZXIgdGhhbiBhIGdlbmVyaWMgcmV0cnkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtc2xlZXAoUlRQU0VfTUNVX1JFU1BPTlNFX01TKTtcXG4rXFxuK1xcdFxcdG1lbXNldChyZXNwLCAwLCBzaXplb2YoKnJlc3ApKTtcXG4rXFx0XFx0cmV0ID0gcHNlLVxcdTAwM2V0cmFuc3BvcnQtXFx1MDAzZXJlY3YocHNlLCByZXEsIHJlc3ApO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFeHBsaWNpdCBNQ1UgZXJyb3Igb3Bjb2RlcyAob2JzZXJ2ZWQgb24gdGhlIEJDTSBkaWFsZWN0OyBoYXJtbGVzc1xcbitcXHQgKiB0byBjaGVjayBmb3IgUlRMIHRvbykuIENhdGNoIHRoZXNlIGJlZm9yZSB0aGUgZ2VuZXJpYyBvcGNvZGUvQ1JDXFxuK1xcdCAqIG1pc21hdGNoIHBhdGggc28gY2FsbGVycyBzZWUgYSBtZWFuaW5nZnVsIGVycm5vLlxcbitcXHQgKi9cXG4rXFx0c3dpdGNoIChyZXNwLVxcdTAwM2VvcGNvZGUpIHtcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEU6XFxuK1xcdFxcdHJldHVybiAtRUJBREU7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9CQURfQ1NVTTpcXG4rXFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbitcXHRjYXNlIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZOlxcbitcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJlc3AtXFx1MDAzZW9wY29kZSAhPSByZXEtXFx1MDAzZW9wY29kZSB8fFxcbitcXHQgICAgcmVzcC1cXHUwMDNlc2VxX251bSAhPSByZXEtXFx1MDAzZXNlcV9udW0gfHxcXG4rXFx0ICAgIHJlc3AtXFx1MDAzZWNoZWNrc3VtICE9IHJ0cHNlX21jdV9jaGVja3N1bSgodTggKilyZXNwLCBSVFBTRV9NQ1VfTVNHX1NJWkUgLSAxKSlcXG4rXFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfcXVlcnkoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCB1OCBvcGNvZGUsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJ0cHNlX21jdV9tc2dfaW5pdChcXHUwMDI2cmVxLCBvcGNvZGUpO1xcbitcXHRyZXEucGF5bG9hZFswXSA9IHBvcnQ7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFxcdTAwMjZyZXEsIHJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHJlc3AtXFx1MDAzZXBheWxvYWRbMF0gIT0gcG9ydClcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9jbWQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCB1OCBvcGNvZGUsIHU4IGFyZylcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRydHBzZV9tY3VfbXNnX2luaXQoXFx1MDAyNnJlcSwgb3Bjb2RlKTtcXG4rXFx0cmVxLnBheWxvYWRbMF0gPSBwb3J0O1xcbitcXHRyZXEucGF5bG9hZFsxXSA9IGFyZztcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXFx1MDAyNnJlcSwgXFx1MDAyNnJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHJlc3AucGF5bG9hZFswXSAhPSBwb3J0IHx8IHJlc3AucGF5bG9hZFsxXSAhPSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBHbG9iYWwgb3BlcmF0aW9ucyAqL1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfZ2V0X2luZm8oc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJ0cHNlX21jdV9tc2dfaW5pdChcXHUwMDI2cmVxLCBvcGMtXFx1MDAzZW9wKTtcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcXHUwMDI2cmVxLCBcXHUwMDI2cmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZXBhcnNlX3N5c3RlbV9pbmZvKHJlc3AucGF5bG9hZCwgaW5mbyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfZXh0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJ0cHNlX21jdV9tc2dfaW5pdChcXHUwMDI2cmVxLCBvcGMtXFx1MDAzZW9wKTtcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcXHUwMDI2cmVxLCBcXHUwMDI2cmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRjb25maWctXFx1MDAzZXV2bG8gPSByZXNwLnBheWxvYWRbMF07XFxuK1xcdGNvbmZpZy1cXHUwMDNlb3ZsbyA9IHJlc3AucGF5bG9hZFs1XTtcXG4rXFx0Y29uZmlnLVxcdTAwM2VwcmVhbGxvY19lbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDB4MSk7XFxuK1xcdGNvbmZpZy1cXHUwMDNlbnVtX29mX3BzZXMgPSByZXNwLnBheWxvYWRbNl07XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURV07XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cnRwc2VfbWN1X21zZ19pbml0KFxcdTAwMjZyZXEsIG9wYy1cXHUwMDNlb3ApO1xcbitcXHRyZXEucGF5bG9hZFswXSA9IGVuYWJsZSA/IDB4MSA6IDB4MDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXFx1MDAyNnJlcSwgXFx1MDAyNnJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIChyZXNwLnBheWxvYWRbMF0gPT0gMHgwKSA/IDAgOiAtRUlPO1xcbit9XFxuK1xcbisvKiBQb3J0IG9wZXJhdGlvbnMgKi9cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVxcdTAwM2VvcCwgXFx1MDAyNnJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0c3RhdHVzLVxcdTAwM2VzdHMxID0gcmVzcC5wYXlsb2FkWzFdO1xcbitcXHRzdGF0dXMtXFx1MDAzZXN0czIgPSByZXNwLnBheWxvYWRbMl07XFxuK1xcdHN0YXR1cy1cXHUwMDNlc3RzMyA9IHJlc3AucGF5bG9hZFszXTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50ICptZWFzdXJlbWVudClcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVxcdTAwM2VvcCwgXFx1MDAyNnJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0bWVhc3VyZW1lbnQtXFx1MDAzZXZvbHRhZ2VfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFxcdTAwMjZyZXNwLnBheWxvYWRbMV0pO1xcbitcXHRtZWFzdXJlbWVudC1cXHUwMDNlY3VycmVudF9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXFx1MDAyNnJlc3AucGF5bG9hZFszXSk7XFxuK1xcdG1lYXN1cmVtZW50LVxcdTAwM2V0ZW1wZXJhdHVyZV9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXFx1MDAyNnJlc3AucGF5bG9hZFs1XSk7XFxuK1xcdG1lYXN1cmVtZW50LVxcdTAwM2Vwb3dlcl9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXFx1MDAyNnJlc3AucGF5bG9hZFs3XSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR107XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXFx1MDAzZW9wLCBcXHUwMDI2cmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRjb25maWctXFx1MDAzZWVuYWJsZSA9IChyZXNwLnBheWxvYWRbMV0gPT0gMSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyAqY29uZmlnKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cXHUwMDNlb3AsIFxcdTAwMjZyZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGNvbmZpZy1cXHUwMDNlbWF4X3Bvd2VyID0gcmVzcC5wYXlsb2FkWzNdO1xcbitcXHRjb25maWctXFx1MDAzZXByaW9yaXR5ID0gcmVzcC5wYXlsb2FkWzRdO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgcG9ydCwgb3BjLVxcdTAwM2VvcCwgZW5hYmxlID8gMHgxIDogMHgwKTtcXG4rfVxcbitcXG4rLyogUFNFIGNvbnRyb2xsZXIgb3BzICovXFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBwc2VfYWRtaW5fc3RhdGUgKmFkbWluX3N0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfY29uZmlnIGNvbmZpZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcocHNlLCBpZCwgXFx1MDAyNmNvbmZpZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRhZG1pbl9zdGF0ZS1cXHUwMDNlYzMzX2FkbWluX3N0YXRlID0gY29uZmlnLmVuYWJsZSA/IEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEIDpcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9ESVNBQkxFRDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcHNlX3B3X3N0YXR1cyAqcHdfc3RhdHVzKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMocHNlLCBpZCwgXFx1MDAyNnN0YXR1cyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRzd2l0Y2ggKHN0YXR1cy5zdHMxKSB7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEOlxcbitcXHRcXHRwd19zdGF0dXMtXFx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfRElTQUJMRUQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkc6XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkc6XFxuK1xcdFxcdHB3X3N0YXR1cy1cXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19TRUFSQ0hJTkc7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOlxcbitcXHRcXHRwd19zdGF0dXMtXFx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfREVMSVZFUklORztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1RFU1Q6XFxuK1xcdFxcdHB3X3N0YXR1cy1cXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19URVNUO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRkFVTFQ6XFxuK1xcdFxcdHB3X3N0YXR1cy1cXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19GQVVMVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUOlxcbitcXHRcXHRwd19zdGF0dXMtXFx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfT1RIRVJGQVVMVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHB3X3N0YXR1cy1cXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19VTktOT1dOO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgc3RhdHVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhwc2UsIGlkLCBcXHUwMDI2c3RhdHVzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHN0czIgaG9sZHMgdGhlIGNsYXNzIG9ubHkgaW4gdGhlIG9wZXJhdGlvbmFsIHN0YXRlcyBiZWxvdy4gSW4gYVxcbitcXHQgKiBmYXVsdC90ZXN0IHN0YXRlIChvciBhIGNvZGUgcmVzZXJ2ZWQgb24gdGhlIGN1cnJlbnQgZGlhbGVjdCkgaXRcXG4rXFx0ICogZG9lcyBub3QsIHNvIHRoZXJlIGlzIG5vIGNsYXNzIHRvIHJlcG9ydCBhbmQgd2UgcmV0dXJuIDAuIFRoYXQgaXNcXG4rXFx0ICogaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIHJlYWwgY2xhc3MtMCBQRDsgdXNlcnNwYWNlIGRpc2FtYmlndWF0ZXNcXG4rXFx0ICogdmlhIHRoZSBwb3dlciBzdGF0dXMuXFxuK1xcdCAqL1xcbitcXHRzd2l0Y2ggKHN0YXR1cy5zdHMxKSB7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEOlxcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkc6XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkc6XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkc6XFxuK1xcdFxcdHJldHVybiBwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZXBhcnNlX3BvcnRfY2xhc3MoXFx1MDAyNnN0YXR1cyk7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQgbWVhc3VyZW1lbnQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgXFx1MDAyNm1lYXN1cmVtZW50KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIDEwMG1XIHBlciBMU0IgKi9cXG4rXFx0cmV0dXJuIG1lYXN1cmVtZW50LnBvd2VyX3JhdyAqIDEwMFU7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50O1xcbitcXHRpbnQgcmV0O1xcbitcXHR1MzIgdVY7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgXFx1MDAyNm1lYXN1cmVtZW50KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIDY0LjQ1bVYgcGVyIExTQiAqL1xcbitcXHR1ViA9IG1lYXN1cmVtZW50LnZvbHRhZ2VfcmF3ICogNjQ0NTBVO1xcbitcXHRyZXR1cm4gbWluX3QodTMyLCB1ViwgSU5UX01BWCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZW5hYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuK3tcXG4rXFx0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZSh0b19ydHBzZV9tY3VfY3RybChwY2RldiksIGlkLCB0cnVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9kaXNhYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuK3tcXG4rXFx0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZSh0b19ydHBzZV9tY3VfY3RybChwY2RldiksIGlkLCBmYWxzZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHBzZSwgaWQsIFxcdTAwMjZjb25maWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGNvbmZpZy5tYXhfcG93ZXIgKiBwc2UtXFx1MDAzZWNoaXAtXFx1MDAzZXB3X3JlYWRfbHNiX21XO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLCBpbnQgbWF4X21XKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICp0eXBlX29wYywgKnZhbF9vcGM7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyAqY2hpcCA9IHBzZS1cXHUwMDNlY2hpcDtcXG4rXFx0dTggcHJnX3ZhbDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChtYXhfbVcgXFx1MDAzYyAwIHx8IG1heF9tVyBcXHUwMDNlIGNoaXAtXFx1MDAzZW1heF9tV19wZXJfcG9ydClcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcbitcXHR0eXBlX29wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdO1xcbitcXHR2YWxfb3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW2NoaXAtXFx1MDAzZXB3X3NldF9jbWRdO1xcbitcXHQvKiBwd19zZXRfbHNiX21XIGlzIHRoZSBkaXZpc29yIGJlbG93OyByZWplY3QgYSBjaGlwIHRoYXQgbGFja3MgaXQuICovXFxuK1xcdGlmICghdHlwZV9vcGMtXFx1MDAzZXZhbGlkIHx8ICF2YWxfb3BjLVxcdTAwM2V2YWxpZCB8fCAhY2hpcC1cXHUwMDNlcHdfc2V0X2xzYl9tVylcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU3dpdGNoIHRoZSBwb3J0IHRvIHVzZXItZGVmaW5lZCBsaW1pdCBtb2RlIGZpcnN0LCB0aGVuIHByb2dyYW0gdGhlXFxuK1xcdCAqIGxpbWl0IHZhbHVlLiBJZiB0aGUgc2Vjb25kIGNtZCBmYWlscywgdGhlIHBvcnQgaXMgbGVmdCBpblxcbitcXHQgKiB1c2VyLWRlZmluZWQgbW9kZSBidXQgd2l0aCB0aGUgcHJldmlvdXMgbGltaXQgdmFsdWU7IHRoZSBuZXh0XFxuK1xcdCAqIHN1Y2Nlc3NmdWwgc2V0X3B3X2xpbWl0IGNhbGwgcmVjb3ZlcnMgaXQuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdHlwZV9vcGMtXFx1MDAzZW9wLCBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVIpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cHJnX3ZhbCA9IG1pbl90KHVuc2lnbmVkIGludCwgbWF4X21XIC8gY2hpcC1cXHUwMDNlcHdfc2V0X2xzYl9tVywgVThfTUFYKTtcXG4rXFxuK1xcdHJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdmFsX29wYy1cXHUwMDNlb3AsIHByZ192YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBzZV9wd19saW1pdF9yYW5nZXMgKm91dClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0c3RydWN0IGV0aHRvb2xfYzMzX3BzZV9wd19saW1pdF9yYW5nZSAqcmFuZ2U7XFxuK1xcbitcXHRyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSk7XFxuK1xcdGlmICghcmFuZ2UpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmFuZ2VbMF0ubWluID0gMDtcXG4rXFx0cmFuZ2VbMF0ubWF4ID0gcHNlLVxcdTAwM2VjaGlwLVxcdTAwM2VtYXhfbVdfcGVyX3BvcnQ7XFxuK1xcbitcXHRvdXQtXFx1MDAzZWMzM19wd19saW1pdF9yYW5nZXMgPSByYW5nZTtcXG4rXFx0cmV0dXJuIDE7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgY29uZmlnO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgXFx1MDAyNmNvbmZpZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gY29uZmlnLnByaW9yaXR5O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcmlvKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXG4rXFx0aWYgKHByaW8gXFx1MDAzZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFkpXFxuK1xcdFxcdHJldHVybiAtRVJBTkdFO1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgb3BjLVxcdTAwM2VvcCwgcHJpbyk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfb3BzIHJ0cHNlX21jdV9vcHMgPSB7XFxuK1xcdC5waV9nZXRfYWRtaW5fc3RhdGUgPSBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUsXFxuK1xcdC5waV9nZXRfcHdfc3RhdHVzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyxcXG4rXFx0LnBpX2dldF9wd19jbGFzcyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzcyxcXG4rXFx0LnBpX2dldF9hY3R1YWxfcHcgPSBydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3LFxcbitcXHQucGlfZW5hYmxlID0gcnRwc2VfbWN1X3BvcnRfZW5hYmxlLFxcbitcXHQucGlfZGlzYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUsXFxuK1xcdC5waV9nZXRfdm9sdGFnZSA9IHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlLFxcbitcXHQucGlfZ2V0X3B3X2xpbWl0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0LFxcbitcXHQucGlfc2V0X3B3X2xpbWl0ID0gcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0LFxcbitcXHQucGlfZ2V0X3B3X2xpbWl0X3JhbmdlcyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMsXFxuK1xcdC5waV9nZXRfcHJpbyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvLFxcbitcXHQucGlfc2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9zZXRfcHJpbyxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2Rpc2NvdmVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnIGV4dF9jb25maWc7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZGVhZGxpbmU7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBIGJvb3RpbmcgTUNVIG1heSBzdGF5IHNpbGVudCAoLUVUSU1FRE9VVCksIG5vdCBBQ0sgaXRzIGFkZHJlc3NcXG4rXFx0ICogKC1FTlhJTyAvIC1FUkVNT1RFSU8pLCByZXBvcnQgbm90LXJlYWR5ICgtRUFHQUlOKSwgb3IgZW1pdCBhXFxuK1xcdCAqIGNvcnJ1cHQvcGFydGlhbCBmcmFtZSAoLUVCQURNU0cgLyAtRUJBREUpLiBSZXRyeSB0aG9zZSB3aXRoaW4gYVxcbitcXHQgKiBib3VuZGVkIHdpbmRvdzsgb3RoZXIgZXJyb3JzIChlLmcuIC1FT1BOT1RTVVBQKSBhcmUgZmF0YWwgYW5kIGZhaWxcXG4rXFx0ICogaW1tZWRpYXRlbHkuXFxuK1xcdCAqL1xcbitcXHRkZWFkbGluZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVMpO1xcbitcXHRkbyB7XFxuK1xcdFxcdHJldCA9IHJ0cHNlX21jdV9nZXRfaW5mbyhwc2UsIGluZm8pO1xcbitcXHRcXHRpZiAocmV0ICE9IC1FVElNRURPVVQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FTlhJTyBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVSRU1PVEVJTyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcmV0ICE9IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQkFETVNHIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUJBREUpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRtc2xlZXAoUlRQU0VfTUNVX0JPT1RfUkVUUllfTVMpO1xcbitcXHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXFx1MDAzZWRldiwgcmV0LCBcXFwiZmFpbGVkIHRvIHJlYWQgTUNVIGluZm9cXFxcblxcXCIpO1xcbitcXG4rXFx0c3dpdGNoIChpbmZvLVxcdTAwM2VkZXZpY2VfaWQpIHtcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCOlxcbitcXHRcXHRwc2UtXFx1MDAzZWNoaXAgPSBcXHUwMDI2cnRsODIzOGJfaW5mbztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5OlxcbitcXHRcXHRwc2UtXFx1MDAzZWNoaXAgPSBcXHUwMDI2cnRsODIzOV9pbmZvO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDOlxcbitcXHRcXHRwc2UtXFx1MDAzZWNoaXAgPSBcXHUwMDI2cnRsODIzOWNfaW5mbztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMTpcXG4rXFx0XFx0cHNlLVxcdTAwM2VjaGlwID0gXFx1MDAyNmJjbTU5MTExX2luZm87XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjE6XFxuK1xcdFxcdHBzZS1cXHUwMDNlY2hpcCA9IFxcdTAwMjZiY201OTEyMV9pbmZvO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIC1FSU5WQUwsIFxcXCJ1bmtub3duIFBTRSBpZCAweCV4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIGluZm8tXFx1MDAzZWRldmljZV9pZCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghaW5mby1cXHUwMDNlbWF4X3BvcnRzIHx8IGluZm8tXFx1MDAzZW1heF9wb3J0cyBcXHUwMDNlIFJUUFNFX01DVV9NQVhfUE9SVFMpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJNQ1UgcmVwb3J0cyBpbnZhbGlkIHBvcnQgY291bnQgJXVcXFxcblxcXCIsIGluZm8tXFx1MDAzZW1heF9wb3J0cyk7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfZ2V0X2V4dF9jb25maWcocHNlLCBcXHUwMDI2ZXh0X2NvbmZpZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gcmVhZCBNQ1UgZXh0IGNvbmZpZ1xcXFxuXFxcIik7XFxuK1xcbitcXHRkZXZfaW5mbyhwc2UtXFx1MDAzZWRldiwgXFxcIiVzIE1DVSwgJXMgKGlkIDB4JTA0eCksICV1IHBvcnRzIGFjcm9zcyAldSBQU0UgY2hpcChzKVxcXFxuXFxcIixcXG4rXFx0XFx0IHBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlbWN1X3R5cGVfc3RyKGluZm8tXFx1MDAzZW1jdV90eXBlKSwgcHNlLVxcdTAwM2VjaGlwLVxcdTAwM2VuYW1lLFxcbitcXHRcXHQgaW5mby1cXHUwMDNlZGV2aWNlX2lkLCBpbmZvLVxcdTAwM2VtYXhfcG9ydHMsIGV4dF9jb25maWcubnVtX29mX3BzZXMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X3JlZ3VsYXRvcl9kaXNhYmxlKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0cmVndWxhdG9yX2Rpc2FibGUoZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nbG9iYWxfZGlzYWJsZSh2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gZGF0YTtcXG4rXFxuK1xcdHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHBzZSwgZmFsc2UpO1xcbit9XFxuK1xcbitpbnQgcnRwc2VfbWN1X3JlZ2lzdGVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2g7XFxuK1xcdHN0cnVjdCBncGlvX2Rlc2MgKmVuYWJsZV9ncGlvO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gaW5mbztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHJ0cHNlX21jdV9tc2cpICE9IFJUUFNFX01DVV9NU0dfU0laRSk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX211dGV4X2luaXQocHNlLVxcdTAwM2VkZXYsIFxcdTAwMjZwc2UtXFx1MDAzZW11dGV4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHBzZS1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKCFtYXRjaClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIC1FTk9ERVYsIFxcXCJtaXNzaW5nIG1hdGNoIGRhdGFcXFxcblxcXCIpO1xcbitcXHRwc2UtXFx1MDAzZWRpYWxlY3QgPSBtYXRjaC1cXHUwMDNlZGlhbGVjdDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENhdGNoIGEgZGlhbGVjdCB0aGF0IGZvcmdvdCB0byBzZXQgb25lIG9mIHRoZSByZXF1aXJlZCBob29rcyBhdFxcbitcXHQgKiBwcm9iZSB0aW1lLCByYXRoZXIgdGhhbiBOVUxMLWRlcmVmJ2luZyBsYXRlciBmcm9tIGEgZmFzdCBwYXRoLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFwc2UtXFx1MDAzZWRpYWxlY3QgfHxcXG4rXFx0ICAgICFwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZXBhcnNlX3N5c3RlbV9pbmZvIHx8XFxuK1xcdCAgICAhcHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VwYXJzZV9wb3J0X2NsYXNzIHx8XFxuK1xcdCAgICAhcHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VtY3VfdHlwZV9zdHIpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJkaWFsZWN0IGZvciBjaGlwIGlzIGluY29tcGxldGVcXFxcblxcXCIpO1xcbitcXG4rXFx0cHNlLVxcdTAwM2Vwb2Vfc3VwcGx5ID0gZGV2bV9yZWd1bGF0b3JfZ2V0KHBzZS1cXHUwMDNlZGV2LCBcXFwicG93ZXJcXFwiKTtcXG4rXFx0aWYgKElTX0VSUihwc2UtXFx1MDAzZXBvZV9zdXBwbHkpKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXFx1MDAzZWRldiwgUFRSX0VSUihwc2UtXFx1MDAzZXBvZV9zdXBwbHkpLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IFBvRSBzdXBwbHlcXFxcblxcXCIpO1xcbitcXG4rXFx0ZW5hYmxlX2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwc2UtXFx1MDAzZWRldiwgXFxcImVuYWJsZVxcXCIsIEdQSU9EX09VVF9ISUdIKTtcXG4rXFx0aWYgKElTX0VSUihlbmFibGVfZ3BpbykpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCBQVFJfRVJSKGVuYWJsZV9ncGlvKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGdldCBlbmFibGUgZ3Bpb1xcXFxuXFxcIik7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfZGlzY292ZXIocHNlLCBcXHUwMDI2aW5mbyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHBzZS1cXHUwMDNlcG9lX3N1cHBseSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gZW5hYmxlIFBvRSBzdXBwbHlcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHBzZS1cXHUwMDNlZGV2LCBydHBzZV9tY3VfcmVndWxhdG9yX2Rpc2FibGUsIHBzZS1cXHUwMDNlcG9lX3N1cHBseSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoIWluZm8uc3lzdGVtX2VuYWJsZSkge1xcbitcXHRcXHRyZXQgPSBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShwc2UsIHRydWUpO1xcbitcXHRcXHQvKiBEaWFsZWN0cyB3aXRob3V0IGEgZ2xvYmFsLXN0YXRlIGNvbmNlcHQgKGUuZy4gQkNNKSByZXR1cm5cXG4rXFx0XFx0ICogLUVPUE5PVFNVUFA7IHRyZWF0IHRoYXQgYXMgXFxcIm5vIHNlcGFyYXRlIGVuYWJsZSByZXF1aXJlZFxcXCIuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUClcXG4rXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGVuYWJsZSBQU0Ugc3lzdGVtXFxcXG5cXFwiKTtcXG4rXFx0XFx0aWYgKCFyZXQpIHtcXG4rXFx0XFx0XFx0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHBzZS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcnRwc2VfbWN1X2dsb2JhbF9kaXNhYmxlLCBwc2UpO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIERlcGVuZGluZyBvbiB0aGUgTUNVIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gKHdoaWNoIG1pZ2h0IGJlIGRpZmZlcmVudFxcbitcXHQgKiBmb3IgZXZlcnkgYm9hcmQpLCBpdCBpc24ndCBrbm93biB3aGV0aGVyIHRoZSBQb0Ugc3Vic3lzdGVtIGlzIGFjdGl2ZSBvclxcbitcXHQgKiBpbmFjdGl2ZSBieSBkZWZhdWx0LiBBdCB0aGlzIHN0YWdlLCB0aGUgUFNFIGNoaXBzIG1pZ2h0IGFscmVhZHkgZGVsaXZlclxcbitcXHQgKiBwb3dlciB0byBQRHMgd2l0aG91dCBhbnkgZXhwbGljaXQgZW5hYmxlLlxcbitcXHQgKi9cXG4rXFxuK1xcdC8qIHBjZGV2Lm93bmVyIGlzIHNldCBieSB0aGUgdHJhbnNwb3J0LCBzbyB0aGUgcmVnaXN0ZXJlZCBjb250cm9sbGVyXFxuK1xcdCAqIHBpbnMgdGhlIHRyYW5zcG9ydCBtb2R1bGUgdGhhdCBvd25zIHRoZSBsaXZlIGRldmljZSwgbm90IHRoZSBjb3JlLlxcbitcXHQgKi9cXG4rXFx0cHNlLVxcdTAwM2VwY2Rldi5vcHMgICAgICA9IFxcdTAwMjZydHBzZV9tY3Vfb3BzO1xcbitcXHRwc2UtXFx1MDAzZXBjZGV2LmRldiAgICAgID0gcHNlLVxcdTAwM2VkZXY7XFxuK1xcdHBzZS1cXHUwMDNlcGNkZXYudHlwZXMgICAgPSBFVEhUT09MX1BTRV9DMzM7XFxuK1xcdHBzZS1cXHUwMDNlcGNkZXYubnJfbGluZXMgPSBpbmZvLm1heF9wb3J0cztcXG4rXFx0cHNlLVxcdTAwM2VwY2Rldi5waXNfcHJpb19tYXggPSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFk7XFxuK1xcdHBzZS1cXHUwMDNlcGNkZXYuc3VwcF9idWRnZXRfZXZhbF9zdHJhdGVnaWVzID0gUFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUM7XFxuK1xcbitcXHRyZXR1cm4gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3Rlcihwc2UtXFx1MDAzZWRldiwgXFx1MDAyNnBzZS1cXHUwMDNlcGNkZXYpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9yZWdpc3Rlcik7XFxuK1xcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfcnRsX3BhcnNlX3N5c3RlbV9pbmZvKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0aW5mby1cXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcXG4rXFx0aW5mby1cXHUwMDNlc3lzdGVtX2VuYWJsZSA9IChwYXlsb2FkWzJdID09IDB4MSk7XFxuK1xcdGluZm8tXFx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cGF5bG9hZFszXSk7XFxuK1xcdGluZm8tXFx1MDAzZXN3X3ZlciA9IHBheWxvYWRbNV07XFxuK1xcdGluZm8tXFx1MDAzZW1jdV90eXBlID0gcGF5bG9hZFs2XTtcXG4rXFx0aW5mby1cXHUwMDNlY29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107XFxuK1xcdGluZm8tXFx1MDAzZWV4dF92ZXIgPSBwYXlsb2FkWzhdO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9ydGxfcGFyc2VfcG9ydF9jbGFzcyhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpXFxuK3tcXG4rXFx0LyogQ2xhc3MgbGl2ZXMgaW4gdGhlIHVwcGVyIG5pYmJsZSBvZiBzdHMyLiAqL1xcbitcXHRyZXR1cm4gRklFTERfR0VUKEdFTk1BU0soNywgNCksIHN0YXR1cy1cXHUwMDNlc3RzMik7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyICpydHBzZV9tY3VfcnRsX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpXFxuK3tcXG4rXFx0c3dpdGNoIChtY3VfdHlwZSkge1xcbitcXHRjYXNlIDB4MDA6XFx0cmV0dXJuIFxcXCJHaWdhRGV2aWNlIEdEMzJGMzEwXFxcIjtcXG4rXFx0Y2FzZSAweDAxOlxcdHJldHVybiBcXFwiR2lnYURldmljZSBHRDMyRjIzMFxcXCI7XFxuK1xcdGNhc2UgMHgwMjpcXHRyZXR1cm4gXFxcIkdpZ2FEZXZpY2UgR0QzMkYzMDNcXFwiO1xcbitcXHRjYXNlIDB4MDM6XFx0cmV0dXJuIFxcXCJHaWdhRGV2aWNlIEdEMzJGMTAzXFxcIjtcXG4rXFx0Y2FzZSAweDA0OlxcdHJldHVybiBcXFwiR2lnYURldmljZSBHRDMyRTEwM1xcXCI7XFxuK1xcdGNhc2UgMHgxMDpcXHRyZXR1cm4gXFxcIk51dm90b24gTTA1MTZcXFwiO1xcbitcXHRjYXNlIDB4MTE6XFx0cmV0dXJuIFxcXCJOdXZvdG9uIE0wNTY0XFxcIjtcXG4rXFx0Y2FzZSAweDEyOlxcdHJldHVybiBcXFwiTnV2b3RvbiBOVUMwMjlcXFwiO1xcbitcXHRkZWZhdWx0OlxcdHJldHVybiBcXFwidW5rbm93blxcXCI7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X2JyY21fcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcXG4re1xcbitcXHRpbmZvLVxcdTAwM2VtYXhfcG9ydHMgPSBwYXlsb2FkWzFdO1xcbitcXHQvKiBCQ00gaGFzIG5vIGV4cGxpY2l0IHN5c3RlbV9lbmFibGUgYnl0ZTsgdGhlIGNsb3Nlc3QgYW5hbG9nIGlzIHRoZVxcbitcXHQgKiBcXFwicmVtb3RlIGVuYWJsZVxcXCIgYml0IGluIHRoZSBzeXN0ZW0tc3RhdHVzIGZsYWdzIGF0IHBheWxvYWRbN10uXFxuK1xcdCAqL1xcbitcXHRpbmZvLVxcdTAwM2VzeXN0ZW1fZW5hYmxlID0gISEocGF5bG9hZFs3XSBcXHUwMDI2IEJJVCgyKSk7XFxuK1xcdGluZm8tXFx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cGF5bG9hZFszXSk7XFxuK1xcdGluZm8tXFx1MDAzZXN3X3ZlciA9IHBheWxvYWRbNV07XFxuK1xcdGluZm8tXFx1MDAzZW1jdV90eXBlID0gcGF5bG9hZFs2XTtcXG4rXFx0aW5mby1cXHUwMDNlY29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107XFxuK1xcdGluZm8tXFx1MDAzZWV4dF92ZXIgPSBwYXlsb2FkWzhdO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9icmNtX3BhcnNlX3BvcnRfY2xhc3MoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKVxcbit7XFxuK1xcdC8qIEJDTSBwdXRzIHRoZSBkZXRlY3RlZCBjbGFzcyBpbiBwYXlsb2FkWzNdICg9PSBzdHMzKSBkaXJlY3RseS5cXG4rXFx0ICogTWFzayB0byB0aGUgbG93IG5pYmJsZTsgY2xhc3MgaXMgMC4uOCBhbmQgYW55IGhpZ2ggYml0cyB3b3VsZCBiZVxcbitcXHQgKiBub2lzZS5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBzdGF0dXMtXFx1MDAzZXN0czMgXFx1MDAyNiAweDBmO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqcnRwc2VfbWN1X2JyY21fbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSlcXG4re1xcbitcXHRzd2l0Y2ggKG1jdV90eXBlKSB7XFxuK1xcdGNhc2UgMHgwMDpcXHRyZXR1cm4gXFxcIlNUIE1pY3JvIFNUMzJGMTAwXFxcIjtcXG4rXFx0Y2FzZSAweDAxOlxcdHJldHVybiBcXFwiTnV2b3RvbiBNMDV4eCBMQU5cXFwiO1xcbitcXHRjYXNlIDB4MDI6XFx0cmV0dXJuIFxcXCJTVCBNaWNybyBTVEYwMzBDOFxcXCI7XFxuK1xcdGNhc2UgMHgwMzpcXHRyZXR1cm4gXFxcIk51dm90b24gTTA1OFNBTlxcXCI7XFxuK1xcdGNhc2UgMHgwNDpcXHRyZXR1cm4gXFxcIk51dm90b24gTlVDMTIyXFxcIjtcXG4rXFx0ZGVmYXVsdDpcXHRyZXR1cm4gXFxcInVua25vd25cXFwiO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qIE1hcCBlYWNoIGxvZ2ljYWwgY29tbWFuZCB0aGUgY29yZSBpc3N1ZXMgdG8gaXRzIHBlci1kaWFsZWN0IG9wY29kZS4gKi9cXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9ydGsgPSB7XFxuK1xcdC5wYXJzZV9zeXN0ZW1faW5mbyA9IHJ0cHNlX21jdV9ydGxfcGFyc2Vfc3lzdGVtX2luZm8sXFxuK1xcdC5wYXJzZV9wb3J0X2NsYXNzICA9IHJ0cHNlX21jdV9ydGxfcGFyc2VfcG9ydF9jbGFzcyxcXG4rXFx0Lm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X3J0bF9tY3VfdHlwZV9zdHIsXFxuK1xcdC5vcGNvZGUgPSB7XFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdXFx0PSBSVFBTRV9NQ1VfT1AoMHgwMCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GT11cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDQwKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHg0YSksXFxuK1xcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV1cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDAxKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxMiksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVxcdD0gUlRQU0VfTUNVX09QKDB4MTMpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFRdID0gUlRQU0VfTUNVX09QKDB4MTQpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV1cXHQ9IFJUUFNFX01DVV9PUCgweDE1KSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4NDIpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU11cXHQ9IFJUUFNFX01DVV9PUCgweDQ0KSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfQ09ORklHXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4NDgpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXVxcdD0gUlRQU0VfTUNVX09QKDB4NDkpLFxcbitcXHR9LFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9icmNtID0ge1xcbitcXHQucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfYnJjbV9wYXJzZV9zeXN0ZW1faW5mbyxcXG4rXFx0LnBhcnNlX3BvcnRfY2xhc3MgID0gcnRwc2VfbWN1X2JyY21fcGFyc2VfcG9ydF9jbGFzcyxcXG4rXFx0Lm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2JyY21fbWN1X3R5cGVfc3RyLFxcbitcXHQub3Bjb2RlID0ge1xcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHgyMCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4MmIpLFxcbitcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHgwMCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdID0gUlRQU0VfTUNVX09QKDB4MTUpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF1cXHQ9IFJUUFNFX01DVV9PUCgweDE2KSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldXFx0PSBSVFBTRV9NQ1VfT1AoMHgxYSksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU11cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDIxKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdXFx0PSBSVFBTRV9NQ1VfT1AoMHgzMCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDI1KSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR11cXHQ9IFJUUFNFX01DVV9PUCgweDI2KSxcXG4rXFx0fSxcXG4rfTtcXG4rXFxuK2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfcnRrX2RhdGEgPSB7XFxuK1xcdC5kaWFsZWN0ID0gXFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X3J0ayxcXG4rXFx0LmkyY19wcm90b19kdF9yZXF1aXJlZCA9IHRydWUsXFxuK307XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9ydGtfZGF0YSk7XFxuK1xcbitjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2JyY21fZGF0YSA9IHtcXG4rXFx0LmRpYWxlY3QgPSBcXHUwMDI2cnRwc2VfbWN1X2RpYWxlY3RfYnJjbSxcXG4rfTtcXG4rRVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2JyY21fZGF0YSk7XFxuK1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKGNvcmUpXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkpvbmFzIEplbG9uZWsgXFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtaTJjLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNmU2ZTM2NDVjNTA5MDNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xcbkBAIC0wLDAgKzEsMTYzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2kyYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInJlYWx0ZWstcHNlLW1jdS5oXFxcIlxcbitcXG4rLypcXG4rICogVGhlIGNvcmUgaGFzIGFscmVhZHkgd2FpdGVkIFJUUFNFX01DVV9SRVNQT05TRV9NUyBiZWZvcmUgY2FsbGluZyB1cywgc29cXG4rICogdGhlIHJlc3BvbnNlIGlzIG5vcm1hbGx5IHJlYWR5IG9uIHRoZSB2ZXJ5IGZpcnN0IHJlYWQuIEZvciBjb21tYW5kcyB0aGVcXG4rICogTUNVIHByb2R1Y2VzIG1vcmUgc2xvd2x5LCBrZWVwIHBvbGxpbmcgYXQgdGhlIHR5cGljYWwgcmVzcG9uc2UgY2FkZW5jZVxcbisgKiB1cCB0byB0aGUgd29yc3QtY2FzZSBjZWlsaW5nLlxcbisgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfSTJDX1JFVFJZX01TXFx0UlRQU0VfTUNVX1JFU1BPTlNFX01TXFxuKyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVNcXHQoUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUyAvIFJUUFNFX01DVV9JMkNfUkVUUllfTVMpXFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSlcXG4re1xcbitcXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtXFx1MDAzZWRldik7XFxuK1xcbitcXHQvKiBTZW5kIG9wY29kZSBhcyBTTUJ1cyBjb21tYW5kIGJ5dGU7IHJlbWFpbmluZyAxMSBieXRlcyBhcyBibG9jayBkYXRhICovXFxuK1xcdHJldHVybiBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCByZXEtXFx1MDAzZW9wY29kZSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgKHU4ICopcmVxICsgMSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXFxuK3tcXG4rXFx0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVxcdTAwM2VkZXYpO1xcbitcXHRpbnQgdHJpZXMsIHJldDtcXG4rXFxuK1xcdGZvciAodHJpZXMgPSAwOyB0cmllcyBcXHUwMDNjIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcysrKSB7XFxuK1xcdFxcdGlmICh0cmllcyBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdG1zbGVlcChSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKTtcXG4rXFxuK1xcdFxcdC8qIE1DVSBuZWVkcyAweDAwIGFzIGNvbW1hbmQgYnl0ZSBmb3IgcmVhZCAqL1xcbitcXHRcXHRyZXQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIDB4MDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAodTggKilyZXNwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFIFxcdTAwMjZcXHUwMDI2IHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX3NtYnVzX29wcyA9IHtcXG4rXFx0LnNlbmQgPSBydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmQsXFxuK1xcdC5yZWN2ID0gcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cXHUwMDNlZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIChjb25zdCB1OCAqKXJlcSwgUlRQU0VfTUNVX01TR19TSVpFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiByZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFID8gMCA6IC1FSU87XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19uYXRpdmVfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcXG4re1xcbitcXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtXFx1MDAzZWRldik7XFxuK1xcdGludCB0cmllcywgcmV0O1xcbitcXG4rXFx0Zm9yICh0cmllcyA9IDA7IHRyaWVzIFxcdTAwM2MgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVM7IHRyaWVzKyspIHtcXG4rXFx0XFx0aWYgKHRyaWVzIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0bXNsZWVwKFJUUFNFX01DVV9JMkNfUkVUUllfTVMpO1xcbitcXG4rXFx0XFx0cmV0ID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgKHU4ICopcmVzcCwgUlRQU0VfTUNVX01TR19TSVpFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFIFxcdTAwMjZcXHUwMDI2IHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgPSB7XFxuK1xcdC5zZW5kID0gcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZCxcXG4rXFx0LnJlY3YgPSBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2O1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZTtcXG4rXFx0Ym9vbCB1c2VfbmF0aXZlID0gZmFsc2U7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xcbitcXHRpZiAoIW1hdGNoKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsIFxcXCJtaXNzaW5nIG1hdGNoIGRhdGFcXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKHJ0cHNlX21jdV9uZWVkc19pMmNfcHJvdG8obWF0Y2gpKSB7XFxuK1xcdFxcdGNvbnN0IGNoYXIgKnByb3RvO1xcbitcXG4rXFx0XFx0cmV0ID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldiwgXFxcInJlYWx0ZWssaTJjLXByb3RvY29sXFxcIiwgXFx1MDAyNnByb3RvKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIm1pc3NpbmcgcmVxdWlyZWQgXFxcXFxcXCJyZWFsdGVrLGkyYy1wcm90b2NvbFxcXFxcXFwiIHByb3BlcnR5XFxcXG5cXFwiKTtcXG4rXFxuK1xcdFxcdGlmICghc3RyY21wKHByb3RvLCBcXFwiaTJjXFxcIikpXFxuK1xcdFxcdFxcdHVzZV9uYXRpdmUgPSB0cnVlO1xcbitcXHRcXHRlbHNlIGlmICghc3RyY21wKHByb3RvLCBcXFwic21idXNcXFwiKSlcXG4rXFx0XFx0XFx0dXNlX25hdGl2ZSA9IGZhbHNlO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwidW5rbm93biByZWFsdGVrLGkyYy1wcm90b2NvbCBcXFxcXFxcIiVzXFxcXFxcXCJcXFxcblxcXCIsIHByb3RvKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHVzZV9uYXRpdmUpIHtcXG4rXFx0XFx0aWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtXFx1MDAzZWFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpXFxuK1xcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVPUE5PVFNVUFAsXFxuK1xcdFxcdFxcdFxcdFxcXCJwbGFpbi1JMkMgTUNVIHByb3RvY29sIHJlcXVpcmVzIEkyQy1jYXBhYmxlIGFkYXB0ZXJcXFxcblxcXCIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC1cXHUwMDNlYWRhcHRlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sgfFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCxcXG4rXFx0XFx0XFx0XFx0XFxcIlNNQnVzIE1DVSBwcm90b2NvbCByZXF1aXJlcyBTTUJ1cyBJMkMtYmxvY2sgc3VwcG9ydFxcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdHBzZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHNlKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHNlKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBzZS1cXHUwMDNlZGV2ID0gZGV2O1xcbitcXHRwc2UtXFx1MDAzZXBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XFxuK1xcdHBzZS1cXHUwMDNldHJhbnNwb3J0ID0gdXNlX25hdGl2ZSA/IFxcdTAwMjZydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgOiBcXHUwMDI2cnRwc2VfbWN1X2kyY19zbWJ1c19vcHM7XFxuK1xcbitcXHRyZXR1cm4gcnRwc2VfbWN1X3JlZ2lzdGVyKHBzZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHBzZS1tY3UtcnRrXFxcIiwgLmRhdGEgPSBcXHUwMDI2cnRwc2VfbWN1X3J0a19kYXRhIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxwc2UtbWN1LWJyY21cXFwiLCAuZGF0YSA9IFxcdTAwMjZydHBzZV9tY3VfYnJjbV9kYXRhIH0sXFxuK1xcdHsgLyogc2VudGluZWwgKi8gfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfaTJjX29mX21hdGNoKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBydHBzZV9tY3VfaTJjX2RyaXZlciA9IHtcXG4rXFx0LmRyaXZlciA9IHtcXG4rXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJyZWFsdGVrLXBzZS1tY3UtaTJjXFxcIixcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlXFx0PSBydHBzZV9tY3VfaTJjX29mX21hdGNoLFxcbitcXHR9LFxcbitcXHQucHJvYmVcXHRcXHQ9IHJ0cHNlX21jdV9pMmNfcHJvYmUsXFxuK307XFxuK21vZHVsZV9pMmNfZHJpdmVyKHJ0cHNlX21jdV9pMmNfZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9BVVRIT1IoXFxcIkpvbmFzIEplbG9uZWsgXFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmVmMDRlMGQ5Mjk2M2I1XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jXFxuQEAgLTAsMCArMSwxNTYgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VyZGV2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGlubG9jay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwicmVhbHRlay1wc2UtbWN1LmhcXFwiXFxuK1xcbisjZGVmaW5lIFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVFxcdDE5MjAwXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVFxcdG1zZWNzX3RvX2ppZmZpZXMoMTAwKVxcbisjZGVmaW5lIFJUUFNFX01DVV9VQVJUX1JYX1RJTUVPVVRcXHRtc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMpXFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQge1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgcHNlO1xcbitcXHRzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2O1xcbitcXHRzdHJ1Y3QgY29tcGxldGlvbiByeF9kb25lO1xcbitcXHRzcGlubG9ja190IHJ4X2xvY2s7XFx0XFx0LyogcHJvdGVjdHMgcnhfYnVmIGFuZCByeF9sZW4gKi9cXG4rXFx0c2l6ZV90IHJ4X2xlbjtcXG4rXFx0dTggcnhfYnVmW1JUUFNFX01DVV9NU0dfU0laRV07XFxuK307XFxuK1xcbisjZGVmaW5lIHRvX3J0cHNlX21jdV91YXJ0KHApICBjb250YWluZXJfb2YocCwgc3RydWN0IHJ0cHNlX21jdV91YXJ0LCBwc2UpXFxuK1xcbisvKlxcbisgKiBObyBmcmFtaW5nIGlzIGRvbmUgaGVyZTogYSBnbGl0Y2hlZCBmcmFtZSBjb3N0cyBvbmUgdHJhbnNhY3Rpb24sIHRoZW5cXG4rICogdGhlIG5leHQgX3NlbmQgcmUtZnJhbWVzIGZyb20gcnhfbGVuIDAuIFJlc3luYyB3b3JrcyBieSByZXR1cm5pbmcgY291bnRcXG4rICogKG5vdCB0YWtlKSwgZHJvcHBpbmcgYW55IG92ZXJmbG93IHNvIHNlcmRldiBrZWVwcyBubyBsZWZ0b3ZlciB0byBibGVlZFxcbisgKiBpbnRvIHRoZSBuZXh0IGZyYW1lLlxcbisgKi9cXG4rc3RhdGljIHNpemVfdCBydHBzZV9tY3VfdWFydF9yZWNlaXZlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gc2VyZGV2X2RldmljZV9nZXRfZHJ2ZGF0YShzZXJkZXYpO1xcbitcXHRzaXplX3QgdGFrZTtcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcXHUwMDI2Y3R4LVxcdTAwM2VyeF9sb2NrKSB7XFxuK1xcdFxcdHRha2UgPSBtaW4oY291bnQsIHNpemVvZihjdHgtXFx1MDAzZXJ4X2J1ZikgLSBjdHgtXFx1MDAzZXJ4X2xlbik7XFxuK1xcdFxcdGlmICh0YWtlKSB7XFxuK1xcdFxcdFxcdG1lbWNweShjdHgtXFx1MDAzZXJ4X2J1ZiArIGN0eC1cXHUwMDNlcnhfbGVuLCBidWYsIHRha2UpO1xcbitcXHRcXHRcXHRjdHgtXFx1MDAzZXJ4X2xlbiArPSB0YWtlO1xcbitcXHRcXHRcXHRpZiAoY3R4LVxcdTAwM2VyeF9sZW4gPT0gc2l6ZW9mKGN0eC1cXHUwMDNlcnhfYnVmKSlcXG4rXFx0XFx0XFx0XFx0Y29tcGxldGUoXFx1MDAyNmN0eC1cXHUwMDNlcnhfZG9uZSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogY29uc3VtZSBhbGwgdG8gYXZvaWQgZGVzeW5jL21pc2FsaWdubWVudCAqL1xcbitcXHRyZXR1cm4gY291bnQ7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VyZGV2X2RldmljZV9vcHMgcnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyA9IHtcXG4rXFx0LnJlY2VpdmVfYnVmID0gcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZSxcXG4rXFx0LndyaXRlX3dha2V1cCA9IHNlcmRldl9kZXZpY2Vfd3JpdGVfd2FrZXVwLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfdWFydF9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTtcXG4rXFx0aW50IHdyaXR0ZW47XFxuK1xcbitcXHQvKiBjbGVhciBhbnkgbGVmdG92ZXIgcnggc3RhdGUgYmVmb3JlIHRyYW5zbWl0dGluZyAqL1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNmN0eC1cXHUwMDNlcnhfbG9jaykge1xcbitcXHRcXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2VyeF9kb25lKTtcXG4rXFx0XFx0Y3R4LVxcdTAwM2VyeF9sZW4gPSAwO1xcbitcXHR9XFxuK1xcbitcXHR3cml0dGVuID0gc2VyZGV2X2RldmljZV93cml0ZShjdHgtXFx1MDAzZXNlcmRldiwgKGNvbnN0IHU4ICopcmVxLCBzaXplb2YoKnJlcSksXFxuK1xcdFxcdFxcdFxcdCAgICAgIFJUUFNFX01DVV9VQVJUX1RYX1RJTUVPVVQpO1xcbitcXHRpZiAod3JpdHRlbiBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB3cml0dGVuO1xcbitcXHRpZiAod3JpdHRlbiAhPSBzaXplb2YoKnJlcSkpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSxcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eCA9IHRvX3J0cHNlX21jdV91YXJ0KHBzZSk7XFxuK1xcbitcXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcXHUwMDI2Y3R4LVxcdTAwM2VyeF9kb25lLCBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUKSlcXG4rXFx0XFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNmN0eC1cXHUwMDNlcnhfbG9jaykge1xcbitcXHRcXHRpZiAoY3R4LVxcdTAwM2VyeF9sZW4gIT0gc2l6ZW9mKCpyZXNwKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRcXHRtZW1jcHkocmVzcCwgY3R4LVxcdTAwM2VyeF9idWYsIHNpemVvZigqcmVzcCkpO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHJ0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHMgPSB7XFxuK1xcdC5zZW5kID0gcnRwc2VfbWN1X3VhcnRfc2VuZCxcXG4rXFx0LnJlY3YgPSBydHBzZV9tY3VfdWFydF9yZWN2LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfdWFydF9wcm9iZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2KVxcbit7XFxuK1xcdHUzMiBzcGVlZCA9IFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVDtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnNlcmRldi1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghY3R4KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGN0eC1cXHUwMDNlc2VyZGV2ID0gc2VyZGV2O1xcbitcXHRjdHgtXFx1MDAzZXBzZS5kZXYgPSBkZXY7XFxuK1xcdGN0eC1cXHUwMDNlcHNlLnBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XFxuK1xcdGN0eC1cXHUwMDNlcHNlLnRyYW5zcG9ydCA9IFxcdTAwMjZydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzO1xcbitcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmN0eC1cXHUwMDNlcnhfZG9uZSk7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZjdHgtXFx1MDAzZXJ4X2xvY2spO1xcbitcXG4rXFx0c2VyZGV2X2RldmljZV9zZXRfZHJ2ZGF0YShzZXJkZXYsIGN0eCk7XFxuK1xcdHNlcmRldl9kZXZpY2Vfc2V0X2NsaWVudF9vcHMoc2VyZGV2LCBcXHUwMDI2cnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX3NlcmRldl9kZXZpY2Vfb3BlbihkZXYsIHNlcmRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcXFwiZmFpbGVkIHRvIG9wZW4gc2VyZGV2XFxcXG5cXFwiKTtcXG4rXFxuK1xcdGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXZfZndub2RlKGRldiksIFxcXCJjdXJyZW50LXNwZWVkXFxcIiwgXFx1MDAyNnNwZWVkKTtcXG4rXFx0c2VyZGV2X2RldmljZV9zZXRfYmF1ZHJhdGUoc2VyZGV2LCBzcGVlZCk7XFxuK1xcdHNlcmRldl9kZXZpY2Vfc2V0X2Zsb3dfY29udHJvbChzZXJkZXYsIGZhbHNlKTtcXG4rXFx0c2VyZGV2X2RldmljZV9zZXRfcGFyaXR5KHNlcmRldiwgU0VSREVWX1BBUklUWV9OT05FKTtcXG4rXFxuK1xcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIoXFx1MDAyNmN0eC1cXHUwMDNlcHNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHBzZS1tY3UtcnRrXFxcIiwgLmRhdGEgPSBcXHUwMDI2cnRwc2VfbWN1X3J0a19kYXRhIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxwc2UtbWN1LWJyY21cXFwiLCAuZGF0YSA9IFxcdTAwMjZydHBzZV9tY3VfYnJjbV9kYXRhIH0sXFxuK1xcdHsgLyogc2VudGluZWwgKi8gfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaCk7XFxuK1xcbitzdGF0aWMgc3RydWN0IHNlcmRldl9kZXZpY2VfZHJpdmVyIHJ0cHNlX21jdV91YXJ0X2RyaXZlciA9IHtcXG4rXFx0LmRyaXZlciA9IHtcXG4rXFx0XFx0Lm5hbWUgPSBcXFwicmVhbHRlay1wc2UtbWN1LXVhcnRcXFwiLFxcbitcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBydHBzZV9tY3VfdWFydF9vZl9tYXRjaCxcXG4rXFx0fSxcXG4rXFx0LnByb2JlICA9IHJ0cHNlX21jdV91YXJ0X3Byb2JlLFxcbit9O1xcbittb2R1bGVfc2VyZGV2X2RldmljZV9kcml2ZXIocnRwc2VfbWN1X3VhcnRfZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9BVVRIT1IoXFxcIkpvbmFzIEplbG9uZWsgXFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KVxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaCBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI5YmYzYjJkZGUwOGI4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaFxcbkBAIC0wLDAgKzEsODcgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rXFxuKyNpZm5kZWYgX1JFQUxURUtfUFNFX01DVV9IXFxuKyNkZWZpbmUgX1JFQUxURUtfUFNFX01DVV9IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuK1xcbisvKlxcbisgKiBUaW1lIHRoZSBNQ1UgaXRzZWxmIG5lZWRzIGJldHdlZW4gYWNjZXB0aW5nIGEgcmVxdWVzdCBhbmQgaGF2aW5nIGFcXG4rICogcmVzcG9uc2UgcmVhZHkuIFRoZXNlIGFyZSBwcm9wZXJ0aWVzIG9mIHRoZSBNQ1UgZmlybXdhcmUsIG5vdCBvZiB0aGVcXG4rICogdW5kZXJseWluZyB0cmFuc3BvcnQ6IHRoZSBjb3JlIHBhY2VzIHRyYW5zYWN0aW9ucyBieSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVNcXG4rICogYW5kIGJvdGggdHJhbnNwb3J0cyBzaXplIHRoZWlyIHBlci10cmFuc2FjdGlvbiByZWN2IGNlaWxpbmcgZnJvbVxcbisgKiBSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TLCBzaW5jZSBzb21lIGNvbW1hbmRzIGFyZSBkb2N1bWVudGVkIGFzXFxuKyAqIG5lZWRpbmcgdXAgdG8gfjFzIHRvIHByb2R1Y2UgYSByZXBseS5cXG4rICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1JFU1BPTlNFX01TXFx0XFx0XFx0MjVcXG4rI2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TXFx0XFx0MTAwMFxcbitcXG4rLypcXG4rICogVG90YWwgdGltZSB0byBrZWVwIHJldHJ5aW5nIHRoZSBmaXJzdCBNQ1UgcmVhZCBhdCBwcm9iZSwgYW5kIHRoZSBwYXVzZVxcbisgKiBiZXR3ZWVuIGF0dGVtcHRzLiBSaWdodCBhZnRlciBlbmFibGUtZ3Bpb3MgaXMgYXNzZXJ0ZWQgdGhlIE1DVSBtYXkgbm90XFxuKyAqIGFuc3dlciBvbiB0aGUgYnVzIHlldDsgZ2l2ZSBpdCBhIGJvdW5kZWQgd2luZG93IHRvIGNvbWUgdXAgYmVmb3JlXFxuKyAqIGRlY2xhcmluZyB0aGUgcHJvYmUgZmFpbGVkLlxcbisgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfQk9PVF9USU1FT1VUX01TXFx0XFx0MzAwMFxcbisjZGVmaW5lIFJUUFNFX01DVV9CT09UX1JFVFJZX01TXFx0XFx0XFx0MTAwXFxuK1xcbisjZGVmaW5lIFJUUFNFX01DVV9NU0dfU0laRVxcdFxcdFxcdDEyXFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X21zZyB7XFxuK1xcdHU4IG9wY29kZTtcXG4rXFx0dTggc2VxX251bTtcXG4rXFx0dTggcGF5bG9hZFs5XTtcXG4rXFx0dTggY2hlY2tzdW07XFxuK30gX19wYWNrZWQ7XFxuK1xcbisvKlxcbisgKiBNQ1Ugc3RhdHVzIG9wY29kZXMgKHNlZW4gb24gdGhlIEJDTSBkaWFsZWN0OyBSVEwgbmV2ZXIgZW1pdHMgdGhlbSkuXFxuKyAqIElOQ09NUExFVEUvQkFEX0NTVU0gYXJlIHRlcm1pbmFsOyBOT1RfUkVBRFkgaXMgdHJhbnNpZW50LlxcbisgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEVcXHRcXHQweGZkXFx0LyogLUVCQURFICAgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNXFx0XFx0MHhmZVxcdC8qIC1FQkFETVNHICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9OT1RfUkVBRFlcXHRcXHQweGZmXFx0LyogLUVBR0FJTiAgKi9cXG4rXFxuKy8qIEEgcG9sbGluZyB0cmFuc3BvcnQgY2FuIHN0b3AgaGVyZTogdGhlIG1hdGNoaW5nIHJlcGx5LCBvciBhIHRlcm1pbmFsIGVycm9yLiAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2wgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXFxuK3tcXG4rXFx0cmV0dXJuIHJlc3AtXFx1MDAzZW9wY29kZSA9PSByZXEtXFx1MDAzZW9wY29kZSB8fFxcbitcXHQgICAgICAgcmVzcC1cXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfSU5DT01QTEVURSB8fFxcbitcXHQgICAgICAgcmVzcC1cXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU07XFxuK31cXG4rXFxuKy8qIE9wYXF1ZSB0byB0cmFuc3BvcnRzOyBkZWZpbmVkIGluIHJlYWx0ZWstcHNlLWNvcmUuYy4gKi9cXG4rc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0O1xcbitzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGE7XFxuK3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvO1xcbitzdHJ1Y3QgcnRwc2VfbWN1X2N0cmw7XFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMge1xcbitcXHRpbnQgKCpzZW5kKShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSk7XFxuK1xcdGludCAoKnJlY3YpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxcbitcXHRcXHQgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9jdHJsIHtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbitcXHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2IHBjZGV2O1xcbitcXHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8qIHNlcmlhbGl6ZXMgTUNVIHJlcXVlc3QvcmVzcG9uc2UgdHJhbnNhY3Rpb25zICovXFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gKmNoaXA7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyAqdHJhbnNwb3J0O1xcbitcXG4rXFx0c3RydWN0IHJlZ3VsYXRvciAqcG9lX3N1cHBseTtcXG4rfTtcXG4rXFxuK2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpO1xcbitcXG4rLyogV2hldGhlciB0aGUgSTJDIHRyYW5zcG9ydCBtdXN0IHJlYWQgXFxcInJlYWx0ZWssaTJjLXByb3RvY29sXFxcIiBmcm9tIERULiAqL1xcbitib29sIHJ0cHNlX21jdV9uZWVkc19pMmNfcHJvdG8oY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaCk7XFxuK1xcbitleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9ydGtfZGF0YTtcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfYnJjbV9kYXRhO1xcbitcXG4rI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjMzOjQzLjkzNjEwNDI4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTczNzQ4MTgwNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX0NPTlRST0xMRVJcIixcbiAgICBcIlBTRV9SRUFMVEVLX01DVV9JMkNcIixcbiAgICBcIlBTRV9SRUFMVEVLX01DVV9VQVJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3NcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9lbmFibGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2Rpc2FibGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdFwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfc2V0X3ByaW9cIixcbiAgICBcInJ0cHNlX21jdV9pMmNfcHJvYmVcIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3Byb2JlXCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9yZWNlaXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciBSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1VzLCB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdmlhIEkyQyBvciBVQVJULiBUaGUgZHJpdmVyIGltcGxlbWVudHMgdGhlIFBTRSBjb250cm9sbGVyIEFQSSBhbmQgcGFyc2VzIHJlc3BvbnNlcyBmcm9tIHRoZSBNQ1UuIEZ1enppbmcgdGhlIEkyQy9VQVJUIGludGVyZmFjZXMgYW5kIHRoZSBQU0UgY29udHJvbGxlciBvcHMgaXMgdmFsdWFibGUgZm9yIGZpbmRpbmcgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlIHByb3RvY29sIHBhcnNpbmcgYW5kIHN0YXRlIG1hbmFnZW1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWNmNmJjZWYxNTA5Y2IzYTFhNjBjNmRhNDFmYjI1NDcwMzk1NTBjZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTU6MzM6NDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmQwZGZhZTIyMGRjMWU5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxuQEAgLTAsMCArMSwxNTQgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVVxuK1xuK21haW50YWluZXJzOlxuKyAgLSBKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246IHxcbisgIE1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHVzaW5nXG4rICBSZWFsdGVrIChSVEw4MjM4QiwgUlRMODIzOSwgUlRMODIzOUMpIG9yIEJyb2FkY29tIChCQ001OTExMSwgQkNNNTkxMjEpXG4rICBQU0UgY2hpcHMuIFRoZSBNQ1UgZXhwb3NlcyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2wgb3ZlciBlaXRoZXJcbisgIEkyQy9TTUJ1cyBvciBVQVJUOyB0aGUgYWN0dWFsIFBTRSBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVGhlXG4rICBSZWFsdGVrIGFuZCBCcm9hZGNvbSB2YXJpYW50cyBzaGFyZSB0aGlzIGRldmljZSB0cmVlIGNvbnRyYWN0IGJ1dCB1c2VcbisgIGRpZmZlcmVudCBwcm90b2NvbCBvcGNvZGVzLCBzZWxlY3RlZCBieSB0aGUgY29tcGF0aWJsZS5cbitcbisgIFRoZSBjb21wYXRpYmxlIGlkZW50aWZpZXMgdGhlIFBTRS1NQ1UgcHJvdG9jb2wgZGlhbGVjdCwgbm90IGEgc3BlY2lmaWNcbisgIHBhcnQuIFRoZSBkZXZpY2UgaGVyZSBpcyB0aGUgTUNVOiBpdCBwcmVzZW50cyBhIHN0YWJsZSBtZXNzYWdlIHByb3RvY29sXG4rICBkb2N1bWVudGVkIGJ5IFJlYWx0ZWssIHdpdGggdGhlIFBTRSBzaWxpY29uIGJlaGluZCBpdCAtIEJyb2FkY29tIG9uXG4rICBvbGRlciBib2FyZHMsIFJlYWx0ZWsgb24gbmV3ZXIgLSBkZXRlY3RlZCBhdCBydW50aW1lIGFuZCBub3QgZGVzY3JpYmVkXG4rICBoZXJlLiBUaGUgTUNVJ3Mgb3duIHNpbGljb24gaXMgZ2VuZXJhbC1wdXJwb3NlIGFuZCB2YXJpZXMgYWNyb3NzXG4rICBib2FyZHMsIHNvIHRoZSAncmVhbHRlaycgdmVuZG9yIHByZWZpeCBuYW1lcyB0aGUgcHJvdG9jb2wgZnJvbnQtZW5kXG4rICAoZm9sbG93aW5nIHRoZSBnb29nbGUsY3Jvcy1lYyBwYXR0ZXJuKTsgdGhlICctcnRrJy8nLWJyY20nIHN1ZmZpeFxuKyAgc2VsZWN0cyB0aGUgUmVhbHRlayBvciBCcm9hZGNvbSBkaWFsZWN0LlxuK1xuKyAgQSBzaW5nbGUgY29tcGF0aWJsZSBwZXIgZGlhbGVjdCBjb3ZlcnMgYm90aCB0aGUgSTJDL1NNQnVzIGFuZCBVQVJUXG4rICBhdHRhY2htZW50czogdGhlIHdpcmUgcHJvdG9jb2wgaXMgaWRlbnRpY2FsIGFjcm9zcyB0aGVtIGFuZCB0aGVcbisgIHRyYW5zcG9ydCBpcyBhbHJlYWR5IGV4cHJlc3NlZCBieSB0aGUgbm9kZSdzIHBhcmVudCBidXMsIHNvIGl0IGlzIG5vdFxuKyAgZW5jb2RlZCBpbiB0aGUgY29tcGF0aWJsZS4gVHJhbnNwb3J0LXNwZWNpZmljIHByb3BlcnRpZXMgZGlmZmVyXG4rICBhY2NvcmRpbmdseSAtIHRoZSBJMkMgYXR0YWNobWVudCBjYXJyaWVzICdyZWcnIChhbmQsIGZvciBSZWFsdGVrLFxuKyAgJ3JlYWx0ZWssaTJjLXByb3RvY29sJyksIHdoaWxlIHRoZSBVQVJUIGF0dGFjaG1lbnQgY2FycmllcyB0aGUgc2VyaWFsXG4rICBwZXJpcGhlcmFsIHByb3BlcnRpZXMgc3VjaCBhcyAnY3VycmVudC1zcGVlZCcuXG4rXG4rcHJvcGVydGllczpcbisgIGNvbXBhdGlibGU6XG4rICAgIGVudW06XG4rICAgICAgLSByZWFsdGVrLHBzZS1tY3UtcnRrXG4rICAgICAgLSByZWFsdGVrLHBzZS1tY3UtYnJjbVxuK1xuKyAgcmVnOlxuKyAgICBtYXhJdGVtczogMVxuK1xuKyAgcG93ZXItc3VwcGx5OlxuKyAgICBkZXNjcmlwdGlvbjogUmVndWxhdG9yIHN1cHBseWluZyB0aGUgUG9FIHBvd2VyIHJhaWwuXG4rXG4rICBlbmFibGUtZ3Bpb3M6XG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rICByZWFsdGVrLGkyYy1wcm90b2NvbDpcbisgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvc3RyaW5nXG4rICAgIGVudW06IFsgaTJjLCBzbWJ1cyBdXG4rICAgIGRlc2NyaXB0aW9uOiB8XG4rICAgICAgV2lyZSBmcmFtaW5nIHRoZSBNQ1UgZmlybXdhcmUgZXhwZWN0cyBvbiB0aGUgSTJDIGJ1cy4gXCJzbWJ1c1wiIG1lYW5zXG4rICAgICAgcmVhZHMgY2FycnkgYSBsZWFkaW5nIGNvbW1hbmQgYnl0ZSAoMHgwMCkgYW5kIGEgcmVwZWF0ZWQgc3RhcnQ7IFwiaTJjXCJcbisgICAgICBtZWFucyBiYXJlIDEyLWJ5dGUgd3JpdGVzIGFuZCByZWFkcyB3aXRoIG5vIGNvbW1hbmQgcHJlZml4LiBPbmx5XG4rICAgICAgYXBwbGllcyB0byB0aGUgUmVhbHRlayBJMkMgYXR0YWNobWVudC5cbitcbityZXF1aXJlZDpcbisgIC0gY29tcGF0aWJsZVxuK1xuK2FsbE9mOlxuKyAgLSAkcmVmOiBwc2UtY29udHJvbGxlci55YW1sI1xuKyAgLSAkcmVmOiAvc2NoZW1hcy9zZXJpYWwvc2VyaWFsLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcbisgICMgVGhlIEkyQyBhdHRhY2htZW50IChpZGVudGlmaWVkIGJ5ICdyZWcnKSBjYW5ub3QgY2Fycnkgc2VyaWFsIGJ1cyBwcm9wcy5cbisgIC0gaWY6XG4rICAgICAgcmVxdWlyZWQ6IFtyZWddXG4rICAgIHRoZW46XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGN1cnJlbnQtc3BlZWQ6IGZhbHNlXG4rICAgICAgICBtYXgtc3BlZWQ6IGZhbHNlXG4rICAjICdyZWFsdGVrLGkyYy1wcm90b2NvbCcgaXMgbWVhbmluZ2Z1bCBvbmx5IGZvciB0aGUgUmVhbHRlayBJMkMgYXR0YWNobWVudDtcbisgICMgdGhlIEJyb2FkY29tIHZhcmlhbnQgYW5kIGFueSBVQVJUIGF0dGFjaG1lbnQgbXVzdCBub3QgY2FycnkgaXQuXG4rICAtIGlmOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgICBjb250YWluczpcbisgICAgICAgICAgICBjb25zdDogcmVhbHRlayxwc2UtbWN1LXJ0a1xuKyAgICAgIHJlcXVpcmVkOiBbcmVnXVxuKyAgICB0aGVuOlxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSByZWFsdGVrLGkyYy1wcm90b2NvbFxuKyAgICBlbHNlOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBcInJlYWx0ZWssaTJjLXByb3RvY29sXCI6IGZhbHNlXG4rXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgIyBSZWFsdGVrIFBTRSBjaGlwLCBJMkMgYXR0YWNobWVudCAoU01CdXMgZnJhbWluZykuXG4rICAtIHxcbisgICAgaTJjIHtcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgIGV0aGVybmV0LXBzZUAyMCB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwicmVhbHRlayxwc2UtbWN1LXJ0a1wiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4MjBcdTAwM2U7XG4rICAgICAgICAgICAgcmVhbHRlayxpMmMtcHJvdG9jb2wgPSBcInNtYnVzXCI7XG4rXG4rICAgICAgICAgICAgcHNlLXBpcyB7XG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7XG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgI3BzZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgfTtcbisgICAgICAgIH07XG4rICAgIH07XG4rXG4rICAjIEJyb2FkY29tIFBTRSBjaGlwLCBJMkMgYXR0YWNobWVudC5cbisgIC0gfFxuKyAgICBpMmMge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgZXRoZXJuZXQtcHNlQDIwIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJyZWFsdGVrLHBzZS1tY3UtYnJjbVwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4MjBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgcHNlLXBpcyB7XG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7XG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgI3BzZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgfTtcbisgICAgICAgIH07XG4rICAgIH07XG4rXG4rICAjIFJlYWx0ZWsgUFNFIGNoaXAsIFVBUlQgYXR0YWNobWVudC5cbisgIC0gfFxuKyAgICBzZXJpYWwge1xuKyAgICAgICAgZXRoZXJuZXQtcHNlIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJyZWFsdGVrLHBzZS1tY3UtcnRrXCI7XG4rICAgICAgICAgICAgY3VycmVudC1zcGVlZCA9IFx1MDAzYzExNTIwMFx1MDAzZTtcbitcbisgICAgICAgICAgICBwc2UtcGlzIHtcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAgICAgfTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA1MmYxYTU1ZWNhOTliZi4uZTNmNDI2YTNiMjAxZmIgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0yMjcxNiw2ICsyMjcxNiwxMyBAQCBTOlx0TWFpbnRhaW5lZFxuIEY6XHRpbmNsdWRlL3NvdW5kL3J0Ki5oXG4gRjpcdHNvdW5kL3NvYy9jb2RlY3MvcnQqXG4gXG4rUkVBTFRFSy9CUk9BRENPTSBQU0UgTUNVIERSSVZFUlxuK006XHRKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXG4rTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbitTOlx0TWFpbnRhaW5lZFxuK0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxuK0Y6XHRkcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1KlxuK1xuIFJFQUxURUsgT1RUTyBXQVRDSERPR1xuIE06XHRTYW5kZXIgVmFuaGV1bGUgXHUwMDNjc2FuZGVyQHN2YW5oZXVsZS5uZXRcdTAwM2VcbiBMOlx0bGludXgtd2F0Y2hkb2dAdmdlci5rZXJuZWwub3JnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWcgYi9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ1xuaW5kZXggN2VmMjk2NTdlZTVkZDEuLjIzZTQ0ZGRlM2RiZmUwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXG5AQCAtMTMsNiArMTMsMzQgQEAgbWVudWNvbmZpZyBQU0VfQ09OVFJPTExFUlxuIFxuIGlmIFBTRV9DT05UUk9MTEVSXG4gXG4rY29uZmlnIFBTRV9SRUFMVEVLX01DVVxuK1x0dHJpc3RhdGVcbitcdGhlbHBcbitcdCAgU2hhcmVkIGNvcmUgZm9yIHRoZSBSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1UgZHJpdmVyLiBUaGlzIGlzXG4rXHQgIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHRyYW5zcG9ydCBvcHRpb25zIGJlbG93LlxuK1xuK2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfSTJDXG4rXHR0cmlzdGF0ZSBcIlJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXCJcbitcdGRlcGVuZHMgb24gSTJDXG4rXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXG4rXHRoZWxwXG4rXHQgIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFXG4rXHQgIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHdpdGggUmVhbHRlayBvciBCcm9hZGNvbSBQU0UgY2hpcHMsIGF0dGFjaGVkXG4rXHQgIHZpYSBJMkMvU01CdXMuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWxcbitcdCAgUFNFIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGFcbitcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS1pMmMuXG4rXG4rY29uZmlnIFBTRV9SRUFMVEVLX01DVV9VQVJUXG4rXHR0cmlzdGF0ZSBcIlJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KVwiXG4rXHRkZXBlbmRzIG9uIFNFUklBTF9ERVZfQlVTXG4rXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXG4rXHRoZWxwXG4rXHQgIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFXG4rXHQgIGhhcmR3YXJlIG9uIHN3aXRjaGVzIHdpdGggUmVhbHRlayBvciBCcm9hZGNvbSBQU0UgY2hpcHMsIGF0dGFjaGVkXG4rXHQgIHZpYSBVQVJULiBUaGUgTUNVIGV4cG9zZXMgYSBtZXNzYWdlLWJhc2VkIHByb3RvY29sOyB0aGUgYWN0dWFsIFBTRVxuK1x0ICBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhXG4rXHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtdWFydC5cbitcbiBjb25maWcgUFNFX1JFR1VMQVRPUlxuIFx0dHJpc3RhdGUgXCJSZWd1bGF0b3IgYmFzZWQgUFNFIGNvbnRyb2xsZXJcIlxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxuaW5kZXggY2M3OGY3ZWE3ZjVmNzEuLjljY2E1OTAwZmUzNDIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcbkBAIC0zLDYgKzMsOSBAQFxuIFxuIG9iai0kKENPTkZJR19QU0VfQ09OVFJPTExFUikgKz0gcHNlX2NvcmUub1xuIFxuK29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1UpICs9IHJlYWx0ZWstcHNlLW1jdS1jb3JlLm9cbitvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVX0kyQykgKz0gcmVhbHRlay1wc2UtbWN1LWkyYy5vXG4rb2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9VQVJUKSArPSByZWFsdGVrLXBzZS1tY3UtdWFydC5vXG4gb2JqLSQoQ09ORklHX1BTRV9SRUdVTEFUT1IpICs9IHBzZV9yZWd1bGF0b3Iub1xuIG9iai0kKENPTkZJR19QU0VfUEQ2OTJYMCkgKz0gcGQ2OTJ4MC5vXG4gb2JqLSQoQ09ORklHX1BTRV9TSTM0NzQpICs9IHNpMzQ3NC5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1jb3JlLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45NjFhYzllOWVlOWM3Y1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1jb3JlLmNcbkBAIC0wLDAgKzEsMTAwNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLypcbisgKiBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgZnJvbnRpbmcgUmVhbHRlayBvciBCcm9hZGNvbSBQU0VcbisgKiBjaGlwcy4gQm90aCB2ZW5kb3JzJyBNQ1VzIHNwZWFrIGEgY2xvc2VseSByZWxhdGVkIDEyLWJ5dGUgZml4ZWQtZnJhbWVcbisgKiBtYW5hZ2VtZW50IHByb3RvY29sOyB0aGlzIGRyaXZlciBjb3ZlcnMgYm90aCB2aWEgYSBwZXItZGlhbGVjdCBvcGNvZGVcbisgKiB0YWJsZSBhbmQgcmVzcG9uc2UgcGFyc2Vycy5cbisgKlxuKyAqIE1hbnkgUG9FIHN3aXRjaCBkZXNpZ25zIHB1dCBhIGRlZGljYXRlZCBtaWNyb2NvbnRyb2xsZXIgaW4gZnJvbnQgb2YgdGhlXG4rICogYWN0dWFsIFBTRSBzaWxpY29uOiB0aGUgaG9zdCBDUFUgdGFsa3MgdG8gdGhlIE1DVSBvdmVyIEkyQy9TTUJ1cyBvclxuKyAqIFVBUlQsIGFuZCB0aGUgTUNVIGluIHR1cm4gbWFuYWdlcyB0aGUgUFNFIGNoaXBzIG9uIHRoZSBib2FyZC4gVGhlIE1DVVxuKyAqIHNwZWFrcyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2wgKDEyLWJ5dGUgZml4ZWQtc2l6ZSBmcmFtZXM7IG9wY29kZVxuKyAqICsgYXJnICsgOSBwYXlsb2FkIGJ5dGVzICsgY2hlY2tzdW0pLiBUaGUgUFNFIGNoaXBzIHRoZW1zZWx2ZXMgYXJlIG5vdFxuKyAqIGFjY2Vzc2VkIGRpcmVjdGx5OyBldmVyeXRoaW5nIGdvZXMgdGhyb3VnaCBNQ1UgY29tbWFuZHMuXG4rICpcbisgKiBUaGlzIGRyaXZlciB0YXJnZXRzIHRoYXQgYXJjaGl0ZWN0dXJlIGZvciB0aGUgUmVhbHRlay1mYW1pbHkgcHJvdG9jb2wuXG4rICogVHdvIGRpYWxlY3RzIGFyZSBzdXBwb3J0ZWQ6IFJlYWx0ZWsgTUNVcyBtYW5hZ2luZyBSVEw4MjN4L1JUTDgyMzkqIFBTRVxuKyAqIGNoaXBzLCBhbmQgQnJvYWRjb20gTUNVcyBtYW5hZ2luZyBCQ001OTB4eCBQU0UgY2hpcHMuIFRoZSB0d28gc2hhcmVcbisgKiBmcmFtZSBmb3JtYXQgYW5kIGEgc3VtLW1vZC0yNTYgY2hlY2tzdW0gYnV0IGRpdmVyZ2Ugb24gb3Bjb2RlIG51bWJlcnNcbisgKiBhbmQgb24gYSBmZXcgcmVzcG9uc2UgbGF5b3V0czsgdGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBwZXItZGlhbGVjdFxuKyAqIG9wY29kZSB0YWJsZSBhbmQgcGFyc2VyIGhvb2tzLlxuKyAqXG4rICogT3V0IG9mIHNjb3BlOiBQU0UgY2hpcHMgdGhhdCBhcmUgaW50ZXJmYWNlZCBkaXJlY3RseSBmcm9tIHRoZSBob3N0XG4rICogd2l0aG91dCBhIG1hbmFnZW1lbnQgTUNVLCBNQ1UgZGVzaWducyB0aGF0IHNwZWFrIGFuIHVucmVsYXRlZCBwcm90b2NvbFxuKyAqIGZhbWlseSwgYW5kIFwiZHVtYiBQU0VcIiBtb2RlcyB3aGVyZSBubyBob3N0IGNvbnRyb2wgaXMgd2lyZWQgdXAgYXQgYWxsLlxuKyAqIFRob3NlLCBpZiBhbmQgd2hlbiB0aGV5IHNob3cgdXAgaW4gdGhlIGtlcm5lbCwgYmVsb25nIGluIHNlcGFyYXRlXG4rICogZHJpdmVycyB1bmRlciBkcml2ZXJzL25ldC9wc2UtcGQvLlxuKyAqXG4rICogVGhpcyBjb3JlIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCwgZGVjb2RpbmcvZW5jb2Rpbmcgb2YgTUNVXG4rICogcmVzcG9uc2VzLCBhbmQgdGhlIHBzZV9jb250cm9sbGVyX29wcyBpbnRlZ3JhdGlvbi4gVHJhbnNwb3J0IG1vZHVsZXNcbisgKiAocmVhbHRlay1wc2UtaTJjLCByZWFsdGVrLXBzZS11YXJ0KSBwcm92aWRlIHRoZSBzZW5kL3JlY3YgY2FsbGJhY2tzLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ncGlvL2NvbnN1bWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInJlYWx0ZWstcHNlLW1jdS5oXCJcbitcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEJcdFx0MHgwMTM4XG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlcdFx0MHgwMDM5XG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDXHRcdDB4MDEzOVxuKyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMVx0XHQweGUxMTFcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjFcdFx0MHhlMTIxXG4rXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRURcdFx0MHgwMFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElOR1x0XHQweDAxXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklOR1x0XHQweDAyXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfVEVTVFx0XHRcdDB4MDNcdC8qIEJyb2FkY29tOyByZXNlcnZlZCBvbiBSZWFsdGVrICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRkFVTFRcdFx0MHgwNFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUXHRcdDB4MDVcdC8qIEJyb2FkY29tOyByZXNlcnZlZCBvbiBSZWFsdGVrICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElOR1x0XHQweDA2XG4rXG4rLyogUlRQU0VfTUNVX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUgdmFsdWVzICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVJcdDB4MDJcbitcbisjZGVmaW5lIFJUUFNFX01DVV9NQVhfUE9SVFNcdFx0XHQ0OFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZXHRcdDNcbitcbitlbnVtIHJ0cHNlX21jdV9jbWQge1xuK1x0UlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFLFxuK1x0UlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk8sXG4rXHRSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHLFxuK1xuK1x0UlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRSxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4rXHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFksXG4rXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVUyxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFMsXG4rXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJRyxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJRyxcbitcbitcdFJUUFNFX01DVV9OVU1fQ01EUyxcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlIHtcbitcdHU4IG9wO1xuK1x0Ym9vbCB2YWxpZDtcbit9O1xuK1xuKy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1Aob3BjKVx0eyAub3AgPSAob3BjKSwgLnZhbGlkID0gdHJ1ZSB9XG4rXG4rLyogUGFyc2VkIE1DVSByZXNwb25zZSBzdHJ1Y3R1cmVzIChkZWNvZGVkIGZyb20gcnRwc2VfbWN1X21zZyByZXBsaWVzKSAqL1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfaW5mbyB7XG4rXHR1OCBtYXhfcG9ydHM7XG4rXHRib29sIHN5c3RlbV9lbmFibGU7XG4rXHR1MTYgZGV2aWNlX2lkO1xuK1x0dTggc3dfdmVyO1xuK1x0dTggbWN1X3R5cGU7XG4rXHR1OCBjb25maWdfc3RhdHVzO1xuK1x0dTggZXh0X3Zlcjtcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyB7XG4rXHR1OCB1dmxvO1xuK1x0dTggb3ZsbztcbitcdGJvb2wgcHJlYWxsb2NfZW5hYmxlO1xuK1x0dTggbnVtX29mX3BzZXM7XG4rfTtcbitcbitzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHtcbitcdHU4IHN0czE7XG4rXHR1OCBzdHMyO1xuK1x0dTggc3RzMztcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCB7XG4rXHR1MTYgdm9sdGFnZV9yYXc7XHQvKiA2NC40NW1WL0xTQiAqL1xuK1x0dTE2IGN1cnJlbnRfcmF3O1x0LyogMW1BL0xTQiAqL1xuK1x0dTE2IHRlbXBlcmF0dXJlX3JhdztcdC8qIFQobUMpID0gMTI1MCAqICgyMjAgLSByYXcpICovXG4rXHR1MTYgcG93ZXJfcmF3O1x0XHQvKiAxMDBtVy9MU0IgKi9cbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcge1xuK1x0Ym9vbCBlbmFibGU7XG4rfTtcbitcbitzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyB7XG4rXHR1OCBtYXhfcG93ZXI7XG4rXHR1OCBwcmlvcml0eTtcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCB7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSBvcGNvZGVbUlRQU0VfTUNVX05VTV9DTURTXTtcbitcbitcdC8qXG4rXHQgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2hcbitcdCAqIGRpYWxlY3Qgc3VwcGxpZXMgaXRzIG93bi4gT3RoZXIgcmVzcG9uc2VzIHNoYXJlIG9uZSBsYXlvdXQgYW5kIGFyZVxuK1x0ICogZGVjb2RlZCBkaXJlY3RseSAtIGEgZGlhbGVjdCB0aGF0IGRpdmVyZ2VzIHRoZXJlIG11c3QgYWRkIGEgaG9vayxcbitcdCAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS5cbitcdCAqL1xuK1x0dm9pZCAoKnBhcnNlX3N5c3RlbV9pbmZvKShjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKTtcbitcdGludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7XG4rXHRjb25zdCBjaGFyICooKm1jdV90eXBlX3N0cikodW5zaWduZWQgaW50IG1jdV90eXBlKTtcbit9O1xuK1xuKy8qXG4rICogUGVyLWNvbXBhdGlibGUgbWF0Y2ggZGF0YTogc2VsZWN0ZWQgYnkgdGhlIERUL0kyQyBjb21wYXRpYmxlLCBpdCBidW5kbGVzXG4rICogdGhlIHByb3RvY29sIGRpYWxlY3Qgd2l0aCBhdHRhY2htZW50IHF1aXJrcyB0aGF0IHRoZSBleGFjdCBNQ1Ugc2lsaWNvblxuKyAqIGRvZXMgbm90IGRldGVybWluZSAob25seSBpdHMgZmlybXdhcmUgcHJvdG9jb2wgYW5kIHRoZSBob3N0IGJ1cyBkbykuXG4rICovXG4rc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHtcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDtcbitcdC8qIEkyQyBmcmFtaW5nIG11c3QgY29tZSBmcm9tIERUIChyZWFsdGVrLGkyYy1wcm90b2NvbCk7IGVsc2UgU01CdXMuICovXG4rXHRib29sIGkyY19wcm90b19kdF9yZXF1aXJlZDtcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rXHR1MTYgZGV2aWNlX2lkO1xuK1x0dTMyIG1heF9tV19wZXJfcG9ydDtcbitcdGVudW0gcnRwc2VfbWN1X2NtZCBwd19zZXRfY21kO1x0LyogY29tbWFuZCB1c2VkIGJ5IHNldF9wd19saW1pdCAqL1xuK1x0dTMyIHB3X3NldF9sc2JfbVc7XHRcdC8qIExTQiBvZiBwd19zZXRfY21kIHZhbHVlLCBpbiBtVyAqL1xuK1x0dTMyIHB3X3JlYWRfbHNiX21XO1x0XHQvKiBMU0Igb2YgZXh0X2NvbmZpZy5tYXhfcG93ZXIgcmVhZC1iYWNrLCBpbiBtVyAqL1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzhiX2luZm8gPSB7XG4rXHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QixcbitcdC5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCxcbitcdC5uYW1lID0gXCJSVEw4MjM4QlwiLFxuK1x0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxuK1x0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxuK1x0LnB3X3NldF9sc2JfbVcgPSAyMDAsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOV9pbmZvID0ge1xuK1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOSxcbitcdC5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCxcbitcdC5uYW1lID0gXCJSVEw4MjM5XCIsXG4rXHQucHdfcmVhZF9sc2JfbVcgPSA0MDAsXG4rXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuK1x0LnB3X3NldF9sc2JfbVcgPSA0MDAsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOWNfaW5mbyA9IHtcbitcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDLFxuK1x0Lm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLFxuK1x0Lm5hbWUgPSBcIlJUTDgyMzlDXCIsXG4rXHQucHdfcmVhZF9sc2JfbVcgPSA0MDAsXG4rXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuK1x0LnB3X3NldF9sc2JfbVcgPSA0MDAsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gYmNtNTkxMTFfaW5mbyA9IHtcbitcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExLFxuK1x0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxuK1x0Lm5hbWUgPSBcIkJDTTU5MTExXCIsXG4rXHQucHdfcmVhZF9sc2JfbVcgPSAyMDAsXG4rXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4rXHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBiY201OTEyMV9pbmZvID0ge1xuK1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjEsXG4rXHQvKlxuK1x0ICogQkNNNTkxMjEgaXMgYSA2MFcgVHlwZS0zIHBhcnQsIGJ1dCBrbm93biBib2FyZHMgcnVuIGl0IGF0IDgwMi4zYXRcbitcdCAqIGFuZCB0aGUgQkNNIGRpYWxlY3QgaGFzIG9ubHkgdGhlIDgtYml0LzAuMlcgc2V0IGNvbW1hbmQgKFx1MDAzYz01MVcpO1xuK1x0ICogY2FwIGF0IHRoZSAzMFcgdGhlIGhhcmR3YXJlIGFjdHVhbGx5IG9mZmVycy5cbitcdCAqL1xuK1x0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxuK1x0Lm5hbWUgPSBcIkJDTTU5MTIxXCIsXG4rXHQucHdfcmVhZF9sc2JfbVcgPSAyMDAsXG4rXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4rXHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcbit9O1xuK1xuKy8qIEhlbHBlcnMgYW5kIGJhc2ljIGZ1bmN0aW9ucyAqL1xuK1xuK3N0YXRpYyBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnRvX3J0cHNlX21jdV9jdHJsKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuK3tcbitcdHJldHVybiBjb250YWluZXJfb2YocGNkZXYsIHN0cnVjdCBydHBzZV9tY3VfY3RybCwgcGNkZXYpO1xuK31cbitcbitib29sIHJ0cHNlX21jdV9uZWVkc19pMmNfcHJvdG8oY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaClcbit7XG4rXHRyZXR1cm4gbWF0Y2gtXHUwMDNlaTJjX3Byb3RvX2R0X3JlcXVpcmVkO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfbmVlZHNfaTJjX3Byb3RvKTtcbitcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfbXNnX2luaXQoc3RydWN0IHJ0cHNlX21jdV9tc2cgKm1zZywgdTggb3Bjb2RlKVxuK3tcbitcdG1lbXNldChtc2csIDB4ZmYsIHNpemVvZigqbXNnKSk7XG4rXHRtc2ctXHUwMDNlb3Bjb2RlID0gb3Bjb2RlO1xuK31cbitcbitzdGF0aWMgdTggcnRwc2VfbWN1X2NoZWNrc3VtKGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0dTggc3VtID0gMDtcbitcbitcdHdoaWxlIChsZW4tLSlcbitcdFx0c3VtICs9ICpidWYrKztcbitcdHJldHVybiBzdW07XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2RvX3hmZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmVxLVx1MDAzZWNoZWNrc3VtID0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlcSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSk7XG4rXG4rXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnBzZS1cdTAwM2VtdXRleCkge1xuK1x0XHRyZXQgPSBwc2UtXHUwMDNldHJhbnNwb3J0LVx1MDAzZXNlbmQocHNlLCByZXEpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBNQ1UgbmVlZHMgYSBmaXhlZCBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHJlY2VpdmluZyBhIHJlcXVlc3RcbitcdFx0ICogYW5kIGhhdmluZyB0aGUgcmVzcG9uc2UgcmVhZHksIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBieXRlcyBnZXQgdG9cbitcdFx0ICogdXMuIFBhY2UgdGhlIHRyYW5zYWN0aW9uIGhlcmUgc28gZWFjaCB0cmFuc3BvcnQgY2FuIGtlZXAgaXRzIHJlY3ZcbitcdFx0ICogcGF0aCBzaW1wbGU6IGEgc2luZ2xlIGJvdW5kZWQgd2FpdCByYXRoZXIgdGhhbiBhIGdlbmVyaWMgcmV0cnkuXG4rXHRcdCAqL1xuK1x0XHRtc2xlZXAoUlRQU0VfTUNVX1JFU1BPTlNFX01TKTtcbitcbitcdFx0bWVtc2V0KHJlc3AsIDAsIHNpemVvZigqcmVzcCkpO1xuK1x0XHRyZXQgPSBwc2UtXHUwMDNldHJhbnNwb3J0LVx1MDAzZXJlY3YocHNlLCByZXEsIHJlc3ApO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRXhwbGljaXQgTUNVIGVycm9yIG9wY29kZXMgKG9ic2VydmVkIG9uIHRoZSBCQ00gZGlhbGVjdDsgaGFybWxlc3NcbitcdCAqIHRvIGNoZWNrIGZvciBSVEwgdG9vKS4gQ2F0Y2ggdGhlc2UgYmVmb3JlIHRoZSBnZW5lcmljIG9wY29kZS9DUkNcbitcdCAqIG1pc21hdGNoIHBhdGggc28gY2FsbGVycyBzZWUgYSBtZWFuaW5nZnVsIGVycm5vLlxuK1x0ICovXG4rXHRzd2l0Y2ggKHJlc3AtXHUwMDNlb3Bjb2RlKSB7XG4rXHRjYXNlIFJUUFNFX01DVV9PUENPREVfSU5DT01QTEVURTpcbitcdFx0cmV0dXJuIC1FQkFERTtcbitcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9CQURfQ1NVTTpcbitcdFx0cmV0dXJuIC1FQkFETVNHO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX05PVF9SRUFEWTpcbitcdFx0cmV0dXJuIC1FQUdBSU47XG4rXHR9XG4rXG4rXHRpZiAocmVzcC1cdTAwM2VvcGNvZGUgIT0gcmVxLVx1MDAzZW9wY29kZSB8fFxuK1x0ICAgIHJlc3AtXHUwMDNlc2VxX251bSAhPSByZXEtXHUwMDNlc2VxX251bSB8fFxuK1x0ICAgIHJlc3AtXHUwMDNlY2hlY2tzdW0gIT0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlc3AsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEpKVxuK1x0XHRyZXR1cm4gLUVCQURNU0c7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9xdWVyeShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSxcbitcdFx0XHRcdHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcTtcbitcdGludCByZXQ7XG4rXG4rXHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGNvZGUpO1xuK1x0cmVxLnBheWxvYWRbMF0gPSBwb3J0O1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcdTAwMjZyZXEsIHJlc3ApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChyZXNwLVx1MDAzZXBheWxvYWRbMF0gIT0gcG9ydClcbitcdFx0cmV0dXJuIC1FSU87XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9jbWQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCB1OCBvcGNvZGUsIHU4IGFyZylcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3Bjb2RlKTtcbitcdHJlcS5wYXlsb2FkWzBdID0gcG9ydDtcbitcdHJlcS5wYXlsb2FkWzFdID0gYXJnO1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcdTAwMjZyZXEsIFx1MDAyNnJlc3ApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChyZXNwLnBheWxvYWRbMF0gIT0gcG9ydCB8fCByZXNwLnBheWxvYWRbMV0gIT0gMClcbitcdFx0cmV0dXJuIC1FSU87XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogR2xvYmFsIG9wZXJhdGlvbnMgKi9cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfaW5mbyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXTtcbitcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGMtXHUwMDNlb3ApO1xuK1x0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcdTAwMjZyZXEsIFx1MDAyNnJlc3ApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3N5c3RlbV9pbmZvKHJlc3AucGF5bG9hZCwgaW5mbyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyAqY29uZmlnKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wYy1cdTAwM2VvcCk7XG4rXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Y29uZmlnLVx1MDAzZXV2bG8gPSByZXNwLnBheWxvYWRbMF07XG4rXHRjb25maWctXHUwMDNlb3ZsbyA9IHJlc3AucGF5bG9hZFs1XTtcbitcdGNvbmZpZy1cdTAwM2VwcmVhbGxvY19lbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDB4MSk7XG4rXHRjb25maWctXHUwMDNlbnVtX29mX3BzZXMgPSByZXNwLnBheWxvYWRbNl07XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgYm9vbCBlbmFibGUpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFXTtcbitcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGMtXHUwMDNlb3ApO1xuK1x0cmVxLnBheWxvYWRbMF0gPSBlbmFibGUgPyAweDEgOiAweDA7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIChyZXNwLnBheWxvYWRbMF0gPT0gMHgwKSA/IDAgOiAtRUlPO1xuK31cbitcbisvKiBQb3J0IG9wZXJhdGlvbnMgKi9cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XG4rXHRpbnQgcmV0O1xuK1xuK1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXTtcbitcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0c3RhdHVzLVx1MDAzZXN0czEgPSByZXNwLnBheWxvYWRbMV07XG4rXHRzdGF0dXMtXHUwMDNlc3RzMiA9IHJlc3AucGF5bG9hZFsyXTtcbitcdHN0YXR1cy1cdTAwM2VzdHMzID0gcmVzcC5wYXlsb2FkWzNdO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X21lYXN1cmVtZW50KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQgKm1lYXN1cmVtZW50KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuK1x0aW50IHJldDtcbitcbitcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXTtcbitcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0bWVhc3VyZW1lbnQtXHUwMDNldm9sdGFnZV9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cmVzcC5wYXlsb2FkWzFdKTtcbitcdG1lYXN1cmVtZW50LVx1MDAzZWN1cnJlbnRfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFszXSk7XG4rXHRtZWFzdXJlbWVudC1cdTAwM2V0ZW1wZXJhdHVyZV9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cmVzcC5wYXlsb2FkWzVdKTtcbitcdG1lYXN1cmVtZW50LVx1MDAzZXBvd2VyX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZyZXNwLnBheWxvYWRbN10pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgKmNvbmZpZylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRjb25maWctXHUwMDNlZW5hYmxlID0gKHJlc3AucGF5bG9hZFsxXSA9PSAxKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcbitcdFx0XHRcdFx0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnICpjb25maWcpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XG4rXHRpbnQgcmV0O1xuK1xuK1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR107XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXHUwMDNlb3AsIFx1MDAyNnJlc3ApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGNvbmZpZy1cdTAwM2VtYXhfcG93ZXIgPSByZXNwLnBheWxvYWRbM107XG4rXHRjb25maWctXHUwMDNlcHJpb3JpdHkgPSByZXNwLnBheWxvYWRbNF07XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCBib29sIGVuYWJsZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1xuK1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBwb3J0LCBvcGMtXHUwMDNlb3AsIGVuYWJsZSA/IDB4MSA6IDB4MCk7XG4rfVxuK1xuKy8qIFBTRSBjb250cm9sbGVyIG9wcyAqL1xuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4rXHRcdFx0XHRcdCAgc3RydWN0IHBzZV9hZG1pbl9zdGF0ZSAqYWRtaW5fc3RhdGUpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfY29uZmlnIGNvbmZpZztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfY29uZmlnKHBzZSwgaWQsIFx1MDAyNmNvbmZpZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0YWRtaW5fc3RhdGUtXHUwMDNlYzMzX2FkbWluX3N0YXRlID0gY29uZmlnLmVuYWJsZSA/IEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEIDpcbitcdFx0XHRcdFx0XHQgICAgICAgRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0RJU0FCTEVEO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgcHNlX3B3X3N0YXR1cyAqcHdfc3RhdHVzKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyBzdGF0dXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhwc2UsIGlkLCBcdTAwMjZzdGF0dXMpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHN3aXRjaCAoc3RhdHVzLnN0czEpIHtcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEOlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19ESVNBQkxFRDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkc6XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19TRUFSQ0hJTkc7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzpcbitcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfREVMSVZFUklORztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19URVNUOlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19URVNUO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUOlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19GQVVMVDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVDpcbitcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfT1RIRVJGQVVMVDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19VTktOT1dOO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyBzdGF0dXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhwc2UsIGlkLCBcdTAwMjZzdGF0dXMpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qXG4rXHQgKiBzdHMyIGhvbGRzIHRoZSBjbGFzcyBvbmx5IGluIHRoZSBvcGVyYXRpb25hbCBzdGF0ZXMgYmVsb3cuIEluIGFcbitcdCAqIGZhdWx0L3Rlc3Qgc3RhdGUgKG9yIGEgY29kZSByZXNlcnZlZCBvbiB0aGUgY3VycmVudCBkaWFsZWN0KSBpdFxuK1x0ICogZG9lcyBub3QsIHNvIHRoZXJlIGlzIG5vIGNsYXNzIHRvIHJlcG9ydCBhbmQgd2UgcmV0dXJuIDAuIFRoYXQgaXNcbitcdCAqIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSByZWFsIGNsYXNzLTAgUEQ7IHVzZXJzcGFjZSBkaXNhbWJpZ3VhdGVzXG4rXHQgKiB2aWEgdGhlIHBvd2VyIHN0YXR1cy5cbitcdCAqL1xuK1x0c3dpdGNoIChzdGF0dXMuc3RzMSkge1xuK1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkc6XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOlxuK1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElORzpcbitcdFx0cmV0dXJuIHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3BvcnRfY2xhc3MoXHUwMDI2c3RhdHVzKTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgXHUwMDI2bWVhc3VyZW1lbnQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIDEwMG1XIHBlciBMU0IgKi9cbitcdHJldHVybiBtZWFzdXJlbWVudC5wb3dlcl9yYXcgKiAxMDBVO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQgbWVhc3VyZW1lbnQ7XG4rXHRpbnQgcmV0O1xuK1x0dTMyIHVWO1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X21lYXN1cmVtZW50KHBzZSwgaWQsIFx1MDAyNm1lYXN1cmVtZW50KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiA2NC40NW1WIHBlciBMU0IgKi9cbitcdHVWID0gbWVhc3VyZW1lbnQudm9sdGFnZV9yYXcgKiA2NDQ1MFU7XG4rXHRyZXR1cm4gbWluX3QodTMyLCB1ViwgSU5UX01BWCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZW5hYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4re1xuK1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZSh0b19ydHBzZV9tY3VfY3RybChwY2RldiksIGlkLCB0cnVlKTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9kaXNhYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4re1xuK1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZSh0b19ydHBzZV9tY3VfY3RybChwY2RldiksIGlkLCBmYWxzZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gY29uZmlnLm1heF9wb3dlciAqIHBzZS1cdTAwM2VjaGlwLVx1MDAzZXB3X3JlYWRfbHNiX21XO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLCBpbnQgbWF4X21XKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICp0eXBlX29wYywgKnZhbF9vcGM7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwID0gcHNlLVx1MDAzZWNoaXA7XG4rXHR1OCBwcmdfdmFsO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChtYXhfbVcgXHUwMDNjIDAgfHwgbWF4X21XIFx1MDAzZSBjaGlwLVx1MDAzZW1heF9tV19wZXJfcG9ydClcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHR0eXBlX29wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdO1xuK1x0dmFsX29wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtjaGlwLVx1MDAzZXB3X3NldF9jbWRdO1xuK1x0LyogcHdfc2V0X2xzYl9tVyBpcyB0aGUgZGl2aXNvciBiZWxvdzsgcmVqZWN0IGEgY2hpcCB0aGF0IGxhY2tzIGl0LiAqL1xuK1x0aWYgKCF0eXBlX29wYy1cdTAwM2V2YWxpZCB8fCAhdmFsX29wYy1cdTAwM2V2YWxpZCB8fCAhY2hpcC1cdTAwM2Vwd19zZXRfbHNiX21XKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHQvKlxuK1x0ICogU3dpdGNoIHRoZSBwb3J0IHRvIHVzZXItZGVmaW5lZCBsaW1pdCBtb2RlIGZpcnN0LCB0aGVuIHByb2dyYW0gdGhlXG4rXHQgKiBsaW1pdCB2YWx1ZS4gSWYgdGhlIHNlY29uZCBjbWQgZmFpbHMsIHRoZSBwb3J0IGlzIGxlZnQgaW5cbitcdCAqIHVzZXItZGVmaW5lZCBtb2RlIGJ1dCB3aXRoIHRoZSBwcmV2aW91cyBsaW1pdCB2YWx1ZTsgdGhlIG5leHRcbitcdCAqIHN1Y2Nlc3NmdWwgc2V0X3B3X2xpbWl0IGNhbGwgcmVjb3ZlcnMgaXQuXG4rXHQgKi9cbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCB0eXBlX29wYy1cdTAwM2VvcCwgUlRQU0VfTUNVX1BPUlRfUFdfTElNSVRfVFlQRV9VU0VSKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRwcmdfdmFsID0gbWluX3QodW5zaWduZWQgaW50LCBtYXhfbVcgLyBjaGlwLVx1MDAzZXB3X3NldF9sc2JfbVcsIFU4X01BWCk7XG4rXG4rXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIHZhbF9vcGMtXHUwMDNlb3AsIHByZ192YWwpO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcbitcdFx0XHRcdFx0ICAgICAgc3RydWN0IHBzZV9wd19saW1pdF9yYW5nZXMgKm91dClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBldGh0b29sX2MzM19wc2VfcHdfbGltaXRfcmFuZ2UgKnJhbmdlO1xuK1xuK1x0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UpO1xuK1x0aWYgKCFyYW5nZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyYW5nZVswXS5taW4gPSAwO1xuK1x0cmFuZ2VbMF0ubWF4ID0gcHNlLVx1MDAzZWNoaXAtXHUwMDNlbWF4X21XX3Blcl9wb3J0O1xuK1xuK1x0b3V0LVx1MDAzZWMzM19wd19saW1pdF9yYW5nZXMgPSByYW5nZTtcbitcdHJldHVybiAxO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gY29uZmlnLnByaW9yaXR5O1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcmlvKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcbitcdGlmIChwcmlvIFx1MDAzZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFkpXG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1xuK1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgb3BjLVx1MDAzZW9wLCBwcmlvKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9vcHMgcnRwc2VfbWN1X29wcyA9IHtcbitcdC5waV9nZXRfYWRtaW5fc3RhdGUgPSBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUsXG4rXHQucGlfZ2V0X3B3X3N0YXR1cyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMsXG4rXHQucGlfZ2V0X3B3X2NsYXNzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzLFxuK1x0LnBpX2dldF9hY3R1YWxfcHcgPSBydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3LFxuK1x0LnBpX2VuYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2VuYWJsZSxcbitcdC5waV9kaXNhYmxlID0gcnRwc2VfbWN1X3BvcnRfZGlzYWJsZSxcbitcdC5waV9nZXRfdm9sdGFnZSA9IHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlLFxuK1x0LnBpX2dldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdCxcbitcdC5waV9zZXRfcHdfbGltaXQgPSBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXQsXG4rXHQucGlfZ2V0X3B3X2xpbWl0X3JhbmdlcyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMsXG4rXHQucGlfZ2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9nZXRfcHJpbyxcbitcdC5waV9zZXRfcHJpbyA9IHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvLFxuK307XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfZGlzY292ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgZXh0X2NvbmZpZztcbitcdHVuc2lnbmVkIGxvbmcgZGVhZGxpbmU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LypcbitcdCAqIEEgYm9vdGluZyBNQ1UgbWF5IHN0YXkgc2lsZW50ICgtRVRJTUVET1VUKSwgbm90IEFDSyBpdHMgYWRkcmVzc1xuK1x0ICogKC1FTlhJTyAvIC1FUkVNT1RFSU8pLCByZXBvcnQgbm90LXJlYWR5ICgtRUFHQUlOKSwgb3IgZW1pdCBhXG4rXHQgKiBjb3JydXB0L3BhcnRpYWwgZnJhbWUgKC1FQkFETVNHIC8gLUVCQURFKS4gUmV0cnkgdGhvc2Ugd2l0aGluIGFcbitcdCAqIGJvdW5kZWQgd2luZG93OyBvdGhlciBlcnJvcnMgKGUuZy4gLUVPUE5PVFNVUFApIGFyZSBmYXRhbCBhbmQgZmFpbFxuK1x0ICogaW1tZWRpYXRlbHkuXG4rXHQgKi9cbitcdGRlYWRsaW5lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUlRQU0VfTUNVX0JPT1RfVElNRU9VVF9NUyk7XG4rXHRkbyB7XG4rXHRcdHJldCA9IHJ0cHNlX21jdV9nZXRfaW5mbyhwc2UsIGluZm8pO1xuK1x0XHRpZiAocmV0ICE9IC1FVElNRURPVVQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU5YSU8gXHUwMDI2XHUwMDI2IHJldCAhPSAtRVJFTU9URUlPIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcmV0ICE9IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHJldCAhPSAtRUJBRE1TRyBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQkFERSlcbitcdFx0XHRicmVhaztcbitcdFx0bXNsZWVwKFJUUFNFX01DVV9CT09UX1JFVFJZX01TKTtcbitcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsIFwiZmFpbGVkIHRvIHJlYWQgTUNVIGluZm9cXG5cIik7XG4rXG4rXHRzd2l0Y2ggKGluZm8tXHUwMDNlZGV2aWNlX2lkKSB7XG4rXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEI6XG4rXHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2cnRsODIzOGJfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOTpcbitcdFx0cHNlLVx1MDAzZWNoaXAgPSBcdTAwMjZydGw4MjM5X2luZm87XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDOlxuK1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNnJ0bDgyMzljX2luZm87XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExOlxuK1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNmJjbTU5MTExX2luZm87XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxOlxuK1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNmJjbTU5MTIxX2luZm87XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVJTlZBTCwgXCJ1bmtub3duIFBTRSBpZCAweCV4XFxuXCIsXG4rXHRcdFx0XHQgICAgIGluZm8tXHUwMDNlZGV2aWNlX2lkKTtcbitcdH1cbitcbitcdGlmICghaW5mby1cdTAwM2VtYXhfcG9ydHMgfHwgaW5mby1cdTAwM2VtYXhfcG9ydHMgXHUwMDNlIFJUUFNFX01DVV9NQVhfUE9SVFMpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgIFwiTUNVIHJlcG9ydHMgaW52YWxpZCBwb3J0IGNvdW50ICV1XFxuXCIsIGluZm8tXHUwMDNlbWF4X3BvcnRzKTtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9nZXRfZXh0X2NvbmZpZyhwc2UsIFx1MDAyNmV4dF9jb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgcmV0LCBcImZhaWxlZCB0byByZWFkIE1DVSBleHQgY29uZmlnXFxuXCIpO1xuK1xuK1x0ZGV2X2luZm8ocHNlLVx1MDAzZWRldiwgXCIlcyBNQ1UsICVzIChpZCAweCUwNHgpLCAldSBwb3J0cyBhY3Jvc3MgJXUgUFNFIGNoaXAocylcXG5cIixcbitcdFx0IHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW1jdV90eXBlX3N0cihpbmZvLVx1MDAzZW1jdV90eXBlKSwgcHNlLVx1MDAzZWNoaXAtXHUwMDNlbmFtZSxcbitcdFx0IGluZm8tXHUwMDNlZGV2aWNlX2lkLCBpbmZvLVx1MDAzZW1heF9wb3J0cywgZXh0X2NvbmZpZy5udW1fb2ZfcHNlcyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X3JlZ3VsYXRvcl9kaXNhYmxlKHZvaWQgKmRhdGEpXG4re1xuK1x0cmVndWxhdG9yX2Rpc2FibGUoZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nbG9iYWxfZGlzYWJsZSh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gZGF0YTtcbitcbitcdHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHBzZSwgZmFsc2UpO1xuK31cbitcbitpbnQgcnRwc2VfbWN1X3JlZ2lzdGVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2g7XG4rXHRzdHJ1Y3QgZ3Bpb19kZXNjICplbmFibGVfZ3BpbztcbitcdHN0cnVjdCBydHBzZV9tY3VfaW5mbyBpbmZvO1xuK1x0aW50IHJldDtcbitcbitcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHJ0cHNlX21jdV9tc2cpICE9IFJUUFNFX01DVV9NU0dfU0laRSk7XG4rXG4rXHRyZXQgPSBkZXZtX211dGV4X2luaXQocHNlLVx1MDAzZWRldiwgXHUwMDI2cHNlLVx1MDAzZW11dGV4KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRtYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShwc2UtXHUwMDNlZGV2KTtcbitcdGlmICghbWF0Y2gpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIC1FTk9ERVYsIFwibWlzc2luZyBtYXRjaCBkYXRhXFxuXCIpO1xuK1x0cHNlLVx1MDAzZWRpYWxlY3QgPSBtYXRjaC1cdTAwM2VkaWFsZWN0O1xuK1xuK1x0LypcbitcdCAqIENhdGNoIGEgZGlhbGVjdCB0aGF0IGZvcmdvdCB0byBzZXQgb25lIG9mIHRoZSByZXF1aXJlZCBob29rcyBhdFxuK1x0ICogcHJvYmUgdGltZSwgcmF0aGVyIHRoYW4gTlVMTC1kZXJlZidpbmcgbGF0ZXIgZnJvbSBhIGZhc3QgcGF0aC5cbitcdCAqL1xuK1x0aWYgKCFwc2UtXHUwMDNlZGlhbGVjdCB8fFxuK1x0ICAgICFwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VwYXJzZV9zeXN0ZW1faW5mbyB8fFxuK1x0ICAgICFwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VwYXJzZV9wb3J0X2NsYXNzIHx8XG4rXHQgICAgIXBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW1jdV90eXBlX3N0cilcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICAgXCJkaWFsZWN0IGZvciBjaGlwIGlzIGluY29tcGxldGVcXG5cIik7XG4rXG4rXHRwc2UtXHUwMDNlcG9lX3N1cHBseSA9IGRldm1fcmVndWxhdG9yX2dldChwc2UtXHUwMDNlZGV2LCBcInBvd2VyXCIpO1xuK1x0aWYgKElTX0VSUihwc2UtXHUwMDNlcG9lX3N1cHBseSkpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIFBUUl9FUlIocHNlLVx1MDAzZXBvZV9zdXBwbHkpLFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBnZXQgUG9FIHN1cHBseVxcblwiKTtcbitcbitcdGVuYWJsZV9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwocHNlLVx1MDAzZWRldiwgXCJlbmFibGVcIiwgR1BJT0RfT1VUX0hJR0gpO1xuK1x0aWYgKElTX0VSUihlbmFibGVfZ3BpbykpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIFBUUl9FUlIoZW5hYmxlX2dwaW8pLFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBnZXQgZW5hYmxlIGdwaW9cXG5cIik7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfZGlzY292ZXIocHNlLCBcdTAwMjZpbmZvKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHBzZS1cdTAwM2Vwb2Vfc3VwcGx5KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIHJldCwgXCJmYWlsZWQgdG8gZW5hYmxlIFBvRSBzdXBwbHlcXG5cIik7XG4rXG4rXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQocHNlLVx1MDAzZWRldiwgcnRwc2VfbWN1X3JlZ3VsYXRvcl9kaXNhYmxlLCBwc2UtXHUwMDNlcG9lX3N1cHBseSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKCFpbmZvLnN5c3RlbV9lbmFibGUpIHtcbitcdFx0cmV0ID0gcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCB0cnVlKTtcbitcdFx0LyogRGlhbGVjdHMgd2l0aG91dCBhIGdsb2JhbC1zdGF0ZSBjb25jZXB0IChlLmcuIEJDTSkgcmV0dXJuXG4rXHRcdCAqIC1FT1BOT1RTVVBQOyB0cmVhdCB0aGF0IGFzIFwibm8gc2VwYXJhdGUgZW5hYmxlIHJlcXVpcmVkXCIuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVPUE5PVFNVUFApXG4rXHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGVuYWJsZSBQU0Ugc3lzdGVtXFxuXCIpO1xuK1x0XHRpZiAoIXJldCkge1xuK1x0XHRcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChwc2UtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHRcdCAgICAgICBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUsIHBzZSk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qXG4rXHQgKiBEZXBlbmRpbmcgb24gdGhlIE1DVSBmaXJtd2FyZSBjb25maWd1cmF0aW9uICh3aGljaCBtaWdodCBiZSBkaWZmZXJlbnRcbitcdCAqIGZvciBldmVyeSBib2FyZCksIGl0IGlzbid0IGtub3duIHdoZXRoZXIgdGhlIFBvRSBzdWJzeXN0ZW0gaXMgYWN0aXZlIG9yXG4rXHQgKiBpbmFjdGl2ZSBieSBkZWZhdWx0LiBBdCB0aGlzIHN0YWdlLCB0aGUgUFNFIGNoaXBzIG1pZ2h0IGFscmVhZHkgZGVsaXZlclxuK1x0ICogcG93ZXIgdG8gUERzIHdpdGhvdXQgYW55IGV4cGxpY2l0IGVuYWJsZS5cbitcdCAqL1xuK1xuK1x0LyogcGNkZXYub3duZXIgaXMgc2V0IGJ5IHRoZSB0cmFuc3BvcnQsIHNvIHRoZSByZWdpc3RlcmVkIGNvbnRyb2xsZXJcbitcdCAqIHBpbnMgdGhlIHRyYW5zcG9ydCBtb2R1bGUgdGhhdCBvd25zIHRoZSBsaXZlIGRldmljZSwgbm90IHRoZSBjb3JlLlxuK1x0ICovXG4rXHRwc2UtXHUwMDNlcGNkZXYub3BzICAgICAgPSBcdTAwMjZydHBzZV9tY3Vfb3BzO1xuK1x0cHNlLVx1MDAzZXBjZGV2LmRldiAgICAgID0gcHNlLVx1MDAzZWRldjtcbitcdHBzZS1cdTAwM2VwY2Rldi50eXBlcyAgICA9IEVUSFRPT0xfUFNFX0MzMztcbitcdHBzZS1cdTAwM2VwY2Rldi5ucl9saW5lcyA9IGluZm8ubWF4X3BvcnRzO1xuK1x0cHNlLVx1MDAzZXBjZGV2LnBpc19wcmlvX21heCA9IFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWTtcbitcdHBzZS1cdTAwM2VwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQztcbitcbitcdHJldHVybiBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHBzZS1cdTAwM2VkZXYsIFx1MDAyNnBzZS1cdTAwM2VwY2Rldik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9yZWdpc3Rlcik7XG4rXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X3J0bF9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuK3tcbitcdGluZm8tXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcbitcdGluZm8tXHUwMDNlc3lzdGVtX2VuYWJsZSA9IChwYXlsb2FkWzJdID09IDB4MSk7XG4rXHRpbmZvLVx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZwYXlsb2FkWzNdKTtcbitcdGluZm8tXHUwMDNlc3dfdmVyID0gcGF5bG9hZFs1XTtcbitcdGluZm8tXHUwMDNlbWN1X3R5cGUgPSBwYXlsb2FkWzZdO1xuK1x0aW5mby1cdTAwM2Vjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTtcbitcdGluZm8tXHUwMDNlZXh0X3ZlciA9IHBheWxvYWRbOF07XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3J0bF9wYXJzZV9wb3J0X2NsYXNzKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbit7XG4rXHQvKiBDbGFzcyBsaXZlcyBpbiB0aGUgdXBwZXIgbmliYmxlIG9mIHN0czIuICovXG4rXHRyZXR1cm4gRklFTERfR0VUKEdFTk1BU0soNywgNCksIHN0YXR1cy1cdTAwM2VzdHMyKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9ydGxfbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSlcbit7XG4rXHRzd2l0Y2ggKG1jdV90eXBlKSB7XG4rXHRjYXNlIDB4MDA6XHRyZXR1cm4gXCJHaWdhRGV2aWNlIEdEMzJGMzEwXCI7XG4rXHRjYXNlIDB4MDE6XHRyZXR1cm4gXCJHaWdhRGV2aWNlIEdEMzJGMjMwXCI7XG4rXHRjYXNlIDB4MDI6XHRyZXR1cm4gXCJHaWdhRGV2aWNlIEdEMzJGMzAzXCI7XG4rXHRjYXNlIDB4MDM6XHRyZXR1cm4gXCJHaWdhRGV2aWNlIEdEMzJGMTAzXCI7XG4rXHRjYXNlIDB4MDQ6XHRyZXR1cm4gXCJHaWdhRGV2aWNlIEdEMzJFMTAzXCI7XG4rXHRjYXNlIDB4MTA6XHRyZXR1cm4gXCJOdXZvdG9uIE0wNTE2XCI7XG4rXHRjYXNlIDB4MTE6XHRyZXR1cm4gXCJOdXZvdG9uIE0wNTY0XCI7XG4rXHRjYXNlIDB4MTI6XHRyZXR1cm4gXCJOdXZvdG9uIE5VQzAyOVwiO1xuK1x0ZGVmYXVsdDpcdHJldHVybiBcInVua25vd25cIjtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X2JyY21fcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcbit7XG4rXHRpbmZvLVx1MDAzZW1heF9wb3J0cyA9IHBheWxvYWRbMV07XG4rXHQvKiBCQ00gaGFzIG5vIGV4cGxpY2l0IHN5c3RlbV9lbmFibGUgYnl0ZTsgdGhlIGNsb3Nlc3QgYW5hbG9nIGlzIHRoZVxuK1x0ICogXCJyZW1vdGUgZW5hYmxlXCIgYml0IGluIHRoZSBzeXN0ZW0tc3RhdHVzIGZsYWdzIGF0IHBheWxvYWRbN10uXG4rXHQgKi9cbitcdGluZm8tXHUwMDNlc3lzdGVtX2VuYWJsZSA9ICEhKHBheWxvYWRbN10gXHUwMDI2IEJJVCgyKSk7XG4rXHRpbmZvLVx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZwYXlsb2FkWzNdKTtcbitcdGluZm8tXHUwMDNlc3dfdmVyID0gcGF5bG9hZFs1XTtcbitcdGluZm8tXHUwMDNlbWN1X3R5cGUgPSBwYXlsb2FkWzZdO1xuK1x0aW5mby1cdTAwM2Vjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTtcbitcdGluZm8tXHUwMDNlZXh0X3ZlciA9IHBheWxvYWRbOF07XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2JyY21fcGFyc2VfcG9ydF9jbGFzcyhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpXG4re1xuK1x0LyogQkNNIHB1dHMgdGhlIGRldGVjdGVkIGNsYXNzIGluIHBheWxvYWRbM10gKD09IHN0czMpIGRpcmVjdGx5LlxuK1x0ICogTWFzayB0byB0aGUgbG93IG5pYmJsZTsgY2xhc3MgaXMgMC4uOCBhbmQgYW55IGhpZ2ggYml0cyB3b3VsZCBiZVxuK1x0ICogbm9pc2UuXG4rXHQgKi9cbitcdHJldHVybiBzdGF0dXMtXHUwMDNlc3RzMyBcdTAwMjYgMHgwZjtcbit9XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9icmNtX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpXG4re1xuK1x0c3dpdGNoIChtY3VfdHlwZSkge1xuK1x0Y2FzZSAweDAwOlx0cmV0dXJuIFwiU1QgTWljcm8gU1QzMkYxMDBcIjtcbitcdGNhc2UgMHgwMTpcdHJldHVybiBcIk51dm90b24gTTA1eHggTEFOXCI7XG4rXHRjYXNlIDB4MDI6XHRyZXR1cm4gXCJTVCBNaWNybyBTVEYwMzBDOFwiO1xuK1x0Y2FzZSAweDAzOlx0cmV0dXJuIFwiTnV2b3RvbiBNMDU4U0FOXCI7XG4rXHRjYXNlIDB4MDQ6XHRyZXR1cm4gXCJOdXZvdG9uIE5VQzEyMlwiO1xuK1x0ZGVmYXVsdDpcdHJldHVybiBcInVua25vd25cIjtcbitcdH1cbit9XG4rXG4rLyogTWFwIGVhY2ggbG9naWNhbCBjb21tYW5kIHRoZSBjb3JlIGlzc3VlcyB0byBpdHMgcGVyLWRpYWxlY3Qgb3Bjb2RlLiAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgcnRwc2VfbWN1X2RpYWxlY3RfcnRrID0ge1xuK1x0LnBhcnNlX3N5c3RlbV9pbmZvID0gcnRwc2VfbWN1X3J0bF9wYXJzZV9zeXN0ZW1faW5mbyxcbitcdC5wYXJzZV9wb3J0X2NsYXNzICA9IHJ0cHNlX21jdV9ydGxfcGFyc2VfcG9ydF9jbGFzcyxcbitcdC5tY3VfdHlwZV9zdHIgICAgICA9IHJ0cHNlX21jdV9ydGxfbWN1X3R5cGVfc3RyLFxuK1x0Lm9wY29kZSA9IHtcbitcdFx0W1JUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURV1cdD0gUlRQU0VfTUNVX09QKDB4MDApLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dXHRcdD0gUlRQU0VfTUNVX09QKDB4NDApLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0YSksXG4rXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXVx0XHQ9IFJUUFNFX01DVV9PUCgweDAxKSxcbitcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxMiksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVx0PSBSVFBTRV9NQ1VfT1AoMHgxMyksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVF0gPSBSVFBTRV9NQ1VfT1AoMHgxNCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXVx0PSBSVFBTRV9NQ1VfT1AoMHgxNSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0MiksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXVx0PSBSVFBTRV9NQ1VfT1AoMHg0NCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0OCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddXHQ9IFJUUFNFX01DVV9PUCgweDQ5KSxcbitcdH0sXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHJ0cHNlX21jdV9kaWFsZWN0X2JyY20gPSB7XG4rXHQucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfYnJjbV9wYXJzZV9zeXN0ZW1faW5mbyxcbitcdC5wYXJzZV9wb3J0X2NsYXNzICA9IHJ0cHNlX21jdV9icmNtX3BhcnNlX3BvcnRfY2xhc3MsXG4rXHQubWN1X3R5cGVfc3RyICAgICAgPSBydHBzZV9tY3VfYnJjbV9tY3VfdHlwZV9zdHIsXG4rXHQub3Bjb2RlID0ge1xuK1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dXHRcdD0gUlRQU0VfTUNVX09QKDB4MjApLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHgyYiksXG4rXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXVx0XHQ9IFJUUFNFX01DVV9PUCgweDAwKSxcbitcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxNSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVx0PSBSVFBTRV9NQ1VfT1AoMHgxNiksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXVx0PSBSVFBTRV9NQ1VfT1AoMHgxYSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU11cdFx0PSBSVFBTRV9NQ1VfT1AoMHgyMSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXVx0PSBSVFBTRV9NQ1VfT1AoMHgzMCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHgyNSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddXHQ9IFJUUFNFX01DVV9PUCgweDI2KSxcbitcdH0sXG4rfTtcbitcbitjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X3J0a19kYXRhID0ge1xuK1x0LmRpYWxlY3QgPSBcdTAwMjZydHBzZV9tY3VfZGlhbGVjdF9ydGssXG4rXHQuaTJjX3Byb3RvX2R0X3JlcXVpcmVkID0gdHJ1ZSxcbit9O1xuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9ydGtfZGF0YSk7XG4rXG4rY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9icmNtX2RhdGEgPSB7XG4rXHQuZGlhbGVjdCA9IFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X2JyY20sXG4rfTtcbitFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfYnJjbV9kYXRhKTtcbitcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1UgZHJpdmVyIChjb3JlKVwiKTtcbitNT0RVTEVfQVVUSE9SKFwiSm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42ZTZlMzY0NWM1MDkwM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xuQEAgLTAsMCArMSwxNjMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwicmVhbHRlay1wc2UtbWN1LmhcIlxuK1xuKy8qXG4rICogVGhlIGNvcmUgaGFzIGFscmVhZHkgd2FpdGVkIFJUUFNFX01DVV9SRVNQT05TRV9NUyBiZWZvcmUgY2FsbGluZyB1cywgc29cbisgKiB0aGUgcmVzcG9uc2UgaXMgbm9ybWFsbHkgcmVhZHkgb24gdGhlIHZlcnkgZmlyc3QgcmVhZC4gRm9yIGNvbW1hbmRzIHRoZVxuKyAqIE1DVSBwcm9kdWNlcyBtb3JlIHNsb3dseSwga2VlcCBwb2xsaW5nIGF0IHRoZSB0eXBpY2FsIHJlc3BvbnNlIGNhZGVuY2VcbisgKiB1cCB0byB0aGUgd29yc3QtY2FzZSBjZWlsaW5nLlxuKyAqL1xuKyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19SRVRSWV9NU1x0UlRQU0VfTUNVX1JFU1BPTlNFX01TXG4rI2RlZmluZSBSVFBTRV9NQ1VfSTJDX01BWF9UUklFU1x0KFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMgLyBSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuK3tcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuK1xuK1x0LyogU2VuZCBvcGNvZGUgYXMgU01CdXMgY29tbWFuZCBieXRlOyByZW1haW5pbmcgMTEgYnl0ZXMgYXMgYmxvY2sgZGF0YSAqL1xuK1x0cmV0dXJuIGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShjbGllbnQsIHJlcS1cdTAwM2VvcGNvZGUsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEsXG4rXHRcdFx0XHRcdCAgICAgICh1OCAqKXJlcSArIDEpO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbit7XG4rXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtXHUwMDNlZGV2KTtcbitcdGludCB0cmllcywgcmV0O1xuK1xuK1x0Zm9yICh0cmllcyA9IDA7IHRyaWVzIFx1MDAzYyBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUzsgdHJpZXMrKykge1xuK1x0XHRpZiAodHJpZXMgXHUwMDNlIDApXG4rXHRcdFx0bXNsZWVwKFJUUFNFX01DVV9JMkNfUkVUUllfTVMpO1xuK1xuK1x0XHQvKiBNQ1UgbmVlZHMgMHgwMCBhcyBjb21tYW5kIGJ5dGUgZm9yIHJlYWQgKi9cbitcdFx0cmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCAweDAwLFxuK1x0XHRcdFx0XHRcdCAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsXG4rXHRcdFx0XHRcdFx0ICAgICh1OCAqKXJlc3ApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFIFx1MDAyNlx1MDAyNiBydHBzZV9tY3VfcmVzcF9pc19maW5hbChyZXEsIHJlc3ApKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FVElNRURPVVQ7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X2kyY19zbWJ1c19vcHMgPSB7XG4rXHQuc2VuZCA9IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZCxcbitcdC5yZWN2ID0gcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2LFxuK307XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuK3tcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIChjb25zdCB1OCAqKXJlcSwgUlRQU0VfTUNVX01TR19TSVpFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gcmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSA/IDAgOiAtRUlPO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuK3tcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuK1x0aW50IHRyaWVzLCByZXQ7XG4rXG4rXHRmb3IgKHRyaWVzID0gMDsgdHJpZXMgXHUwMDNjIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcysrKSB7XG4rXHRcdGlmICh0cmllcyBcdTAwM2UgMClcbitcdFx0XHRtc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7XG4rXG4rXHRcdHJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsICh1OCAqKXJlc3AsIFJUUFNFX01DVV9NU0dfU0laRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUgXHUwMDI2XHUwMDI2IHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgPSB7XG4rXHQuc2VuZCA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3NlbmQsXG4rXHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YsXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZjbGllbnQtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaDtcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlO1xuK1x0Ym9vbCB1c2VfbmF0aXZlID0gZmFsc2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bWF0Y2ggPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcbitcdGlmICghbWF0Y2gpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwgXCJtaXNzaW5nIG1hdGNoIGRhdGFcXG5cIik7XG4rXG4rXHRpZiAocnRwc2VfbWN1X25lZWRzX2kyY19wcm90byhtYXRjaCkpIHtcbitcdFx0Y29uc3QgY2hhciAqcHJvdG87XG4rXG4rXHRcdHJldCA9IGRldmljZV9wcm9wZXJ0eV9yZWFkX3N0cmluZyhkZXYsIFwicmVhbHRlayxpMmMtcHJvdG9jb2xcIiwgXHUwMDI2cHJvdG8pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgIFwibWlzc2luZyByZXF1aXJlZCBcXFwicmVhbHRlayxpMmMtcHJvdG9jb2xcXFwiIHByb3BlcnR5XFxuXCIpO1xuK1xuK1x0XHRpZiAoIXN0cmNtcChwcm90bywgXCJpMmNcIikpXG4rXHRcdFx0dXNlX25hdGl2ZSA9IHRydWU7XG4rXHRcdGVsc2UgaWYgKCFzdHJjbXAocHJvdG8sIFwic21idXNcIikpXG4rXHRcdFx0dXNlX25hdGl2ZSA9IGZhbHNlO1xuK1x0XHRlbHNlXG4rXHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgIFwidW5rbm93biByZWFsdGVrLGkyYy1wcm90b2NvbCBcXFwiJXNcXFwiXFxuXCIsIHByb3RvKTtcbitcdH1cbitcbitcdGlmICh1c2VfbmF0aXZlKSB7XG4rXHRcdGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LVx1MDAzZWFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpXG4rXHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCxcbitcdFx0XHRcdFwicGxhaW4tSTJDIE1DVSBwcm90b2NvbCByZXF1aXJlcyBJMkMtY2FwYWJsZSBhZGFwdGVyXFxuXCIpO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtXHUwMDNlYWRhcHRlcixcbitcdFx0XHRcdFx0ICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sgfFxuK1x0XHRcdFx0XHQgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLKSlcbitcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLFxuK1x0XHRcdFx0XCJTTUJ1cyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgU01CdXMgSTJDLWJsb2NrIHN1cHBvcnRcXG5cIik7XG4rXHR9XG4rXG4rXHRwc2UgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBzZSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwc2UpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cHNlLVx1MDAzZWRldiA9IGRldjtcbitcdHBzZS1cdTAwM2VwY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xuK1x0cHNlLVx1MDAzZXRyYW5zcG9ydCA9IHVzZV9uYXRpdmUgPyBcdTAwMjZydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgOiBcdTAwMjZydHBzZV9tY3VfaTJjX3NtYnVzX29wcztcbitcbitcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIocHNlKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X2kyY19vZl9tYXRjaFtdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxwc2UtbWN1LXJ0a1wiLCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9ydGtfZGF0YSB9LFxuK1x0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxwc2UtbWN1LWJyY21cIiwgLmRhdGEgPSBcdTAwMjZydHBzZV9tY3VfYnJjbV9kYXRhIH0sXG4rXHR7IC8qIHNlbnRpbmVsICovIH1cbit9O1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2gpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBydHBzZV9tY3VfaTJjX2RyaXZlciA9IHtcbitcdC5kcml2ZXIgPSB7XG4rXHRcdC5uYW1lXHRcdD0gXCJyZWFsdGVrLXBzZS1tY3UtaTJjXCIsXG4rXHRcdC5vZl9tYXRjaF90YWJsZVx0PSBydHBzZV9tY3VfaTJjX29mX21hdGNoLFxuK1x0fSxcbitcdC5wcm9iZVx0XHQ9IHJ0cHNlX21jdV9pMmNfcHJvYmUsXG4rfTtcbittb2R1bGVfaTJjX2RyaXZlcihydHBzZV9tY3VfaTJjX2RyaXZlcik7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiUmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydClcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lZjA0ZTBkOTI5NjNiNVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmNcbkBAIC0wLDAgKzEsMTU2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2VyZGV2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInJlYWx0ZWstcHNlLW1jdS5oXCJcbitcbisjZGVmaW5lIFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVFx0MTkyMDBcbisjZGVmaW5lIFJUUFNFX01DVV9VQVJUX1RYX1RJTUVPVVRcdG1zZWNzX3RvX2ppZmZpZXMoMTAwKVxuKyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfUlhfVElNRU9VVFx0bXNlY3NfdG9famlmZmllcyhSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TKVxuK1xuK3N0cnVjdCBydHBzZV9tY3VfdWFydCB7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgcHNlO1xuK1x0c3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldjtcbitcdHN0cnVjdCBjb21wbGV0aW9uIHJ4X2RvbmU7XG4rXHRzcGlubG9ja190IHJ4X2xvY2s7XHRcdC8qIHByb3RlY3RzIHJ4X2J1ZiBhbmQgcnhfbGVuICovXG4rXHRzaXplX3QgcnhfbGVuO1xuK1x0dTggcnhfYnVmW1JUUFNFX01DVV9NU0dfU0laRV07XG4rfTtcbitcbisjZGVmaW5lIHRvX3J0cHNlX21jdV91YXJ0KHApICBjb250YWluZXJfb2YocCwgc3RydWN0IHJ0cHNlX21jdV91YXJ0LCBwc2UpXG4rXG4rLypcbisgKiBObyBmcmFtaW5nIGlzIGRvbmUgaGVyZTogYSBnbGl0Y2hlZCBmcmFtZSBjb3N0cyBvbmUgdHJhbnNhY3Rpb24sIHRoZW5cbisgKiB0aGUgbmV4dCBfc2VuZCByZS1mcmFtZXMgZnJvbSByeF9sZW4gMC4gUmVzeW5jIHdvcmtzIGJ5IHJldHVybmluZyBjb3VudFxuKyAqIChub3QgdGFrZSksIGRyb3BwaW5nIGFueSBvdmVyZmxvdyBzbyBzZXJkZXYga2VlcHMgbm8gbGVmdG92ZXIgdG8gYmxlZWRcbisgKiBpbnRvIHRoZSBuZXh0IGZyYW1lLlxuKyAqL1xuK3N0YXRpYyBzaXplX3QgcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2LFxuK1x0XHRcdFx0ICAgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgY291bnQpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSBzZXJkZXZfZGV2aWNlX2dldF9kcnZkYXRhKHNlcmRldik7XG4rXHRzaXplX3QgdGFrZTtcbitcbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjdHgtXHUwMDNlcnhfbG9jaykge1xuK1x0XHR0YWtlID0gbWluKGNvdW50LCBzaXplb2YoY3R4LVx1MDAzZXJ4X2J1ZikgLSBjdHgtXHUwMDNlcnhfbGVuKTtcbitcdFx0aWYgKHRha2UpIHtcbitcdFx0XHRtZW1jcHkoY3R4LVx1MDAzZXJ4X2J1ZiArIGN0eC1cdTAwM2VyeF9sZW4sIGJ1ZiwgdGFrZSk7XG4rXHRcdFx0Y3R4LVx1MDAzZXJ4X2xlbiArPSB0YWtlO1xuK1x0XHRcdGlmIChjdHgtXHUwMDNlcnhfbGVuID09IHNpemVvZihjdHgtXHUwMDNlcnhfYnVmKSlcbitcdFx0XHRcdGNvbXBsZXRlKFx1MDAyNmN0eC1cdTAwM2VyeF9kb25lKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogY29uc3VtZSBhbGwgdG8gYXZvaWQgZGVzeW5jL21pc2FsaWdubWVudCAqL1xuK1x0cmV0dXJuIGNvdW50O1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcmRldl9kZXZpY2Vfb3BzIHJ0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMgPSB7XG4rXHQucmVjZWl2ZV9idWYgPSBydHBzZV9tY3VfdWFydF9yZWNlaXZlLFxuK1x0LndyaXRlX3dha2V1cCA9IHNlcmRldl9kZXZpY2Vfd3JpdGVfd2FrZXVwLFxuK307XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfdWFydF9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTtcbitcdGludCB3cml0dGVuO1xuK1xuK1x0LyogY2xlYXIgYW55IGxlZnRvdmVyIHJ4IHN0YXRlIGJlZm9yZSB0cmFuc21pdHRpbmcgKi9cbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjdHgtXHUwMDNlcnhfbG9jaykge1xuK1x0XHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZjdHgtXHUwMDNlcnhfZG9uZSk7XG4rXHRcdGN0eC1cdTAwM2VyeF9sZW4gPSAwO1xuK1x0fVxuK1xuK1x0d3JpdHRlbiA9IHNlcmRldl9kZXZpY2Vfd3JpdGUoY3R4LVx1MDAzZXNlcmRldiwgKGNvbnN0IHU4ICopcmVxLCBzaXplb2YoKnJlcSksXG4rXHRcdFx0XHQgICAgICBSVFBTRV9NQ1VfVUFSVF9UWF9USU1FT1VUKTtcbitcdGlmICh3cml0dGVuIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gd3JpdHRlbjtcbitcdGlmICh3cml0dGVuICE9IHNpemVvZigqcmVxKSlcbitcdFx0cmV0dXJuIC1FSU87XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfdWFydF9yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eCA9IHRvX3J0cHNlX21jdV91YXJ0KHBzZSk7XG4rXG4rXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZjdHgtXHUwMDNlcnhfZG9uZSwgUlRQU0VfTUNVX1VBUlRfUlhfVElNRU9VVCkpXG4rXHRcdHJldHVybiAtRVRJTUVET1VUO1xuK1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmN0eC1cdTAwM2VyeF9sb2NrKSB7XG4rXHRcdGlmIChjdHgtXHUwMDNlcnhfbGVuICE9IHNpemVvZigqcmVzcCkpXG4rXHRcdFx0cmV0dXJuIC1FSU87XG4rXG4rXHRcdG1lbWNweShyZXNwLCBjdHgtXHUwMDNlcnhfYnVmLCBzaXplb2YoKnJlc3ApKTtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHJ0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHMgPSB7XG4rXHQuc2VuZCA9IHJ0cHNlX21jdV91YXJ0X3NlbmQsXG4rXHQucmVjdiA9IHJ0cHNlX21jdV91YXJ0X3JlY3YsXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpXG4re1xuK1x0dTMyIHNwZWVkID0gUlRQU0VfTUNVX1VBUlRfQkFVRF9ERUZBVUxUO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2c2VyZGV2LVx1MDAzZWRldjtcbitcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4O1xuK1x0aW50IHJldDtcbitcbitcdGN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWN0eClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRjdHgtXHUwMDNlc2VyZGV2ID0gc2VyZGV2O1xuK1x0Y3R4LVx1MDAzZXBzZS5kZXYgPSBkZXY7XG4rXHRjdHgtXHUwMDNlcHNlLnBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XG4rXHRjdHgtXHUwMDNlcHNlLnRyYW5zcG9ydCA9IFx1MDAyNnJ0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHM7XG4rXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUpO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y3R4LVx1MDAzZXJ4X2xvY2spO1xuK1xuK1x0c2VyZGV2X2RldmljZV9zZXRfZHJ2ZGF0YShzZXJkZXYsIGN0eCk7XG4rXHRzZXJkZXZfZGV2aWNlX3NldF9jbGllbnRfb3BzKHNlcmRldiwgXHUwMDI2cnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyk7XG4rXG4rXHRyZXQgPSBkZXZtX3NlcmRldl9kZXZpY2Vfb3BlbihkZXYsIHNlcmRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCJmYWlsZWQgdG8gb3BlbiBzZXJkZXZcXG5cIik7XG4rXG4rXHRmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZGV2X2Z3bm9kZShkZXYpLCBcImN1cnJlbnQtc3BlZWRcIiwgXHUwMDI2c3BlZWQpO1xuK1x0c2VyZGV2X2RldmljZV9zZXRfYmF1ZHJhdGUoc2VyZGV2LCBzcGVlZCk7XG4rXHRzZXJkZXZfZGV2aWNlX3NldF9mbG93X2NvbnRyb2woc2VyZGV2LCBmYWxzZSk7XG4rXHRzZXJkZXZfZGV2aWNlX3NldF9wYXJpdHkoc2VyZGV2LCBTRVJERVZfUEFSSVRZX05PTkUpO1xuK1xuK1x0cmV0dXJuIHJ0cHNlX21jdV9yZWdpc3RlcihcdTAwMjZjdHgtXHUwMDNlcHNlKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2hbXSA9IHtcbitcdHsgLmNvbXBhdGlibGUgPSBcInJlYWx0ZWsscHNlLW1jdS1ydGtcIiwgLmRhdGEgPSBcdTAwMjZydHBzZV9tY3VfcnRrX2RhdGEgfSxcbitcdHsgLmNvbXBhdGlibGUgPSBcInJlYWx0ZWsscHNlLW1jdS1icmNtXCIsIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2JyY21fZGF0YSB9LFxuK1x0eyAvKiBzZW50aW5lbCAqLyB9XG4rfTtcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaCk7XG4rXG4rc3RhdGljIHN0cnVjdCBzZXJkZXZfZGV2aWNlX2RyaXZlciBydHBzZV9tY3VfdWFydF9kcml2ZXIgPSB7XG4rXHQuZHJpdmVyID0ge1xuK1x0XHQubmFtZSA9IFwicmVhbHRlay1wc2UtbWN1LXVhcnRcIixcbitcdFx0Lm9mX21hdGNoX3RhYmxlID0gcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2gsXG4rXHR9LFxuK1x0LnByb2JlICA9IHJ0cHNlX21jdV91YXJ0X3Byb2JlLFxuK307XG4rbW9kdWxlX3NlcmRldl9kZXZpY2VfZHJpdmVyKHJ0cHNlX21jdV91YXJ0X2RyaXZlcik7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiUmVhbHRlay9Ccm9hZGNvbSBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaCBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iOWJmM2IyZGRlMDhiOFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oXG5AQCAtMCwwICsxLDg3IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbitcbisjaWZuZGVmIF9SRUFMVEVLX1BTRV9NQ1VfSFxuKyNkZWZpbmUgX1JFQUxURUtfUFNFX01DVV9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbisvKlxuKyAqIFRpbWUgdGhlIE1DVSBpdHNlbGYgbmVlZHMgYmV0d2VlbiBhY2NlcHRpbmcgYSByZXF1ZXN0IGFuZCBoYXZpbmcgYVxuKyAqIHJlc3BvbnNlIHJlYWR5LiBUaGVzZSBhcmUgcHJvcGVydGllcyBvZiB0aGUgTUNVIGZpcm13YXJlLCBub3Qgb2YgdGhlXG4rICogdW5kZXJseWluZyB0cmFuc3BvcnQ6IHRoZSBjb3JlIHBhY2VzIHRyYW5zYWN0aW9ucyBieSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVNcbisgKiBhbmQgYm90aCB0cmFuc3BvcnRzIHNpemUgdGhlaXIgcGVyLXRyYW5zYWN0aW9uIHJlY3YgY2VpbGluZyBmcm9tXG4rICogUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUywgc2luY2Ugc29tZSBjb21tYW5kcyBhcmUgZG9jdW1lbnRlZCBhc1xuKyAqIG5lZWRpbmcgdXAgdG8gfjFzIHRvIHByb2R1Y2UgYSByZXBseS5cbisgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NU1x0XHRcdDI1XG4rI2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TXHRcdDEwMDBcbitcbisvKlxuKyAqIFRvdGFsIHRpbWUgdG8ga2VlcCByZXRyeWluZyB0aGUgZmlyc3QgTUNVIHJlYWQgYXQgcHJvYmUsIGFuZCB0aGUgcGF1c2VcbisgKiBiZXR3ZWVuIGF0dGVtcHRzLiBSaWdodCBhZnRlciBlbmFibGUtZ3Bpb3MgaXMgYXNzZXJ0ZWQgdGhlIE1DVSBtYXkgbm90XG4rICogYW5zd2VyIG9uIHRoZSBidXMgeWV0OyBnaXZlIGl0IGEgYm91bmRlZCB3aW5kb3cgdG8gY29tZSB1cCBiZWZvcmVcbisgKiBkZWNsYXJpbmcgdGhlIHByb2JlIGZhaWxlZC5cbisgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVNcdFx0MzAwMFxuKyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfUkVUUllfTVNcdFx0XHQxMDBcbitcbisjZGVmaW5lIFJUUFNFX01DVV9NU0dfU0laRVx0XHRcdDEyXG4rXG4rc3RydWN0IHJ0cHNlX21jdV9tc2cge1xuK1x0dTggb3Bjb2RlO1xuK1x0dTggc2VxX251bTtcbitcdHU4IHBheWxvYWRbOV07XG4rXHR1OCBjaGVja3N1bTtcbit9IF9fcGFja2VkO1xuK1xuKy8qXG4rICogTUNVIHN0YXR1cyBvcGNvZGVzIChzZWVuIG9uIHRoZSBCQ00gZGlhbGVjdDsgUlRMIG5ldmVyIGVtaXRzIHRoZW0pLlxuKyAqIElOQ09NUExFVEUvQkFEX0NTVU0gYXJlIHRlcm1pbmFsOyBOT1RfUkVBRFkgaXMgdHJhbnNpZW50LlxuKyAqL1xuKyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFXHRcdDB4ZmRcdC8qIC1FQkFERSAgICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNXHRcdDB4ZmVcdC8qIC1FQkFETVNHICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX05PVF9SRUFEWVx0XHQweGZmXHQvKiAtRUFHQUlOICAqL1xuK1xuKy8qIEEgcG9sbGluZyB0cmFuc3BvcnQgY2FuIHN0b3AgaGVyZTogdGhlIG1hdGNoaW5nIHJlcGx5LCBvciBhIHRlcm1pbmFsIGVycm9yLiAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBydHBzZV9tY3VfcmVzcF9pc19maW5hbChjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuK1x0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbit7XG4rXHRyZXR1cm4gcmVzcC1cdTAwM2VvcGNvZGUgPT0gcmVxLVx1MDAzZW9wY29kZSB8fFxuK1x0ICAgICAgIHJlc3AtXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfSU5DT01QTEVURSB8fFxuK1x0ICAgICAgIHJlc3AtXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU07XG4rfVxuK1xuKy8qIE9wYXF1ZSB0byB0cmFuc3BvcnRzOyBkZWZpbmVkIGluIHJlYWx0ZWstcHNlLWNvcmUuYy4gKi9cbitzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3Q7XG4rc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhO1xuK3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvO1xuK3N0cnVjdCBydHBzZV9tY3VfY3RybDtcbitcbitzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMge1xuK1x0aW50ICgqc2VuZCkoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpO1xuK1x0aW50ICgqcmVjdikoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4rXHRcdCAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCk7XG4rfTtcbitcbitzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwge1xuK1x0c3RydWN0IGRldmljZSAqZGV2O1xuK1x0c3RydWN0IHBzZV9jb250cm9sbGVyX2RldiBwY2RldjtcbitcdHN0cnVjdCBtdXRleCBtdXRleDsgLyogc2VyaWFsaXplcyBNQ1UgcmVxdWVzdC9yZXNwb25zZSB0cmFuc2FjdGlvbnMgKi9cbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDtcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzICp0cmFuc3BvcnQ7XG4rXG4rXHRzdHJ1Y3QgcmVndWxhdG9yICpwb2Vfc3VwcGx5O1xuK307XG4rXG4raW50IHJ0cHNlX21jdV9yZWdpc3RlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSk7XG4rXG4rLyogV2hldGhlciB0aGUgSTJDIHRyYW5zcG9ydCBtdXN0IHJlYWQgXCJyZWFsdGVrLGkyYy1wcm90b2NvbFwiIGZyb20gRFQuICovXG4rYm9vbCBydHBzZV9tY3VfbmVlZHNfaTJjX3Byb3RvKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2gpO1xuK1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X3J0a19kYXRhO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2JyY21fZGF0YTtcbitcbisjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjMzOjQzLjkzNjEwNjAxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MTg5MDQyMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgbmV3IGRyaXZlciBmb3IgYSBSZWFsdGVrL0Jyb2FkY29tIFBTRSBNQ1UsIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3BzZS1wZC9gLiBJdCBzdXBwb3J0cyBib3RoIEkyQyBhbmQgVUFSVCwgd2hpY2ggaXMgZ29vZCBiZWNhdXNlIGl0IGdpdmVzIHVzIG11bHRpcGxlIGF0dGFjayBzdXJmYWNlcy4gIEl0J3MgYSBuZXcgZHJpdmVyLCBzbyBpdCBkZWZpbml0ZWx5IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGdvZXMgdG8gZnV6emluZy4gR2l2ZW4gdGhlIGludGVyZmFjZXMsIEkyQyBhbmQgVUFSVCAodmlhIHNlcmRldiksIGl0J3MgcmVhZGlseSB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkyQyBzdHViLCBzZXJkZXYvdHR5IGVtdWxhdGlvbiwgb3IgZXZlbiBkaXJlY3QgZnV6emluZyBvZiB0aGUgaW50ZXJmYWNlcyBhcmUgYWxsIHZpYWJsZS4gRXhjZWxsZW50LCBiZWNhdXNlIHN5emthbGxlciAqYWxyZWFkeSogaGFzIHNvbWUgc3VwcG9ydCBmb3IgSTJDIGFuZCBUVFkvc2VyZGV2IVxuXG5MZXQncyBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSBjb3JyZWN0IEtjb25maWcgb3B0aW9ucyBzZXQuICBgQ09ORklHX1BTRV9DT05UUk9MTEVSYCwgYENPTkZJR19QU0VfUkVBTFRFS19NQ1VgLCBgQ09ORklHX1BTRV9SRUFMVEVLX01DVV9JMkNgLCBhbmQgYENPTkZJR19QU0VfUkVBTFRFS19NQ1VfVUFSVGAgYXJlIHRoZSBrZXlzLiAgSSdsbCB2ZXJpZnkgdGhlc2UgZGVwZW5kZW5jaWVzIGluIHRoZSBgZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgYFBTRV9SRUFMVEVLX01DVV9JMkNgIGRlcGVuZHMgb24gYEkyQ2AsIGFuZCBgUFNFX1JFQUxURUtfTUNVX1VBUlRgIGRlcGVuZHMgb24gYFNFUklBTF9ERVZfQlVTYC5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBTY2FubmluZyB0aGUgY29kZSwgaGVyZSdzIHdoYXQganVtcHMgb3V0IGF0IG1lOlxuXG5Gcm9tIGByZWFsdGVrLXBzZS1tY3UtY29yZS5jYDpcbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VgLCBgcnRwc2VfbWN1X3BvcnRfZW5hYmxlYCwgYHJ0cHNlX21jdV9wb3J0X2Rpc2FibGVgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0YCwgYHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdGAsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvYCwgYHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvYCwgYHJ0cHNlX21jdV9kaXNjb3ZlcmAsIGBydHBzZV9tY3VfcmVnaXN0ZXJgXG5cbkZyb20gYHJlYWx0ZWstcHNlLW1jdS1pMmMuY2A6XG4qICAgYHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZGAsIGBydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3ZgLCBgcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZGAsIGBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2YCwgYHJ0cHNlX21jdV9pMmNfcHJvYmVgXG5cbkZyb20gYHJlYWx0ZWstcHNlLW1jdS11YXJ0LmNgOlxuKiAgIGBydHBzZV9tY3VfdWFydF9yZWNlaXZlYCwgYHJ0cHNlX21jdV91YXJ0X3NlbmRgLCBgcnRwc2VfbWN1X3VhcnRfcmVjdmAsIGBydHBzZV9tY3VfdWFydF9wcm9iZWBcblxuSSdsbCBsZWFuIGhlYXZpbHkgb24gYHNldC1yZXN1bHRzYCB0byBwcm9jZXNzIHRoaXMgaW5mb3JtYXRpb24uXG5cblJlZ2FyZGluZyBzeXprYWxsZXIsIGNhbiBpdCByZWFjaCB0aGlzIGRyaXZlcj8gIERlZmluaXRlbHkuIFdlIGNhbiBjcmVhdGUgSTJDIGRldmljZXMgd2l0aCBgc3l6X2kyY19zZXR1cGAgb3Igc2ltaWxhci4gRXZlbiBqdXN0IGxvYWRpbmcgdGhlIG1vZHVsZSBhbmQgcHJvYmluZyBpdCwgaWYgd2UgZnV6eiB0aGUgZGV2aWNlIHRyZWUsIG9yIGV2ZW4gaWYgaXQncyBpbnN0YW50aWF0ZWQgdmlhIHN5c2ZzLCB3aWxsIGRvLiAgSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIEkyQyBkZXZpY2VzIGluc3RhbnRpYXRlZCB2aWEgYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0qL25ld19kZXZpY2VgLiBTZXJkZXYgZGV2aWNlcyBhcmUgYSBsaXR0bGUgaGFyZGVyIGR5bmFtaWNhbGx5IGZyb20gdXNlcnNwYWNlLCBidXQgdGhlIGNvcmUgbG9naWMgaXMgc3RpbGwgZnV6emFibGUgaWYgaW5zdGFudGlhdGVkLlxuXG5IZXJlJ3MgdGhlIGxpc3Qgb2YgY29uZmlncywgYWdhaW46XG5gUFNFX0NPTlRST0xMRVJgXG5gUFNFX1JFQUxURUtfTUNVX0kyQ2BcbmBQU0VfUkVBTFRFS19NQ1VfVUFSVGBcblxuQW5kIHRoZSBmdW5jdGlvbiBjYWxsIHRhcmdldHMgSSBuZWVkIHRvIGZlZWQgdG8gc2V0LXJlc3VsdHM6XG5gcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VgLCBgcnRwc2VfbWN1X3BvcnRfZW5hYmxlYCwgYHJ0cHNlX21jdV9wb3J0X2Rpc2FibGVgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0YCwgYHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdGAsIGBydFxuXG4iLCJJbnB1dFRva2VucyI6MjM1MDAsIk91dHB1dFRva2VucyI6MzUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjM0OjAxLjEyNTE1MDg5MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1NzYzODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX0kyQ1wiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX1VBUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2VuYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZGlzYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wcmlvXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X2kyY19wcm9iZVwiLFxuICAgIFwicnRwc2VfbWN1X3VhcnRfcHJvYmVcIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3JlY2VpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVXMsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIFRoZSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgUFNFIGNvbnRyb2xsZXIgQVBJIGFuZCBwYXJzZXMgcmVzcG9uc2VzIGZyb20gdGhlIE1DVS4gRnV6emluZyB0aGUgSTJDL1VBUlQgaW50ZXJmYWNlcyBhbmQgdGhlIFBTRSBjb250cm9sbGVyIG9wcyBpcyB2YWx1YWJsZSBmb3IgZmluZGluZyBwb3RlbnRpYWwgYnVncyBpbiB0aGUgcHJvdG9jb2wgcGFyc2luZyBhbmQgc3RhdGUgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX0kyQ1wiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX1VBUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2VuYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZGlzYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wcmlvXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X2kyY19wcm9iZVwiLFxuICAgIFwicnRwc2VfbWN1X3VhcnRfcHJvYmVcIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3JlY2VpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIFJlYWx0ZWsvQnJvYWRjb20gUFNFIE1DVXMsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIFRoZSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgUFNFIGNvbnRyb2xsZXIgQVBJIGFuZCBwYXJzZXMgcmVzcG9uc2VzIGZyb20gdGhlIE1DVS4gRnV6emluZyB0aGUgSTJDL1VBUlQgaW50ZXJmYWNlcyBhbmQgdGhlIFBTRSBjb250cm9sbGVyIG9wcyBpcyB2YWx1YWJsZSBmb3IgZmluZGluZyBwb3RlbnRpYWwgYnVncyBpbiB0aGUgcHJvdG9jb2wgcGFyc2luZyBhbmQgc3RhdGUgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowwqfxw[1] Phase: Succeeded StartedAt: 2026-07-06 15:35:40 +0000 UTC FinishedAt: 2026-07-06 15:35:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-06 15:35:40 +0000 UTC FinishedAt: 2026-07-06 15:35:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2] Phase: Succeeded StartedAt: 2026-07-06 15:35:40 +0000 UTC FinishedAt: 2026-07-06 17:38:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 15:35:40 +0000 UTC FinishedAt: 2026-07-06 17:38:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 15:35:40 +0000 UTC FinishedAt: 2026-07-06 15:36:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 15:35:40 +0000 UTC FinishedAt: 2026-07-06 15:36:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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-workflowwqfxw/series-workflowwqfxw-convert-artifact-1505107275/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 15:36:13 +0000 UTC FinishedAt: 2026-07-06 16:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 15:36:13 +0000 UTC FinishedAt: 2026-07-06 16:17:00 +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:*aea9c267-14f9-496e-8220-ecbba16b393b,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-workflowwqfxw/series-workflowwqfxw-convert-artifact-1505107275/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": "1e3d69a2-4748-4753-ba1e-b82eead223d3", "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-workflowwqfxw/series-workflowwqfxw-build-action-981046345/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 15:36:13 +0000 UTC FinishedAt: 2026-07-06 16:15:22 +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:*aea9c267-14f9-496e-8220-ecbba16b393b,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-workflowwqfxw/series-workflowwqfxw-convert-artifact-1505107275/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": "1e3d69a2-4748-4753-ba1e-b82eead223d3", "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-workflowwqfxw/series-workflowwqfxw-build-action-981046345/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:17:00 +0000 UTC FinishedAt: 2026-07-06 16:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:17:00 +0000 UTC FinishedAt: 2026-07-06 16:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:17:00 +0000 UTC FinishedAt: 2026-07-06 16:17:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:17:00 +0000 UTC FinishedAt: 2026-07-06 16:17:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-workflowwqfxw/series-workflowwqfxw-convert-artifact-2784644258/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:17:10 +0000 UTC FinishedAt: 2026-07-06 16:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:17:10 +0000 UTC FinishedAt: 2026-07-06 16:19:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1e3d69a2-4748-4753-ba1e-b82eead223d3,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-workflowwqfxw/series-workflowwqfxw-build-action-981046345/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-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:19:12 +0000 UTC FinishedAt: 2026-07-06 16:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:19:12 +0000 UTC FinishedAt: 2026-07-06 16:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:19:12 +0000 UTC FinishedAt: 2026-07-06 16:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:19:12 +0000 UTC FinishedAt: 2026-07-06 16:45:49 +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:*aea9c267-14f9-496e-8220-ecbba16b393b,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-workflowwqfxw/series-workflowwqfxw-convert-artifact-2784644258/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": "7bd92f54-9d3e-4693-92ad-d4fbc9dde6a4", "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-workflowwqfxw/series-workflowwqfxw-build-action-869502198/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:19:12 +0000 UTC FinishedAt: 2026-07-06 16:45:39 +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:*aea9c267-14f9-496e-8220-ecbba16b393b,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-workflowwqfxw/series-workflowwqfxw-convert-artifact-2784644258/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": "7bd92f54-9d3e-4693-92ad-d4fbc9dde6a4", "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-workflowwqfxw/series-workflowwqfxw-build-action-869502198/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:45:49 +0000 UTC FinishedAt: 2026-07-06 16:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:45:49 +0000 UTC FinishedAt: 2026-07-06 16:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:45:49 +0000 UTC FinishedAt: 2026-07-06 16:47:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:45:49 +0000 UTC FinishedAt: 2026-07-06 16:47:37 +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:*7bd92f54-9d3e-4693-92ad-d4fbc9dde6a4,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-workflowwqfxw/series-workflowwqfxw-build-action-869502198/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-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:47:47 +0000 UTC FinishedAt: 2026-07-06 17:38:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:47:47 +0000 UTC FinishedAt: 2026-07-06 17:38:15 +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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"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:*1e3d69a2-4748-4753-ba1e-b82eead223d3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7bd92f54-9d3e-4693-92ad-d4fbc9dde6a4,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-workflowwqfxw/series-workflowwqfxw-build-action-981046345/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-workflowwqfxw/series-workflowwqfxw-build-action-869502198/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:47:47 +0000 UTC FinishedAt: 2026-07-06 16:47:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:47:47 +0000 UTC FinishedAt: 2026-07-06 16:47:53 +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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"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-workflowwqfxw/series-workflowwqfxw-convert-artifact-2045178327/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:47:47 +0000 UTC FinishedAt: 2026-07-06 16:47:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:47:47 +0000 UTC FinishedAt: 2026-07-06 16:47:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:47:47 +0000 UTC FinishedAt: 2026-07-06 16:47:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:47:57 +0000 UTC FinishedAt: 2026-07-06 17:38:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwqfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"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":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_i2c_probe","rtpse_mcu_uart_probe","rtpse_mcu_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"1bcd238b-8599-4c6d-8593-69f19e6e4566","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-07-06 16:47:57 +0000 UTC FinishedAt: 2026-07-06 17:38:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1e3d69a2-4748-4753-ba1e-b82eead223d3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7bd92f54-9d3e-4693-92ad-d4fbc9dde6a4,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-workflowwqfxw/series-workflowwqfxw-build-action-981046345/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-workflowwqfxw/series-workflowwqfxw-build-action-869502198/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-workflowwqfxw/series-workflowwqfxw-convert-artifact-2045178327/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,}