Name: series-workflow6glw2 Phase: Succeeded StartedAt: 2026-07-08 23:18:39 +0000 UTC FinishedAt: 2026-07-09 01:26:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[0] Phase: Succeeded StartedAt: 2026-07-08 23:18:39 +0000 UTC FinishedAt: 2026-07-08 23:30:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 23:18:39 +0000 UTC FinishedAt: 2026-07-08 23:30:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MCTP", "MCTP_TRANSPORT_USB", "MCTP_TRANSPORT_USBLIB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MCTP", "MCTP_TRANSPORT_USB", "MCTP_TRANSPORT_USBLIB" ], "series_id": "ea616825-019c-408e-9c2b-76afe964466e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mctp_usblib_rx_prepare", "mctp_usblib_rx_complete", "mctp_usblib_tx_push", "mctp_usblib_tx_send_complete", "mctp_usb_in_complete", "mctp_usb_out_complete", "mctp_usb_tx_send", "mctp_usb_start_xmit", "mctp_usb_rx_queue" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7TUNUUF9UUkFOU1BPUlRfVVNCJiMzNDssCiAgICAmIzM0O01DVFBfVFJBTlNQT1JUX1VTQkxJQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21jdHBfdXNibGliX3J4X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfcnhfY29tcGxldGUmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfcHVzaCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O21jdHBfdXNiX2luX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O21jdHBfdXNiX291dF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYl90eF9zZW5kJiMzNDssCiAgICAmIzM0O21jdHBfdXNiX3N0YXJ0X3htaXQmIzM0OywKICAgICYjMzQ7bWN0cF91c2JfcnhfcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiAoYG1jdHAtdXNibGliYCkgYW5kIG1vZGlmaWVzIHRoZSBNQ1RQIFVTQiB0cmFuc3BvcnQgZHJpdmVyIChgbWN0cC11c2JgKSB0byB1c2UgaXQuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIFVTQiBnYWRnZXQgZW11bGF0aW9uIChlLmcuLCByYXctZ2FkZ2V0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ2ZGE3NzQ0ZjI1OWEyMzYyYmE0MTM0NDlkNjZlMTYxMDEzNThlODFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDIzOjI5OjQ3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xuaW5kZXggY2YzMjVhYjBiMWVmNTUuLmM0MGFjOWM2NjViNzU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL0tjb25maWdcbkBAIC00Nyw5ICYjNDM7NDcsMjUgQEAgY29uZmlnIE1DVFBfVFJBTlNQT1JUX0kzQ1xuIFx0ICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCBmb3IgZWFjaCBJM0MgYnVzXG4gXHQgIGhhdmluZyBhIFwmIzM0O21jdHAtY29udHJvbGxlclwmIzM0OyBkZXZpY2V0cmVlIHByb3BlcnR5LlxuIFxuJiM0Mztjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7TUNUUCBvdmVyIFVTQiBjb21tb24gbGlicmFyeVwmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gVVNCXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgQ29tbW9uIHByb3RvY29sIGhhbmRsaW5nIGZ1bmN0aW9ucyBmb3IgTUNUUC1vdmVyLVVTQiB0cmFuc3BvcnRcbiYjNDM7XHQgIGltcGxlbWVudGF0aW9ucywgc3VpdGFibGUgZm9yIHVzZSBpbiBlaXRoZXIgaG9zdC0gb3IgZ2FkZ2V0LXNpZGVcbiYjNDM7XHQgIHRyYW5zcG9ydCBkcml2ZXJcbiYjNDM7XG4mIzQzO1x0ICBUaGlzIHdpbGwgYmUgYXV0b21hdGljYWxseSBlbmFibGVkIGJ5IHRoZSB0cmFuc3BvcnQgZHJpdmVyLlxuJiM0MztcbiYjNDM7Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUXG4mIzQzOyAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIHVzYmxpYiB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzQzOyAgICAgICAgZGVwZW5kcyBvbiBNQ1RQX1RSQU5TUE9SVF9VU0JMSUI9eSBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuJiM0MzsgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4mIzQzO1xuIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JcbiBcdHRyaXN0YXRlIFwmIzM0O01DVFAgVVNCIHRyYW5zcG9ydFwmIzM0O1xuIFx0ZGVwZW5kcyBvbiBVU0JcbiYjNDM7XHRzZWxlY3QgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4gXHRoZWxwXG4gXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBVU0IgdHJhbnNwb3J0LFxuIFx0ICBkZWZpbmVkIGJ5IERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjgzLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG5pbmRleCBjMzYwMDY4NDlhMWU3ZC4uYzg3MGI2MmQzZjFjOTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG5AQCAtMiwzICYjNDM7Miw0IEBAIG9iai0kKENPTkZJR19NQ1RQX1NFUklBTCkgJiM0Mzs9IG1jdHAtc2VyaWFsLm9cbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTJDKSAmIzQzOz0gbWN0cC1pMmMub1xuIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JM0MpICYjNDM7PSBtY3RwLWkzYy5vXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQikgJiM0Mzs9IG1jdHAtdXNiLm9cbiYjNDM7b2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQkxJQikgJiM0Mzs9IG1jdHAtdXNibGliLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNcbmluZGV4IGZhZGU2NWYyZjI2OTk1Li4yZDMxMDc1Mzc0YjQ1YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jXG5AQCAtMyw5ICYjNDM7Myw5IEBAXG4gICogbWN0cC11c2IuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGJpbmRpbmcgZHJpdmVyLlxuICAqXG4gICogRFNQMDI4MyBpcyBhdmFpbGFibGUgYXQ6XG4tICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4wLjEucGRmXG4mIzQzOyAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMS4wLnBkZlxuICAqXG4tICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjUgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZFxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbkBAIC0yMiw5NSAmIzQzOzIyLDExNSBAQFxuIHN0cnVjdCBtY3RwX3VzYiB7XG4gXHRzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2O1xuIFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7XG4mIzQzO1x0Ym9vbCBzcGFuO1xuIFxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcbiBcdHU4IGVwX2luO1xuIFx0dTggZXBfb3V0O1xuIFxuLVx0c3RydWN0IHVyYiAqdHhfdXJiO1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCByeDtcbiBcdHN0cnVjdCB1cmIgKnJ4X3VyYjtcbiYjNDM7XHRpbnQgaW5fZXJyX2NvdW50O1xuJiM0MztcdGludCBpbl9lcnJfb3JpZztcbiYjNDM7XHRib29sIGNsZWFyX2hhbHQ7XG4gXG4gXHQvKiBlbmZvcmNlcyBhdG9taWMgYWNjZXNzIHRvIHJ4X3N0b3BwZWQgYW5kIHJlcXVldWluZyB0aGUgcmV0cnkgd29yayAqL1xuIFx0c3BpbmxvY2tfdCByeF9sb2NrO1xuIFx0Ym9vbCByeF9zdG9wcGVkO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayByeF9yZXRyeV93b3JrO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggdHg7XG4mIzQzO1x0c3RydWN0IHVzYl9hbmNob3IgdHhfYW5jaG9yO1xuJiM0MztcdC8qIHNlcmlhbGlzZXMgdHhfcW1lbSB1cGRhdGVzIHRvIG5ldGRldiBxdWV1ZSBzdGF0ZXMgKi9cbiYjNDM7XHRzcGlubG9ja190IHR4X3FtZW1fbG9jaztcbiYjNDM7XHRpbnQgdHhfcW1lbTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0ge1xuJiM0MztcdE1DVFBfVVNCX1NVQkNMQVNTX0JBU0UgPSAweDAwLFxuJiM0MztcdE1DVFBfVVNCX1NVQkNMQVNTX1NQQU4gPSAweDAyLFxuIH07XG4gXG4mIzQzOy8qIFdlIHVzZSBhIHRvdGFsLXNpemUgbGltaXQgZm9yIG91dHN0YW5kaW5nIFVSQnMsIGFzIHRoZSB0cmFuc2ZlciBjb3VudHNcbiYjNDM7ICogbWF5IHZhcnkgYSBsb3QgYmV0d2VlbiBzcGFubmluZy0gYW5kIG5vbi1zcGFubmluZyBtb2Rlcy4gSW4gc3Bhbm5pbmcgbW9kZSxcbiYjNDM7ICogdGhpcyB3aWxsIGFsbG93IGZvciBhIGNvdXBsZSBvZiBtYXgtc2l6ZWQgdHJhbnNmZXJzIHRvIGJlIGluIGZsaWdodC4gSW5cbiYjNDM7ICogbm9uLXNwYW5uaW5nIG1vZGUsIDMyLlxuJiM0MzsgKlxuJiM0MzsgKiBXZSB3YW50IHRvIGF2b2lkIGRpc2FibGluZyB0aGUgdHggcXVldWUgaWYgcG9zc2libGU7IGRvaW5nIHNvIHdpbGwgZW5kIHVwXG4mIzQzOyAqIHJlcXVldWVpbmcgdG8gZ3NvX3NrYiwgYW5kIHdlIG9ubHkgZGVxdWV1ZSBmcm9tIHRoYXQgb25lIHNrYiBhdCBhIHRpbWUsXG4mIzQzOyAqIHNvIGNhbiBubyBsb25nZXIgcGVyZm9ybSB0cmFuc2ZlciBwYWNraW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUWF9RTUVNX01BWCA9IDE2Mzg0O1xuJiM0MztcbiBzdGF0aWMgdm9pZCBtY3RwX3VzYl9vdXRfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuIHtcbi1cdHN0cnVjdCBza19idWZmICpza2IgPSB1cmItXHUwMDNlY29udGV4dDtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBza2ItXHUwMDNlZGV2O1xuLVx0aW50IHN0YXR1cztcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHggPSB1cmItXHUwMDNlY29udGV4dDtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYodHhfY3R4KTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbGVuID0gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG1jdHBfdXNiLVx1MDAzZW5ldGRldjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0c3RhdHVzID0gdXJiLVx1MDAzZXN0YXR1cztcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHR4X2N0eCwgbmV0ZGV2LCB1cmItXHUwMDNlc3RhdHVzID09IDApO1xuIFxuLVx0c3dpdGNoIChzdGF0dXMpIHtcbi1cdGNhc2UgLUVOT0VOVDpcbi1cdGNhc2UgLUVDT05OUkVTRVQ6XG4tXHRjYXNlIC1FU0hVVERPV046XG4tXHRjYXNlIC1FUFJPVE86XG4tXHRcdGRldl9kc3RhdHNfdHhfZHJvcHBlZChuZXRkZXYpO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgMDpcbi1cdFx0ZGV2X2RzdGF0c190eF9hZGQobmV0ZGV2LCBza2ItXHUwMDNlbGVuKTtcbi1cdFx0bmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpO1xuLVx0XHRjb25zdW1lX3NrYihza2IpO1xuLVx0XHRyZXR1cm47XG4tXHRkZWZhdWx0OlxuLVx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7dW5leHBlY3RlZCB0eCB1cmIgc3RhdHVzOiAlZFxcblwmIzM0Oywgc3RhdHVzKTtcbi1cdFx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKG5ldGRldik7XG4tXHR9XG4mIzQzO1x0dXNiX2ZyZWVfdXJiKHVyYik7XG4gXG4tXHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtY3RwX3VzYi1cdTAwM2V0eF9xbWVtX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRtY3RwX3VzYi1cdTAwM2V0eF9xbWVtIC09IGxlbjtcbiYjNDM7XHRpZiAobWN0cF91c2ItXHUwMDNldHhfcW1lbSBcdTAwM2MgVFhfUU1FTV9NQVggXHUwMDI2XHUwMDI2IG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiYjNDM7XHRcdG5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4mIzQzO1x0XHRcdCAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuKVxuIHtcbi1cdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xuLVx0dW5zaWduZWQgaW50IHBsZW47XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCB1cmIgKnVyYjtcbiBcdGludCByYztcbiBcbi1cdHBsZW4gPSBza2ItXHUwMDNlbGVuO1xuLVxuLVx0aWYgKHBsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpIFx1MDAzZSBNQ1RQX1VTQl9YRkVSX1NJWkUpXG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4tXG4tXHRyYyA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqaGRyKSk7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4tXG4tXHRoZHIgPSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7XG4tXHRpZiAoIWhkcilcbi1cdFx0Z290byBlcnJfZHJvcDtcbi1cbi1cdGhkci1cdTAwM2VpZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xuLVx0aGRyLVx1MDAzZXJzdmQgPSAwO1xuLVx0aGRyLVx1MDAzZWxlbiA9IHBsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpO1xuLVxuLVx0dXJiID0gbWN0cF91c2ItXHUwMDNldHhfdXJiO1xuJiM0MztcdHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0aWYgKCF1cmIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgbWN0cF91c2ItXHUwMDNldXNiZGV2LFxuIFx0XHRcdCAgdXNiX3NuZGJ1bGtwaXBlKG1jdHBfdXNiLVx1MDAzZXVzYmRldiwgbWN0cF91c2ItXHUwMDNlZXBfb3V0KSxcbi1cdFx0XHQgIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuLFxuLVx0XHRcdCAgbWN0cF91c2Jfb3V0X2NvbXBsZXRlLCBza2IpO1xuJiM0MztcdFx0XHQgIGRhdGEsIGxlbiwgbWN0cF91c2Jfb3V0X2NvbXBsZXRlLCB0eF9jdHgpO1xuJiM0MztcbiYjNDM7XHRpZiAobWN0cF91c2ItXHUwMDNlc3BhbilcbiYjNDM7XHRcdHVyYi1cdTAwM2V0cmFuc2Zlcl9mbGFncyB8PSBVUkJfWkVST19QQUNLRVQ7XG4mIzQzO1xuJiM0MztcdHVzYl9hbmNob3JfdXJiKHVyYiwgXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfYW5jaG9yKTtcbiBcbi1cdC8qIFN0b3BzIFRYIHF1ZXVlIGZpcnN0IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb24gd2l0aCBVUkIgY29tcGxldGUgKi9cbi1cdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcbiBcdHJjID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTtcbiBcdGlmIChyYykge1xuLVx0XHRuZXRpZl93YWtlX3F1ZXVlKGRldik7XG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4mIzQzO1x0XHRuZXRkZXZfZGJnKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgXCYjMzQ7VFggdXJiIHN1Ym1pdCBmYWlsZWQsICVkXFxuXCYjMzQ7LCByYyk7XG4mIzQzO1x0XHR1c2JfdW5hbmNob3JfdXJiKHVyYik7XG4mIzQzO1x0XHR1c2JfZnJlZV91cmIodXJiKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfcW1lbV9sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRtY3RwX3VzYi1cdTAwM2V0eF9xbWVtICYjNDM7PSBsZW47XG4mIzQzO1x0XHRpZiAobWN0cF91c2ItXHUwMDNldHhfcW1lbSBcdTAwM2U9IFRYX1FNRU1fTUFYKVxuJiM0MztcdFx0XHRuZXRpZl9zdG9wX3F1ZXVlKG1jdHBfdXNiLVx1MDAzZW5ldGRldik7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xuIFx0fVxuIFxuLVx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIHR4X29wcyA9IHtcbiYjNDM7XHQuc2VuZCA9IG1jdHBfdXNiX3R4X3NlbmQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0Ym9vbCBtb3JlID0gbmV0ZGV2X3htaXRfbW9yZSgpO1xuJiM0MztcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9wdXNoKGRldiwgXHUwMDI2bWN0cF91c2ItXHUwMDNldHgsIHNrYiwgbW9yZSk7XG4gXG4tZXJyX2Ryb3A6XG4tXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTtcbi1cdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG4gXG5AQCAtMTI1LDI0ICYjNDM7MTQ1LDIzIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIFJYX1JFVFJZX0RFTEFZID0gSFogLyA0O1xuIHN0YXRpYyBpbnQgbWN0cF91c2JfcnhfcXVldWUoc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiwgZ2ZwX3QgZ2ZwKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1x0dm9pZCAqYnVmO1xuIFx0aW50IHJjO1xuIFxuLVx0c2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgTUNUUF9VU0JfWEZFUl9TSVpFLCBnZnApO1xuLVx0aWYgKCFza2IpIHtcbi1cdFx0cmMgPSAtRU5PTUVNO1xuJiM0MztcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShtY3RwX3VzYi1cdTAwM2VuZXRkZXYsIFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4LFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZidWYsIFx1MDAyNmxlbiwgZ2ZwKTtcbiYjNDM7XHRpZiAocmMpXG4gXHRcdGdvdG8gZXJyX3JldHJ5O1xuLVx0fVxuIFxuIFx0dXNiX2ZpbGxfYnVsa191cmIobWN0cF91c2ItXHUwMDNlcnhfdXJiLCBtY3RwX3VzYi1cdTAwM2V1c2JkZXYsXG4gXHRcdFx0ICB1c2JfcmN2YnVsa3BpcGUobWN0cF91c2ItXHUwMDNldXNiZGV2LCBtY3RwX3VzYi1cdTAwM2VlcF9pbiksXG4tXHRcdFx0ICBza2ItXHUwMDNlZGF0YSwgTUNUUF9VU0JfWEZFUl9TSVpFLFxuLVx0XHRcdCAgbWN0cF91c2JfaW5fY29tcGxldGUsIHNrYik7XG4mIzQzO1x0XHRcdCAgYnVmLCBsZW4sIG1jdHBfdXNiX2luX2NvbXBsZXRlLCBtY3RwX3VzYik7XG4gXG4gXHRyYyA9IHVzYl9zdWJtaXRfdXJiKG1jdHBfdXNiLVx1MDAzZXJ4X3VyYiwgZ2ZwKTtcbiBcdGlmIChyYykge1xuIFx0XHRuZXRkZXZfZGJnKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgXCYjMzQ7cnggdXJiIHN1Ym1pdCBmYWlsdXJlOiAlZFxcblwmIzM0OywgcmMpO1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeCk7XG4gXHRcdGlmIChyYyA9PSAtRU5PTUVNKVxuIFx0XHRcdGdvdG8gZXJyX3JldHJ5O1xuIFx0fVxuQEAgLTE1NywxMyAmIzQzOzE3NiwxMyBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3J4X3F1ZXVlKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGdmcF90IGdmcClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByeF9lcnJfbWF4ID0gMTA7XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2luX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiB7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLVx1MDAzZWRldjtcbi1cdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IG1jdHBfc2tiX2NiICpjYjtcbi1cdHVuc2lnbmVkIGludCBsZW47XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IHVyYi1cdTAwM2Vjb250ZXh0O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBtY3RwX3VzYi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBzdGF0dXM7XG4gXG4gXHRzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuQEAgLTE3Miw4MCAmIzQzOzE5MSw1NCBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9pbl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHRjYXNlIC1FTk9FTlQ6XG4gXHRjYXNlIC1FQ09OTlJFU0VUOlxuIFx0Y2FzZSAtRVNIVVRET1dOOlxuLVx0Y2FzZSAtRVBST1RPOlxuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdC8qIGRldmljZSBzaHV0ZG93biwgZG9uJiMzOTt0IHJlc3VibWl0ICovXG4mIzQzO1x0XHRtY3RwX3VzYmxpYl9yeF9jYW5jZWwoXHUwMDI2bWN0cF91c2ItXHUwMDNlcngpO1xuIFx0XHRyZXR1cm47XG4tXHRjYXNlIDA6XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwmIzM0O3VuZXhwZWN0ZWQgcnggdXJiIHN0YXR1czogJWRcXG5cJiMzNDssIHN0YXR1cyk7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRsZW4gPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aDtcbi1cdF9fc2tiX3B1dChza2IsIGxlbik7XG4tXG4tXHR3aGlsZSAoc2tiKSB7XG4tXHRcdHN0cnVjdCBza19idWZmICpza2IyID0gTlVMTDtcbi1cdFx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xuLVx0XHR1OCBwa3RfbGVuOyAvKiBsZW5ndGggb2YgTUNUUCBwYWNrZXQsIG5vIFVTQiBoZWFkZXIgKi9cbiBcbi1cdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdFx0aGRyID0gc2tiX3B1bGxfZGF0YShza2IsIHNpemVvZigqaGRyKSk7XG4tXHRcdGlmICghaGRyKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0XHRpZiAoYmUxNl90b19jcHUoaGRyLVx1MDAzZWlkKSAhPSBNQ1RQX1VTQl9ETVRGX0lEKSB7XG4tXHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwmIzM0O3J4OiBpbnZhbGlkIGlkICUwNHhcXG5cJiMzNDssXG4tXHRcdFx0XHQgICBiZTE2X3RvX2NwdShoZHItXHUwMDNlaWQpKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuJiM0MztcdGNhc2UgLUVQSVBFOlxuJiM0MztcdFx0LyogZW5kcG9pbnQgc3RhbGw6IGNsZWFyIGhhbHQsIHdoaWNoIHdpbGwgY2F1c2UgYSByZXN1Ym1pdCAqL1xuIFxuLVx0XHRpZiAoaGRyLVx1MDAzZWxlbiBcdTAwM2Ncbi1cdFx0ICAgIHNpemVvZihzdHJ1Y3QgbWN0cF9oZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSkge1xuLVx0XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcJiMzNDtyeDogc2hvcnQgcGFja2V0IChoZHIpICVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgaGRyLVx1MDAzZWxlbik7XG4tXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRpZiAoIW1jdHBfdXNiLVx1MDAzZWluX2Vycl9jb3VudCYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdG1jdHBfdXNiLVx1MDAzZWluX2Vycl9vcmlnID0gc3RhdHVzO1xuJiM0MztcdFx0aWYgKG1jdHBfdXNiLVx1MDAzZWluX2Vycl9jb3VudCBcdTAwM2U9IHJ4X2Vycl9tYXgpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O2V4Y2Vzc2l2ZSBzdGFsbHMgZnJvbSBJTiBFUFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuLVx0XHQvKiB3ZSBrbm93IHdlIGhhdmUgYXQgbGVhc3Qgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpIGhlcmUgKi9cbi1cdFx0cGt0X2xlbiA9IGhkci1cdTAwM2VsZW4gLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcik7XG4tXHRcdGlmIChwa3RfbGVuIFx1MDAzZSBza2ItXHUwMDNlbGVuKSB7XG4tXHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4tXHRcdFx0XHQgICBcJiMzNDtyeDogc2hvcnQgcGFja2V0ICh4ZmVyKSAlZCwgYWN0dWFsICVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgaGRyLVx1MDAzZWxlbiwgc2tiLVx1MDAzZWxlbik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiYjNDM7XHRcdG1jdHBfdXNiLVx1MDAzZWNsZWFyX2hhbHQgPSB0cnVlO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWN0cF91c2ItXHUwMDNlcnhfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0aWYgKCFtY3RwX3VzYi1cdTAwM2VyeF9zdG9wcGVkKVxuJiM0MztcdFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bWN0cF91c2ItXHUwMDNlcnhfcmV0cnlfd29yayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFJYX1JFVFJZX0RFTEFZKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bWN0cF91c2ItXHUwMDNlcnhfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4KTtcbiYjNDM7XHRcdHJldHVybjtcbiBcbi1cdFx0aWYgKHBrdF9sZW4gXHUwMDNjIHNrYi1cdTAwM2VsZW4pIHtcbi1cdFx0XHQvKiBtb3JlIHBhY2tldHMgbWF5IGZvbGxvdyAtIGNsb25lIHRvIGEgbmV3XG4tXHRcdFx0ICogc2tiIHRvIHVzZSBvbiB0aGUgbmV4dCBpdGVyYXRpb25cbi1cdFx0XHQgKi9cbi1cdFx0XHRza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG4tXHRcdFx0aWYgKHNrYjIpIHtcbi1cdFx0XHRcdGlmICghc2tiX3B1bGwoc2tiMiwgcGt0X2xlbikpIHtcbi1cdFx0XHRcdFx0a2ZyZWVfc2tiKHNrYjIpO1xuLVx0XHRcdFx0XHRza2IyID0gTlVMTDtcbi1cdFx0XHRcdH1cbi1cdFx0XHR9XG4tXHRcdFx0c2tiX3RyaW0oc2tiLCBwa3RfbGVuKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwmIzM0O3VuZXhwZWN0ZWQgcnggdXJiIHN0YXR1czogJWRcXG5cJiMzNDssIHN0YXR1cyk7XG4mIzQzO1x0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRjYXNlIC1FVElNRTpcbiYjNDM7XHRjYXNlIC1FUFJPVE86XG4mIzQzO1x0Y2FzZSAtRUlMU0VROlxuJiM0MztcdGNhc2UgLUVPVkVSRkxPVzpcbiYjNDM7XHRcdC8qIHBvc3NpYmx5IHRyYW5zaWVudDsgcmVjb3JkIGZpcnN0IGZhaWx1cmUsIHJlc3VibWl0ICovXG4mIzQzO1x0XHRtY3RwX3VzYmxpYl9yeF9jYW5jZWwoXHUwMDI2bWN0cF91c2ItXHUwMDNlcngpO1xuJiM0MztcdFx0aWYgKCFtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfY291bnQmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfb3JpZyA9IHN0YXR1cztcbiYjNDM7XHRcdGlmIChtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfY291bnQgXHUwMDNlPSByeF9lcnJfbWF4KSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O2V4Y2Vzc2l2ZSBlcnJvcnMgZnJvbSBJTiBFUCwgZmlyc3Q6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1jdHBfdXNiLVx1MDAzZWluX2Vycl9vcmlnKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4mIzQzO1x0XHRicmVhaztcbiBcbi1cdFx0ZGV2X2RzdGF0c19yeF9hZGQobmV0ZGV2LCBza2ItXHUwMDNlbGVuKTtcbi1cbi1cdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7XG4tXHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuLVx0XHRjYiA9IF9fbWN0cF9jYihza2IpO1xuLVx0XHRjYi1cdTAwM2VoYWxlbiA9IDA7XG4tXHRcdG5ldGlmX3J4KHNrYik7XG4tXG4tXHRcdHNrYiA9IHNrYjI7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdFx0bWN0cF91c2JsaWJfcnhfY29tcGxldGUobmV0ZGV2LCBcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeCwgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGgpO1xuJiM0MztcdFx0bWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50ID0gMDtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0aWYgKHNrYilcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXG4gXHRtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0FUT01JQyk7XG4gfVxuIFxuQEAgLTI1Myw2ICYjNDM7MjQ2LDIwIEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX3J4X3JldHJ5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbiBcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1jdHBfdXNiLFxuIFx0XHRcdFx0XHRcdCByeF9yZXRyeV93b3JrLndvcmspO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogV2UgYXJlIG9ubHkgY2FsbGVkIHdoZW4gcnggY29tcGxldGlvbnMgYXJlIHN1c3BlbmRlZCAqL1xuJiM0MztcdGlmIChtY3RwX3VzYi1cdTAwM2VjbGVhcl9oYWx0KSB7XG4mIzQzO1x0XHRpbnQgcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShtY3RwX3VzYi1cdTAwM2V1c2JkZXYsIG1jdHBfdXNiLVx1MDAzZWVwX2luKTtcbiYjNDM7XG4mIzQzO1x0XHRyYyA9IHVzYl9jbGVhcl9oYWx0KG1jdHBfdXNiLVx1MDAzZXVzYmRldiwgcGlwZSk7XG4mIzQzO1x0XHRpZiAocmMpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihtY3RwX3VzYi1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7Y2FuJiMzOTt0IGNsZWFyIElOIEVQIGhhbHQ6ICVkXFxuXCYjMzQ7LCByYyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG1jdHBfdXNiLVx1MDAzZWNsZWFyX2hhbHQgPSBmYWxzZTtcbiYjNDM7XHR9XG4gXG4gXHRtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0tFUk5FTCk7XG4gfVxuQEAgLTI2Miw2ICYjNDM7MjY5LDggQEAgc3RhdGljIGludCBtY3RwX3VzYl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbiBcdFdSSVRFX09OQ0UobWN0cF91c2ItXHUwMDNlcnhfc3RvcHBlZCwgZmFsc2UpO1xuJiM0MztcdG1jdHBfdXNiLVx1MDAzZWNsZWFyX2hhbHQgPSBmYWxzZTtcbiYjNDM7XHRtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfY291bnQgPSAwO1xuIFxuIFx0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbiBcbkBAIC0yODQsNyAmIzQzOzI5MywxMCBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeF9yZXRyeV93b3JrKTtcbiBcbiBcdHVzYl9raWxsX3VyYihtY3RwX3VzYi1cdTAwM2VyeF91cmIpO1xuLVx0dXNiX2tpbGxfdXJiKG1jdHBfdXNiLVx1MDAzZXR4X3VyYik7XG4mIzQzO1xuJiM0MztcdHVzYl9raWxsX2FuY2hvcmVkX3VyYnMoXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfYW5jaG9yKTtcbiYjNDM7XG4mIzQzO1x0bWN0cF91c2JsaWJfdHhfY2FuY2VsKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4LCBkZXYsIFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFkpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMwMSw3ICYjNDM7MzEzLDcgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRkZXYtXHUwMDNlbXR1ID0gTUNUUF9VU0JfTVRVX01JTjtcbiBcdGRldi1cdTAwM2VtaW5fbXR1ID0gTUNUUF9VU0JfTVRVX01JTjtcbi1cdGRldi1cdTAwM2VtYXhfbXR1ID0gTUNUUF9VU0JfTVRVX01BWDtcbiYjNDM7XHRkZXYtXHUwMDNlbWF4X210dSA9IE1DVFBfVVNCXzFfMF9NVFVfTUFYO1xuIFxuIFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTtcbiBcdGRldi1cdTAwM2V0eF9xdWV1ZV9sZW4gPSBERUZBVUxUX1RYX1FVRVVFX0xFTjtcbkBAIC0zMTcsNiAmIzQzOzMyOSw3IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXHRzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcdHN0cnVjdCBtY3RwX3VzYiAqZGV2O1xuJiM0MztcdGJvb2wgc3BhbjtcbiBcdGludCByYztcbiBcbiBcdC8qIG9ubHkgb25lIGFsdGVybmF0ZSAqL1xuQEAgLTMyOCw2ICYjNDM7MzQxLDggQEAgc3RhdGljIGludCBtY3RwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcdFx0cmV0dXJuIHJjO1xuIFx0fVxuIFxuJiM0MztcdHNwYW4gPSBpZmFjZV9kZXNjLVx1MDAzZWRlc2MuYkludGVyZmFjZVN1YkNsYXNzID09IE1DVFBfVVNCX1NVQkNMQVNTX1NQQU47XG4mIzQzO1xuIFx0bmV0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqZGV2KSwgXCYjMzQ7bWN0cHVzYiVkXCYjMzQ7LCBORVRfTkFNRV9FTlVNLFxuIFx0XHRcdCAgICAgIG1jdHBfdXNiX25ldGRldl9zZXR1cCk7XG4gXHRpZiAoIW5ldGRldilcbkBAIC0zMzUsMzMgJiM0MzszNTAsNDMgQEAgc3RhdGljIGludCBtY3RwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcbiBcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgXHUwMDI2aW50Zi1cdTAwM2VkZXYpO1xuIFx0ZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRkZXYtXHUwMDNlc3BhbiA9IHNwYW47XG4gXHRkZXYtXHUwMDNlbmV0ZGV2ID0gbmV0ZGV2O1xuIFx0ZGV2LVx1MDAzZXVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XG4gXHRkZXYtXHUwMDNlaW50ZiA9IGludGY7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZkZXYtXHUwMDNlcnhfbG9jayk7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VzcGFuKVxuJiM0MztcdFx0bmV0ZGV2LVx1MDAzZW1heF9tdHUgPSBNQ1RQX1VTQl8xXzFfTVRVX01BWDtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZkZXYtXHUwMDNldHhfcW1lbV9sb2NrKTtcbiBcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGV2KTtcbiBcbiYjNDM7XHRtY3RwX3VzYmxpYl9yeF9pbml0KFx1MDAyNmRldi1cdTAwM2VyeCwgbGUxNl90b19jcHUoZXBfaW4tXHUwMDNld01heFBhY2tldFNpemUpLFxuJiM0MztcdFx0XHQgICAgZGV2LVx1MDAzZXNwYW4pO1xuJiM0MztcdG1jdHBfdXNibGliX3R4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZXR4LCBcdTAwMjZ0eF9vcHMsIGRldiwgZGV2LVx1MDAzZXNwYW4pO1xuJiM0MztcdGluaXRfdXNiX2FuY2hvcihcdTAwMjZkZXYtXHUwMDNldHhfYW5jaG9yKTtcbiYjNDM7XG4gXHRkZXYtXHUwMDNlZXBfaW4gPSBlcF9pbi1cdTAwM2ViRW5kcG9pbnRBZGRyZXNzO1xuIFx0ZGV2LVx1MDAzZWVwX291dCA9IGVwX291dC1cdTAwM2ViRW5kcG9pbnRBZGRyZXNzO1xuIFxuLVx0ZGV2LVx1MDAzZXR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7XG4gXHRkZXYtXHUwMDNlcnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghZGV2LVx1MDAzZXR4X3VyYiB8fCAhZGV2LVx1MDAzZXJ4X3VyYikge1xuJiM0MztcdGlmICghZGV2LVx1MDAzZXJ4X3VyYikge1xuIFx0XHRyYyA9IC1FTk9NRU07XG4tXHRcdGdvdG8gZXJyX2ZyZWVfdXJicztcbiYjNDM7XHRcdGdvdG8gZXJyX2Zpbmlfcnh0eDtcbiBcdH1cbiBcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNmRldi1cdTAwM2VyeF9yZXRyeV93b3JrLCBtY3RwX3VzYl9yeF9yZXRyeV93b3JrKTtcbiBcbiBcdHJjID0gbWN0cF9yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2LCBOVUxMLCBNQ1RQX1BIWVNfQklORElOR19VU0IpO1xuIFx0aWYgKHJjKVxuLVx0XHRnb3RvIGVycl9mcmVlX3VyYnM7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX3VyYjtcbiBcbiBcdHJldHVybiAwO1xuIFxuLWVycl9mcmVlX3VyYnM6XG4tXHR1c2JfZnJlZV91cmIoZGV2LVx1MDAzZXR4X3VyYik7XG4mIzQzO2Vycl9mcmVlX3VyYjpcbiBcdHVzYl9mcmVlX3VyYihkZXYtXHUwMDNlcnhfdXJiKTtcbiYjNDM7ZXJyX2Zpbmlfcnh0eDpcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9maW5pKFx1MDAyNmRldi1cdTAwM2V0eCk7XG4mIzQzO1x0bWN0cF91c2JsaWJfcnhfZmluaShcdTAwMjZkZXYtXHUwMDNlcngpO1xuIFx0ZnJlZV9uZXRkZXYobmV0ZGV2KTtcbiBcdHJldHVybiByYztcbiB9XG5AQCAtMzcxLDEzICYjNDM7Mzk2LDE1IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHRzdHJ1Y3QgbWN0cF91c2IgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XG4gXG4gXHRtY3RwX3VucmVnaXN0ZXJfbmV0ZGV2KGRldi1cdTAwM2VuZXRkZXYpO1xuLVx0dXNiX2ZyZWVfdXJiKGRldi1cdTAwM2V0eF91cmIpO1xuJiM0MztcdG1jdHBfdXNibGliX3J4X2ZpbmkoXHUwMDI2ZGV2LVx1MDAzZXJ4KTtcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9maW5pKFx1MDAyNmRldi1cdTAwM2V0eCk7XG4gXHR1c2JfZnJlZV91cmIoZGV2LVx1MDAzZXJ4X3VyYik7XG4gXHRmcmVlX25ldGRldihkZXYtXHUwMDNlbmV0ZGV2KTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1jdHBfdXNiX2RldmljZXNbXSA9IHtcbi1cdHsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQ1RQLCAweDAsIDB4MSkgfSxcbiYjNDM7XHR7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgTUNUUF9VU0JfU1VCQ0xBU1NfQkFTRSwgMHgxKSB9LFxuJiM0MztcdHsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQ1RQLCBNQ1RQX1VTQl9TVUJDTEFTU19TUEFOLCAweDEpIH0sXG4gXHR7IDAgfSxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmEyMmJlOTk5ZmEwYTFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jXG5AQCAtMCwwICYjNDM7MSw0MTAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogbWN0cC11c2JsaWItdGVzdC5jIC0gTUNUUC1vdmVyLVVTQiAoRE1URiBEU1AwMjgzKSB0cmFuc3BvcnQgaGVscGVyIGxpYnJhcnksXG4mIzQzOyAqIHVuaXQgdGVzdCBkZWZpbml0aW9ucy5cbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2t1bml0L3Rlc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbWN0cC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9tY3RwZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL21jdHAtdXNiLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiB7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4mIzQzO1x0c3RydWN0IG1jdHBfZGV2ICptZGV2O1xuJiM0MztcdHN0cnVjdCBza19idWZmX2hlYWQgcnhfcGt0cztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCB7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4mIzQzO1x0c3RydWN0IG1jdHBfcm91dGUgcnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2JsaWJfZGV2X3R4KHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHQvKiB3ZSBkb24mIzM5O3QgdHJhY2sgYW55IFRYZWQgcGFja2V0cyBhdCBwcmVzZW50ICovXG4mIzQzO1x0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0cmV0dXJuIE5FVERFVl9UWF9PSztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtY3RwX3Rlc3RfbmV0ZGV2X29wcyA9IHtcbiYjNDM7XHQubmRvX3N0YXJ0X3htaXQgPSBtY3RwX3VzYmxpYl9kZXZfdHgsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgdTE2IGVwX21heHBhY2tldCA9IDUxMjtcbiYjNDM7c3RhdGljIGNvbnN0IG1jdHBfZWlkX3QgbG9jYWxfZWlkID0gODtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdG5kZXYtXHUwMDNldHlwZSA9IEFSUEhSRF9NQ1RQO1xuJiM0MztcdG5kZXYtXHUwMDNlbXR1ID0gODE5MjtcbiYjNDM7XHRuZGV2LVx1MDAzZWZsYWdzID0gSUZGX05PQVJQO1xuJiM0MztcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNm1jdHBfdGVzdF9uZXRkZXZfb3BzO1xuJiM0MztcdG5kZXYtXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO1xuJiM0MztcdG5kZXYtXHUwMDNlcGNwdV9zdGF0X3R5cGUgPSBORVRERVZfUENQVV9TVEFUX0RTVEFUUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9kZXZfYWN0aW9uKHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldiA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VtZGV2KVxuJiM0MztcdFx0bWN0cF9kZXZfcHV0KGRldi1cdTAwM2VtZGV2KTtcbiYjNDM7XHR1bnJlZ2lzdGVyX25ldGRldihkZXYtXHUwMDNlbmRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKlxuJiM0MzttY3RwX3VzYmxpYl90ZXN0X2NyZWF0ZV9kZXYoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRuZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqZGV2KSwgXCYjMzQ7bWN0cHRlc3QlZFwmIzM0OywgTkVUX05BTUVfRU5VTSxcbiYjNDM7XHRcdFx0ICAgIG1jdHBfdXNibGliX2Rldl9zZXR1cCk7XG4mIzQzO1x0aWYgKCFuZGV2KVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGRldiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdGRldi1cdTAwM2VuZGV2ID0gbmRldjtcbiYjNDM7XHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmRldi1cdTAwM2VyeF9wa3RzKTtcbiYjNDM7XG4mIzQzO1x0cmMgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRmcmVlX25ldGRldihuZGV2KTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIG1jdHBfdXNibGliX3Rlc3RfZGV2X2FjdGlvbiwgZGV2KTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGRldi1cdTAwM2VtZGV2ID0gX19tY3RwX2Rldl9nZXQobmRldik7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VtZGV2KVxuJiM0MztcdFx0ZGV2LVx1MDAzZW1kZXYtXHUwMDNlbmV0ID0gbWN0cF9kZWZhdWx0X25ldChkZXZfbmV0KG5kZXYpKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlbWRldilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRyYyA9IGRldl9vcGVuKG5kZXYsIE5VTEwpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0KHN0cnVjdCBtY3RwX2RzdCAqZHN0LFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihza2ItXHUwMDNlZGV2KTtcbiYjNDM7XG4mIzQzO1x0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXJ4X3BrdHMsIHNrYik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uKHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eCA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBkZXZpY2Ugd2lsbCBoYXZlIGJlZW4gZGVzdHJveWVkLCBzbyAtXHUwMDNlcnQgd2lsbCBiZSB1bmxpbmtlZC5cbiYjNDM7XHQgKiBKdXN0IGVuc3VyZSB0aGF0IHRoZSByZWZjb3VudCBpcyBhcyBleHBlY3RlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRLVU5JVF9BU1NFUlRfVFJVRShjdXJyZW50LVx1MDAzZWt1bml0X3Rlc3QsXG4mIzQzO1x0XHRcdCAgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2VydC5yZWZzKSk7XG4mIzQzO1xuJiM0MztcdGtmcmVlKGN0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKm1jdHBfdXNibGliX3Rlc3RfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9yb3V0ZSAqcnQ7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRjdHggPSBremFsbG9jX29iaigqY3R4KTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgY3R4KTtcbiYjNDM7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LVx1MDAzZXJ0Lmxpc3QpO1xuJiM0MztcdHJ0ID0gXHUwMDI2Y3R4LVx1MDAzZXJ0O1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZydC1cdTAwM2VyZWZzLCAxKTtcbiYjNDM7XG4mIzQzO1x0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIG1jdHBfdXNibGliX3Rlc3RfZmluaV9hY3Rpb24sIGN0eCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZWRldiA9IG1jdHBfdXNibGliX3Rlc3RfY3JlYXRlX2Rldih0ZXN0KTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgY3R4LVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdHJ0LVx1MDAzZW1pbiA9IGxvY2FsX2VpZDtcbiYjNDM7XHRydC1cdTAwM2VtYXggPSBsb2NhbF9laWQ7XG4mIzQzO1x0cnQtXHUwMDNlZHN0X3R5cGUgPSBNQ1RQX1JPVVRFX0RJUkVDVDtcbiYjNDM7XHRydC1cdTAwM2V0eXBlID0gUlROX0xPQ0FMO1xuJiM0MztcdHJ0LVx1MDAzZWRldiA9IGN0eC1cdTAwM2VkZXYtXHUwMDNlbWRldjtcbiYjNDM7XHRydC1cdTAwM2VvdXRwdXQgPSBtY3RwX3VzYmxpYl90ZXN0X2RzdF9vdXRwdXQ7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGxpc3RfYWRkX3JjdShcdTAwMjZjdHgtXHUwMDNlcnQubGlzdCwgXHUwMDI2aW5pdF9uZXQubWN0cC5yb3V0ZXMpO1xuJiM0MztcdHJlZmNvdW50X2luYyhcdTAwMjZydC1cdTAwM2VyZWZzKTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY3R4O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBJbml0IGEgTUNUUC1vdmVyLVVTQiBwYWNrZXQgd2l0aGluIGEgYnVmZmVyLiBAbGVuIGlzIHRoZSBsZW5ndGggb2YgdGhlXG4mIzQzOyAqIGJ1ZmZlciB0byB3cml0ZSwgQHBheWxvYWRfbGVuIGlzIHRoZSByZXBvcnRlZCBzaXplIG9mIHRoZSBNQ1RQLW92ZXItVVNCXG4mIzQzOyAqIHBhY2tldC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3Qodm9pZCAqZGF0YSwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdFx0XHQgICAgICBzaXplX3QgcGF5bG9hZF9sZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0c3RydWN0IG1jdHBfdXNiX2hkciB1c2I7XG4mIzQzO1x0XHRzdHJ1Y3QgbWN0cF9oZHIgbWN0cDtcbiYjNDM7XHR9IGhkcjtcbiYjNDM7XG4mIzQzO1x0aGRyLnVzYi5pZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xuJiM0MztcdGhkci51c2IubGVuID0gY3B1X3RvX2JlMTYocGF5bG9hZF9sZW4pO1xuJiM0MztcdGhkci5tY3RwLnZlciA9IDE7XG4mIzQzO1x0aGRyLm1jdHAuZGVzdCA9IGxvY2FsX2VpZDtcbiYjNDM7XHRoZHIubWN0cC5zcmMgPSAwO1xuJiM0MztcdGhkci5tY3RwLmZsYWdzX3NlcV90YWcgPSAwO1xuJiM0MztcbiYjNDM7XHRtZW1jcHkoZGF0YSwgXHUwMDI2aGRyLCBtaW4obGVuLCBzaXplb2YoaGRyKSkpO1xuJiM0MztcdGlmIChsZW4gXHUwMDNlIHNpemVvZihoZHIpKVxuJiM0MztcdFx0bWVtc2V0KGRhdGEgJiM0Mzsgc2l6ZW9mKGhkciksIDAsIGxlbiAtIHNpemVvZihoZHIpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWN0aW9uX3J4X2Zpbmkodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcnggPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRtY3RwX3VzYmxpYl9yeF9maW5pKHJ4KTtcbiYjNDM7XHRrZnJlZShyeCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKlxuJiM0MzttY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0LCBib29sIHNwYW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cnggPSBremFsbG9jX29iaigqcngpO1xuJiM0MztcdGlmIChyeCkge1xuJiM0MztcdFx0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIGFjdGlvbl9yeF9maW5pLCByeCk7XG4mIzQzO1x0XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuJiM0MztcdH1cbiYjNDM7XHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcngpO1xuJiM0MztcdG1jdHBfdXNibGliX3J4X2luaXQocngsIGVwX21heHBhY2tldCwgc3Bhbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByeDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogV3JhcHBlcnMgZm9yIHVzYmxpYiYjMzk7cyByeF9jb21wbGV0ZSBjYWxsYmFjaywgd2hpY2ggaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkXG4mIzQzOyAqIGZyb20gYXRvbWljIGNvbnRleHRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuJiM0MztcdHJjID0gbWN0cF91c2JsaWJfcnhfY29tcGxldGUobmV0ZGV2LCByeCwgbGVuKTtcbiYjNDM7XHRsb2NhbF9iaF9lbmFibGUoKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTaW5nbGUgcGFja2V0LCBzdGFydGluZyBvbiBhIHRyYW5zZmVyIGJvdW5kYXJ5LCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluXG4mIzQzOyAqIHRoZSB0cmFuc2ZlclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuJiM0MztcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xuJiM0MztcbiYjNDM7XHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVx1MDAzZW5kZXYsIHJ4LFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZidWYsIFx1MDAyNmxlbiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XG4mIzQzO1x0Lyogd2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgbWF4cGFja2V0IG9mIHRyYW5zZmVyIGF2YWlsYWJsZSAqL1xuJiM0MztcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBsZW4sIGVwX21heHBhY2tldCk7XG4mIzQzO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QoYnVmLCA4LCA4KTtcbiYjNDM7XG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgOCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XG4mIzQzO1x0c2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX05PVF9OVUxMKHRlc3QsIHNrYik7XG4mIzQzO1x0aWYgKHNrYilcbiYjNDM7XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXHUwMDNlbGVuLCA0KTtcbiYjNDM7XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4ge1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWU7XG4mIzQzO1x0c2l6ZV90IG5fcGt0cztcbiYjNDM7XHRzaXplX3QgcGt0c1s2XTtcbiYjNDM7XHRzaXplX3Qgbl94ZmVycztcbiYjNDM7XHRzaXplX3QgeGZlcnNbNl07XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzttY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3RvX2Rlc2MoY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnQsXG4mIzQzO1x0XHRcdFx0ICBjaGFyICpkZXNjKVxuJiM0Mzt7XG4mIzQzO1x0c3Ryc2NweShkZXNjLCB0LVx1MDAzZW5hbWUsIEtVTklUX1BBUkFNX0RFU0NfU0laRSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO21jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdmFsaWRhdGUoc3RydWN0IGt1bml0ICp0ZXN0LFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICpzcGFuLFxuJiM0MztcdFx0XHRcdCAgIHNpemVfdCAqbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IHBrdF9sZW4gPSAwLCB4ZmVyX2xlbiA9IDA7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwYW4tXHUwMDNlbl9wa3RzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0S1VOSVRfQVNTRVJUX0dFX01TRyh0ZXN0LCBzcGFuLVx1MDAzZXBrdHNbaV0sIDgsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3BrdFslZF0gbGVuIHRvbyBzbWFsbCAoJXpkKSBmb3IgJXNcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIGksIHNwYW4tXHUwMDNlcGt0c1tpXSwgc3Bhbi1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdHBrdF9sZW4gJiM0Mzs9IHNwYW4tXHUwMDNlcGt0c1tpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwYW4tXHUwMDNlbl94ZmVyczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR4ZmVyX2xlbiAmIzQzOz0gc3Bhbi1cdTAwM2V4ZmVyc1tpXTtcbiYjNDM7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRX01TRyh0ZXN0LCBwa3RfbGVuLCB4ZmVyX2xlbixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O2ludmFsaWQgcGt0X2xlbiAoJXpkKSAhPSB4ZmVyX2xlbiAoJXpkKSBmb3IgJXNcJiMzNDssXG4mIzQzO1x0XHRcdCAgICBwa3RfbGVuLCB4ZmVyX2xlbiwgc3Bhbi1cdTAwM2VuYW1lKTtcbiYjNDM7XG4mIzQzO1x0KmxlbiA9IHBrdF9sZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4oc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnBrdF9zcGFuID0gdGVzdC1cdTAwM2VwYXJhbV92YWx1ZTtcbiYjNDM7XHRzaXplX3QgbGVuLCB4ZmVyX2xlbiwgb2ZmLCB4ZmVyX29mZjtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcdHU4ICpwa3RidWY7XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl92YWxpZGF0ZSh0ZXN0LCBwa3Rfc3BhbiwgXHUwMDI2bGVuKTtcbiYjNDM7XHRwa3RidWYgPSBrdW5pdF9rbWFsbG9jX2FycmF5KHRlc3QsIDEsIGxlbiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHBrdGJ1Zik7XG4mIzQzO1xuJiM0MztcdC8qIGxheSBvdXQgcGFja2V0cyAqL1xuJiM0MztcdGZvciAob2ZmID0gMCwgaSA9IDA7IGkgXHUwMDNjIHBrdF9zcGFuLVx1MDAzZW5fcGt0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGxlbiA9IHBrdF9zcGFuLVx1MDAzZXBrdHNbaV07XG4mIzQzO1x0XHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiAmIzQzOyBvZmYsIGxlbiwgbGVuKTtcbiYjNDM7XHRcdG9mZiAmIzQzOz0gbGVuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuJiM0MztcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xuJiM0MztcbiYjNDM7XHQvKiBmZWVkIHRyYW5zZmVycyAqL1xuJiM0MztcdGZvciAob2ZmID0gMCwgeGZlcl9vZmYgPSAwLCBpID0gMDsgaSBcdTAwM2MgcGt0X3NwYW4tXHUwMDNlbl94ZmVyczspIHtcbiYjNDM7XHRcdHhmZXJfbGVuID0gcGt0X3NwYW4tXHUwMDNleGZlcnNbaV0gLSB4ZmVyX29mZjtcbiYjNDM7XHRcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2YnVmLCBcdTAwMjZsZW4sIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgbGVuLCBlcF9tYXhwYWNrZXQpO1xuJiM0MztcbiYjNDM7XHRcdGxlbiA9IG1pbihsZW4sIHhmZXJfbGVuKTtcbiYjNDM7XHRcdG1lbWNweShidWYsIHBrdGJ1ZiAmIzQzOyBvZmYsIGxlbik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlbiA9PSB4ZmVyX2xlbikge1xuJiM0MztcdFx0XHQvKiB3aG9sZS9lbmQgeGZlciwgcHJvY2VlZCB0byBuZXh0ICovXG4mIzQzO1x0XHRcdHhmZXJfb2ZmID0gMDtcbiYjNDM7XHRcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHQvKiBwYXJ0aWFsICovXG4mIzQzO1x0XHRcdHhmZXJfb2ZmICYjNDM7PSBsZW47XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgbGVuKTtcbiYjNDM7XHRcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4mIzQzO1x0XHRvZmYgJiM0Mzs9IGxlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIGNoZWNrIHJlY2VpdmVkIHBhY2tldHMgKi9cbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LVx1MDAzZXJ4X3BrdHMucWxlbiwgcGt0X3NwYW4tXHUwMDNlbl9wa3RzKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyA7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFza2IpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpIFx1MDAzYyBwa3Rfc3Bhbi1cdTAwM2VuX3BrdHMpXG4mIzQzO1x0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXHUwMDNlbGVuLCBwa3Rfc3Bhbi1cdTAwM2Vwa3RzW2ldIC0gNCk7XG4mIzQzO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnNbXSA9IHtcbiYjNDM7XHQvKiBPbmUgcGFja2V0IGNvbXBsZXRlbHkgd2l0aGluIGEgdHJhbnNmZXIgKi9cbiYjNDM7XHR7IFwmIzM0OzFwMXgtY29tcGxldGVcJiMzNDssIDEsIHsgOCB9LCAxLCB7IDggfSB9LFxuJiM0MztcdC8qIFR3byBzbWFsbCBwYWNrZXRzIGNvbWJpbmVkIHdpdGhpbiBvbmUgdHJhbnNmZXIgKi9cbiYjNDM7XHR7IFwmIzM0OzJwMXgtY29tYmluZWRcJiMzNDssIDIsIHsgOCwgOCB9LCAxLCB7IDE2IH0gfSxcbiYjNDM7XHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBNQ1RQIHBheWxvYWQgKi9cbiYjNDM7XHR7IFwmIzM0OzFwMngtc3BsaXQtcGF5bG9hZFwmIzM0OywgMSwgeyAxNiB9LCAyLCB7IDgsIDggfSB9LFxuJiM0MztcdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIFVTQiB0cmFuc3BvcnQgaGVhZGVyICovXG4mIzQzO1x0eyBcJiMzNDsxcDJ4LXNwbGl0LXVzYmhkclwmIzM0OywgMSwgeyAxNiB9LCAyLCB7IDIsIDE0IH0gfSxcbiYjNDM7XHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBNQ1RQIGhlYWRlciAqL1xuJiM0MztcdHsgXCYjMzQ7MXAyeC1zcGxpdC1tY3RwaGRyXCYjMzQ7LCAxLCB7IDE2IH0sIDIsIHsgNiwgMTAgfSB9LFxuJiM0MztcdC8qIFNpbmdsZSBwYWNrZXQgc3BsaXQgb3ZlciAzIHRyYW5zZmVycywgbWlkZGxlIGVudGlyZWx5IGNvbnRpbnVhdGlvbiAqL1xuJiM0MztcdHsgXCYjMzQ7MXAzeC1zcGxpdFwmIzM0OywgMSwgeyAxMiB9LCAzLCB7IDQsIDQsIDQgfSB9LFxuJiM0MztcdC8qIE1heC1zaXplZCBzaW5nbGUgdHJhbnNmZXIgKi9cbiYjNDM7XHR7IFwmIzM0OzFwMXgtbGFyZ2VcJiMzNDssIDEsIHsgODE5MSB9LCAxLCB7IDgxOTEgfSB9LFxuJiM0MztcdC8qIFR3byBsYXJnZSBwYWNrZXRzLCBzcGxpdCBhdCB0aGUgd29yc3QtY2FzZSBmb3IgYWxsb2NhdGlvbiwgd2l0aCBhXG4mIzQzO1x0ICogc2luZ2xlIGJ5dGUgY29udGludWluZyB0aGUgc3BhblxuJiM0MztcdCAqL1xuJiM0MztcdHsgXCYjMzQ7MnAyeC1sYXJnZS1zcGxpdFwmIzM0OywgMiwgeyA4MTkwLCA4MTkwIH0sIDIsIHsgODE5MSwgODE4OSB9IH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztLVU5JVF9BUlJBWV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFucyxcbiYjNDM7XHRcdCAgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl90b19kZXNjKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzW10gPSB7XG4mIzQzO1x0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X3NpbmdsZSksXG4mIzQzO1x0S1VOSVRfQ0FTRV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLFxuJiM0MztcdFx0XHQgbWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3Bhbl9nZW5fcGFyYW1zKSxcbiYjNDM7XHR7fVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBtY3RwX3VzYmxpYl90ZXN0X3N1aXRlID0ge1xuJiM0MztcdC5uYW1lID0gXCYjMzQ7bWN0cC11c2JsaWJcJiMzNDssXG4mIzQzO1x0LnRlc3RfY2FzZXMgPSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7a3VuaXRfdGVzdF9zdWl0ZShtY3RwX3VzYmxpYl90ZXN0X3N1aXRlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZmMwMjgyMTUyZTZlZmJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuY1xuQEAgLTAsMCAmIzQzOzEsNjE2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIG1jdHAtdXNibGliLmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBoZWxwZXIgbGlicmFyeVxuJiM0MzsgKlxuJiM0MzsgKiBEU1AwMjgzIGlzIGF2YWlsYWJsZSBhdDpcbiYjNDM7ICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4xLjAucGRmXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IvbWN0cC11c2IuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbWN0cC5oXHUwMDNlXG4mIzQzO1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKVxuJiM0Mzt7XG4mIzQzO1x0bWVtc2V0KHJ4LCAwLCBzaXplb2YoKnJ4KSk7XG4mIzQzO1x0cngtXHUwMDNlc3BhbiA9IHNwYW47XG4mIzQzO1x0cngtXHUwMDNlZXBfcGt0bGVuID0gZXBfcGt0bGVuO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2luaXQpO1xuJiM0MztcbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl9yeF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpXG4mIzQzO3tcbiYjNDM7XHRrZnJlZV9za2IocngtXHUwMDNlc2tiKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9maW5pKTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFByZXBhcmUgYSB0cmFuc2ZlciBidWZmZXIgZm9yIGZ1dHVyZSBjb21wbGV0aW9uOyAqYnVmcCBhbmQgKmxlbnAgd2lsbFxuJiM0MzsgKiBiZSBwb3B1bGF0ZWQgb24gc3VjY2Vzcy5cbiYjNDM7ICovXG4mIzQzO2ludCBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsXG4mIzQzO1x0XHRcdCAgIHZvaWQgKipidWZwLCBzaXplX3QgKmxlbnAsIGdmcF90IGdmcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2IgPSByeC1cdTAwM2Vza2I7XG4mIzQzO1x0dW5zaWduZWQgaW50IGxlbiA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChza2IgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VsZW4gXHUwMDNlPSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCkge1xuJiM0MztcdFx0Lyogc29tZXRoaW5nIG11c3QgaGF2ZSBnb25lIHRlcnJpYmx5IHdyb25nLiBjbGVhciBhbmQgcmVzdGFydCAqL1xuJiM0MztcdFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKHJ4KTtcbiYjNDM7XHRcdHNrYiA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsZW4gPSByeC1cdTAwM2VzcGFuID8gQUxJR04oTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgsIHJ4LVx1MDAzZWVwX3BrdGxlbilcbiYjNDM7XHRcdDogTUNUUF9VU0JfMV8wX1hGRVJfU0laRTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFza2IpIHtcbiYjNDM7XHRcdHNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIGxlbiwgZ2ZwKTtcbiYjNDM7XHRcdGlmICghc2tiKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0fSBlbHNlIGlmIChza2ItXHUwMDNlY2xvbmVkIHx8IHNrYl90YWlscm9vbShza2IpIFx1MDAzYyByeC1cdTAwM2VlcF9wa3RsZW4pIHtcbiYjNDM7XHRcdC8qIFdlIGFsd2F5cyBuZWVkIHRvIHJlYWxsb2MgaWYgLVx1MDAzZWNsb25lZCwgYXMgd2UgY2Fubm90XG4mIzQzO1x0XHQgKiByZXN1Ym1pdCB0aGUgKG5vdy1zaGFyZWQpIHNrYiBidWZmZXIgZm9yIHBvc3NpYmxlIERNQS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBPdGhlcndpc2UgKGlmIHdlIGhhdmUgYW4gdW4tY2xvbmVkIFNLQik6IGp1c3QgZW5zdXJlIHdlXG4mIzQzO1x0XHQgKiBoYXZlIHN1ZmZpY2llbnQgc3BhY2UgdG8gcHJldmVudCBiYWJibGUuIFNpbmNlIHdlIGFsbG9jYXRlZFxuJiM0MztcdFx0ICogZm9yIG1heCBzaXplIGluIHRoZSBsYXN0IHByZXBhcmUgKGFuZCBoYXZlIG5vdCBjb25zdW1lZCBhbnlcbiYjNDM7XHRcdCAqIG9mIHRoYXQgc3BhY2UgZm9yIGEgcHJpb3IgTUNUUCBwYWNrZXQsIGJlY2F1c2UgIWNsb25lZCksIHdlXG4mIzQzO1x0XHQgKiBoYXZlIHN1ZmZpY2llbnQgZGF0YSB0byBmaW5pc2ggdGhlIGN1cnJlbnQgTUNUUCBwYWNrZXQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHN0cnVjdCBza19idWZmICpza2IyO1xuJiM0MztcbiYjNDM7XHRcdHNrYjIgPSBza2JfY29weV9leHBhbmQoc2tiLCAwLCBsZW4sIGdmcCk7XG4mIzQzO1x0XHRpZiAoIXNrYjIpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRcdHNrYiA9IHNrYjI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyeC1cdTAwM2Vza2IgPSBza2I7XG4mIzQzO1xuJiM0MztcdC8qIFNwYW5uaW5nIG1vZGUgYWxsb3dzIFpMUHMsIHNvIHdlIGRvbiYjMzk7dCByZXF1aXJlIGV4YWN0bHkgb25lXG4mIzQzO1x0ICogdHJhbnNmZXIgcGFja2V0LiBJZiB3ZSBoYXZlIGV4dHJhIHRhaWxyb29tLCBtYXkgYXMgd2VsbCB1c2UgaXQsXG4mIzQzO1x0ICogYW5kIHdlIGhhdmUgZW5zdXJlZCB0aGF0IHRoZSB0YWlscm9vbSBcdTAwM2U9IGVwX3BrdGxlbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocngtXHUwMDNlc3BhbilcbiYjNDM7XHRcdGxlbiA9IEFMSUdOX0RPV04oc2tiX3RhaWxyb29tKHNrYiksIHJ4LVx1MDAzZWVwX3BrdGxlbik7XG4mIzQzO1xuJiM0MztcdCpidWZwID0gc2tiX3RhaWxfcG9pbnRlcihza2IpO1xuJiM0MztcdCpsZW5wID0gbGVuO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IHRoaXNfY3B1X3B0cihuZXRkZXYtXHUwMDNlZHN0YXRzKTtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9za2JfY2IgKmNiO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4mIzQzO1x0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpO1xuJiM0MztcbiYjNDM7XHQvKiB3ZSYjMzk7cmUgY2FsbGVkIGZyb20gYW4gVVJCIGNvbXBsZXRpb24gaGFuZGxlciwgYW5kIGNhbm5vdCBhc3N1bWUgbG9jYWxcbiYjNDM7XHQgKiBpcnFzIGFyZSBhbHdheXMgZGlzYWJsZWRcbiYjNDM7XHQgKi9cbiYjNDM7XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuJiM0MztcdHU2NF9zdGF0c19pbmMoXHUwMDI2ZHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMpO1xuJiM0MztcdHU2NF9zdGF0c19hZGQoXHUwMDI2ZHN0YXRzLVx1MDAzZXJ4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9NQ1RQKTtcbiYjNDM7XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiYjNDM7XHRjYiA9IF9fbWN0cF9jYihza2IpO1xuJiM0MztcdGNiLVx1MDAzZWhhbGVuID0gMDtcbiYjNDM7XHRuZXRpZl9yeChza2IpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZWRzdGF0cyk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwKTtcbiYjNDM7XHR1NjRfc3RhdHNfaW5jKFx1MDAyNmRzdGF0cy1cdTAwM2VyeF9kcm9wcyk7XG4mIzQzO1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3AsIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVjZWl2ZSBhIFVTQiBjb21wbGV0aW9uIG9mIEBsZW4gYnl0ZXMgb2YgaW5jb21pbmcgZGF0YS4gV2Ugd2lsbCB0aGVuIHNwbGl0XG4mIzQzOyAqIHRoaXMgaW50byBwYWNrZXRzIGFuZCBuZXRpZl9yeCgpIGVhY2guIEludGVuZGVkIHRvIGJlIGNhbGxlZCBpbiBhdG9taWNcbiYjNDM7ICogY29udGV4dHMgLSBpZS4sIFVSQiBjb21wbGV0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBBc3N1bWVzIEBuZXRkZXYgdXNlcyBkc3RhdHMuXG4mIzQzOyAqL1xuJiM0MztpbnQgbWN0cF91c2JsaWJfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtXHUwMDNlc2tiO1xuJiM0MztcdGludCByYyA9IDA7XG4mIzQzO1xuJiM0MztcdF9fc2tiX3B1dChza2IsIGxlbik7XG4mIzQzO1xuJiM0MztcdGZvciAoOzspIHtcbiYjNDM7XHRcdHN0cnVjdCBtY3RwX3VzYl9oZHIgKmhkcjtcbiYjNDM7XHRcdHN0cnVjdCBza19idWZmICpza2IyO1xuJiM0MztcdFx0LyogbGVuZ3RoIG9mIE1DVFAgcGFja2V0LCBpbmNsdWRpbmcgVVNCIGhlYWRlciAqL1xuJiM0MztcdFx0dTE2IHBrdF9sZW47XG4mIzQzO1xuJiM0MztcdFx0Lyogbm8gaGVhZGVyIHlldCwgcmVzdWJtaXQgZm9yIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgKi9cbiYjNDM7XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKmhkcikpIHtcbiYjNDM7XHRcdFx0aWYgKCFyeC1cdTAwM2VzcGFuKSB7XG4mIzQzO1x0XHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtyeDogdGlueSB4ZmVyICglZCkgaW4gbm9uLXNwYW4gbW9kZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdFx0XHRcdHJjID0gLUVOT01TRztcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXNldDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRoZHIgPSAoc3RydWN0IG1jdHBfdXNiX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuJiM0MztcbiYjNDM7XHRcdGlmIChiZTE2X3RvX2NwdShoZHItXHUwMDNlaWQpICE9IE1DVFBfVVNCX0RNVEZfSUQpIHtcbiYjNDM7XHRcdFx0LyogQnkgcmVzZXR0aW5nIGhlcmUsIHdpbGwgc3RhcnQgdGhlIG5leHQgSU4gdHJhbnNmZXJcbiYjNDM7XHRcdFx0ICogYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IHNrYi4gVGhpcyB3aWxsIG1lYW5cbiYjNDM7XHRcdFx0ICogd2UgcmUtc3luYyB3aGVuIHdlIG5leHQgc2VlIGEgc3Bhbm5lZCBwYWNrZXQgYWxpZ25lZFxuJiM0MztcdFx0XHQgKiB3aXRoIHRoZSBzdGFydCBvZiBhIHRyYW5zZmVyLlxuJiM0MztcdFx0XHQgKlxuJiM0MztcdFx0XHQgKiBJbiBub24tc3Bhbm5pbmcgbW9kZSwgdGhpcyBqdXN0IG1lYW5zIHdlJiMzOTtsbCBkcm9wXG4mIzQzO1x0XHRcdCAqIHRoZSBjdXJyZW50IHRyYW5zZmVyIG9ubHlcbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcJiMzNDtyeDogaW52YWxpZCBpZCAlMDR4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIGJlMTZfdG9fY3B1KGhkci1cdTAwM2VpZCkpO1xuJiM0MztcdFx0XHRyYyA9IC1FUFJPVE87XG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc2V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHBrdF9sZW4gPSBiZTE2X3RvX2NwdShoZHItXHUwMDNlbGVuKTtcbiYjNDM7XHRcdC8qIHYxLjEsIHdpdGggc3BhbiBlbmFibGVkLCBoYXMgYSAxMy1iaXQgbGVuZ3RoICovXG4mIzQzO1x0XHRwa3RfbGVuIFx1MDAyNj0gcngtXHUwMDNlc3BhbiA/XG4mIzQzO1x0XHRcdE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYIDogTUNUUF9VU0JfMV8wX1BLVExFTl9NQVg7XG4mIzQzO1x0XHRpZiAocGt0X2xlbiBcdTAwM2Mgc2l6ZW9mKCpoZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgbWN0cF9oZHIpKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcJiMzNDtyeDogaW52YWxpZCBsZW4gJWRcXG5cJiMzNDssIHBrdF9sZW4pO1xuJiM0MztcdFx0XHRyYyA9IC1FUFJPVE87XG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc2V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIHNwYW4gY29udGludWVzIHRvIHRoZSBuZXh0IHRyYW5zZmVyLCByZXN1Ym1pdCAqL1xuJiM0MztcdFx0aWYgKHBrdF9sZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pIHtcbiYjNDM7XHRcdFx0aWYgKCFyeC1cdTAwM2VzcGFuKSB7XG4mIzQzO1x0XHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtyeDogc2hvcnQgeGZlciAoJWQgdnMgJWQpIGluIG5vbi1zcGFuIG1vZGVcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBwa3RfbGVuLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHRcdFx0XHRyYyA9IC1FTk9NU0c7XG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzZXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0Lyogd2UgaGF2ZSAoZXhhY3RseSkgYSBjb21wbGV0ZSBwYWNrZXQsIFJYIGl0IGRpcmVjdGx5ICovXG4mIzQzO1x0XHRpZiAocGt0X2xlbiA9PSBza2ItXHUwMDNlbGVuKSB7XG4mIzQzO1x0XHRcdG1jdHBfdXNibGliX3J4KG5ldGRldiwgc2tiKTtcbiYjNDM7XHRcdFx0cngtXHUwMDNlc2tiID0gTlVMTDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogbW9yZSBwYWNrZXRzIGZvbGxvdyAtIFJYIGEgY2xvbmUgc28gdGhhdCB3ZSBjYW4gY29udGludWVcbiYjNDM7XHRcdCAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgU0tCLCB3aGljaCBtYXkgYmUgdGhlIHN0YXJ0IG9mIGFcbiYjNDM7XHRcdCAqIHNwYW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRcdGlmIChza2IyKSB7XG4mIzQzO1x0XHRcdHNrYl90cmltKHNrYjIsIHBrdF9sZW4pO1xuJiM0MztcdFx0XHRtY3RwX3VzYmxpYl9yeChuZXRkZXYsIHNrYjIpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bWN0cF91c2JsaWJfcnhfc3RhdHNfc2luZ2xlX2Ryb3AobmV0ZGV2KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNrYl9wdWxsKHNrYiwgcGt0X2xlbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9yZXNldDpcbiYjNDM7XHRkZXZfa2ZyZWVfc2tiX2FueShyeC1cdTAwM2Vza2IpO1xuJiM0MztcdHJ4LVx1MDAzZXNrYiA9IE5VTEw7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENhbmNlbCBhIHJ4IGNvbnRleHQ7IHN1YnNlcXVlbnQgcHJlcGFyZS9jb21wbGV0ZSBjYWxscyB3aWxsIG5vdCBiZSBhXG4mIzQzOyAqIGNvbnRpbnVhdGlvbiBvZiBhbnkgZGF0YSBhbHJlYWR5IHJlY2VpdmVkLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl9yeF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcbiYjNDM7e1xuJiM0MztcdGRldl9rZnJlZV9za2JfYW55KHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0cngtXHUwMDNlc2tiID0gTlVMTDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9jYW5jZWwpO1xuJiM0MztcbiYjNDM7LyogdHJhbnNtaXQgY29udGV4dDogZW5jYXBzdWxhdGVzIG9uZSB0cmFuc2ZlciAqL1xuJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4IHtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4O1xuJiM0MztcdHN0cnVjdCBza19idWZmX2hlYWQgc2ticztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYnVmX2xlbiwgbGVuO1xuJiM0MztcdGVudW0gbWN0cF91c2JsaWJfdHhfYnVmX3R5cGUge1xuJiM0MztcdFx0VFhfU0lOR0xFLFxuJiM0MztcdFx0VFhfRkxBVCxcbiYjNDM7XHR9IGJ1Zl90eXBlO1xuJiM0MztcdHU4IGJ1ZltdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxuJiM0MztcdFx0XHQgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLFxuJiM0MztcdFx0XHQgdm9pZCAqcHJpdiwgYm9vbCBzcGFuKVxuJiM0Mzt7XG4mIzQzO1x0bWVtc2V0KHR4LCAwLCBzaXplb2YoKnR4KSk7XG4mIzQzO1x0dHgtXHUwMDNlb3BzID0gKm9wcztcbiYjNDM7XHR0eC1cdTAwM2Vwcml2ID0gcHJpdjtcbiYjNDM7XHR0eC1cdTAwM2VzcGFuID0gc3BhbjtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0eC1cdTAwM2Vsb2NrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9pbml0KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfYXZhaWwoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGN0eC1cdTAwM2VidWZfdHlwZSA9PSBUWF9TSU5HTEUgPyAwIDogY3R4LVx1MDAzZWJ1Zl9sZW4gLSBjdHgtXHUwMDNlbGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBtY3RwX3VzYmxpYl90eF9zaG91bGRfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHQvKiBVc2UgdGhlIGJhc2VsaW5lIGxlbmd0aCAoaWUsIEJUVSkgYXMgYW4gYXBwcm94aW1hdGVcbiYjNDM7XHQgKiBcJiMzNDtyZWFzb25hYmx5LXNpemVkXCYjMzQ7IHBhY2tldCB3ZSBjb3VsZCBleHBlY3QuIElmIHRoZXJlIGlzXG4mIzQzO1x0ICogaW5zdWZmaWNpZW50IGNhcGFjaXR5IGZvciB0aGF0LCB0aGVuIHNlbmQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y29uc3Qgc2l6ZV90IHBrdF9sZW4gPSBNQ1RQX1VTQl9CVFUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWN0cF91c2JsaWJfdHhfYXZhaWwoY3R4KSBcdTAwM2MgcGt0X2xlbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUgLSBpbmRpY2F0aW5nIHRoYXQgdGhlIG5ldyBza2JcbiYjNDM7ICogY291bGQgbm90IGJlIGFwcGVuZGVkLiBTbywgZXJyb3JzIHJlcG9ydGVkIGhlcmUgdG8gdGhlIFRYIHBhdGggd2lsbCByZXN1bHRcbiYjNDM7ICogaW4gdGhlIFRYIGJlaW5nIHRyYW5zbWl0dGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBtY3RwX3VzYmxpYl90eF9hcHBlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2VidWZfdHlwZSA9PSBUWF9TSU5HTEUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKG1jdHBfdXNibGliX3R4X2F2YWlsKGN0eCkgXHUwMDNjIHNrYi1cdTAwM2VsZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0JVRlM7XG4mIzQzO1xuJiM0MztcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2Y3R4LVx1MDAzZXNrYnMsIHNrYik7XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VsZW4gJiM0Mzs9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcbiYjNDM7XHQvKiBJZiB3ZSBoYXZlIGEgcWxlbiBvZiAxLCB3ZSBvbmx5IGVuZGVkIHVwIHBhY2tpbmcgYSBzaW5nbGUgc2tiLFxuJiM0MztcdCAqIGRlc3BpdGUgYWxsb2NhdGluZyBmb3IgbXVsdGlwbGUuIFNraXAgdGhlIGNvcHkgYW5kIHNlbmQgZGlyZWN0bHlcbiYjNDM7XHQgKiBmcm9tIHRoZSBza2IgZGF0YS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY3R4LVx1MDAzZWJ1Zl90eXBlID09IFRYX1NJTkdMRSB8fCBjdHgtXHUwMDNlc2ticy5xbGVuID09IDEpIHtcbiYjNDM7XHRcdGJ1ZiA9IGN0eC1cdTAwM2Vza2JzLm5leHQtXHUwMDNlZGF0YTtcbiYjNDM7XG4mIzQzO1x0fSBlbHNlIGlmIChjdHgtXHUwMDNlYnVmX3R5cGUgPT0gVFhfRkxBVCkge1xuJiM0MztcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHRcdHNpemVfdCBwb3MgPSAwO1xuJiM0MztcbiYjNDM7XHRcdHNrYl9xdWV1ZV93YWxrKFx1MDAyNmN0eC1cdTAwM2Vza2JzLCBza2IpIHtcbiYjNDM7XHRcdFx0c2tiX2NvcHlfYml0cyhza2IsIDAsIGN0eC1cdTAwM2VidWYgJiM0MzsgcG9zLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHRcdFx0cG9zICYjNDM7PSBza2ItXHUwMDNlbGVuO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGJ1ZiA9IGN0eC1cdTAwM2VidWY7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGN0eC1cdTAwM2V0eC1cdTAwM2VvcHMuc2VuZChjdHgsIGJ1ZiwgY3R4LVx1MDAzZWxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCxcbiYjNDM7XHRcdFx0XHQgICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjdHgpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZjdHgtXHUwMDNlc2ticykpICE9IE5VTEwpXG4mIzQzO1x0XHRkZXZfa2ZyZWVfc2tiX2FueV9yZWFzb24oc2tiLCByZWFzb24pO1xuJiM0MztcdGtmcmVlKGN0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0eF9jdHgtXHUwMDNldHgtXHUwMDNlcHJpdjtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jdHhfcHJpdik7XG4mIzQzO1xuJiM0MzsvKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIHR4IFx1MDAyNiBjb21wbGV0aW9uIHBhdGggaXMgcXVpZXNjZWQgKi9cbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgpXG4mIzQzO3tcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZSh0eC1cdTAwM2VjdXJfY3R4LCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfZmluaSk7XG4mIzQzO1xuJiM0MzsvKiBNYXggc2l6ZSBvZiBhIHNwYW5uZWQgVFguIFNpbmNlIHdlIGFsbG9jYXRlIGEgc2VwYXJhdGUgc3BhbiBidWZmZXIsIGxpbWl0XG4mIzQzOyAqIHRoZSB0eC10aW1lIGFsbG9jYXRpb25zIHRvIDRrLiBMYXJnZXIgcGFja2V0cyB3aWxsIGJlIHNlbnQgYXMgc2luZ2xlXG4mIzQzOyAqIHRyYW5zZmVycy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgVFhfU1BBTl9NQVggPSA0MDk2IC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHgpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKlxuJiM0MzttY3RwX3VzYmxpYl90eF9jdHhfY3JlYXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdCAgYm9vbCBzaW5nbGUpXG4mIzQzO3tcbiYjNDM7XHRlbnVtIG1jdHBfdXNibGliX3R4X2J1Zl90eXBlIHR5cGU7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4O1xuJiM0MztcdHNpemVfdCBzeiA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChzaW5nbGUgfHwgc2tiLVx1MDAzZWxlbiBcdTAwM2UgVFhfU1BBTl9NQVgpIHtcbiYjNDM7XHRcdHR5cGUgPSBUWF9TSU5HTEU7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHR5cGUgPSBUWF9GTEFUO1xuJiM0MztcdFx0c3ogPSB0eC1cdTAwM2VzcGFuID8gVFhfU1BBTl9NQVggOiBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3R4ID0ga3phbGxvY19mbGV4KCpjdHgsIGJ1Ziwgc3osIEdGUF9BVE9NSUMpO1xuJiM0MztcdGlmICghY3R4KVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2V0eCA9IHR4O1xuJiM0MztcdGN0eC1cdTAwM2VidWZfdHlwZSA9IHR5cGU7XG4mIzQzO1x0Y3R4LVx1MDAzZWJ1Zl9sZW4gPSBzejtcbiYjNDM7XHRjdHgtXHUwMDNlbGVuID0gc2tiLVx1MDAzZWxlbjtcbiYjNDM7XHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmN0eC1cdTAwM2Vza2JzKTtcbiYjNDM7XHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNmN0eC1cdTAwM2Vza2JzLCBza2IpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY3R4O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdGJvb2wgb2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IGdldF9jcHVfcHRyKGRldi1cdTAwM2Vkc3RhdHMpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0aWYgKG9rKSB7XG4mIzQzO1x0XHQvKiBPbmx5IGluY2x1ZGUgdGhlIG5ldHdvcmstbGF5ZXIgZGF0YSBpbiB0eCBzdGF0czsgd2Uga25vd1xuJiM0MztcdFx0ICogdGhhdCB0aGVyZSBpcyBhIDQtYnl0ZSBoZWFkZXIgcHVzaGVkIHRvIGFsbCBza2JzIGluXG4mIzQzO1x0XHQgKiB0eF9za2JfcHJlcGFyZSgpXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHU2NCBuID0gY3R4LVx1MDAzZXNrYnMucWxlbjtcbiYjNDM7XHRcdHM2NCBsZW4gPSBjdHgtXHUwMDNlbGVuIC0gKG4gKiBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpO1xuJiM0MztcbiYjNDM7XHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X3BhY2tldHMsIG4pO1xuJiM0MztcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZkc3RhdHMtXHUwMDNldHhfYnl0ZXMsIGxlbik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X2Ryb3BzLCBjdHgtXHUwMDNlc2ticy5xbGVuKTtcbiYjNDM7XHR9XG4mIzQzO1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3AsIGZsYWdzKTtcbiYjNDM7XHRwdXRfY3B1X3B0cihkZXYtXHUwMDNlZHN0YXRzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gZ2V0X2NwdV9wdHIoZGV2LVx1MDAzZWRzdGF0cyk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwKTtcbiYjNDM7XHR1NjRfc3RhdHNfaW5jKFx1MDAyNmRzdGF0cy1cdTAwM2V0eF9kcm9wcyk7XG4mIzQzO1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3AsIGZsYWdzKTtcbiYjNDM7XHRwdXRfY3B1X3B0cihkZXYtXHUwMDNlZHN0YXRzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ29tcGxldGlvbiBmb3IgdGhlIC1cdTAwM2VzZW5kKCkgb3AuIFRoaXMgd2lsbCB1cGRhdGUgbmV0ZGV2IHN0YXRzIGFuZFxuJiM0MzsgKiBmcmVlIHRoZSB0eCBjb250ZXh0LlxuJiM0MzsgKlxuJiM0MzsgKiBMaWtlbHkgY2FsbGVkIGZyb20gKGF0b21pYykgVVJCIGNvbXBsZXRpb24gY29udGV4dC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG9rKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID1cbiYjNDM7XHRcdG9rID8gU0tCX0NPTlNVTUVEIDogU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG4mIzQzO1xuJiM0MztcdG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZSh0eF9jdHgsIGRldiwgb2spO1xuJiM0MztcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHR4X2N0eCwgcmVhc29uKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKTtcbiYjNDM7XG4mIzQzOy8qIFByZXBhcmUgYSBza2IgZm9yIHB1c2goKVxuJiM0MzsgKlxuJiM0MzsgKiBPbiBlcnJvciwgcG9wdWxhdGVzIEByZWFzb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X3NrYl9wcmVwYXJlKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgc3BhbixcbiYjNDM7XHRcdFx0XHQgICAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiAqcmVhc29uKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwbGVuLCBtYXhfbGVuO1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYl9oZHIgKmhkcjtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdG1heF9sZW4gPSBzcGFuID8gTUNUUF9VU0JfMV8xX1BLVExFTl9NQVggOiBNQ1RQX1VTQl8xXzBfUEtUTEVOX01BWDtcbiYjNDM7XG4mIzQzO1x0cGxlbiA9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1x0aWYgKHBsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpIFx1MDAzZSBtYXhfbGVuKSB7XG4mIzQzO1x0XHQqcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1BLVF9UT09fQklHO1xuJiM0MztcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJjID0gc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdCpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9NRU07XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRoZHIgPSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7XG4mIzQzO1x0aWYgKCFoZHIpIHtcbiYjNDM7XHRcdCpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9NRU07XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGhkci1cdTAwM2VpZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xuJiM0MztcdGhkci1cdTAwM2VsZW4gPSBjcHVfdG9fYmUxNihwbGVuICYjNDM7IHNpemVvZigqaGRyKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQdXNoIGEgbmV3IHNrYiB0byB0aGUgdHJhbnNmZXIuIE1heSByZXN1bHQgaW4gemVybyBvciBtb3JlIGNhbGxzIHRvXG4mIzQzOyAqIG9wcy1cdTAwM2VzZW5kKCkuXG4mIzQzOyAqXG4mIzQzOyAqIFRha2VzIG93bmVyc2hpcCBvZiBAc2tiLCBpbmNsdWRpbmcgb24gZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztpbnQgbWN0cF91c2JsaWJfdHhfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxuJiM0MztcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsICpzZW5kX2N0eCA9IE5VTEw7XG4mIzQzO1x0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uO1xuJiM0MztcdGNvbnN0IGludCBtYXhfdHJpZXMgPSAzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0aW50IHRyeSA9IDEsIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IG1jdHBfdXNibGliX3R4X3NrYl9wcmVwYXJlKHNrYiwgdHgtXHUwMDNlc3BhbiwgXHUwMDI2cmVhc29uKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7XG4mIzQzO1x0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcbiYjNDM7XHRcdC8qIHdlIG1heSBzdGlsbCBuZWVkIHRvIHByb2NlZWQsIGluIGNhc2UgYW4gZXhpc3RpbmcgY3R4XG4mIzQzO1x0XHQgKiBpcyBub3cgc2VuZGFibGUgKGllLjogIW1vcmUpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRza2IgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG4mIzQzO3JldHJ5OlxuJiM0MztcdC8qIFRyeSBhbmQgcXVldWUgdG8gdGhlIGN1cnJlbnQgY29udGV4dC4gV2UgZXhpdCB0aGlzIGNyaXRpY2FsIHNlY3Rpb25cbiYjNDM7XHQgKiB3aXRoIGEgZmV3IGJpdHMgb2Ygc3RhdGU6XG4mIzQzO1x0ICogIC0gc2VuZF9jdHg6IGluZGljYXRpbmcgYSBwcmlvciBjb250ZXh0IHRoYXQgbmVlZHMgdG8gYmUgc2VudFxuJiM0MztcdCAqICAtIHNrYjogaW5kaWNhdGluZyB0aGF0IGEgc2tiIHN0aWxsIG5lZWRzIHRvIGJlIHF1ZXVlZC9zZW50XG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdGN0eCA9IHR4LVx1MDAzZWN1cl9jdHg7XG4mIzQzO1x0aWYgKGN0eCkge1xuJiM0MztcdFx0aWYgKHNrYikge1xuJiM0MztcdFx0XHRyYyA9IG1jdHBfdXNibGliX3R4X2FwcGVuZChjdHgsIHNrYik7XG4mIzQzO1x0XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRcdC8qIGNhbiYjMzk7dCBhcHBlbmQgdG8gdGhlIHBlbmRpbmcgdHggLSBkZXRhY2ggZm9yXG4mIzQzO1x0XHRcdFx0ICogc2VuZGluZywgYW5kIHdlJiMzOTtsbCBjcmVhdGUgYSBuZXcgdHggYmVsb3cuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0c3dhcCh0eC1cdTAwM2VjdXJfY3R4LCBzZW5kX2N0eCk7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0Lyogd2UgaGF2ZSBxdWV1ZWQgKi9cbiYjNDM7XHRcdFx0XHRza2IgPSBOVUxMO1xuJiM0MztcdFx0XHRcdGlmICghbW9yZSB8fCBtY3RwX3VzYmxpYl90eF9zaG91bGRfc2VuZChjdHgpKVxuJiM0MztcdFx0XHRcdFx0c3dhcCh0eC1cdTAwM2VjdXJfY3R4LCBzZW5kX2N0eCk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH0gZWxzZSBpZiAoIW1vcmUpIHtcbiYjNDM7XHRcdFx0c3dhcCh0eC1cdTAwM2VjdXJfY3R4LCBzZW5kX2N0eCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAoc2VuZF9jdHgpIHtcbiYjNDM7XHRcdHJjID0gbWN0cF91c2JsaWJfdHhfc2VuZChzZW5kX2N0eCk7XG4mIzQzO1x0XHRpZiAocmMpIHtcbiYjNDM7XHRcdFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKHNlbmRfY3R4LCBkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoc2VuZF9jdHgsIHJlYXNvbik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzZW5kX2N0eCA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiB3ZSBoYXZlIGVpdGhlciBxdWV1ZWQsIG9yIHRoZSBwcmVwYXJlIGZhaWxlZDsgbm90aGluZyBtb3JlIHRvIGRvICovXG4mIzQzO1x0aWYgKCFza2IpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdHhfY3R4X2NyZWF0ZSh0eCwgc2tiLCAhbW9yZSk7XG4mIzQzO1x0aWYgKCFjdHgpIHtcbiYjNDM7XHRcdG5ldGRldl9kYmcoZGV2LCBcJiMzNDtUWCBjb250ZXh0IGNyZWF0ZSBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3AoZGV2KTtcbiYjNDM7XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBpZiB3ZSYjMzk7cmUgcmVhZHkgdG8gc2VuZCBub3csIG5vIG5lZWQgdG8gZW5xdWV1ZSAqL1xuJiM0MztcdGlmICghbW9yZSB8fCBtY3RwX3VzYmxpYl90eF9zaG91bGRfc2VuZChjdHgpKSB7XG4mIzQzO1x0XHRyYyA9IG1jdHBfdXNibGliX3R4X3NlbmQoY3R4KTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoY3R4LCBkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0aWYgKCF0eC1cdTAwM2VjdXJfY3R4KSB7XG4mIzQzO1x0XHR0eC1cdTAwM2VjdXJfY3R4ID0gY3R4O1xuJiM0MztcdFx0Y3R4ID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdC8qIHdlIG1heSBoYXZlIGxvc3QgdGhlIHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgdHg7IHNob3VsZG4mIzM5O3QgaGFwcGVuLCBhc1xuJiM0MztcdCAqIG5kb19zdGFydF94bWl0IHNob3VsZCBiZSBzZXJpYWxpc2VkIG92ZXIgb25lIHF1ZXVlLCBidXQgdHJ5IGFnYWluXG4mIzQzO1x0ICogZnJvbSB0aGUgdG9wLCBhcyB3ZSBtYXkgYmUgYWJsZSB0byBxdWV1ZSB0aGUgc2tiIHRvIHRoYXQgY29udGV4dC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY3R4KSB7XG4mIzQzO1x0XHQvKiB1bmxpbmsgdGhlIG5ldyAoc29sZSkgc2tiLCB3ZSBkb24mIzM5O3Qgd2FudCBpdCBmcmVlZCB3aXRoIGN0eCAqL1xuJiM0MztcdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmN0eC1cdTAwM2Vza2JzKTtcbiYjNDM7XHRcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKGN0eCwgcmVhc29uKTtcbiYjNDM7XHRcdGlmICgmIzQzOyYjNDM7dHJ5IFx1MDAzZSBtYXhfdHJpZXMpIHtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRcdG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7XG4mIzQzO1x0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfcHVzaCk7XG4mIzQzO1xuJiM0MzsvKiBDYW5jZWwgYSB0eDogYW55IHVuLXNlbnQgY29udGV4dCBpcyByZWxlYXNlZC4gKi9cbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4ID0gTlVMTDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0c3dhcCh0eC1cdTAwM2VjdXJfY3R4LCBjdHgpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWN0eClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKGN0eCwgZGV2LCBmYWxzZSk7XG4mIzQzO1x0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2NhbmNlbCk7XG4mIzQzO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0plcmVteSBLZXJyIFx1MDAzY2prQGNvZGVjb25zdHJ1Y3QuY29tLmF1XHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01DVFAgVVNCIHRyYW5zcG9ydCBsaWJyYXJ5XCYjMzQ7KTtcbiYjNDM7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVClcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bWN0cC11c2JsaWItdGVzdC5jXCYjMzQ7XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9tY3RwLXVzYi5oXG5pbmRleCBhMmY2ZjFlMDRlZmJkMC4uMzVjYzJjYzE1ZjlhMDQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9tY3RwLXVzYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3VzYi9tY3RwLXVzYi5oXG5AQCAtMiw3ICYjNDM7Miw3IEBAXG4gLypcbiAgKiBtY3RwLXVzYi5oIC0gTUNUUCBVU0IgdHJhbnNwb3J0IGJpbmRpbmc6IGNvbW1vbiBkZWZpbml0aW9ucyxcbiAgKiBiYXNlZCBvbiBETVRGMDI4MyBzcGVjaWZpY2F0aW9uOlxuLSAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMC4xLnBkZlxuJiM0MzsgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGZcbiAgKlxuICAqIFRoZXNlIGFyZSBwcm90b2NvbC1sZXZlbCBkZWZpbml0aW9ucywgdGhhdCBtYXkgYmUgc2hhcmVkIGJldHdlZW4gaG9zdFxuICAqIGFuZCBnYWRnZXQgZHJpdmVycy5cbkBAIC0xMywxOCAmIzQzOzEzLDk2IEBAXG4gI2lmbmRlZiBfX0xJTlVYX1VTQl9NQ1RQX1VTQl9IXG4gI2RlZmluZSBfX0xJTlVYX1VTQl9NQ1RQX1VTQl9IXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydCBoZWFkZXIuIERTUDAyODMgdjEuMCBoYXMgYW4gOC1iaXQgbGVuZ3RoIGZpZWxkXG4mIzQzOyAqIChwcmVjZWRlZCBieSA4IHJlc2VydmVkIGJpdHMpLCB2MS4xIGhhcyBhIDEzLWJpdCBsZW5ndGggZmllbGQgKHByZWNlZGVkIGJ5XG4mIzQzOyAqIDMgcmVzZXJ2ZWQgYml0cykuIFdlIHVzZSBhIGJlMTYgZm9yIG91ciBsZW5ndGggdG8gaGFuZGxlIHRoZSBsYXJnZXIgdjEuMVxuJiM0MzsgKiByZXByZXNlbnRhdGlvbiwgYW5kIG1hc2sgYXMgYXBwcm9wcmlhdGUuXG4mIzQzOyAqL1xuIHN0cnVjdCBtY3RwX3VzYl9oZHIge1xuIFx0X19iZTE2XHRpZDtcbi1cdHU4XHRyc3ZkO1xuLVx0dThcdGxlbjtcbiYjNDM7XHRfX2JlMTZcdGxlbjtcbiB9IF9fcGFja2VkO1xuIFxuLSNkZWZpbmUgTUNUUF9VU0JfWEZFUl9TSVpFXHQ1MTJcbiYjNDM7LyogbWF4IHRyYW5zZmVyIHNpemUgZm9yIERTUDAyODMgdjEuMCAqL1xuJiM0MzsjZGVmaW5lIE1DVFBfVVNCXzFfMF9YRkVSX1NJWkVcdDUxMlxuICNkZWZpbmUgTUNUUF9VU0JfQlRVXHRcdDY4XG4gI2RlZmluZSBNQ1RQX1VTQl9NVFVfTUlOXHRNQ1RQX1VTQl9CVFVcbi0jZGVmaW5lIE1DVFBfVVNCX01UVV9NQVhcdChVOF9NQVggLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpXG4mIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8wX1BLVExFTl9NQVhcdFU4X01BWFxuJiM0MzsjZGVmaW5lIE1DVFBfVVNCXzFfMF9NVFVfTUFYXHQoTUNUUF9VU0JfMV8wX1BLVExFTl9NQVggLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpXG4mIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8xX1BLVExFTl9NQVhcdEdFTk1BU0soMTIsIDApXG4mIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8xX01UVV9NQVhcdChNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSlcbiAjZGVmaW5lIE1DVFBfVVNCX0RNVEZfSURcdDB4MWFiNFxuIFxuJiM0MzsvKiBtY3RwLXVzYmxpYiAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUlggaGFuZGxlOiBkcml2ZXJzIHdpbGwgdHlwaWNhbGx5IGNyZWF0ZSBvbmUgb24gaW5pdCwgd2hpY2ggcGVyc2lzdHMgZm9yXG4mIzQzOyAqIHRoZSBsaWZlIG9mIHRoZSBkcml2ZXIuIFRoZSBzYW1lIGhhbmRsZSBpcyB1c2VkIGZvciBwcm9ncmVzc2l2ZVxuJiM0MzsgKiBwcmVwYXJlIC1cdTAwM2UgY29tcGxldGUgb3BlcmF0aW9ucyAoZm9yIGVhY2ggaW5jb21pbmcgVVNCIHRyYW5zZmVyKSwgd2hpY2hcbiYjNDM7ICogcmVzdWx0IGluIG5ldGlmX3J4KCktaW5nIHRoZSBNQ1RQIHBhY2tldHMgcmVjZWl2ZWRcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl9yeCB7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHR1MTYgZXBfcGt0bGVuO1xuJiM0MztcdGJvb2wgc3BhbjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3ZvaWQgbWN0cF91c2JsaWJfcnhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCB1MTYgZXBfcGt0bGVuLCBib29sIHNwYW4pO1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCk7XG4mIzQzO1xuJiM0MztpbnQgbWN0cF91c2JsaWJfcnhfcHJlcGFyZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LFxuJiM0MztcdFx0XHQgICB2b2lkICoqYnVmcCwgc2l6ZV90ICpsZW5wLCBnZnBfdCBnZnApO1xuJiM0MztcbiYjNDM7aW50IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCBzaXplX3QgbGVuKTtcbiYjNDM7XG4mIzQzO3ZvaWQgbWN0cF91c2JsaWJfcnhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVFggaGFuZGxlOiBjcmVhdGVkIGJ5IG1jdHBfdXNibGliX3R4X3B1c2goKSBkdXJpbmcgdGhlIHR4IHBhdGgsIGFuZFxuJiM0MzsgKiBtYXkgcGVyc2lzdCBhY3Jvc3MgbXVsdGlwbGUgcGFja2V0IHRyYW5zbWl0cy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHg7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIHtcbiYjNDM7XHQvKiBTdGFydCBhIFVTQiBUWCBmb3IgQGRhdGEuIE9uIHJldHVybmluZyBzdWNjZXNzLCB0aGUgaW1wbGVtZW50YXRpb25cbiYjNDM7XHQgKiBtdXN0IGFycmFuZ2UgZm9yIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUoKSB0byBiZSBjYWxsZWQgYXQgc29tZVxuJiM0MztcdCAqIGxhdGVyIHBvaW50IChlZy4sIG9uIHVyYiBjb21wbGV0aW9uKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnQgKCpzZW5kKShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3R4IHtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wcztcbiYjNDM7XHR2b2lkICpwcml2O1xuJiM0MztcdGJvb2wgc3BhbjtcbiYjNDM7XHQvKiBwcm90ZWN0cyBhY2Nlc3MgdG8gY3VyX2N0eCAqL1xuJiM0MztcdHNwaW5sb2NrX3QgbG9jaztcbiYjNDM7XHQvKiBjb250ZXh0IHRvIHdoaWNoIHdlIGFyZSBhZGRpbmcgcGFja2V0cywgY2xlYXJlZCBvbiBzZW5kICovXG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3VyX2N0eDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxuJiM0MztcdFx0XHQgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLCB2b2lkICpwcml2LFxuJiM0MztcdFx0XHQgYm9vbCBzcGFuKTtcbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgpO1xuJiM0MztcbiYjNDM7dm9pZCAqbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4KTtcbiYjNDM7XG4mIzQzO2ludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsXG4mIzQzO1x0XHRcdHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgbW9yZSk7XG4mIzQzO1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBvayk7XG4mIzQzO1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pO1xuJiM0MztcbiAjZW5kaWYgLyogIF9fTElOVVhfVVNCX01DVFBfVVNCX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQ1RQJiMzNDssCiAgICAmIzM0O01DVFBfVFJBTlNQT1JUX1VTQiYjMzQ7LAogICAgJiMzNDtNQ1RQX1RSQU5TUE9SVF9VU0JMSUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3J4X2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3R4X3B1c2gmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYl9pbl9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYl9vdXRfY29tcGxldGUmIzM0OywKICAgICYjMzQ7bWN0cF91c2JfdHhfc2VuZCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYl9zdGFydF94bWl0JiMzNDssCiAgICAmIzM0O21jdHBfdXNiX3J4X3F1ZXVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29tbW9uIGxpYnJhcnkgZm9yIE1DVFAtb3Zlci1VU0IgKGBtY3RwLXVzYmxpYmApIGFuZCBtb2RpZmllcyB0aGUgTUNUUCBVU0IgdHJhbnNwb3J0IGRyaXZlciAoYG1jdHAtdXNiYCkgdG8gdXNlIGl0LiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiAoZS5nLiwgcmF3LWdhZGdldCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ2ZGE3NzQ0ZjI1OWEyMzYyYmE0MTM0NDlkNjZlMTYxMDEzNThlODEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCA4IDIzOjI5OjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnCmluZGV4IGNmMzI1YWIwYjFlZjU1Li5jNDBhYzljNjY1Yjc1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZwpAQCAtNDcsOSAmIzQzOzQ3LDI1IEBAIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0MKIAkgIEEgTUNUUCBwcm90b2NvbCBuZXR3b3JrIGRldmljZSBpcyBjcmVhdGVkIGZvciBlYWNoIEkzQyBidXMKIAkgIGhhdmluZyBhICYjMzQ7bWN0cC1jb250cm9sbGVyJiMzNDsgZGV2aWNldHJlZSBwcm9wZXJ0eS4KIAomIzQzO2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUIKJiM0MzsJdHJpc3RhdGUgJiMzNDtNQ1RQIG92ZXIgVVNCIGNvbW1vbiBsaWJyYXJ5JiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBVU0IKJiM0MzsJaGVscAomIzQzOwkgIENvbW1vbiBwcm90b2NvbCBoYW5kbGluZyBmdW5jdGlvbnMgZm9yIE1DVFAtb3Zlci1VU0IgdHJhbnNwb3J0CiYjNDM7CSAgaW1wbGVtZW50YXRpb25zLCBzdWl0YWJsZSBmb3IgdXNlIGluIGVpdGhlciBob3N0LSBvciBnYWRnZXQtc2lkZQomIzQzOwkgIHRyYW5zcG9ydCBkcml2ZXIKJiM0MzsKJiM0MzsJICBUaGlzIHdpbGwgYmUgYXV0b21hdGljYWxseSBlbmFibGVkIGJ5IHRoZSB0cmFuc3BvcnQgZHJpdmVyLgomIzQzOwomIzQzO2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVAomIzQzOyAgICAgICAgYm9vbCAmIzM0O01DVFAgdXNibGliIHRlc3RzJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUUwomIzQzOyAgICAgICAgZGVwZW5kcyBvbiBNQ1RQX1RSQU5TUE9SVF9VU0JMSUI9eSAmYW1wOyZhbXA7IEtVTklUPXkKJiM0MzsgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTCiYjNDM7CiBjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCCiAJdHJpc3RhdGUgJiMzNDtNQ1RQIFVTQiB0cmFuc3BvcnQmIzM0OwogCWRlcGVuZHMgb24gVVNCCiYjNDM7CXNlbGVjdCBNQ1RQX1RSQU5TUE9SVF9VU0JMSUIKIAloZWxwCiAJICBQcm92aWRlcyBhIGRyaXZlciB0byBhY2Nlc3MgTUNUUCBkZXZpY2VzIG92ZXIgVVNCIHRyYW5zcG9ydCwKIAkgIGRlZmluZWQgYnkgRE1URiBzcGVjaWZpY2F0aW9uIERTUDAyODMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZQppbmRleCBjMzYwMDY4NDlhMWU3ZC4uYzg3MGI2MmQzZjFjOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZQpAQCAtMiwzICYjNDM7Miw0IEBAIG9iai0kKENPTkZJR19NQ1RQX1NFUklBTCkgJiM0Mzs9IG1jdHAtc2VyaWFsLm8KIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JMkMpICYjNDM7PSBtY3RwLWkyYy5vCiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTNDKSAmIzQzOz0gbWN0cC1pM2Mubwogb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQikgJiM0Mzs9IG1jdHAtdXNiLm8KJiM0MztvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCTElCKSAmIzQzOz0gbWN0cC11c2JsaWIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jCmluZGV4IGZhZGU2NWYyZjI2OTk1Li4yZDMxMDc1Mzc0YjQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYwpAQCAtMyw5ICYjNDM7Myw5IEBACiAgKiBtY3RwLXVzYi5jIC0gTUNUUC1vdmVyLVVTQiAoRE1URiBEU1AwMjgzKSB0cmFuc3BvcnQgYmluZGluZyBkcml2ZXIuCiAgKgogICogRFNQMDI4MyBpcyBhdmFpbGFibGUgYXQ6Ci0gKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjAuMS5wZGYKJiM0MzsgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGYKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNSBDb2RlIENvbnN0cnVjdCBQdHkgTHRkCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjYgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZAogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKQEAgLTIyLDk1ICYjNDM7MjIsMTE1IEBACiBzdHJ1Y3QgbWN0cF91c2IgewogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CiYjNDM7CWJvb2wgc3BhbjsKIAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAKIAl1OCBlcF9pbjsKIAl1OCBlcF9vdXQ7CiAKLQlzdHJ1Y3QgdXJiICp0eF91cmI7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl9yeCByeDsKIAlzdHJ1Y3QgdXJiICpyeF91cmI7CiYjNDM7CWludCBpbl9lcnJfY291bnQ7CiYjNDM7CWludCBpbl9lcnJfb3JpZzsKJiM0MzsJYm9vbCBjbGVhcl9oYWx0OwogCiAJLyogZW5mb3JjZXMgYXRvbWljIGFjY2VzcyB0byByeF9zdG9wcGVkIGFuZCByZXF1ZXVpbmcgdGhlIHJldHJ5IHdvcmsgKi8KIAlzcGlubG9ja190IHJ4X2xvY2s7CiAJYm9vbCByeF9zdG9wcGVkOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgcnhfcmV0cnlfd29yazsKJiM0MzsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4IHR4OwomIzQzOwlzdHJ1Y3QgdXNiX2FuY2hvciB0eF9hbmNob3I7CiYjNDM7CS8qIHNlcmlhbGlzZXMgdHhfcW1lbSB1cGRhdGVzIHRvIG5ldGRldiBxdWV1ZSBzdGF0ZXMgKi8KJiM0MzsJc3BpbmxvY2tfdCB0eF9xbWVtX2xvY2s7CiYjNDM7CWludCB0eF9xbWVtOwomIzQzO307CiYjNDM7CiYjNDM7ZW51bSB7CiYjNDM7CU1DVFBfVVNCX1NVQkNMQVNTX0JBU0UgPSAweDAwLAomIzQzOwlNQ1RQX1VTQl9TVUJDTEFTU19TUEFOID0gMHgwMiwKIH07CiAKJiM0MzsvKiBXZSB1c2UgYSB0b3RhbC1zaXplIGxpbWl0IGZvciBvdXRzdGFuZGluZyBVUkJzLCBhcyB0aGUgdHJhbnNmZXIgY291bnRzCiYjNDM7ICogbWF5IHZhcnkgYSBsb3QgYmV0d2VlbiBzcGFubmluZy0gYW5kIG5vbi1zcGFubmluZyBtb2Rlcy4gSW4gc3Bhbm5pbmcgbW9kZSwKJiM0MzsgKiB0aGlzIHdpbGwgYWxsb3cgZm9yIGEgY291cGxlIG9mIG1heC1zaXplZCB0cmFuc2ZlcnMgdG8gYmUgaW4gZmxpZ2h0LiBJbgomIzQzOyAqIG5vbi1zcGFubmluZyBtb2RlLCAzMi4KJiM0MzsgKgomIzQzOyAqIFdlIHdhbnQgdG8gYXZvaWQgZGlzYWJsaW5nIHRoZSB0eCBxdWV1ZSBpZiBwb3NzaWJsZTsgZG9pbmcgc28gd2lsbCBlbmQgdXAKJiM0MzsgKiByZXF1ZXVlaW5nIHRvIGdzb19za2IsIGFuZCB3ZSBvbmx5IGRlcXVldWUgZnJvbSB0aGF0IG9uZSBza2IgYXQgYSB0aW1lLAomIzQzOyAqIHNvIGNhbiBubyBsb25nZXIgcGVyZm9ybSB0cmFuc2ZlciBwYWNraW5nLgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgVFhfUU1FTV9NQVggPSAxNjM4NDsKJiM0MzsKIHN0YXRpYyB2b2lkIG1jdHBfdXNiX291dF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHVyYi0mZ3Q7Y29udGV4dDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLSZndDtkZXY7Ci0JaW50IHN0YXR1czsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4ID0gdXJiLSZndDtjb250ZXh0OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYodHhfY3R4KTsKJiM0MzsJdW5zaWduZWQgaW50IGxlbiA9IHVyYi0mZ3Q7dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG1jdHBfdXNiLSZndDtuZXRkZXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzdGF0dXMgPSB1cmItJmd0O3N0YXR1czsKJiM0MzsJbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSh0eF9jdHgsIG5ldGRldiwgdXJiLSZndDtzdGF0dXMgPT0gMCk7CiAKLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgLUVOT0VOVDoKLQljYXNlIC1FQ09OTlJFU0VUOgotCWNhc2UgLUVTSFVURE9XTjoKLQljYXNlIC1FUFJPVE86Ci0JCWRldl9kc3RhdHNfdHhfZHJvcHBlZChuZXRkZXYpOwotCQlicmVhazsKLQljYXNlIDA6Ci0JCWRldl9kc3RhdHNfdHhfYWRkKG5ldGRldiwgc2tiLSZndDtsZW4pOwotCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7Ci0JCWNvbnN1bWVfc2tiKHNrYik7Ci0JCXJldHVybjsKLQlkZWZhdWx0OgotCQluZXRkZXZfZGJnKG5ldGRldiwgJiMzNDt1bmV4cGVjdGVkIHR4IHVyYiBzdGF0dXM6ICVkXG4mIzM0Oywgc3RhdHVzKTsKLQkJZGV2X2RzdGF0c190eF9kcm9wcGVkKG5ldGRldik7Ci0JfQomIzQzOwl1c2JfZnJlZV91cmIodXJiKTsKIAotCWtmcmVlX3NrYihza2IpOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO21jdHBfdXNiLSZndDt0eF9xbWVtX2xvY2ssIGZsYWdzKTsKJiM0MzsJbWN0cF91c2ItJmd0O3R4X3FtZW0gLT0gbGVuOwomIzQzOwlpZiAobWN0cF91c2ItJmd0O3R4X3FtZW0gJmx0OyBUWF9RTUVNX01BWCAmYW1wOyZhbXA7IG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21jdHBfdXNiLSZndDt0eF9xbWVtX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIG5ldGRldl90eF90IG1jdHBfdXNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0MztzdGF0aWMgaW50IG1jdHBfdXNiX3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LAomIzQzOwkJCSAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtY3RwX3VzYl9oZHIgKmhkcjsKLQl1bnNpZ25lZCBpbnQgcGxlbjsKJiM0MzsJc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHVyYiAqdXJiOwogCWludCByYzsKIAotCXBsZW4gPSBza2ItJmd0O2xlbjsKLQotCWlmIChwbGVuICYjNDM7IHNpemVvZigqaGRyKSAmZ3Q7IE1DVFBfVVNCX1hGRVJfU0laRSkKLQkJZ290byBlcnJfZHJvcDsKLQotCXJjID0gc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKCpoZHIpKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyX2Ryb3A7Ci0KLQloZHIgPSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7Ci0JaWYgKCFoZHIpCi0JCWdvdG8gZXJyX2Ryb3A7Ci0KLQloZHItJmd0O2lkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7Ci0JaGRyLSZndDtyc3ZkID0gMDsKLQloZHItJmd0O2xlbiA9IHBsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpOwotCi0JdXJiID0gbWN0cF91c2ItJmd0O3R4X3VyYjsKJiM0MzsJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCF1cmIpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKIAogCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgbWN0cF91c2ItJmd0O3VzYmRldiwKIAkJCSAgdXNiX3NuZGJ1bGtwaXBlKG1jdHBfdXNiLSZndDt1c2JkZXYsIG1jdHBfdXNiLSZndDtlcF9vdXQpLAotCQkJICBza2ItJmd0O2RhdGEsIHNrYi0mZ3Q7bGVuLAotCQkJICBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHNrYik7CiYjNDM7CQkJICBkYXRhLCBsZW4sIG1jdHBfdXNiX291dF9jb21wbGV0ZSwgdHhfY3R4KTsKJiM0MzsKJiM0MzsJaWYgKG1jdHBfdXNiLSZndDtzcGFuKQomIzQzOwkJdXJiLSZndDt0cmFuc2Zlcl9mbGFncyB8PSBVUkJfWkVST19QQUNLRVQ7CiYjNDM7CiYjNDM7CXVzYl9hbmNob3JfdXJiKHVyYiwgJmFtcDttY3RwX3VzYi0mZ3Q7dHhfYW5jaG9yKTsKIAotCS8qIFN0b3BzIFRYIHF1ZXVlIGZpcnN0IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb24gd2l0aCBVUkIgY29tcGxldGUgKi8KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJcmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyYykgewotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCWdvdG8gZXJyX2Ryb3A7CiYjNDM7CQluZXRkZXZfZGJnKG1jdHBfdXNiLSZndDtuZXRkZXYsICYjMzQ7VFggdXJiIHN1Ym1pdCBmYWlsZWQsICVkXG4mIzM0OywgcmMpOwomIzQzOwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOwomIzQzOwkJdXNiX2ZyZWVfdXJiKHVyYik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO21jdHBfdXNiLSZndDt0eF9xbWVtX2xvY2ssIGZsYWdzKTsKJiM0MzsJCW1jdHBfdXNiLSZndDt0eF9xbWVtICYjNDM7PSBsZW47CiYjNDM7CQlpZiAobWN0cF91c2ItJmd0O3R4X3FtZW0gJmd0Oz0gVFhfUU1FTV9NQVgpCiYjNDM7CQkJbmV0aWZfc3RvcF9xdWV1ZShtY3RwX3VzYi0mZ3Q7bmV0ZGV2KTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDttY3RwX3VzYi0mZ3Q7dHhfcW1lbV9sb2NrLCBmbGFncyk7CiAJfQogCi0JcmV0dXJuIE5FVERFVl9UWF9PSzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB0eF9vcHMgPSB7CiYjNDM7CS5zZW5kID0gbWN0cF91c2JfdHhfc2VuZCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CWJvb2wgbW9yZSA9IG5ldGRldl94bWl0X21vcmUoKTsKJiM0MzsKJiM0MzsJbWN0cF91c2JsaWJfdHhfcHVzaChkZXYsICZhbXA7bWN0cF91c2ItJmd0O3R4LCBza2IsIG1vcmUpOwogCi1lcnJfZHJvcDoKLQlkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTsKLQlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC0xMjUsMjQgJiM0MzsxNDUsMjMgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgUlhfUkVUUllfREVMQVkgPSBIWiAvIDQ7CiBzdGF0aWMgaW50IG1jdHBfdXNiX3J4X3F1ZXVlKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGdmcF90IGdmcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXNpemVfdCBsZW47CiYjNDM7CXZvaWQgKmJ1ZjsKIAlpbnQgcmM7CiAKLQlza2IgPSBfX25ldGRldl9hbGxvY19za2IobWN0cF91c2ItJmd0O25ldGRldiwgTUNUUF9VU0JfWEZFUl9TSVpFLCBnZnApOwotCWlmICghc2tiKSB7Ci0JCXJjID0gLUVOT01FTTsKJiM0MzsJcmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKG1jdHBfdXNiLSZndDtuZXRkZXYsICZhbXA7bWN0cF91c2ItJmd0O3J4LAomIzQzOwkJCQkgICAgJmFtcDtidWYsICZhbXA7bGVuLCBnZnApOwomIzQzOwlpZiAocmMpCiAJCWdvdG8gZXJyX3JldHJ5OwotCX0KIAogCXVzYl9maWxsX2J1bGtfdXJiKG1jdHBfdXNiLSZndDtyeF91cmIsIG1jdHBfdXNiLSZndDt1c2JkZXYsCiAJCQkgIHVzYl9yY3ZidWxrcGlwZShtY3RwX3VzYi0mZ3Q7dXNiZGV2LCBtY3RwX3VzYi0mZ3Q7ZXBfaW4pLAotCQkJICBza2ItJmd0O2RhdGEsIE1DVFBfVVNCX1hGRVJfU0laRSwKLQkJCSAgbWN0cF91c2JfaW5fY29tcGxldGUsIHNrYik7CiYjNDM7CQkJICBidWYsIGxlbiwgbWN0cF91c2JfaW5fY29tcGxldGUsIG1jdHBfdXNiKTsKIAogCXJjID0gdXNiX3N1Ym1pdF91cmIobWN0cF91c2ItJmd0O3J4X3VyYiwgZ2ZwKTsKIAlpZiAocmMpIHsKIAkJbmV0ZGV2X2RiZyhtY3RwX3VzYi0mZ3Q7bmV0ZGV2LCAmIzM0O3J4IHVyYiBzdWJtaXQgZmFpbHVyZTogJWRcbiYjMzQ7LCByYyk7Ci0JCWtmcmVlX3NrYihza2IpOwomIzQzOwkJbWN0cF91c2JsaWJfcnhfY2FuY2VsKCZhbXA7bWN0cF91c2ItJmd0O3J4KTsKIAkJaWYgKHJjID09IC1FTk9NRU0pCiAJCQlnb3RvIGVycl9yZXRyeTsKIAl9CkBAIC0xNTcsMTMgJiM0MzsxNzYsMTMgQEAgc3RhdGljIGludCBtY3RwX3VzYl9yeF9xdWV1ZShzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiLCBnZnBfdCBnZnApCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJ4X2Vycl9tYXggPSAxMDsKJiM0MzsKIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2luX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLSZndDtjb250ZXh0OwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBza2ItJmd0O2RldjsKLQlzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgbWN0cF9za2JfY2IgKmNiOwotCXVuc2lnbmVkIGludCBsZW47CiYjNDM7CXN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSB1cmItJmd0O2NvbnRleHQ7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBtY3RwX3VzYi0mZ3Q7bmV0ZGV2OwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzdGF0dXM7CiAKIAlzdGF0dXMgPSB1cmItJmd0O3N0YXR1czsKQEAgLTE3Miw4MCAmIzQzOzE5MSw1NCBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9pbl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCiAJY2FzZSAtRU5PRU5UOgogCWNhc2UgLUVDT05OUkVTRVQ6CiAJY2FzZSAtRVNIVVRET1dOOgotCWNhc2UgLUVQUk9UTzoKLQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQkvKiBkZXZpY2Ugc2h1dGRvd24sIGRvbiYjMzk7dCByZXN1Ym1pdCAqLwomIzQzOwkJbWN0cF91c2JsaWJfcnhfY2FuY2VsKCZhbXA7bWN0cF91c2ItJmd0O3J4KTsKIAkJcmV0dXJuOwotCWNhc2UgMDoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbmV0ZGV2X2RiZyhuZXRkZXYsICYjMzQ7dW5leHBlY3RlZCByeCB1cmIgc3RhdHVzOiAlZFxuJiMzNDssIHN0YXR1cyk7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQotCi0JbGVuID0gdXJiLSZndDthY3R1YWxfbGVuZ3RoOwotCV9fc2tiX3B1dChza2IsIGxlbik7Ci0KLQl3aGlsZSAoc2tiKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IyID0gTlVMTDsKLQkJc3RydWN0IG1jdHBfdXNiX2hkciAqaGRyOwotCQl1OCBwa3RfbGVuOyAvKiBsZW5ndGggb2YgTUNUUCBwYWNrZXQsIG5vIFVTQiBoZWFkZXIgKi8KIAotCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCQloZHIgPSBza2JfcHVsbF9kYXRhKHNrYiwgc2l6ZW9mKCpoZHIpKTsKLQkJaWYgKCFoZHIpCi0JCQlicmVhazsKLQotCQlpZiAoYmUxNl90b19jcHUoaGRyLSZndDtpZCkgIT0gTUNUUF9VU0JfRE1URl9JRCkgewotCQkJbmV0ZGV2X2RiZyhuZXRkZXYsICYjMzQ7cng6IGludmFsaWQgaWQgJTA0eFxuJiMzNDssCi0JCQkJICAgYmUxNl90b19jcHUoaGRyLSZndDtpZCkpOwotCQkJYnJlYWs7Ci0JCX0KJiM0MzsJY2FzZSAtRVBJUEU6CiYjNDM7CQkvKiBlbmRwb2ludCBzdGFsbDogY2xlYXIgaGFsdCwgd2hpY2ggd2lsbCBjYXVzZSBhIHJlc3VibWl0ICovCiAKLQkJaWYgKGhkci0mZ3Q7bGVuICZsdDsKLQkJICAgIHNpemVvZihzdHJ1Y3QgbWN0cF9oZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSkgewotCQkJbmV0ZGV2X2RiZyhuZXRkZXYsICYjMzQ7cng6IHNob3J0IHBhY2tldCAoaGRyKSAlZFxuJiMzNDssCi0JCQkJICAgaGRyLSZndDtsZW4pOwotCQkJYnJlYWs7CiYjNDM7CQlpZiAoIW1jdHBfdXNiLSZndDtpbl9lcnJfY291bnQmIzQzOyYjNDM7KQomIzQzOwkJCW1jdHBfdXNiLSZndDtpbl9lcnJfb3JpZyA9IHN0YXR1czsKJiM0MzsJCWlmIChtY3RwX3VzYi0mZ3Q7aW5fZXJyX2NvdW50ICZndDs9IHJ4X2Vycl9tYXgpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtleGNlc3NpdmUgc3RhbGxzIGZyb20gSU4gRVBcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm47CiAJCX0KIAotCQkvKiB3ZSBrbm93IHdlIGhhdmUgYXQgbGVhc3Qgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpIGhlcmUgKi8KLQkJcGt0X2xlbiA9IGhkci0mZ3Q7bGVuIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpOwotCQlpZiAocGt0X2xlbiAmZ3Q7IHNrYi0mZ3Q7bGVuKSB7Ci0JCQluZXRkZXZfZGJnKG5ldGRldiwKLQkJCQkgICAmIzM0O3J4OiBzaG9ydCBwYWNrZXQgKHhmZXIpICVkLCBhY3R1YWwgJWRcbiYjMzQ7LAotCQkJCSAgIGhkci0mZ3Q7bGVuLCBza2ItJmd0O2xlbik7Ci0JCQlicmVhazsKLQkJfQomIzQzOwkJbWN0cF91c2ItJmd0O2NsZWFyX2hhbHQgPSB0cnVlOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttY3RwX3VzYi0mZ3Q7cnhfbG9jaywgZmxhZ3MpOwomIzQzOwkJaWYgKCFtY3RwX3VzYi0mZ3Q7cnhfc3RvcHBlZCkKJiM0MzsJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDttY3RwX3VzYi0mZ3Q7cnhfcmV0cnlfd29yaywKJiM0MzsJCQkJCSAgICAgIFJYX1JFVFJZX0RFTEFZKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDttY3RwX3VzYi0mZ3Q7cnhfbG9jaywgZmxhZ3MpOwomIzQzOwkJbWN0cF91c2JsaWJfcnhfY2FuY2VsKCZhbXA7bWN0cF91c2ItJmd0O3J4KTsKJiM0MzsJCXJldHVybjsKIAotCQlpZiAocGt0X2xlbiAmbHQ7IHNrYi0mZ3Q7bGVuKSB7Ci0JCQkvKiBtb3JlIHBhY2tldHMgbWF5IGZvbGxvdyAtIGNsb25lIHRvIGEgbmV3Ci0JCQkgKiBza2IgdG8gdXNlIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbgotCQkJICovCi0JCQlza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoc2tiMikgewotCQkJCWlmICghc2tiX3B1bGwoc2tiMiwgcGt0X2xlbikpIHsKLQkJCQkJa2ZyZWVfc2tiKHNrYjIpOwotCQkJCQlza2IyID0gTlVMTDsKLQkJCQl9Ci0JCQl9Ci0JCQlza2JfdHJpbShza2IsIHBrdF9sZW4pOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJbmV0ZGV2X2RiZyhuZXRkZXYsICYjMzQ7dW5leHBlY3RlZCByeCB1cmIgc3RhdHVzOiAlZFxuJiMzNDssIHN0YXR1cyk7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSAtRVRJTUU6CiYjNDM7CWNhc2UgLUVQUk9UTzoKJiM0MzsJY2FzZSAtRUlMU0VROgomIzQzOwljYXNlIC1FT1ZFUkZMT1c6CiYjNDM7CQkvKiBwb3NzaWJseSB0cmFuc2llbnQ7IHJlY29yZCBmaXJzdCBmYWlsdXJlLCByZXN1Ym1pdCAqLwomIzQzOwkJbWN0cF91c2JsaWJfcnhfY2FuY2VsKCZhbXA7bWN0cF91c2ItJmd0O3J4KTsKJiM0MzsJCWlmICghbWN0cF91c2ItJmd0O2luX2Vycl9jb3VudCYjNDM7JiM0MzspCiYjNDM7CQkJbWN0cF91c2ItJmd0O2luX2Vycl9vcmlnID0gc3RhdHVzOwomIzQzOwkJaWYgKG1jdHBfdXNiLSZndDtpbl9lcnJfY291bnQgJmd0Oz0gcnhfZXJyX21heCkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O2V4Y2Vzc2l2ZSBlcnJvcnMgZnJvbSBJTiBFUCwgZmlyc3Q6ICVkXG4mIzM0OywKJiM0MzsJCQkJICAgbWN0cF91c2ItJmd0O2luX2Vycl9vcmlnKTsKJiM0MzsJCQlyZXR1cm47CiAJCX0KJiM0MzsJCWJyZWFrOwogCi0JCWRldl9kc3RhdHNfcnhfYWRkKG5ldGRldiwgc2tiLSZndDtsZW4pOwotCi0JCXNrYi0mZ3Q7cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9NQ1RQKTsKLQkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7Ci0JCWNiID0gX19tY3RwX2NiKHNrYik7Ci0JCWNiLSZndDtoYWxlbiA9IDA7Ci0JCW5ldGlmX3J4KHNrYik7Ci0KLQkJc2tiID0gc2tiMjsKJiM0MzsJY2FzZSAwOgomIzQzOwkJbWN0cF91c2JsaWJfcnhfY29tcGxldGUobmV0ZGV2LCAmYW1wO21jdHBfdXNiLSZndDtyeCwgdXJiLSZndDthY3R1YWxfbGVuZ3RoKTsKJiM0MzsJCW1jdHBfdXNiLSZndDtpbl9lcnJfY291bnQgPSAwOwomIzQzOwkJYnJlYWs7CiAJfQogCi0JaWYgKHNrYikKLQkJa2ZyZWVfc2tiKHNrYik7Ci0KIAltY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0FUT01JQyk7CiB9CiAKQEAgLTI1Myw2ICYjNDM7MjQ2LDIwIEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX3J4X3JldHJ5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1jdHBfdXNiLAogCQkJCQkJIHJ4X3JldHJ5X3dvcmsud29yayk7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogV2UgYXJlIG9ubHkgY2FsbGVkIHdoZW4gcnggY29tcGxldGlvbnMgYXJlIHN1c3BlbmRlZCAqLwomIzQzOwlpZiAobWN0cF91c2ItJmd0O2NsZWFyX2hhbHQpIHsKJiM0MzsJCWludCBwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKG1jdHBfdXNiLSZndDt1c2JkZXYsIG1jdHBfdXNiLSZndDtlcF9pbik7CiYjNDM7CiYjNDM7CQlyYyA9IHVzYl9jbGVhcl9oYWx0KG1jdHBfdXNiLSZndDt1c2JkZXYsIHBpcGUpOwomIzQzOwkJaWYgKHJjKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihtY3RwX3VzYi0mZ3Q7bmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O2NhbiYjMzk7dCBjbGVhciBJTiBFUCBoYWx0OiAlZFxuJiMzNDssIHJjKTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQltY3RwX3VzYi0mZ3Q7Y2xlYXJfaGFsdCA9IGZhbHNlOwomIzQzOwl9CiAKIAltY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0tFUk5FTCk7CiB9CkBAIC0yNjIsNiAmIzQzOzI2OSw4IEBAIHN0YXRpYyBpbnQgbWN0cF91c2Jfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJV1JJVEVfT05DRShtY3RwX3VzYi0mZ3Q7cnhfc3RvcHBlZCwgZmFsc2UpOwomIzQzOwltY3RwX3VzYi0mZ3Q7Y2xlYXJfaGFsdCA9IGZhbHNlOwomIzQzOwltY3RwX3VzYi0mZ3Q7aW5fZXJyX2NvdW50ID0gMDsKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKQEAgLTI4NCw3ICYjNDM7MjkzLDEwIEBAIHN0YXRpYyBpbnQgbWN0cF91c2Jfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO21jdHBfdXNiLSZndDtyeF9yZXRyeV93b3JrKTsKIAogCXVzYl9raWxsX3VyYihtY3RwX3VzYi0mZ3Q7cnhfdXJiKTsKLQl1c2Jfa2lsbF91cmIobWN0cF91c2ItJmd0O3R4X3VyYik7CiYjNDM7CiYjNDM7CXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmFtcDttY3RwX3VzYi0mZ3Q7dHhfYW5jaG9yKTsKJiM0MzsKJiM0MzsJbWN0cF91c2JsaWJfdHhfY2FuY2VsKCZhbXA7bWN0cF91c2ItJmd0O3R4LCBkZXYsIFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDEsNyAmIzQzOzMxMyw3IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCiAJZGV2LSZndDttdHUgPSBNQ1RQX1VTQl9NVFVfTUlOOwogCWRldi0mZ3Q7bWluX210dSA9IE1DVFBfVVNCX01UVV9NSU47Ci0JZGV2LSZndDttYXhfbXR1ID0gTUNUUF9VU0JfTVRVX01BWDsKJiM0MzsJZGV2LSZndDttYXhfbXR1ID0gTUNUUF9VU0JfMV8wX01UVV9NQVg7CiAKIAlkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTsKIAlkZXYtJmd0O3R4X3F1ZXVlX2xlbiA9IERFRkFVTFRfVFhfUVVFVUVfTEVOOwpAQCAtMzE3LDYgJiM0MzszMjksNyBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgbWN0cF91c2IgKmRldjsKJiM0MzsJYm9vbCBzcGFuOwogCWludCByYzsKIAogCS8qIG9ubHkgb25lIGFsdGVybmF0ZSAqLwpAQCAtMzI4LDYgJiM0MzszNDEsOCBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQlyZXR1cm4gcmM7CiAJfQogCiYjNDM7CXNwYW4gPSBpZmFjZV9kZXNjLSZndDtkZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBNQ1RQX1VTQl9TVUJDTEFTU19TUEFOOwomIzQzOwogCW5ldGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksICYjMzQ7bWN0cHVzYiVkJiMzNDssIE5FVF9OQU1FX0VOVU0sCiAJCQkgICAgICBtY3RwX3VzYl9uZXRkZXZfc2V0dXApOwogCWlmICghbmV0ZGV2KQpAQCAtMzM1LDMzICYjNDM7MzUwLDQzIEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZhbXA7aW50Zi0mZ3Q7ZGV2KTsKIAlkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlkZXYtJmd0O3NwYW4gPSBzcGFuOwogCWRldi0mZ3Q7bmV0ZGV2ID0gbmV0ZGV2OwogCWRldi0mZ3Q7dXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlkZXYtJmd0O2ludGYgPSBpbnRmOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZGV2LSZndDtyeF9sb2NrKTsKJiM0MzsJaWYgKGRldi0mZ3Q7c3BhbikKJiM0MzsJCW5ldGRldi0mZ3Q7bWF4X210dSA9IE1DVFBfVVNCXzFfMV9NVFVfTUFYOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO2Rldi0mZ3Q7dHhfcW1lbV9sb2NrKTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRldik7CiAKJiM0MzsJbWN0cF91c2JsaWJfcnhfaW5pdCgmYW1wO2Rldi0mZ3Q7cngsIGxlMTZfdG9fY3B1KGVwX2luLSZndDt3TWF4UGFja2V0U2l6ZSksCiYjNDM7CQkJICAgIGRldi0mZ3Q7c3Bhbik7CiYjNDM7CW1jdHBfdXNibGliX3R4X2luaXQoJmFtcDtkZXYtJmd0O3R4LCAmYW1wO3R4X29wcywgZGV2LCBkZXYtJmd0O3NwYW4pOwomIzQzOwlpbml0X3VzYl9hbmNob3IoJmFtcDtkZXYtJmd0O3R4X2FuY2hvcik7CiYjNDM7CiAJZGV2LSZndDtlcF9pbiA9IGVwX2luLSZndDtiRW5kcG9pbnRBZGRyZXNzOwogCWRldi0mZ3Q7ZXBfb3V0ID0gZXBfb3V0LSZndDtiRW5kcG9pbnRBZGRyZXNzOwogCi0JZGV2LSZndDt0eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCWRldi0mZ3Q7cnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRldi0mZ3Q7dHhfdXJiIHx8ICFkZXYtJmd0O3J4X3VyYikgewomIzQzOwlpZiAoIWRldi0mZ3Q7cnhfdXJiKSB7CiAJCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnJfZnJlZV91cmJzOwomIzQzOwkJZ290byBlcnJfZmluaV9yeHR4OwogCX0KIAogCUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7ZGV2LSZndDtyeF9yZXRyeV93b3JrLCBtY3RwX3VzYl9yeF9yZXRyeV93b3JrKTsKIAogCXJjID0gbWN0cF9yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2LCBOVUxMLCBNQ1RQX1BIWVNfQklORElOR19VU0IpOwogCWlmIChyYykKLQkJZ290byBlcnJfZnJlZV91cmJzOwomIzQzOwkJZ290byBlcnJfZnJlZV91cmI7CiAKIAlyZXR1cm4gMDsKIAotZXJyX2ZyZWVfdXJiczoKLQl1c2JfZnJlZV91cmIoZGV2LSZndDt0eF91cmIpOwomIzQzO2Vycl9mcmVlX3VyYjoKIAl1c2JfZnJlZV91cmIoZGV2LSZndDtyeF91cmIpOwomIzQzO2Vycl9maW5pX3J4dHg6CiYjNDM7CW1jdHBfdXNibGliX3R4X2ZpbmkoJmFtcDtkZXYtJmd0O3R4KTsKJiM0MzsJbWN0cF91c2JsaWJfcnhfZmluaSgmYW1wO2Rldi0mZ3Q7cngpOwogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiAJcmV0dXJuIHJjOwogfQpAQCAtMzcxLDEzICYjNDM7Mzk2LDE1IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiAJc3RydWN0IG1jdHBfdXNiICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCiAJbWN0cF91bnJlZ2lzdGVyX25ldGRldihkZXYtJmd0O25ldGRldik7Ci0JdXNiX2ZyZWVfdXJiKGRldi0mZ3Q7dHhfdXJiKTsKJiM0MzsJbWN0cF91c2JsaWJfcnhfZmluaSgmYW1wO2Rldi0mZ3Q7cngpOwomIzQzOwltY3RwX3VzYmxpYl90eF9maW5pKCZhbXA7ZGV2LSZndDt0eCk7CiAJdXNiX2ZyZWVfdXJiKGRldi0mZ3Q7cnhfdXJiKTsKIAlmcmVlX25ldGRldihkZXYtJmd0O25ldGRldik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtY3RwX3VzYl9kZXZpY2VzW10gPSB7Ci0JeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01DVFAsIDB4MCwgMHgxKSB9LAomIzQzOwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgTUNUUF9VU0JfU1VCQ0xBU1NfQkFTRSwgMHgxKSB9LAomIzQzOwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgTUNUUF9VU0JfU1VCQ0xBU1NfU1BBTiwgMHgxKSB9LAogCXsgMCB9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMmEyMmJlOTk5ZmEwYTEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYwpAQCAtMCwwICYjNDM7MSw0MTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogbWN0cC11c2JsaWItdGVzdC5jIC0gTUNUUC1vdmVyLVVTQiAoRE1URiBEU1AwMjgzKSB0cmFuc3BvcnQgaGVscGVyIGxpYnJhcnksCiYjNDM7ICogdW5pdCB0ZXN0IGRlZmluaXRpb25zLgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGQKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2t1bml0L3Rlc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfYXJwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9tY3RwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9tY3RwZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3VzYi9tY3RwLXVzYi5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiB7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwomIzQzOwlzdHJ1Y3QgbWN0cF9kZXYgKm1kZXY7CiYjNDM7CXN0cnVjdCBza19idWZmX2hlYWQgcnhfcGt0czsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCB7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2OwomIzQzOwlzdHJ1Y3QgbWN0cF9yb3V0ZSBydDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYmxpYl9kZXZfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwkvKiB3ZSBkb24mIzM5O3QgdHJhY2sgYW55IFRYZWQgcGFja2V0cyBhdCBwcmVzZW50ICovCiYjNDM7CWtmcmVlX3NrYihza2IpOwomIzQzOwlyZXR1cm4gTkVUREVWX1RYX09LOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1jdHBfdGVzdF9uZXRkZXZfb3BzID0gewomIzQzOwkubmRvX3N0YXJ0X3htaXQgPSBtY3RwX3VzYmxpYl9kZXZfdHgsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgdTE2IGVwX21heHBhY2tldCA9IDUxMjsKJiM0MztzdGF0aWMgY29uc3QgbWN0cF9laWRfdCBsb2NhbF9laWQgPSA4OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CW5kZXYtJmd0O3R5cGUgPSBBUlBIUkRfTUNUUDsKJiM0MzsJbmRldi0mZ3Q7bXR1ID0gODE5MjsKJiM0MzsJbmRldi0mZ3Q7ZmxhZ3MgPSBJRkZfTk9BUlA7CiYjNDM7CW5kZXYtJmd0O25ldGRldl9vcHMgPSAmYW1wO21jdHBfdGVzdF9uZXRkZXZfb3BzOwomIzQzOwluZGV2LSZndDtuZWVkc19mcmVlX25ldGRldiA9IHRydWU7CiYjNDM7CW5kZXYtJmd0O3BjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9EU1RBVFM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZGV2X2FjdGlvbih2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXYgPSBkYXRhOwomIzQzOwomIzQzOwlza2JfcXVldWVfcHVyZ2UoJmFtcDtkZXYtJmd0O3J4X3BrdHMpOwomIzQzOwlpZiAoZGV2LSZndDttZGV2KQomIzQzOwkJbWN0cF9kZXZfcHV0KGRldi0mZ3Q7bWRldik7CiYjNDM7CXVucmVnaXN0ZXJfbmV0ZGV2KGRldi0mZ3Q7bmRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKgomIzQzO21jdHBfdXNibGliX3Rlc3RfY3JlYXRlX2RldihzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJbmRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksICYjMzQ7bWN0cHRlc3QlZCYjMzQ7LCBORVRfTkFNRV9FTlVNLAomIzQzOwkJCSAgICBtY3RwX3VzYmxpYl9kZXZfc2V0dXApOwomIzQzOwlpZiAoIW5kZXYpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CWRldi0mZ3Q7bmRldiA9IG5kZXY7CiYjNDM7CXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtkZXYtJmd0O3J4X3BrdHMpOwomIzQzOwomIzQzOwlyYyA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQlmcmVlX25ldGRldihuZGV2KTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBtY3RwX3VzYmxpYl90ZXN0X2Rldl9hY3Rpb24sIGRldik7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWRldi0mZ3Q7bWRldiA9IF9fbWN0cF9kZXZfZ2V0KG5kZXYpOwomIzQzOwlpZiAoZGV2LSZndDttZGV2KQomIzQzOwkJZGV2LSZndDttZGV2LSZndDtuZXQgPSBtY3RwX2RlZmF1bHRfbmV0KGRldl9uZXQobmRldikpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O21kZXYpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CXJjID0gZGV2X29wZW4obmRldiwgTlVMTCk7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gZGV2OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3Rlc3RfZHN0X291dHB1dChzdHJ1Y3QgbWN0cF9kc3QgKmRzdCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJc2tiX3F1ZXVlX3RhaWwoJmFtcDtkZXYtJmd0O3J4X3BrdHMsIHNrYik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eCA9IGRhdGE7CiYjNDM7CiYjNDM7CS8qIFRoZSBkZXZpY2Ugd2lsbCBoYXZlIGJlZW4gZGVzdHJveWVkLCBzbyAtJmd0O3J0IHdpbGwgYmUgdW5saW5rZWQuCiYjNDM7CSAqIEp1c3QgZW5zdXJlIHRoYXQgdGhlIHJlZmNvdW50IGlzIGFzIGV4cGVjdGVkLgomIzQzOwkgKi8KJiM0MzsJS1VOSVRfQVNTRVJUX1RSVUUoY3VycmVudC0mZ3Q7a3VuaXRfdGVzdCwKJiM0MzsJCQkgIHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2N0eC0mZ3Q7cnQucmVmcykpOwomIzQzOwomIzQzOwlrZnJlZShjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICptY3RwX3VzYmxpYl90ZXN0X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBtY3RwX3JvdXRlICpydDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwljdHggPSBremFsbG9jX29iaigqY3R4KTsKJiM0MzsJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGN0eCk7CiYjNDM7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7Y3R4LSZndDtydC5saXN0KTsKJiM0MzsJcnQgPSAmYW1wO2N0eC0mZ3Q7cnQ7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO3J0LSZndDtyZWZzLCAxKTsKJiM0MzsKJiM0MzsJcmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIG1jdHBfdXNibGliX3Rlc3RfZmluaV9hY3Rpb24sIGN0eCk7CiYjNDM7CUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7ZGV2ID0gbWN0cF91c2JsaWJfdGVzdF9jcmVhdGVfZGV2KHRlc3QpOwomIzQzOwlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgY3R4LSZndDtkZXYpOwomIzQzOwomIzQzOwlydC0mZ3Q7bWluID0gbG9jYWxfZWlkOwomIzQzOwlydC0mZ3Q7bWF4ID0gbG9jYWxfZWlkOwomIzQzOwlydC0mZ3Q7ZHN0X3R5cGUgPSBNQ1RQX1JPVVRFX0RJUkVDVDsKJiM0MzsJcnQtJmd0O3R5cGUgPSBSVE5fTE9DQUw7CiYjNDM7CXJ0LSZndDtkZXYgPSBjdHgtJmd0O2Rldi0mZ3Q7bWRldjsKJiM0MzsJcnQtJmd0O291dHB1dCA9IG1jdHBfdXNibGliX3Rlc3RfZHN0X291dHB1dDsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CWxpc3RfYWRkX3JjdSgmYW1wO2N0eC0mZ3Q7cnQubGlzdCwgJmFtcDtpbml0X25ldC5tY3RwLnJvdXRlcyk7CiYjNDM7CXJlZmNvdW50X2luYygmYW1wO3J0LSZndDtyZWZzKTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGN0eDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogSW5pdCBhIE1DVFAtb3Zlci1VU0IgcGFja2V0IHdpdGhpbiBhIGJ1ZmZlci4gQGxlbiBpcyB0aGUgbGVuZ3RoIG9mIHRoZQomIzQzOyAqIGJ1ZmZlciB0byB3cml0ZSwgQHBheWxvYWRfbGVuIGlzIHRoZSByZXBvcnRlZCBzaXplIG9mIHRoZSBNQ1RQLW92ZXItVVNCCiYjNDM7ICogcGFja2V0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3Qodm9pZCAqZGF0YSwgc2l6ZV90IGxlbiwKJiM0MzsJCQkJICAgICAgc2l6ZV90IHBheWxvYWRfbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXN0cnVjdCBtY3RwX3VzYl9oZHIgdXNiOwomIzQzOwkJc3RydWN0IG1jdHBfaGRyIG1jdHA7CiYjNDM7CX0gaGRyOwomIzQzOwomIzQzOwloZHIudXNiLmlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7CiYjNDM7CWhkci51c2IubGVuID0gY3B1X3RvX2JlMTYocGF5bG9hZF9sZW4pOwomIzQzOwloZHIubWN0cC52ZXIgPSAxOwomIzQzOwloZHIubWN0cC5kZXN0ID0gbG9jYWxfZWlkOwomIzQzOwloZHIubWN0cC5zcmMgPSAwOwomIzQzOwloZHIubWN0cC5mbGFnc19zZXFfdGFnID0gMDsKJiM0MzsKJiM0MzsJbWVtY3B5KGRhdGEsICZhbXA7aGRyLCBtaW4obGVuLCBzaXplb2YoaGRyKSkpOwomIzQzOwlpZiAobGVuICZndDsgc2l6ZW9mKGhkcikpCiYjNDM7CQltZW1zZXQoZGF0YSAmIzQzOyBzaXplb2YoaGRyKSwgMCwgbGVuIC0gc2l6ZW9mKGhkcikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhY3Rpb25fcnhfZmluaSh2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCA9IGRhdGE7CiYjNDM7CiYjNDM7CW1jdHBfdXNibGliX3J4X2ZpbmkocngpOwomIzQzOwlrZnJlZShyeCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKgomIzQzO21jdHBfdXNibGliX3Rlc3RfcnhfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QsIGJvb2wgc3BhbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJcnggPSBremFsbG9jX29iaigqcngpOwomIzQzOwlpZiAocngpIHsKJiM0MzsJCXJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBhY3Rpb25fcnhfZmluaSwgcngpOwomIzQzOwkJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsJfQomIzQzOwlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcngpOwomIzQzOwltY3RwX3VzYmxpYl9yeF9pbml0KHJ4LCBlcF9tYXhwYWNrZXQsIHNwYW4pOwomIzQzOwomIzQzOwlyZXR1cm4gcng7CiYjNDM7fQomIzQzOwomIzQzOy8qIFdyYXBwZXJzIGZvciB1c2JsaWImIzM5O3MgcnhfY29tcGxldGUgY2FsbGJhY2ssIHdoaWNoIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZAomIzQzOyAqIGZyb20gYXRvbWljIGNvbnRleHQKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3Rlc3RfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJCXN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJcmMgPSBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShuZXRkZXYsIHJ4LCBsZW4pOwomIzQzOwlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTaW5nbGUgcGFja2V0LCBzdGFydGluZyBvbiBhIHRyYW5zZmVyIGJvdW5kYXJ5LCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluCiYjNDM7ICogdGhlIHRyYW5zZmVyCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUoc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4OwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwlzaXplX3QgbGVuOwomIzQzOwl2b2lkICpidWY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJY3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpOwomIzQzOwlkZXYgPSBjdHgtJmd0O2RldjsKJiM0MzsKJiM0MzsJcnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7CiYjNDM7CiYjNDM7CXJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtJmd0O25kZXYsIHJ4LAomIzQzOwkJCQkgICAgJmFtcDtidWYsICZhbXA7bGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsKJiM0MzsJLyogd2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgbWF4cGFja2V0IG9mIHRyYW5zZmVyIGF2YWlsYWJsZSAqLwomIzQzOwlLVU5JVF9BU1NFUlRfR0UodGVzdCwgbGVuLCBlcF9tYXhwYWNrZXQpOwomIzQzOwomIzQzOwltY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KGJ1ZiwgOCwgOCk7CiYjNDM7CiYjNDM7CXJjID0gbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShkZXYtJmd0O25kZXYsIHJ4LCA4KTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsKJiM0MzsJc2tiID0gX19za2JfZGVxdWV1ZSgmYW1wO2Rldi0mZ3Q7cnhfcGt0cyk7CiYjNDM7CUtVTklUX0VYUEVDVF9OT1RfTlVMTCh0ZXN0LCBza2IpOwomIzQzOwlpZiAoc2tiKQomIzQzOwkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNrYi0mZ3Q7bGVuLCA0KTsKJiM0MzsJa2ZyZWVfc2tiKHNrYik7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuIHsKJiM0MzsJY29uc3QgY2hhciAqbmFtZTsKJiM0MzsJc2l6ZV90IG5fcGt0czsKJiM0MzsJc2l6ZV90IHBrdHNbNl07CiYjNDM7CXNpemVfdCBuX3hmZXJzOwomIzQzOwlzaXplX3QgeGZlcnNbNl07CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZAomIzQzO21jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdG9fZGVzYyhjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiAqdCwKJiM0MzsJCQkJICBjaGFyICpkZXNjKQomIzQzO3sKJiM0MzsJc3Ryc2NweShkZXNjLCB0LSZndDtuYW1lLCBLVU5JVF9QQVJBTV9ERVNDX1NJWkUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZAomIzQzO21jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdmFsaWRhdGUoc3RydWN0IGt1bml0ICp0ZXN0LAomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiAqc3BhbiwKJiM0MzsJCQkJICAgc2l6ZV90ICpsZW4pCiYjNDM7ewomIzQzOwlzaXplX3QgcGt0X2xlbiA9IDAsIHhmZXJfbGVuID0gMDsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBzcGFuLSZndDtuX3BrdHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlLVU5JVF9BU1NFUlRfR0VfTVNHKHRlc3QsIHNwYW4tJmd0O3BrdHNbaV0sIDgsCiYjNDM7CQkJCSAgICAmIzM0O3BrdFslZF0gbGVuIHRvbyBzbWFsbCAoJXpkKSBmb3IgJXMmIzM0OywKJiM0MzsJCQkJICAgIGksIHNwYW4tJmd0O3BrdHNbaV0sIHNwYW4tJmd0O25hbWUpOwomIzQzOwkJcGt0X2xlbiAmIzQzOz0gc3Bhbi0mZ3Q7cGt0c1tpXTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgc3Bhbi0mZ3Q7bl94ZmVyczsgaSYjNDM7JiM0MzspCiYjNDM7CQl4ZmVyX2xlbiAmIzQzOz0gc3Bhbi0mZ3Q7eGZlcnNbaV07CiYjNDM7CiYjNDM7CUtVTklUX0FTU0VSVF9FUV9NU0codGVzdCwgcGt0X2xlbiwgeGZlcl9sZW4sCiYjNDM7CQkJICAgICYjMzQ7aW52YWxpZCBwa3RfbGVuICglemQpICE9IHhmZXJfbGVuICglemQpIGZvciAlcyYjMzQ7LAomIzQzOwkJCSAgICBwa3RfbGVuLCB4ZmVyX2xlbiwgc3Bhbi0mZ3Q7bmFtZSk7CiYjNDM7CiYjNDM7CSpsZW4gPSBwa3RfbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICpwa3Rfc3BhbiA9IHRlc3QtJmd0O3BhcmFtX3ZhbHVlOwomIzQzOwlzaXplX3QgbGVuLCB4ZmVyX2xlbiwgb2ZmLCB4ZmVyX29mZjsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4OwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsJdTggKnBrdGJ1ZjsKJiM0MzsJdm9pZCAqYnVmOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CW1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdmFsaWRhdGUodGVzdCwgcGt0X3NwYW4sICZhbXA7bGVuKTsKJiM0MzsJcGt0YnVmID0ga3VuaXRfa21hbGxvY19hcnJheSh0ZXN0LCAxLCBsZW4sIEdGUF9LRVJORUwpOwomIzQzOwlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcGt0YnVmKTsKJiM0MzsKJiM0MzsJLyogbGF5IG91dCBwYWNrZXRzICovCiYjNDM7CWZvciAob2ZmID0gMCwgaSA9IDA7IGkgJmx0OyBwa3Rfc3Bhbi0mZ3Q7bl9wa3RzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJbGVuID0gcGt0X3NwYW4tJmd0O3BrdHNbaV07CiYjNDM7CQltY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiAmIzQzOyBvZmYsIGxlbiwgbGVuKTsKJiM0MzsJCW9mZiAmIzQzOz0gbGVuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTsKJiM0MzsJZGV2ID0gY3R4LSZndDtkZXY7CiYjNDM7CiYjNDM7CXJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpOwomIzQzOwomIzQzOwkvKiBmZWVkIHRyYW5zZmVycyAqLwomIzQzOwlmb3IgKG9mZiA9IDAsIHhmZXJfb2ZmID0gMCwgaSA9IDA7IGkgJmx0OyBwa3Rfc3Bhbi0mZ3Q7bl94ZmVyczspIHsKJiM0MzsJCXhmZXJfbGVuID0gcGt0X3NwYW4tJmd0O3hmZXJzW2ldIC0geGZlcl9vZmY7CiYjNDM7CQlyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LSZndDtuZGV2LCByeCwKJiM0MzsJCQkJCSAgICAmYW1wO2J1ZiwgJmFtcDtsZW4sIEdGUF9LRVJORUwpOwomIzQzOwkJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsKJiM0MzsJCUtVTklUX0FTU0VSVF9HRSh0ZXN0LCBsZW4sIGVwX21heHBhY2tldCk7CiYjNDM7CiYjNDM7CQlsZW4gPSBtaW4obGVuLCB4ZmVyX2xlbik7CiYjNDM7CQltZW1jcHkoYnVmLCBwa3RidWYgJiM0Mzsgb2ZmLCBsZW4pOwomIzQzOwomIzQzOwkJaWYgKGxlbiA9PSB4ZmVyX2xlbikgewomIzQzOwkJCS8qIHdob2xlL2VuZCB4ZmVyLCBwcm9jZWVkIHRvIG5leHQgKi8KJiM0MzsJCQl4ZmVyX29mZiA9IDA7CiYjNDM7CQkJaSYjNDM7JiM0Mzs7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCS8qIHBhcnRpYWwgKi8KJiM0MzsJCQl4ZmVyX29mZiAmIzQzOz0gbGVuOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi0mZ3Q7bmRldiwgcngsIGxlbik7CiYjNDM7CQlLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApOwomIzQzOwkJb2ZmICYjNDM7PSBsZW47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogY2hlY2sgcmVjZWl2ZWQgcGFja2V0cyAqLwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LSZndDtyeF9wa3RzLnFsZW4sIHBrdF9zcGFuLSZndDtuX3BrdHMpOwomIzQzOwlmb3IgKGkgPSAwOyA7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZSgmYW1wO2Rldi0mZ3Q7cnhfcGt0cyk7CiYjNDM7CiYjNDM7CQlpZiAoIXNrYikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmIChpICZsdDsgcGt0X3NwYW4tJmd0O25fcGt0cykKJiM0MzsJCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2tiLSZndDtsZW4sIHBrdF9zcGFuLSZndDtwa3RzW2ldIC0gNCk7CiYjNDM7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnNbXSA9IHsKJiM0MzsJLyogT25lIHBhY2tldCBjb21wbGV0ZWx5IHdpdGhpbiBhIHRyYW5zZmVyICovCiYjNDM7CXsgJiMzNDsxcDF4LWNvbXBsZXRlJiMzNDssIDEsIHsgOCB9LCAxLCB7IDggfSB9LAomIzQzOwkvKiBUd28gc21hbGwgcGFja2V0cyBjb21iaW5lZCB3aXRoaW4gb25lIHRyYW5zZmVyICovCiYjNDM7CXsgJiMzNDsycDF4LWNvbWJpbmVkJiMzNDssIDIsIHsgOCwgOCB9LCAxLCB7IDE2IH0gfSwKJiM0MzsJLyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgTUNUUCBwYXlsb2FkICovCiYjNDM7CXsgJiMzNDsxcDJ4LXNwbGl0LXBheWxvYWQmIzM0OywgMSwgeyAxNiB9LCAyLCB7IDgsIDggfSB9LAomIzQzOwkvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBVU0IgdHJhbnNwb3J0IGhlYWRlciAqLwomIzQzOwl7ICYjMzQ7MXAyeC1zcGxpdC11c2JoZHImIzM0OywgMSwgeyAxNiB9LCAyLCB7IDIsIDE0IH0gfSwKJiM0MzsJLyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgTUNUUCBoZWFkZXIgKi8KJiM0MzsJeyAmIzM0OzFwMngtc3BsaXQtbWN0cGhkciYjMzQ7LCAxLCB7IDE2IH0sIDIsIHsgNiwgMTAgfSB9LAomIzQzOwkvKiBTaW5nbGUgcGFja2V0IHNwbGl0IG92ZXIgMyB0cmFuc2ZlcnMsIG1pZGRsZSBlbnRpcmVseSBjb250aW51YXRpb24gKi8KJiM0MzsJeyAmIzM0OzFwM3gtc3BsaXQmIzM0OywgMSwgeyAxMiB9LCAzLCB7IDQsIDQsIDQgfSB9LAomIzQzOwkvKiBNYXgtc2l6ZWQgc2luZ2xlIHRyYW5zZmVyICovCiYjNDM7CXsgJiMzNDsxcDF4LWxhcmdlJiMzNDssIDEsIHsgODE5MSB9LCAxLCB7IDgxOTEgfSB9LAomIzQzOwkvKiBUd28gbGFyZ2UgcGFja2V0cywgc3BsaXQgYXQgdGhlIHdvcnN0LWNhc2UgZm9yIGFsbG9jYXRpb24sIHdpdGggYQomIzQzOwkgKiBzaW5nbGUgYnl0ZSBjb250aW51aW5nIHRoZSBzcGFuCiYjNDM7CSAqLwomIzQzOwl7ICYjMzQ7MnAyeC1sYXJnZS1zcGxpdCYjMzQ7LCAyLCB7IDgxOTAsIDgxOTAgfSwgMiwgeyA4MTkxLCA4MTg5IH0gfSwKJiM0Mzt9OwomIzQzOwomIzQzO0tVTklUX0FSUkFZX1BBUkFNKG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4sIG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5zLAomIzQzOwkJICBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3RvX2Rlc2MpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzW10gPSB7CiYjNDM7CUtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUpLAomIzQzOwlLVU5JVF9DQVNFX1BBUkFNKG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4sCiYjNDM7CQkJIG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW5fZ2VuX3BhcmFtcyksCiYjNDM7CXt9CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGt1bml0X3N1aXRlIG1jdHBfdXNibGliX3Rlc3Rfc3VpdGUgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDttY3RwLXVzYmxpYiYjMzQ7LAomIzQzOwkudGVzdF9jYXNlcyA9IG1jdHBfdXNibGliX3Rlc3RfY2FzZXMsCiYjNDM7fTsKJiM0MzsKJiM0MztrdW5pdF90ZXN0X3N1aXRlKG1jdHBfdXNibGliX3Rlc3Rfc3VpdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mYzAyODIxNTJlNmVmYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYwpAQCAtMCwwICYjNDM7MSw2MTYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogbWN0cC11c2JsaWIuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGhlbHBlciBsaWJyYXJ5CiYjNDM7ICoKJiM0MzsgKiBEU1AwMjgzIGlzIGF2YWlsYWJsZSBhdDoKJiM0MzsgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGYKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGQKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdXNiL21jdHAtdXNiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9tY3RwLmgmZ3Q7CiYjNDM7CiYjNDM7dm9pZCBtY3RwX3VzYmxpYl9yeF9pbml0KHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHUxNiBlcF9wa3RsZW4sIGJvb2wgc3BhbikKJiM0Mzt7CiYjNDM7CW1lbXNldChyeCwgMCwgc2l6ZW9mKCpyeCkpOwomIzQzOwlyeC0mZ3Q7c3BhbiA9IHNwYW47CiYjNDM7CXJ4LSZndDtlcF9wa3RsZW4gPSBlcF9wa3RsZW47CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2luaXQpOwomIzQzOwomIzQzO3ZvaWQgbWN0cF91c2JsaWJfcnhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KQomIzQzO3sKJiM0MzsJa2ZyZWVfc2tiKHJ4LSZndDtza2IpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9maW5pKTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFByZXBhcmUgYSB0cmFuc2ZlciBidWZmZXIgZm9yIGZ1dHVyZSBjb21wbGV0aW9uOyAqYnVmcCBhbmQgKmxlbnAgd2lsbAomIzQzOyAqIGJlIHBvcHVsYXRlZCBvbiBzdWNjZXNzLgomIzQzOyAqLwomIzQzO2ludCBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwKJiM0MzsJCQkgICB2b2lkICoqYnVmcCwgc2l6ZV90ICpsZW5wLCBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtJmd0O3NrYjsKJiM0MzsJdW5zaWduZWQgaW50IGxlbiA9IDA7CiYjNDM7CiYjNDM7CWlmIChza2IgJmFtcDsmYW1wOyBza2ItJmd0O2xlbiAmZ3Q7PSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCkgewomIzQzOwkJLyogc29tZXRoaW5nIG11c3QgaGF2ZSBnb25lIHRlcnJpYmx5IHdyb25nLiBjbGVhciBhbmQgcmVzdGFydCAqLwomIzQzOwkJbWN0cF91c2JsaWJfcnhfY2FuY2VsKHJ4KTsKJiM0MzsJCXNrYiA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGVuID0gcngtJmd0O3NwYW4gPyBBTElHTihNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCwgcngtJmd0O2VwX3BrdGxlbikKJiM0MzsJCTogTUNUUF9VU0JfMV8wX1hGRVJfU0laRTsKJiM0MzsKJiM0MzsJaWYgKCFza2IpIHsKJiM0MzsJCXNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIGxlbiwgZ2ZwKTsKJiM0MzsJCWlmICghc2tiKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwl9IGVsc2UgaWYgKHNrYi0mZ3Q7Y2xvbmVkIHx8IHNrYl90YWlscm9vbShza2IpICZsdDsgcngtJmd0O2VwX3BrdGxlbikgewomIzQzOwkJLyogV2UgYWx3YXlzIG5lZWQgdG8gcmVhbGxvYyBpZiAtJmd0O2Nsb25lZCwgYXMgd2UgY2Fubm90CiYjNDM7CQkgKiByZXN1Ym1pdCB0aGUgKG5vdy1zaGFyZWQpIHNrYiBidWZmZXIgZm9yIHBvc3NpYmxlIERNQS4KJiM0MzsJCSAqCiYjNDM7CQkgKiBPdGhlcndpc2UgKGlmIHdlIGhhdmUgYW4gdW4tY2xvbmVkIFNLQik6IGp1c3QgZW5zdXJlIHdlCiYjNDM7CQkgKiBoYXZlIHN1ZmZpY2llbnQgc3BhY2UgdG8gcHJldmVudCBiYWJibGUuIFNpbmNlIHdlIGFsbG9jYXRlZAomIzQzOwkJICogZm9yIG1heCBzaXplIGluIHRoZSBsYXN0IHByZXBhcmUgKGFuZCBoYXZlIG5vdCBjb25zdW1lZCBhbnkKJiM0MzsJCSAqIG9mIHRoYXQgc3BhY2UgZm9yIGEgcHJpb3IgTUNUUCBwYWNrZXQsIGJlY2F1c2UgIWNsb25lZCksIHdlCiYjNDM7CQkgKiBoYXZlIHN1ZmZpY2llbnQgZGF0YSB0byBmaW5pc2ggdGhlIGN1cnJlbnQgTUNUUCBwYWNrZXQuCiYjNDM7CQkgKi8KJiM0MzsJCXN0cnVjdCBza19idWZmICpza2IyOwomIzQzOwomIzQzOwkJc2tiMiA9IHNrYl9jb3B5X2V4cGFuZChza2IsIDAsIGxlbiwgZ2ZwKTsKJiM0MzsJCWlmICghc2tiMikKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiYjNDM7CQlza2IgPSBza2IyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJ4LSZndDtza2IgPSBza2I7CiYjNDM7CiYjNDM7CS8qIFNwYW5uaW5nIG1vZGUgYWxsb3dzIFpMUHMsIHNvIHdlIGRvbiYjMzk7dCByZXF1aXJlIGV4YWN0bHkgb25lCiYjNDM7CSAqIHRyYW5zZmVyIHBhY2tldC4gSWYgd2UgaGF2ZSBleHRyYSB0YWlscm9vbSwgbWF5IGFzIHdlbGwgdXNlIGl0LAomIzQzOwkgKiBhbmQgd2UgaGF2ZSBlbnN1cmVkIHRoYXQgdGhlIHRhaWxyb29tICZndDs9IGVwX3BrdGxlbi4KJiM0MzsJICovCiYjNDM7CWlmIChyeC0mZ3Q7c3BhbikKJiM0MzsJCWxlbiA9IEFMSUdOX0RPV04oc2tiX3RhaWxyb29tKHNrYiksIHJ4LSZndDtlcF9wa3RsZW4pOwomIzQzOwomIzQzOwkqYnVmcCA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTsKJiM0MzsJKmxlbnAgPSBsZW47CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSB0aGlzX2NwdV9wdHIobmV0ZGV2LSZndDtkc3RhdHMpOwomIzQzOwlzdHJ1Y3QgbWN0cF9za2JfY2IgKmNiOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwomIzQzOwlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSk7CiYjNDM7CiYjNDM7CS8qIHdlJiMzOTtyZSBjYWxsZWQgZnJvbSBhbiBVUkIgY29tcGxldGlvbiBoYW5kbGVyLCBhbmQgY2Fubm90IGFzc3VtZSBsb2NhbAomIzQzOwkgKiBpcnFzIGFyZSBhbHdheXMgZGlzYWJsZWQKJiM0MzsJICovCiYjNDM7CWZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKCZhbXA7ZHN0YXRzLSZndDtzeW5jcCk7CiYjNDM7CXU2NF9zdGF0c19pbmMoJmFtcDtkc3RhdHMtJmd0O3J4X3BhY2tldHMpOwomIzQzOwl1NjRfc3RhdHNfYWRkKCZhbXA7ZHN0YXRzLSZndDtyeF9ieXRlcywgc2tiLSZndDtsZW4pOwomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7ZHN0YXRzLSZndDtzeW5jcCwgZmxhZ3MpOwomIzQzOwomIzQzOwlza2ItJmd0O3Byb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7CiYjNDM7CXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwomIzQzOwljYiA9IF9fbWN0cF9jYihza2IpOwomIzQzOwljYi0mZ3Q7aGFsZW4gPSAwOwomIzQzOwluZXRpZl9yeChza2IpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSB0aGlzX2NwdV9wdHIoZGV2LSZndDtkc3RhdHMpOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZSgmYW1wO2RzdGF0cy0mZ3Q7c3luY3ApOwomIzQzOwl1NjRfc3RhdHNfaW5jKCZhbXA7ZHN0YXRzLSZndDtyeF9kcm9wcyk7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoJmFtcDtkc3RhdHMtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVjZWl2ZSBhIFVTQiBjb21wbGV0aW9uIG9mIEBsZW4gYnl0ZXMgb2YgaW5jb21pbmcgZGF0YS4gV2Ugd2lsbCB0aGVuIHNwbGl0CiYjNDM7ICogdGhpcyBpbnRvIHBhY2tldHMgYW5kIG5ldGlmX3J4KCkgZWFjaC4gSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGluIGF0b21pYwomIzQzOyAqIGNvbnRleHRzIC0gaWUuLCBVUkIgY29tcGxldGlvbi4KJiM0MzsgKgomIzQzOyAqIEFzc3VtZXMgQG5ldGRldiB1c2VzIGRzdGF0cy4KJiM0MzsgKi8KJiM0MztpbnQgbWN0cF91c2JsaWJfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2IgPSByeC0mZ3Q7c2tiOwomIzQzOwlpbnQgcmMgPSAwOwomIzQzOwomIzQzOwlfX3NrYl9wdXQoc2tiLCBsZW4pOwomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7CiYjNDM7CQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKJiM0MzsJCS8qIGxlbmd0aCBvZiBNQ1RQIHBhY2tldCwgaW5jbHVkaW5nIFVTQiBoZWFkZXIgKi8KJiM0MzsJCXUxNiBwa3RfbGVuOwomIzQzOwomIzQzOwkJLyogbm8gaGVhZGVyIHlldCwgcmVzdWJtaXQgZm9yIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgKi8KJiM0MzsJCWlmIChza2ItJmd0O2xlbiAmbHQ7IHNpemVvZigqaGRyKSkgewomIzQzOwkJCWlmICghcngtJmd0O3NwYW4pIHsKJiM0MzsJCQkJbmV0ZGV2X2RiZyhuZXRkZXYsCiYjNDM7CQkJCQkgICAmIzM0O3J4OiB0aW55IHhmZXIgKCVkKSBpbiBub24tc3BhbiBtb2RlJiMzNDssCiYjNDM7CQkJCQkgICBza2ItJmd0O2xlbik7CiYjNDM7CQkJCXJjID0gLUVOT01TRzsKJiM0MzsJCQkJZ290byBlcnJfcmVzZXQ7CiYjNDM7CQkJfQomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaGRyID0gKHN0cnVjdCBtY3RwX3VzYl9oZHIgKilza2ItJmd0O2RhdGE7CiYjNDM7CiYjNDM7CQlpZiAoYmUxNl90b19jcHUoaGRyLSZndDtpZCkgIT0gTUNUUF9VU0JfRE1URl9JRCkgewomIzQzOwkJCS8qIEJ5IHJlc2V0dGluZyBoZXJlLCB3aWxsIHN0YXJ0IHRoZSBuZXh0IElOIHRyYW5zZmVyCiYjNDM7CQkJICogYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IHNrYi4gVGhpcyB3aWxsIG1lYW4KJiM0MzsJCQkgKiB3ZSByZS1zeW5jIHdoZW4gd2UgbmV4dCBzZWUgYSBzcGFubmVkIHBhY2tldCBhbGlnbmVkCiYjNDM7CQkJICogd2l0aCB0aGUgc3RhcnQgb2YgYSB0cmFuc2Zlci4KJiM0MzsJCQkgKgomIzQzOwkJCSAqIEluIG5vbi1zcGFubmluZyBtb2RlLCB0aGlzIGp1c3QgbWVhbnMgd2UmIzM5O2xsIGRyb3AKJiM0MzsJCQkgKiB0aGUgY3VycmVudCB0cmFuc2ZlciBvbmx5CiYjNDM7CQkJICovCiYjNDM7CQkJbmV0ZGV2X2RiZyhuZXRkZXYsICYjMzQ7cng6IGludmFsaWQgaWQgJTA0eFxuJiMzNDssCiYjNDM7CQkJCSAgIGJlMTZfdG9fY3B1KGhkci0mZ3Q7aWQpKTsKJiM0MzsJCQlyYyA9IC1FUFJPVE87CiYjNDM7CQkJZ290byBlcnJfcmVzZXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwa3RfbGVuID0gYmUxNl90b19jcHUoaGRyLSZndDtsZW4pOwomIzQzOwkJLyogdjEuMSwgd2l0aCBzcGFuIGVuYWJsZWQsIGhhcyBhIDEzLWJpdCBsZW5ndGggKi8KJiM0MzsJCXBrdF9sZW4gJmFtcDs9IHJ4LSZndDtzcGFuID8KJiM0MzsJCQlNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYOwomIzQzOwkJaWYgKHBrdF9sZW4gJmx0OyBzaXplb2YoKmhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtY3RwX2hkcikpIHsKJiM0MzsJCQluZXRkZXZfZGJnKG5ldGRldiwgJiMzNDtyeDogaW52YWxpZCBsZW4gJWRcbiYjMzQ7LCBwa3RfbGVuKTsKJiM0MzsJCQlyYyA9IC1FUFJPVE87CiYjNDM7CQkJZ290byBlcnJfcmVzZXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBzcGFuIGNvbnRpbnVlcyB0byB0aGUgbmV4dCB0cmFuc2ZlciwgcmVzdWJtaXQgKi8KJiM0MzsJCWlmIChwa3RfbGVuICZndDsgc2tiLSZndDtsZW4pIHsKJiM0MzsJCQlpZiAoIXJ4LSZndDtzcGFuKSB7CiYjNDM7CQkJCW5ldGRldl9kYmcobmV0ZGV2LAomIzQzOwkJCQkJICAgJiMzNDtyeDogc2hvcnQgeGZlciAoJWQgdnMgJWQpIGluIG5vbi1zcGFuIG1vZGUmIzM0OywKJiM0MzsJCQkJCSAgIHBrdF9sZW4sIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJCQkJcmMgPSAtRU5PTVNHOwomIzQzOwkJCQlnb3RvIGVycl9yZXNldDsKJiM0MzsJCQl9CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiB3ZSBoYXZlIChleGFjdGx5KSBhIGNvbXBsZXRlIHBhY2tldCwgUlggaXQgZGlyZWN0bHkgKi8KJiM0MzsJCWlmIChwa3RfbGVuID09IHNrYi0mZ3Q7bGVuKSB7CiYjNDM7CQkJbWN0cF91c2JsaWJfcngobmV0ZGV2LCBza2IpOwomIzQzOwkJCXJ4LSZndDtza2IgPSBOVUxMOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogbW9yZSBwYWNrZXRzIGZvbGxvdyAtIFJYIGEgY2xvbmUgc28gdGhhdCB3ZSBjYW4gY29udGludWUKJiM0MzsJCSAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgU0tCLCB3aGljaCBtYXkgYmUgdGhlIHN0YXJ0IG9mIGEKJiM0MzsJCSAqIHNwYW4uCiYjNDM7CQkgKi8KJiM0MzsJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKJiM0MzsJCWlmIChza2IyKSB7CiYjNDM7CQkJc2tiX3RyaW0oc2tiMiwgcGt0X2xlbik7CiYjNDM7CQkJbWN0cF91c2JsaWJfcngobmV0ZGV2LCBza2IyKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbWN0cF91c2JsaWJfcnhfc3RhdHNfc2luZ2xlX2Ryb3AobmV0ZGV2KTsKJiM0MzsJCX0KJiM0MzsJCXNrYl9wdWxsKHNrYiwgcGt0X2xlbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3Jlc2V0OgomIzQzOwlkZXZfa2ZyZWVfc2tiX2FueShyeC0mZ3Q7c2tiKTsKJiM0MzsJcngtJmd0O3NrYiA9IE5VTEw7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfY29tcGxldGUpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogQ2FuY2VsIGEgcnggY29udGV4dDsgc3Vic2VxdWVudCBwcmVwYXJlL2NvbXBsZXRlIGNhbGxzIHdpbGwgbm90IGJlIGEKJiM0MzsgKiBjb250aW51YXRpb24gb2YgYW55IGRhdGEgYWxyZWFkeSByZWNlaXZlZC4KJiM0MzsgKi8KJiM0Mzt2b2lkIG1jdHBfdXNibGliX3J4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KQomIzQzO3sKJiM0MzsJZGV2X2tmcmVlX3NrYl9hbnkocngtJmd0O3NrYik7CiYjNDM7CXJ4LSZndDtza2IgPSBOVUxMOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9jYW5jZWwpOwomIzQzOwomIzQzOy8qIHRyYW5zbWl0IGNvbnRleHQ6IGVuY2Fwc3VsYXRlcyBvbmUgdHJhbnNmZXIgKi8KJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4IHsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDsKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZCBza2JzOwomIzQzOwl1bnNpZ25lZCBpbnQgYnVmX2xlbiwgbGVuOwomIzQzOwllbnVtIG1jdHBfdXNibGliX3R4X2J1Zl90eXBlIHsKJiM0MzsJCVRYX1NJTkdMRSwKJiM0MzsJCVRYX0ZMQVQsCiYjNDM7CX0gYnVmX3R5cGU7CiYjNDM7CXU4IGJ1ZltdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LAomIzQzOwkJCSBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzICpvcHMsCiYjNDM7CQkJIHZvaWQgKnByaXYsIGJvb2wgc3BhbikKJiM0Mzt7CiYjNDM7CW1lbXNldCh0eCwgMCwgc2l6ZW9mKCp0eCkpOwomIzQzOwl0eC0mZ3Q7b3BzID0gKm9wczsKJiM0MzsJdHgtJmd0O3ByaXYgPSBwcml2OwomIzQzOwl0eC0mZ3Q7c3BhbiA9IHNwYW47CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7dHgtJmd0O2xvY2spOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9pbml0KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X2F2YWlsKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjdHgtJmd0O2J1Zl90eXBlID09IFRYX1NJTkdMRSA/IDAgOiBjdHgtJmd0O2J1Zl9sZW4gLSBjdHgtJmd0O2xlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJLyogVXNlIHRoZSBiYXNlbGluZSBsZW5ndGggKGllLCBCVFUpIGFzIGFuIGFwcHJveGltYXRlCiYjNDM7CSAqICYjMzQ7cmVhc29uYWJseS1zaXplZCYjMzQ7IHBhY2tldCB3ZSBjb3VsZCBleHBlY3QuIElmIHRoZXJlIGlzCiYjNDM7CSAqIGluc3VmZmljaWVudCBjYXBhY2l0eSBmb3IgdGhhdCwgdGhlbiBzZW5kLgomIzQzOwkgKi8KJiM0MzsJY29uc3Qgc2l6ZV90IHBrdF9sZW4gPSBNQ1RQX1VTQl9CVFUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpOwomIzQzOwomIzQzOwlyZXR1cm4gbWN0cF91c2JsaWJfdHhfYXZhaWwoY3R4KSAmbHQ7IHBrdF9sZW47CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUgLSBpbmRpY2F0aW5nIHRoYXQgdGhlIG5ldyBza2IKJiM0MzsgKiBjb3VsZCBub3QgYmUgYXBwZW5kZWQuIFNvLCBlcnJvcnMgcmVwb3J0ZWQgaGVyZSB0byB0aGUgVFggcGF0aCB3aWxsIHJlc3VsdAomIzQzOyAqIGluIHRoZSBUWCBiZWluZyB0cmFuc21pdHRlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X2FwcGVuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsCiYjNDM7CQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJaWYgKGN0eC0mZ3Q7YnVmX3R5cGUgPT0gVFhfU0lOR0xFKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChtY3RwX3VzYmxpYl90eF9hdmFpbChjdHgpICZsdDsgc2tiLSZndDtsZW4pCiYjNDM7CQlyZXR1cm4gLUVOT0JVRlM7CiYjNDM7CiYjNDM7CV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDtjdHgtJmd0O3NrYnMsIHNrYik7CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7bGVuICYjNDM7PSBza2ItJmd0O2xlbjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwl2b2lkICpidWY7CiYjNDM7CiYjNDM7CS8qIElmIHdlIGhhdmUgYSBxbGVuIG9mIDEsIHdlIG9ubHkgZW5kZWQgdXAgcGFja2luZyBhIHNpbmdsZSBza2IsCiYjNDM7CSAqIGRlc3BpdGUgYWxsb2NhdGluZyBmb3IgbXVsdGlwbGUuIFNraXAgdGhlIGNvcHkgYW5kIHNlbmQgZGlyZWN0bHkKJiM0MzsJICogZnJvbSB0aGUgc2tiIGRhdGEuCiYjNDM7CSAqLwomIzQzOwlpZiAoY3R4LSZndDtidWZfdHlwZSA9PSBUWF9TSU5HTEUgfHwgY3R4LSZndDtza2JzLnFsZW4gPT0gMSkgewomIzQzOwkJYnVmID0gY3R4LSZndDtza2JzLm5leHQtJmd0O2RhdGE7CiYjNDM7CiYjNDM7CX0gZWxzZSBpZiAoY3R4LSZndDtidWZfdHlwZSA9PSBUWF9GTEFUKSB7CiYjNDM7CQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwkJc2l6ZV90IHBvcyA9IDA7CiYjNDM7CiYjNDM7CQlza2JfcXVldWVfd2FsaygmYW1wO2N0eC0mZ3Q7c2ticywgc2tiKSB7CiYjNDM7CQkJc2tiX2NvcHlfYml0cyhza2IsIDAsIGN0eC0mZ3Q7YnVmICYjNDM7IHBvcywgc2tiLSZndDtsZW4pOwomIzQzOwkJCXBvcyAmIzQzOz0gc2tiLSZndDtsZW47CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlidWYgPSBjdHgtJmd0O2J1ZjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBjdHgtJmd0O3R4LSZndDtvcHMuc2VuZChjdHgsIGJ1ZiwgY3R4LSZndDtsZW4pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsCiYjNDM7CQkJCSAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwlpZiAoIWN0eCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7Y3R4LSZndDtza2JzKSkgIT0gTlVMTCkKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55X3JlYXNvbihza2IsIHJlYXNvbik7CiYjNDM7CWtmcmVlKGN0eCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiB0eF9jdHgtJmd0O3R4LSZndDtwcml2OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jdHhfcHJpdik7CiYjNDM7CiYjNDM7LyogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSB0eCAmYW1wOyBjb21wbGV0aW9uIHBhdGggaXMgcXVpZXNjZWQgKi8KJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCkKJiM0Mzt7CiYjNDM7CW1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHR4LSZndDtjdXJfY3R4LCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2ZpbmkpOwomIzQzOwomIzQzOy8qIE1heCBzaXplIG9mIGEgc3Bhbm5lZCBUWC4gU2luY2Ugd2UgYWxsb2NhdGUgYSBzZXBhcmF0ZSBzcGFuIGJ1ZmZlciwgbGltaXQKJiM0MzsgKiB0aGUgdHgtdGltZSBhbGxvY2F0aW9ucyB0byA0ay4gTGFyZ2VyIHBhY2tldHMgd2lsbCBiZSBzZW50IGFzIHNpbmdsZQomIzQzOyAqIHRyYW5zZmVycy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFRYX1NQQU5fTUFYID0gNDA5NiAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4KTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqCiYjNDM7bWN0cF91c2JsaWJfdHhfY3R4X2NyZWF0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCSAgYm9vbCBzaW5nbGUpCiYjNDM7ewomIzQzOwllbnVtIG1jdHBfdXNibGliX3R4X2J1Zl90eXBlIHR5cGU7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eDsKJiM0MzsJc2l6ZV90IHN6ID0gMDsKJiM0MzsKJiM0MzsJaWYgKHNpbmdsZSB8fCBza2ItJmd0O2xlbiAmZ3Q7IFRYX1NQQU5fTUFYKSB7CiYjNDM7CQl0eXBlID0gVFhfU0lOR0xFOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdHlwZSA9IFRYX0ZMQVQ7CiYjNDM7CQlzeiA9IHR4LSZndDtzcGFuID8gVFhfU1BBTl9NQVggOiBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0eCA9IGt6YWxsb2NfZmxleCgqY3R4LCBidWYsIHN6LCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCFjdHgpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJY3R4LSZndDt0eCA9IHR4OwomIzQzOwljdHgtJmd0O2J1Zl90eXBlID0gdHlwZTsKJiM0MzsJY3R4LSZndDtidWZfbGVuID0gc3o7CiYjNDM7CWN0eC0mZ3Q7bGVuID0gc2tiLSZndDtsZW47CiYjNDM7CXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtjdHgtJmd0O3NrYnMpOwomIzQzOwlfX3NrYl9xdWV1ZV90YWlsKCZhbXA7Y3R4LSZndDtza2JzLCBza2IpOwomIzQzOwomIzQzOwlyZXR1cm4gY3R4OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LAomIzQzOwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCWJvb2wgb2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IGdldF9jcHVfcHRyKGRldi0mZ3Q7ZHN0YXRzKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtkc3RhdHMtJmd0O3N5bmNwKTsKJiM0MzsJaWYgKG9rKSB7CiYjNDM7CQkvKiBPbmx5IGluY2x1ZGUgdGhlIG5ldHdvcmstbGF5ZXIgZGF0YSBpbiB0eCBzdGF0czsgd2Uga25vdwomIzQzOwkJICogdGhhdCB0aGVyZSBpcyBhIDQtYnl0ZSBoZWFkZXIgcHVzaGVkIHRvIGFsbCBza2JzIGluCiYjNDM7CQkgKiB0eF9za2JfcHJlcGFyZSgpCiYjNDM7CQkgKi8KJiM0MzsJCXU2NCBuID0gY3R4LSZndDtza2JzLnFsZW47CiYjNDM7CQlzNjQgbGVuID0gY3R4LSZndDtsZW4gLSAobiAqIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSk7CiYjNDM7CiYjNDM7CQl1NjRfc3RhdHNfYWRkKCZhbXA7ZHN0YXRzLSZndDt0eF9wYWNrZXRzLCBuKTsKJiM0MzsJCXU2NF9zdGF0c19hZGQoJmFtcDtkc3RhdHMtJmd0O3R4X2J5dGVzLCBsZW4pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdTY0X3N0YXRzX2FkZCgmYW1wO2RzdGF0cy0mZ3Q7dHhfZHJvcHMsIGN0eC0mZ3Q7c2ticy5xbGVuKTsKJiM0MzsJfQomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7ZHN0YXRzLSZndDtzeW5jcCwgZmxhZ3MpOwomIzQzOwlwdXRfY3B1X3B0cihkZXYtJmd0O2RzdGF0cyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IGdldF9jcHVfcHRyKGRldi0mZ3Q7ZHN0YXRzKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtkc3RhdHMtJmd0O3N5bmNwKTsKJiM0MzsJdTY0X3N0YXRzX2luYygmYW1wO2RzdGF0cy0mZ3Q7dHhfZHJvcHMpOwomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7ZHN0YXRzLSZndDtzeW5jcCwgZmxhZ3MpOwomIzQzOwlwdXRfY3B1X3B0cihkZXYtJmd0O2RzdGF0cyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQ29tcGxldGlvbiBmb3IgdGhlIC0mZ3Q7c2VuZCgpIG9wLiBUaGlzIHdpbGwgdXBkYXRlIG5ldGRldiBzdGF0cyBhbmQKJiM0MzsgKiBmcmVlIHRoZSB0eCBjb250ZXh0LgomIzQzOyAqCiYjNDM7ICogTGlrZWx5IGNhbGxlZCBmcm9tIChhdG9taWMpIFVSQiBjb21wbGV0aW9uIGNvbnRleHQuCiYjNDM7ICovCiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCwKJiM0MzsJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG9rKQomIzQzO3sKJiM0MzsJZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0KJiM0MzsJCW9rID8gU0tCX0NPTlNVTUVEIDogU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7CiYjNDM7CiYjNDM7CW1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZSh0eF9jdHgsIGRldiwgb2spOwomIzQzOwltY3RwX3VzYmxpYl90eF9jdHhfZnJlZSh0eF9jdHgsIHJlYXNvbik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUpOwomIzQzOwomIzQzOy8qIFByZXBhcmUgYSBza2IgZm9yIHB1c2goKQomIzQzOyAqCiYjNDM7ICogT24gZXJyb3IsIHBvcHVsYXRlcyBAcmVhc29uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2tiX3ByZXBhcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzcGFuLAomIzQzOwkJCQkgICAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiAqcmVhc29uKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBwbGVuLCBtYXhfbGVuOwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJbWF4X2xlbiA9IHNwYW4gPyBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYOwomIzQzOwomIzQzOwlwbGVuID0gc2tiLSZndDtsZW47CiYjNDM7CWlmIChwbGVuICYjNDM7IHNpemVvZigqaGRyKSAmZ3Q7IG1heF9sZW4pIHsKJiM0MzsJCSpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUEtUX1RPT19CSUc7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKCpoZHIpKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQkqcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PTUVNOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiYjNDM7CWhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTsKJiM0MzsJaWYgKCFoZHIpIHsKJiM0MzsJCSpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9NRU07CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwloZHItJmd0O2lkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7CiYjNDM7CWhkci0mZ3Q7bGVuID0gY3B1X3RvX2JlMTYocGxlbiAmIzQzOyBzaXplb2YoKmhkcikpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQdXNoIGEgbmV3IHNrYiB0byB0aGUgdHJhbnNmZXIuIE1heSByZXN1bHQgaW4gemVybyBvciBtb3JlIGNhbGxzIHRvCiYjNDM7ICogb3BzLSZndDtzZW5kKCkuCiYjNDM7ICoKJiM0MzsgKiBUYWtlcyBvd25lcnNoaXAgb2YgQHNrYiwgaW5jbHVkaW5nIG9uIGVycm9yLgomIzQzOyAqLwomIzQzO2ludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwKJiM0MzsJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsICpzZW5kX2N0eCA9IE5VTEw7CiYjNDM7CWVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjsKJiM0MzsJY29uc3QgaW50IG1heF90cmllcyA9IDM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCB0cnkgPSAxLCByYzsKJiM0MzsKJiM0MzsJcmMgPSBtY3RwX3VzYmxpYl90eF9za2JfcHJlcGFyZShza2IsIHR4LSZndDtzcGFuLCAmYW1wO3JlYXNvbik7CiYjNDM7CWlmIChyYykgewomIzQzOwkJbWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3AoZGV2KTsKJiM0MzsJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pOwomIzQzOwkJLyogd2UgbWF5IHN0aWxsIG5lZWQgdG8gcHJvY2VlZCwgaW4gY2FzZSBhbiBleGlzdGluZyBjdHgKJiM0MzsJCSAqIGlzIG5vdyBzZW5kYWJsZSAoaWUuOiAhbW9yZSkuCiYjNDM7CQkgKi8KJiM0MzsJCXNrYiA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7CiYjNDM7cmV0cnk6CiYjNDM7CS8qIFRyeSBhbmQgcXVldWUgdG8gdGhlIGN1cnJlbnQgY29udGV4dC4gV2UgZXhpdCB0aGlzIGNyaXRpY2FsIHNlY3Rpb24KJiM0MzsJICogd2l0aCBhIGZldyBiaXRzIG9mIHN0YXRlOgomIzQzOwkgKiAgLSBzZW5kX2N0eDogaW5kaWNhdGluZyBhIHByaW9yIGNvbnRleHQgdGhhdCBuZWVkcyB0byBiZSBzZW50CiYjNDM7CSAqICAtIHNrYjogaW5kaWNhdGluZyB0aGF0IGEgc2tiIHN0aWxsIG5lZWRzIHRvIGJlIHF1ZXVlZC9zZW50CiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWN0eCA9IHR4LSZndDtjdXJfY3R4OwomIzQzOwlpZiAoY3R4KSB7CiYjNDM7CQlpZiAoc2tiKSB7CiYjNDM7CQkJcmMgPSBtY3RwX3VzYmxpYl90eF9hcHBlbmQoY3R4LCBza2IpOwomIzQzOwkJCWlmIChyYykgewomIzQzOwkJCQkvKiBjYW4mIzM5O3QgYXBwZW5kIHRvIHRoZSBwZW5kaW5nIHR4IC0gZGV0YWNoIGZvcgomIzQzOwkJCQkgKiBzZW5kaW5nLCBhbmQgd2UmIzM5O2xsIGNyZWF0ZSBhIG5ldyB0eCBiZWxvdy4KJiM0MzsJCQkJICovCiYjNDM7CQkJCXN3YXAodHgtJmd0O2N1cl9jdHgsIHNlbmRfY3R4KTsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQkvKiB3ZSBoYXZlIHF1ZXVlZCAqLwomIzQzOwkJCQlza2IgPSBOVUxMOwomIzQzOwkJCQlpZiAoIW1vcmUgfHwgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoY3R4KSkKJiM0MzsJCQkJCXN3YXAodHgtJmd0O2N1cl9jdHgsIHNlbmRfY3R4KTsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgaWYgKCFtb3JlKSB7CiYjNDM7CQkJc3dhcCh0eC0mZ3Q7Y3VyX2N0eCwgc2VuZF9jdHgpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoc2VuZF9jdHgpIHsKJiM0MzsJCXJjID0gbWN0cF91c2JsaWJfdHhfc2VuZChzZW5kX2N0eCk7CiYjNDM7CQlpZiAocmMpIHsKJiM0MzsJCQltY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoc2VuZF9jdHgsIGRldiwgZmFsc2UpOwomIzQzOwkJCW1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHNlbmRfY3R4LCByZWFzb24pOwomIzQzOwkJfQomIzQzOwkJc2VuZF9jdHggPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHdlIGhhdmUgZWl0aGVyIHF1ZXVlZCwgb3IgdGhlIHByZXBhcmUgZmFpbGVkOyBub3RoaW5nIG1vcmUgdG8gZG8gKi8KJiM0MzsJaWYgKCFza2IpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJY3R4ID0gbWN0cF91c2JsaWJfdHhfY3R4X2NyZWF0ZSh0eCwgc2tiLCAhbW9yZSk7CiYjNDM7CWlmICghY3R4KSB7CiYjNDM7CQluZXRkZXZfZGJnKGRldiwgJiMzNDtUWCBjb250ZXh0IGNyZWF0ZSBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJCW1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGlmIHdlJiMzOTtyZSByZWFkeSB0byBzZW5kIG5vdywgbm8gbmVlZCB0byBlbnF1ZXVlICovCiYjNDM7CWlmICghbW9yZSB8fCBtY3RwX3VzYmxpYl90eF9zaG91bGRfc2VuZChjdHgpKSB7CiYjNDM7CQlyYyA9IG1jdHBfdXNibGliX3R4X3NlbmQoY3R4KTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCW1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShjdHgsIGRldiwgZmFsc2UpOwomIzQzOwkJCW1jdHBfdXNibGliX3R4X2N0eF9mcmVlKGN0eCwgcmVhc29uKTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKCF0eC0mZ3Q7Y3VyX2N0eCkgewomIzQzOwkJdHgtJmd0O2N1cl9jdHggPSBjdHg7CiYjNDM7CQljdHggPSBOVUxMOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwkvKiB3ZSBtYXkgaGF2ZSBsb3N0IHRoZSByYWNlIHdpdGggYSBjb25jdXJyZW50IHR4OyBzaG91bGRuJiMzOTt0IGhhcHBlbiwgYXMKJiM0MzsJICogbmRvX3N0YXJ0X3htaXQgc2hvdWxkIGJlIHNlcmlhbGlzZWQgb3ZlciBvbmUgcXVldWUsIGJ1dCB0cnkgYWdhaW4KJiM0MzsJICogZnJvbSB0aGUgdG9wLCBhcyB3ZSBtYXkgYmUgYWJsZSB0byBxdWV1ZSB0aGUgc2tiIHRvIHRoYXQgY29udGV4dC4KJiM0MzsJICovCiYjNDM7CWlmIChjdHgpIHsKJiM0MzsJCS8qIHVubGluayB0aGUgbmV3IChzb2xlKSBza2IsIHdlIGRvbiYjMzk7dCB3YW50IGl0IGZyZWVkIHdpdGggY3R4ICovCiYjNDM7CQlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtjdHgtJmd0O3NrYnMpOwomIzQzOwkJbWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pOwomIzQzOwkJaWYgKCYjNDM7JiM0Mzt0cnkgJmd0OyBtYXhfdHJpZXMpIHsKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQltY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChkZXYpOwomIzQzOwkJCXJldHVybiAtRUJVU1k7CiYjNDM7CQl9CiYjNDM7CQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9wdXNoKTsKJiM0MzsKJiM0MzsvKiBDYW5jZWwgYSB0eDogYW55IHVuLXNlbnQgY29udGV4dCBpcyByZWxlYXNlZC4gKi8KJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCSAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCA9IE5VTEw7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJc3dhcCh0eC0mZ3Q7Y3VyX2N0eCwgY3R4KTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmICghY3R4KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoY3R4LCBkZXYsIGZhbHNlKTsKJiM0MzsJbWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jYW5jZWwpOwomIzQzOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKZXJlbXkgS2VyciAmbHQ7amtAY29kZWNvbnN0cnVjdC5jb20uYXUmZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O01DVFAgVVNCIHRyYW5zcG9ydCBsaWJyYXJ5JiMzNDspOwomIzQzOwomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVCkKJiM0MzsjaW5jbHVkZSAmIzM0O21jdHAtdXNibGliLXRlc3QuYyYjMzQ7CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9tY3RwLXVzYi5oIGIvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaAppbmRleCBhMmY2ZjFlMDRlZmJkMC4uMzVjYzJjYzE1ZjlhMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaApAQCAtMiw3ICYjNDM7Miw3IEBACiAvKgogICogbWN0cC11c2IuaCAtIE1DVFAgVVNCIHRyYW5zcG9ydCBiaW5kaW5nOiBjb21tb24gZGVmaW5pdGlvbnMsCiAgKiBiYXNlZCBvbiBETVRGMDI4MyBzcGVjaWZpY2F0aW9uOgotICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4wLjEucGRmCiYjNDM7ICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4xLjAucGRmCiAgKgogICogVGhlc2UgYXJlIHByb3RvY29sLWxldmVsIGRlZmluaXRpb25zLCB0aGF0IG1heSBiZSBzaGFyZWQgYmV0d2VlbiBob3N0CiAgKiBhbmQgZ2FkZ2V0IGRyaXZlcnMuCkBAIC0xMywxOCAmIzQzOzEzLDk2IEBACiAjaWZuZGVmIF9fTElOVVhfVVNCX01DVFBfVVNCX0gKICNkZWZpbmUgX19MSU5VWF9VU0JfTUNUUF9VU0JfSAogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCiYjNDM7LyoKJiM0MzsgKiBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydCBoZWFkZXIuIERTUDAyODMgdjEuMCBoYXMgYW4gOC1iaXQgbGVuZ3RoIGZpZWxkCiYjNDM7ICogKHByZWNlZGVkIGJ5IDggcmVzZXJ2ZWQgYml0cyksIHYxLjEgaGFzIGEgMTMtYml0IGxlbmd0aCBmaWVsZCAocHJlY2VkZWQgYnkKJiM0MzsgKiAzIHJlc2VydmVkIGJpdHMpLiBXZSB1c2UgYSBiZTE2IGZvciBvdXIgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgbGFyZ2VyIHYxLjEKJiM0MzsgKiByZXByZXNlbnRhdGlvbiwgYW5kIG1hc2sgYXMgYXBwcm9wcmlhdGUuCiYjNDM7ICovCiBzdHJ1Y3QgbWN0cF91c2JfaGRyIHsKIAlfX2JlMTYJaWQ7Ci0JdTgJcnN2ZDsKLQl1OAlsZW47CiYjNDM7CV9fYmUxNglsZW47CiB9IF9fcGFja2VkOwogCi0jZGVmaW5lIE1DVFBfVVNCX1hGRVJfU0laRQk1MTIKJiM0MzsvKiBtYXggdHJhbnNmZXIgc2l6ZSBmb3IgRFNQMDI4MyB2MS4wICovCiYjNDM7I2RlZmluZSBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFCTUxMgogI2RlZmluZSBNQ1RQX1VTQl9CVFUJCTY4CiAjZGVmaW5lIE1DVFBfVVNCX01UVV9NSU4JTUNUUF9VU0JfQlRVCi0jZGVmaW5lIE1DVFBfVVNCX01UVV9NQVgJKFU4X01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSkKJiM0MzsjZGVmaW5lIE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYCVU4X01BWAomIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8wX01UVV9NQVgJKE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKQomIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgJR0VOTUFTSygxMiwgMCkKJiM0MzsjZGVmaW5lIE1DVFBfVVNCXzFfMV9NVFVfTUFYCShNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSkKICNkZWZpbmUgTUNUUF9VU0JfRE1URl9JRAkweDFhYjQKIAomIzQzOy8qIG1jdHAtdXNibGliICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSWCBoYW5kbGU6IGRyaXZlcnMgd2lsbCB0eXBpY2FsbHkgY3JlYXRlIG9uZSBvbiBpbml0LCB3aGljaCBwZXJzaXN0cyBmb3IKJiM0MzsgKiB0aGUgbGlmZSBvZiB0aGUgZHJpdmVyLiBUaGUgc2FtZSBoYW5kbGUgaXMgdXNlZCBmb3IgcHJvZ3Jlc3NpdmUKJiM0MzsgKiBwcmVwYXJlIC0mZ3Q7IGNvbXBsZXRlIG9wZXJhdGlvbnMgKGZvciBlYWNoIGluY29taW5nIFVTQiB0cmFuc2ZlciksIHdoaWNoCiYjNDM7ICogcmVzdWx0IGluIG5ldGlmX3J4KCktaW5nIHRoZSBNQ1RQIHBhY2tldHMgcmVjZWl2ZWQKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfcnggewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwl1MTYgZXBfcGt0bGVuOwomIzQzOwlib29sIHNwYW47CiYjNDM7fTsKJiM0MzsKJiM0Mzt2b2lkIG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKTsKJiM0Mzt2b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCk7CiYjNDM7CiYjNDM7aW50IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LAomIzQzOwkJCSAgIHZvaWQgKipidWZwLCBzaXplX3QgKmxlbnAsIGdmcF90IGdmcCk7CiYjNDM7CiYjNDM7aW50IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJICAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pOwomIzQzOwomIzQzO3ZvaWQgbWN0cF91c2JsaWJfcnhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogVFggaGFuZGxlOiBjcmVhdGVkIGJ5IG1jdHBfdXNibGliX3R4X3B1c2goKSBkdXJpbmcgdGhlIHR4IHBhdGgsIGFuZAomIzQzOyAqIG1heSBwZXJzaXN0IGFjcm9zcyBtdWx0aXBsZSBwYWNrZXQgdHJhbnNtaXRzLgomIzQzOyAqLwomIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHg7CiYjNDM7CiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB7CiYjNDM7CS8qIFN0YXJ0IGEgVVNCIFRYIGZvciBAZGF0YS4gT24gcmV0dXJuaW5nIHN1Y2Nlc3MsIHRoZSBpbXBsZW1lbnRhdGlvbgomIzQzOwkgKiBtdXN0IGFycmFuZ2UgZm9yIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUoKSB0byBiZSBjYWxsZWQgYXQgc29tZQomIzQzOwkgKiBsYXRlciBwb2ludCAoZWcuLCBvbiB1cmIgY29tcGxldGlvbikuCiYjNDM7CSAqLwomIzQzOwlpbnQgKCpzZW5kKShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3R4IHsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7CiYjNDM7CXZvaWQgKnByaXY7CiYjNDM7CWJvb2wgc3BhbjsKJiM0MzsJLyogcHJvdGVjdHMgYWNjZXNzIHRvIGN1cl9jdHggKi8KJiM0MzsJc3BpbmxvY2tfdCBsb2NrOwomIzQzOwkvKiBjb250ZXh0IHRvIHdoaWNoIHdlIGFyZSBhZGRpbmcgcGFja2V0cywgY2xlYXJlZCBvbiBzZW5kICovCiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN1cl9jdHg7CiYjNDM7fTsKJiM0MzsKJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwKJiM0MzsJCQkgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLCB2b2lkICpwcml2LAomIzQzOwkJCSBib29sIHNwYW4pOwomIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KTsKJiM0MzsKJiM0Mzt2b2lkICptY3RwX3VzYmxpYl90eF9jdHhfcHJpdihzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgpOwomIzQzOwomIzQzO2ludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwKJiM0MzsJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpOwomIzQzOwomIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsCiYjNDM7CQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBvayk7CiYjNDM7CiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pOwomIzQzOwogI2VuZGlmIC8qICBfX0xJTlVYX1VTQl9NQ1RQX1VTQl9IICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTY3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUNUUC1vdmVyLVVTQiBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCBsb29rcyBsaWtlIGl0JiMzOTtzIG1ha2luZyBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIE1DVFAgVVNCIHRyYW5zcG9ydCBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdXBkYXRpbmcgYGRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY2AgYW5kIGludHJvZHVjaW5nIGEgbmV3IGNvbW1vbiBsaWJyYXJ5IGZvciBNQ1RQLW92ZXItVVNCLCB3aGljaCBpcyBgZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jYC4gIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgc29tZSBLVW5pdCB0ZXN0cyBpbiBgZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNgIOKAkyBhbHdheXMgYSBnb29kIHNpZ24uIEFuZCBvZiBjb3Vyc2UsIHRoZXJlIGFyZSBuZXcgS2NvbmZpZyBvcHRpb25zLCBgTUNUUF9UUkFOU1BPUlRfVVNCTElCYCBhbmQgYE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUYC4KCk15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7Q2FuIHRoaXMgdGhpbmcgZXZlbiAqYmUqIGZ1enplZCBlZmZlY3RpdmVseT8mIzM0OyAgTGV0JiMzOTtzIHNlZS4gVGhpcyBgbWN0cC11c2IuY2AgZHJpdmVyIGlzIGEgVVNCIGRldmljZSBkcml2ZXIsIHJpZ2h0PyBBbmQgaXQgYmluZHMgdG8gVVNCIGludGVyZmFjZXMgd2l0aCBgVVNCX0NMQVNTX01DVFBgLiBPa2F5LCBnb29kLiBJbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSwgd2UgY2FuIGVtdWxhdGUgVVNCIGRldmljZXMgdXNpbmcgYHVzYi1kdW1teWAgb3IgYHVzYi1nYWRnZXRgLiAgQW5kIHRoZSByZWFsbHkgaW1wb3J0YW50IGJpdC4uLiBzeXprYWxsZXIsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBsaWtlbHkgdXNlLCAqZG9lcyogc3VwcG9ydCBmdXp6aW5nIFVTQiBkcml2ZXJzIHZpYSBgcmF3LWdhZGdldGAuICBTbywgeWVzLCBpdCBzZWVtcyB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCB0aGUgZWZmb3J0LiAgRXhjZWxsZW50LgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMuICBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyByZWZhY3RvcmluZyBgbWN0cC11c2IuY2AgdG8gbGV2ZXJhZ2UgdGhlIG5ldyBmdW5jdGlvbnMgaW4gYG1jdHAtdXNibGliLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBqdWljeSBiaXRzIGFyZS4gVGhlIG5ldyBmdW5jdGlvbnMgYXJlOiBgbWN0cF91c2JsaWJfcnhfaW5pdGAsIGBtY3RwX3VzYmxpYl9yeF9maW5pYCwgYG1jdHBfdXNibGliX3J4X3ByZXBhcmVgLCBgbWN0cF91c2JsaWJfcnhfY29tcGxldGVgLCBgbWN0cF91c2JsaWJfcnhfY2FuY2VsYCwgYG1jdHBfdXNibGliX3R4X2luaXRgLCBgbWN0cF91c2JsaWJfdHhfZmluaWAsIGBtY3RwX3VzYmxpYl90eF9jdHhfcHJpdmAsIGBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlYCwgYG1jdHBfdXNibGliX3R4X3B1c2hgLCBhbmQgYG1jdHBfdXNibGliX3R4X2NhbmNlbGAuIFRoZXNlIGxvb2sgbGlrZSBjb3JlIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgdGhlIFJYL1RYIHNpZGUgb2YgdGhlIE1DVFAtb3Zlci1VU0IgY29tbXVuaWNhdGlvbi4gIFRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLgoKSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggYWxzbyBoYXMgdXBkYXRlZCBzb21lIGV4aXN0aW5nIGBtY3RwLXVzYi5jYCBmdW5jdGlvbnMgdG8gYWxpZ24gd2l0aCB0aGUgbmV3IGxpYnJhcnk6IGBtY3RwX3VzYl9vdXRfY29tcGxldGVgLCBgbWN0cF91c2JfdHhfc2VuZGAsIGBtY3RwX3VzYl9zdGFydF94bWl0YCwgYG1jdHBfdXNiX3J4X3F1ZXVlYCwgYG1jdHBfdXNiX2luX2NvbXBsZXRlYCwgYG1jdHBfdXNiX3J4X3JldHJ5X3dvcmtgLCBgbWN0cF91c2Jfb3BlbmAsIGBtY3RwX3VzYl9zdG9wYCwgYG1jdHBfdXNiX25ldGRldl9zZXR1cGAsIGBtY3RwX3VzYl9wcm9iZWAsIGFuZCBgbWN0cF91c2JfZGlzY29ubmVjdGAuIFRoZXkgYXJlIGNoYW5naW5nIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBVU0Igc3RhY2ssIHdoaWNoIG1lYW5zIHRoaXMgY291bGQgZXhwb3NlIG5ldyBhdHRhY2sgc3VyZmFjZXMuCgpSZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgdG8gcHJvcGVybHkgZW5hYmxlIHRoaXMgZm9yIGZ1enppbmcsIEkmIzM5O2xsIG5lZWQgYE1DVFBfVFJBTlNQT1JUX1VTQmAgYW5kLCBzaW5jZSBpdCBsb29rcyBsaWtlIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJgIGlzIHNlbGVjdGVkIGJ5IGBNQ1RQX1RSQU5TUE9SVF9VU0JgLCBJIGNhbiBleHBlY3QgdGhlbSB0byBiZSBlbmFibGVkIHRvZ2V0aGVyLiBPZiBjb3Vyc2UsIGBVU0JgIGl0c2VsZiB3aWxsIGhhdmUgdG8gYmUgZW5hYmxlZC4gSSBzaG91bGQgcXVpY2tseSBjaGVjayBgZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnYCB0byBjb25maXJtIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgYnVpbGQgcmVxdWlyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTQxPWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0Ncbi0tXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNDktXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NTA6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQlxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTUxLVx0dHJpc3RhdGUgXCYjMzQ7TUNUUCBvdmVyIFVTQiBjb21tb24gbGlicmFyeVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy01OS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo2MDpjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1RcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02MS0gICAgICAgIGJvb2wgXCYjMzQ7TUNUUCB1c2JsaWIgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02NC1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo2NTpjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjYtXHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIFVTQiB0cmFuc3BvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM0NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgdGhlIE1DVFBfVFJBTlNQT1JUX1VTQiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYE1DVFBfVFJBTlNQT1JUX1VTQmAgZGVwZW5kZW5jeSBzaXR1YXRpb24uIExldCYjMzk7cyBzdGFydCBieSBtYXBwaW5nIG91dCBleGFjdGx5IHdoYXQgaXQgcmVsaWVzIHVwb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdHJhbnNwb3J0IGxheWVyIGluc2lkZSBhbmQgb3V0LCBlc3BlY2lhbGx5IGFueSBleHRlcm5hbCBsaWJyYXJpZXMgb3Iga2VybmVsIG1vZHVsZXMgaXQgbWlnaHQgYmUgdGllZCB0by4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBkcml2ZXIgaW50ZXJmYWNlcywgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzIChIQUxzKSwgcG90ZW50aWFsbHkgc3BlY2lmaWMgVVNCIGhvc3QgY29udHJvbGxlciBkZXBlbmRlbmNpZXMsIG1heWJlIGV2ZW4gZmlybXdhcmUgaW50ZXJhY3Rpb25zLCBpZiBhcHBsaWNhYmxlLiBBIGNvbXByZWhlbnNpdmUgZGVwZW5kZW5jeSB0cmVlIGlzIGNydWNpYWwgaGVyZS4gSSBuZWVkIHRvIGNvbnNpZGVyIG5vdCBqdXN0IGRpcmVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhbHNvIHRyYW5zaXRpdmUgb25lcy4gQW55IHJpcHBsZSBlZmZlY3RzIGZyb20gdXBkYXRpbmcgb3IgbW9kaWZ5aW5nIHRoaXMgY29tcG9uZW50IGRvd24gdGhlIGxpbmUgYXJlIGEgbWFqb3IgY29uY2Vybi4gQW55IGtub3duIGlzc3VlcyBvciBjb25mbGljdHMgd2l0aGluIHRoZSBleGlzdGluZyBzeXN0ZW0gYWxzbyBuZWVkIHRvIGJlIG5vdGVkLiBJIHdhbnQgdG8gYnVpbGQgYSB0cnVseSByb2J1c3QgZGVwZW5kZW5jeSBtb2RlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz02PWNvbmZpZyBNQ1RQX1NFUklBTFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIHNlcmlhbCB0cmFuc3BvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBUVFlcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy05LVx0c2VsZWN0IENSQ19DQ0lUVFxuLS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz0yND1jb25maWcgTUNUUF9TRVJJQUxfVEVTVFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTI1LSAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIHNlcmlhbCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6MjY6ICAgICAgICBkZXBlbmRzIG9uIE1DVFBfU0VSSUFMPXkgXHUwMDI2XHUwMDI2IEtVTklUPXlcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy0yNy0gICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTI5PWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JMkNcbi0tXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMzEtXHQjIGkyYy1tdXggaXMgb3B0aW9uYWwsIGJ1dCB3ZSBtdXN0IGJ1aWxkIGFzIGEgbW9kdWxlIGlmIGkyYy1tdXggaXMgYSBtb2R1bGVcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzozMjpcdGRlcGVuZHMgb24gSTJDX01VWCB8fCAhSTJDX01VWFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjMzOlx0ZGVwZW5kcyBvbiBJMkNcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzozNDpcdGRlcGVuZHMgb24gSTJDX1NMQVZFXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMzUtXHRzZWxlY3QgTUNUUF9GTE9XU1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz00MT1jb25maWcgTUNUUF9UUkFOU1BPUlRfSTNDXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIEkzQyB0cmFuc3BvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo0MzpcdGRlcGVuZHMgb24gSTNDXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNDQtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTUwPWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy01MS1cdHRyaXN0YXRlIFwmIzM0O01DVFAgb3ZlciBVU0IgY29tbW9uIGxpYnJhcnlcJiMzNDtcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo1MjpcdGRlcGVuZHMgb24gVVNCXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNTMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTYwPWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTYxLSAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIHVzYmxpYiB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NjI6ICAgICAgICBkZXBlbmRzIG9uIE1DVFBfVFJBTlNQT1JUX1VTQkxJQj15IFx1MDAyNlx1MDAyNiBLVU5JVD15XG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjMtICAgICAgICBkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz02NT1jb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjYtXHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIFVTQiB0cmFuc3BvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo2NzpcdGRlcGVuZHMgb24gVVNCXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjgtXHRzZWxlY3QgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNDEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYE1DVFBfVFJBTlNQT1JUX1VTQmAgcmVsaWVzIG9uIGBVU0JgLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gTm93LCB0aGUgYmlnZ2VyIHF1ZXN0aW9uIGlzLCB3aGF0JiMzOTtzIHRoZSBkZXBlbmRlbmN5IG9uIGBNQ1RQYCBpdHNlbGY/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIExldCYjMzk7cyBkaWcgaW50byBgbmV0L21jdHAvS2NvbmZpZ2AuIEkmIzM5O2xsIG9wZW4gdXAgdGhhdCBLY29uZmlnIGZpbGUgYW5kIHNlZSB3aGF0IGtpbmQgb2YgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkIGZvciB0aGUgd2hvbGUgYE1DVFBgIHN0YWNrIGFuZCBob3cgYE1DVFBfVFJBTlNQT1JUX1VTQmAgaXMgdGllZCB0byBpdC4gR290dGEgZW5zdXJlIEkmIzM5O20gZ2V0dGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhlIGdvYWwgaXMgYSBjbGVhciB2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoZSBNQ1RQIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUNUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tY3RwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21jdHAvS2NvbmZpZy0xLVxubmV0L21jdHAvS2NvbmZpZzoyOm1lbnVjb25maWcgTUNUUFxubmV0L21jdHAvS2NvbmZpZy0zLVx0ZGVwZW5kcyBvbiBORVRcbi0tXG5uZXQvbWN0cC9LY29uZmlnLTE0LVxubmV0L21jdHAvS2NvbmZpZzoxNTpjb25maWcgTUNUUF9URVNUXG5uZXQvbWN0cC9LY29uZmlnLTE2LSAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIGNvcmUgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm5ldC9tY3RwL0tjb25maWctMjAtXG5uZXQvbWN0cC9LY29uZmlnOjIxOmNvbmZpZyBNQ1RQX0ZMT1dTXG5uZXQvbWN0cC9LY29uZmlnLTIyLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzQ5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXM6IE1DVFAgb3ZlciBVU0IqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGVuc3VyZSBgTUNUUGAgYW5kIGBNQ1RQX1RSQU5TUE9SVF9VU0JgIGFyZSBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIHdlIG5lZWQuIE5vdywgdGhlIGtleSBpcyB0byBwaW5wb2ludCB0aGUgbW9zdCBmcnVpdGZ1bCBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hlcmUgdG8gdGFyZ2V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgpMZXQmIzM5O3MgYmVnaW4gYnkgZXhhbWluaW5nIGBtY3RwLXVzYmxpYi5jYC4gVGhlIG9idmlvdXMgY2FuZGlkYXRlcyBmb3IgY2xvc2UgYXR0ZW50aW9uIGhlcmUgYXJlOiBgbWN0cF91c2JsaWJfcnhfcHJlcGFyZWAsIGBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZWAsIGBtY3RwX3VzYmxpYl90eF9wdXNoYCwgYW5kIGBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGVudHJ5IGFuZCBleGl0IHBvaW50cyBmb3IgZGF0YSB0cmFuc2ZlciBhbmQgcHJvY2Vzc2luZyB3aXRoaW4gdGhlIHVzYmxpYiBjb21wb25lbnQuCgpOZXh0LCB3ZSYjMzk7bGwgc2hpZnQgb3VyIGZvY3VzIHRvIGBtY3RwLXVzYi5jYC4gSGVyZSwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2FycmFudCBhIGRlZXAgZGl2ZTogYG1jdHBfdXNiX2luX2NvbXBsZXRlYCwgYG1jdHBfdXNiX291dF9jb21wbGV0ZWAsIGBtY3RwX3VzYl90eF9zZW5kYCwgYG1jdHBfdXNiX3N0YXJ0X3htaXRgLCBhbmQgYG1jdHBfdXNiX3J4X3F1ZXVlYC4gVGhlc2UgYWxsIGhhbmRsZSBkYXRhIGZsb3cgYW5kIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgVVNCIGhhcmR3YXJlLiBUaGV5IGFyZSBvZiBoaWdoIGludGVyZXN0LgoKV2FpdC4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gTGV0IG1lIHNlZSBpZiBgbWN0cF91c2JsaWJfcnhgIGlzIGEgZnVuY3Rpb24uIEFoLCBubywgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gaW5zaWRlIGBtY3RwLXVzYmxpYi5jYCwgd2hpY2ggbWFrZXMgaXQgYSBzbGlnaHRseSBkaWZmZXJlbnQgdGFyZ2V0LiBJdCYjMzk7cyBsaWtlbHkgaW1wb3J0YW50IGluIHRoZSBvdmVyYWxsIGZsb3csIGJ1dCB3ZSBjYW4mIzM5O3QgZGlyZWN0bHkgdGFyZ2V0IGl0LiBMZXQmIzM5O3Mgc3RpbGwgbWFrZSBzdXJlIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBgbWN0cF91c2JsaWJfcnhgIG5vdywgc3BlY2lmaWNhbGx5IGluIGBtY3RwLXVzYmxpYi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWN0cF91c2JsaWJfcngmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTE2LVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjE3OnZvaWQgbWN0cF91c2JsaWJfcnhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCB1MTYgZXBfcGt0bGVuLCBib29sIHNwYW4pXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMTgte1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMi19XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjM6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfaW5pdCk7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjQtXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjU6dm9pZCBtY3RwX3VzYmxpYl9yeF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjYte1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yOC19XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6Mjk6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfZmluaSk7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMzAtXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTM0LSAqL1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjM1OmludCBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MzY6XHRcdFx0ICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0zNy1cdFx0XHQgICB2b2lkICoqYnVmcCwgc2l6ZV90ICpsZW5wLCBnZnBfdCBnZnApXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTQzLVx0XHQvKiBzb21ldGhpbmcgbXVzdCBoYXZlIGdvbmUgdGVycmlibHkgd3JvbmcuIGNsZWFyIGFuZCByZXN0YXJ0ICovXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6NDQ6XHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChyeCk7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNDUtXHRcdHNrYiA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTg4LX1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzo4OTpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy05MC1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzo5MTpzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTkyLXtcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMTE0LVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjExNTpzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTExNi17XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTEzMS0gKi9cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoxMzI6aW50IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MTMzOlx0XHRcdCAgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCBzaXplX3QgbGVuKVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTEzNC17XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTE5OC1cdFx0aWYgKHBrdF9sZW4gPT0gc2tiLVx1MDAzZWxlbikge1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjE5OTpcdFx0XHRtY3RwX3VzYmxpYl9yeChuZXRkZXYsIHNrYik7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjAwLVx0XHRcdHJ4LVx1MDAzZXNrYiA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIxMC1cdFx0XHRza2JfdHJpbShza2IyLCBwa3RfbGVuKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoyMTE6XHRcdFx0bWN0cF91c2JsaWJfcngobmV0ZGV2LCBza2IyKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMTItXHRcdH0gZWxzZSB7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjEzOlx0XHRcdG1jdHBfdXNibGliX3J4X3N0YXRzX3NpbmdsZV9kcm9wKG5ldGRldik7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjE0LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIyNC19XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjI1OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMjYtXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIzMC0gKi9cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoyMzE6dm9pZCBtY3RwX3VzYmxpYl9yeF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMzIte1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMzUtfVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjIzNjpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9jYW5jZWwpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIzNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwMTkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gVVNCIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgdGhlIFVTQiBpbnRlcmZhY2UgaW4gdGhpcyBNQ1RQIGltcGxlbWVudGF0aW9uLiBNeSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IGNlbnRlcnMgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHRoZSBsaW5jaHBpbnMgb2YgdGhlIGRhdGEgZmxvdzogYG1jdHBfdXNibGliX3J4X3ByZXBhcmVgLCBgbWN0cF91c2JsaWJfcnhfY29tcGxldGVgLCBgbWN0cF91c2JsaWJfdHhfcHVzaGAsIGBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlYCwgYG1jdHBfdXNiX2luX2NvbXBsZXRlYCwgYG1jdHBfdXNiX291dF9jb21wbGV0ZWAsIGBtY3RwX3VzYl90eF9zZW5kYCwgYG1jdHBfdXNiX3N0YXJ0X3htaXRgLCBhbmQgYG1jdHBfdXNiX3J4X3F1ZXVlYC4gSSBuZWVkIHRvIGVuc3VyZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBob3cgZGF0YSBpcyByZWNlaXZlZCwgdHJhbnNtaXR0ZWQsIGFuZCBtYW5hZ2VkIHRocm91Z2hvdXQgdGhlIFVTQiBjb21tdW5pY2F0aW9uIGxpZmVjeWNsZS4gQSB0aG9yb3VnaCBleGFtaW5hdGlvbiBvZiB0aGVzZSBlbGVtZW50cyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0uIEkgd2lsbCBzdGFydCBieSBkaWdnaW5nIGludG8gYG1jdHBfdXNiX2luX2NvbXBsZXRlYCB3aXRoaW4gdGhlIGBtY3RwLXVzYi5jYCBmaWxlLiBUaGlzIGZ1bmN0aW9uIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBhbmFseXplIHRoZSBSWCBkYXRhIHByb2Nlc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21jdHBfdXNiX2luX2NvbXBsZXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz0xMjY9c3RhdGljIG5ldGRldl90eF90IG1jdHBfdXNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTM2LVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjEzNzpzdGF0aWMgdm9pZCBtY3RwX3VzYl9pbl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTEzOC1cbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MTQ1PXN0YXRpYyBpbnQgbWN0cF91c2JfcnhfcXVldWUoc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiwgZ2ZwX3QgZ2ZwKVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0xNTgtXHRcdFx0ICB1c2JfcmN2YnVsa3BpcGUobWN0cF91c2ItXHUwMDNldXNiZGV2LCBtY3RwX3VzYi1cdTAwM2VlcF9pbiksXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MTU5Olx0XHRcdCAgYnVmLCBsZW4sIG1jdHBfdXNiX2luX2NvbXBsZXRlLCBtY3RwX3VzYik7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTYwLVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz0xNzk9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByeF9lcnJfbWF4ID0gMTA7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTgwLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjE4MTpzdGF0aWMgdm9pZCBtY3RwX3VzYl9pbl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTgyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4ODgKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgbWN0cF91c2Jfb3V0X2NvbXBsZXRlIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhlIG91dHB1dCBjb21wbGV0aW9uIGhhbmRsaW5nIGluIHRoZSBNQ1RQLW92ZXItVVNCIGRyaXZlci4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgbWN0cF91c2Jfb3V0X2NvbXBsZXRlYCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyBpbiBgbWN0cC11c2IuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgZnVuY3Rpb24uIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhhdCBjb2RlIGFuZCBzZWVpbmcgd2hhdCBpdCYjMzk7cyBkb2luZy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdHMgcm9sZSBpbiB0aGUgZGF0YSB0cmFuc2ZlciBwcm9jZXNzIGZyb20gdGhlIHN5c3RlbSB0byB0aGUgVVNCIGRldmljZSwgcGFydGljdWxhcmx5IHdoZW4gYSB0cmFuc2ZlciBpcyBjb25zaWRlcmVkIGNvbXBsZXRlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlOiB3aGF0IGhhcHBlbnMgdG8gdGhlIGRhdGEsIGlzIHRoZXJlIGFueSBlcnJvciBoYW5kbGluZywgYW5kIGhvdyBkb2VzIGl0IHNpZ25hbCB0aGUgY29tcGxldGlvbiB0byB0aGUgaGlnaGVyIGxheWVycz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWN0cF91c2Jfb3V0X2NvbXBsZXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz02ND1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFRYX1FNRU1fTUFYID0gMTYzODQ7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtNjUtXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6NjY6c3RhdGljIHZvaWQgbWN0cF91c2Jfb3V0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy02Ny17XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jPTg1PXN0YXRpYyBpbnQgbWN0cF91c2JfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTk4LVx0XHRcdCAgdXNiX3NuZGJ1bGtwaXBlKG1jdHBfdXNiLVx1MDAzZXVzYmRldiwgbWN0cF91c2ItXHUwMDNlZXBfb3V0KSxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYzo5OTpcdFx0XHQgIGRhdGEsIGxlbiwgbWN0cF91c2Jfb3V0X2NvbXBsZXRlLCB0eF9jdHgpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTEwMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MjMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTUNUUC1VU0IgVFggU2VuZCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBtY3RwX3VzYl90eF9zZW5kYCB3aXRoaW4gYG1jdHAtdXNiLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IHB1c2hlcyBvdXIgTUNUUCBkYXRhIG91dCBvdmVyIFVTQi4gSSB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgaW50cmljYWNpZXMgb2YgdGhlIFVTQiB0cmFuc3BvcnQgbGF5ZXIsIGVzcGVjaWFsbHkgZXJyb3IgY2hlY2tpbmcgYW5kIGJ1ZmZlcmluZy4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGRhdGEgdHJhbnNmZXIsIHBhcnRpY3VsYXJseSB3aGF0IGhhcHBlbnMgaWYgdGhlcmUmIzM5O3MgY29udGVudGlvbiBvbiB0aGUgVVNCIGJ1cyBvciBpZiBhbiBlbmRwb2ludCBpcyBidXN5LiBBcmUgdGhleSB1c2luZyBETUEgZWZmZWN0aXZlbHk/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGluIHRoaXMgc2VuZCBmdW5jdGlvbiB0aGF0IG1pZ2h0IGltcGFjdCBvdmVyYWxsIE1DVFAgcGVyZm9ybWFuY2U/IEFueSBsb2NrIGNvbnRlbnRpb24gaXNzdWVzIEkgc2hvdWxkIGtub3c/IEFyZSB0aGV5IHVzaW5nIGFueSB0cmlja3Mgd2l0aCB0aGUgVVNCIHRyYW5zZmVyIGRlc2NyaXB0b3JzIHRvIG9wdGltaXplIHRoZSBwcm9jZXNzLCBtYXliZSBoYW5kbGluZyB0aGUgcGFja2V0aXphdGlvbiBvZiBNQ1RQIGRhdGE/IFRpbWUgdG8gZ2V0IHRoZSBkZWJ1Z2dlciBvdXQgYW5kIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21jdHBfdXNiX3R4X3NlbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jPTY2PXN0YXRpYyB2b2lkIG1jdHBfdXNiX291dF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTg0LVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjg1OnN0YXRpYyBpbnQgbWN0cF91c2JfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtODYtXHRcdFx0ICAgIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jPTEyMj1zdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB0eF9vcHMgPSB7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MTIzOlx0LnNlbmQgPSBtY3RwX3VzYl90eF9zZW5kLFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTEyNC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk1MAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1jdHBfdXNiX3N0YXJ0X3htaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbWN0cF91c2Jfc3RhcnRfeG1pdGAsIHNwZWNpZmljYWxseSBpbiBgbWN0cC11c2IuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhlIFVTQiB0cmFuc3BvcnQgaW5pdGlhdGVzIHRyYW5zbWlzc2lvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBNQ1RQIG1lc3NhZ2VzIGFyZSBtYXJzaGFsZWQsIHdoZXJlIHRoZSBETUEgaXMgc2V0IHVwIChpZiBhcHBsaWNhYmxlKSwgYW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgcG90ZW50aWFsIGJ1cyBjb250ZW50aW9uIG9yIGVycm9ycy4gSSYjMzk7bSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiB0aGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgZW1wbG95ZWQgdG8gZW5zdXJlIGF0b21pYyBvcGVyYXRpb25zLCBiZWNhdXNlIHRoYXQmIzM5O3MgYWx3YXlzIGEgcG9pbnQgb2Ygc3VidGxlIGJ1Z3MgaW4gbXVsdGktdGhyZWFkZWQgY29udGV4dHMuIExldCYjMzk7cyBzZWUgaG93IHRoZSBwYWNrZXQgZGVzY3JpcHRvciBpcyB1c2VkLCBhbmQgaG93IHRoZSBidWZmZXIgcG9vbCBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGludGVycnVwdCBoYW5kbGluZyBzZXR1cCB0b287IEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgaG93IHRoZSBUWCBjb21wbGV0aW9uIGludGVycnVwdCBpcyBoYW5kbGVkIGFuZCBpZiB3ZSYjMzk7cmUgdXNpbmcgcG9sbGluZy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3VlcyBhcm91bmQgc2hhcmVkIHJlc291cmNlcywgZXNwZWNpYWxseSBhcm91bmQgdGhlIHJpbmcgYnVmZmVyIGlmIGl0JiMzOTtzIHRoZXJlLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhpcyBwYXJ0IG9mIHRoZSBkcml2ZXIgaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgdG8gdGhlIGV4aXN0aW5nIE1DVFAgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIGJ1ZmZlciBtYW5hZ2VtZW50IHRvIGF2b2lkIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWN0cF91c2Jfc3RhcnRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIHR4X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTI1LVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjEyNjpzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTEyNy1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz0zMDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtY3RwX3VzYl9uZXRkZXZfb3BzID0ge1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjMwNTpcdC5uZG9fc3RhcnRfeG1pdCA9IG1jdHBfdXNiX3N0YXJ0X3htaXQsXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMzA2LVx0Lm5kb19vcGVuID0gbWN0cF91c2Jfb3BlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1NzQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBtY3RwX3VzYl9yeF9xdWV1ZWAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgbWN0cF91c2JfcnhfcXVldWVgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYG1jdHAtdXNiLmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGluY29taW5nIFVTQiBkYXRhIHJlY2VwdGlvbiBpcyBoYW5kbGVkLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHF1ZXVlIG9wZXJhdGVzLCBob3cgaXQmIzM5O3MgbWFuYWdlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBjb21wb25lbnRzIGluIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBidWZmZXIgbWFuYWdlbWVudCwgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGUuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBwdWxsaW5nIGluY29taW5nIHBhY2tldHMgb2ZmIHRoZSBVU0IgaW50ZXJmYWNlLCB2YWxpZGF0aW5nIHRoZW0sIGFuZCB0aGVuIHBlcmhhcHMgZW5xdWV1aW5nIHRoZW0gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4gSSBleHBlY3QgdG8gc2VlIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIGJ1ZmZlcmluZywgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgcGVyaGFwcyBzb21lIGZvcm0gb2YgbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24gdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGltcGxlbWVudGF0aW9uIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21jdHBfdXNiX3J4X3F1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz0xNDM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgUlhfUkVUUllfREVMQVkgPSBIWiAvIDQ7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTQ0LVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjE0NTpzdGF0aWMgaW50IG1jdHBfdXNiX3J4X3F1ZXVlKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGdmcF90IGdmcClcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0xNDYte1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz0xODE9c3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0yNDEtXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MjQyOlx0bWN0cF91c2JfcnhfcXVldWUobWN0cF91c2IsIEdGUF9BVE9NSUMpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTI0My19XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jPTI0NT1zdGF0aWMgdm9pZCBtY3RwX3VzYl9yeF9yZXRyeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMjYzLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjI2NDpcdG1jdHBfdXNiX3J4X3F1ZXVlKG1jdHBfdXNiLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0yNjUtfVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz0yNjc9c3RhdGljIGludCBtY3RwX3VzYl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTI3Ni1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYzoyNzc6XHRyZXR1cm4gbWN0cF91c2JfcnhfcXVldWUobWN0cF91c2IsIEdGUF9LRVJORUwpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTI3OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzg2CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbWN0cF91c2JsaWJfdHhfcHVzaGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGUgdHJhbnNtaXQgc2lkZSBvZiB0aGUgVVNCIGxpYnJhcnkgaW1wbGVtZW50YXRpb24uIFRoZSBmaXJzdCBwbGFjZSB0byBjaGVjaywgbmF0dXJhbGx5LCBpcyBgbWN0cF91c2JsaWJfdHhfcHVzaGAgd2l0aGluIGBtY3RwLXVzYmxpYi5jYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGNvcmUgb2YgcHVzaGluZyBkYXRhIG9udG8gdGhlIFVTQiB0cmFuc21pdCBxdWV1ZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IGl0IGhhbmRsZXMgdGhpbmdzIGxpa2UgYnVmZmVyIGFsbG9jYXRpb24sIGludGVycnVwdCBwcm90ZWN0aW9uIChwcm9iYWJseSBtdXRleGVzIG9yIHNwaW5sb2NrcyksIGFueSBwb3RlbnRpYWwgZmxvdyBjb250cm9sIG1lY2hhbmlzbXMsIGFuZCBvZiBjb3Vyc2UsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgVVNCIGNvbnRyb2xsZXIgaGFyZHdhcmUgcmVnaXN0ZXJzIG9yIGRyaXZlciBmdW5jdGlvbnMgdG8gYWN0dWFsbHkgaW5pdGlhdGUgdGhlIHRyYW5zbWlzc2lvbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGRlYWxzIHdpdGggcGFydGlhbCBwYWNrZXRzIG9yIGlmIGl0IGhhcyBhbnkgc21hcnQgYnVmZmVyaW5nIHNjaGVtZXMgZm9yIGRpZmZlcmVudCBtZXNzYWdlIHNpemVzLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGl0IHJldHVybnMgYW55IGVycm9yIGNvZGVzIHRoYXQgd291bGQgdGVsbCBtZSBob3cgdGhlIGZ1bmN0aW9uIGRlYWxzIHdpdGggYSBmdWxsIHF1ZXVlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZWQgdGhlIERNQSBjb25maWd1cmF0aW9uIHRvby4gR290IHRvIGJlIHN1cmUgdGhleSYjMzk7cmUgbm90IGJsb2NraW5nIHVubmVjZXNzYXJpbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21jdHBfdXNibGliX3R4X3B1c2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTQ0NT1zdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X3NrYl9wcmVwYXJlKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgc3Bhbixcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNDgzLSAqL1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjQ4NDppbnQgbWN0cF91c2JsaWJfdHhfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTQ4NS1cdFx0XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy01ODgtfVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjU4OTpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9wdXNoKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy01OTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTUzCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgbWN0cC11c2JsaWIuYyBUcmFuc2FjdGlvbiBDb21wbGV0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhlIGNvbXBsZXRpb24gb2YgYSB0cmFuc21pc3Npb24uIFRpbWUgdG8gemVybyBpbiBvbiBgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZWAgd2l0aGluIGBtY3RwLXVzYmxpYi5jYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgcHJvcGVyIHRyYW5zYWN0aW9uIGhhbmRsaW5nIGFuZCBlcnJvciBtYW5hZ2VtZW50IGF0IHRoZSBVU0IgbGF5ZXIgb2YgdGhlIE1DVFAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgY29tcGxldGlvbiBjYWxsYmFjayB0aWVzIGludG8gdGhlIG92ZXJhbGwgc3RhdGUgbWFjaGluZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgVVNCIGRyaXZlciBhcyB3ZWxsIGFzIHRoZSBNQ1RQIGNvcmUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB2YXJpYWJsZXMgYXJlIGJlaW5nIHNldCBvciBjbGVhcmVkLCBhbnkgaW50ZXJydXB0cyBiZWluZyB0cmlnZ2VyZWQsIGFuZCBlcnJvciBjb2RlcyBiZWluZyBoYW5kbGVkIG9uIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBidWZmZXIgbWFuYWdlbWVudC4gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSByZWxldmFudCBpbnRlcnJ1cHQgaGFuZGxlcnMgYW5kIGVycm9yIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz00MTM9c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNDI5LSAqL1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjQzMDp2b2lkIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTQzMS1cdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBvaylcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNDM4LX1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzo0Mzk6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSk7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNDQwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjUyMQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhhdCBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBNQ1RQIFVTQiBMaWJyYXJ5KioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdHJhbnNtaXNzaW9uIGNhbmNlbGxhdGlvbiB3b3JrcyB3aXRoaW4gdGhlIE1DVFAgVVNCIGxpYnJhcnkuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBtY3RwX3VzYmxpYl90eF9jYW5jZWxgIGluIGBtY3RwLXVzYmxpYi5jYC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjZXNzYXRpb24gb2YgZGF0YSB0cmFuc21pc3Npb24uIElzIGl0IGEgZ3JhY2VmdWwgc2h1dGRvd24gb2YgdGhlIFVTQiBlbmRwb2ludCwgYSBxdWV1aW5nIGlzc3VlLCBvciBqdXN0IGNsZWFyaW5nIGEgZmxhZz8gQW5kLCB3aGF0IHN0YXRlIGRvZXMgdGhlIGRldmljZSBvciBjb250cm9sbGVyIGVudGVyIHVwb24gdGhlIGNhbmNlbGxhdGlvbj8gSSYjMzk7bGwgcHJvYmFibHkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIFVTQiBkcml2ZXIgYW5kIHRoZSBNQ1RQIHByb3RvY29sIGxheWVycy4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBjb25kaXRpb25hbCBsb2dpYyByZWdhcmRpbmcgZGlmZmVyZW50IHRyYW5zbWlzc2lvbiBzdGF0ZXMgb3IgZXJyb3IgY29uZGl0aW9ucywgc28gdGhhdCB3aWxsIGJlIHRoZSBmb2NhbCBwb2ludCBvZiBteSBzY3J1dGlueS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWN0cF91c2JsaWJfdHhfY2FuY2VsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz01ODk9RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfcHVzaCk7XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTU5MS0vKiBDYW5jZWwgYSB0eDogYW55IHVuLXNlbnQgY29udGV4dCBpcyByZWxlYXNlZC4gKi9cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzo1OTI6dm9pZCBtY3RwX3VzYmxpYl90eF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy01OTMtXHRcdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy02MDctfVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjYwODpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jYW5jZWwpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYwOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwNDEKCQkJCQkJCW91dHB1dDogMjM4CgkJCQkJCQl0aG91Z2h0czogNTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgTUNUUC1vdmVyLVVTQiB3aXRoIHRoZSBOZXcgTGlicmFyeSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGtleSBoZXJlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBuZXcgY29tbW9uIGxpYnJhcnksIGBtY3RwLXVzYmxpYmAsIGFuZCBpdHMgaW50ZWdyYXRpb24gd2l0aCB0aGUgZXhpc3RpbmcgYG1jdHAtdXNiYCB0cmFuc3BvcnQgZHJpdmVyLgoKTXkgbWFpbiBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGVzZSBmdW5jdGlvbnMsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhleSBhcmUgaW5jbHVkZWQgaW4gdGhlIGZ1enppbmcgY29uZmlndXJhdGlvbjogYG1jdHBfdXNibGliX3J4X3ByZXBhcmVgLCBgbWN0cF91c2JsaWJfcnhfY29tcGxldGVgLCBgbWN0cF91c2JsaWJfdHhfcHVzaGAsIGBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlYCwgYG1jdHBfdXNiX2luX2NvbXBsZXRlYCwgYG1jdHBfdXNiX291dF9jb21wbGV0ZWAsIGBtY3RwX3VzYl90eF9zZW5kYCwgYG1jdHBfdXNiX3N0YXJ0X3htaXRgLCBhbmQgYG1jdHBfdXNiX3J4X3F1ZXVlYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBhbmQgY29tcGxldGlvbiByb3V0aW5lcywgc28gdGhvc2UgYXJlIHdoYXQgSSYjMzk7bGwgc3RhcnQgd2l0aC4KClRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGZ1bmN0aW9uYWwuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIFVTQiBnYWRnZXQgZW11bGF0aW9uLCB3aGljaCBpcyB3aGF0IEkmIzM5O2QgZXhwZWN0LiBUbyBlbnN1cmUgdGhpcyBpcyBzZXR1cCBwcm9wZXJseSwgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYSBmZXcgY29uZmlndXJhdGlvbnM6IEZpcnN0LCB0aGUgYmFzaWMgYE1DVFBgIHN1cHBvcnQuIFRoZW4sIG9mIGNvdXJzZSwgdGhlIGBNQ1RQX1RSQU5TUE9SVF9VU0JgIG9wdGlvbiwgYW5kIGZpbmFsbHksIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJgLiBJIG5vdGVkIHRoYXQgYE1DVFBfVFJBTlNQT1JUX1VTQkxJQmAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBieSBgTUNUUF9UUkFOU1BPUlRfVVNCYCwgYnV0IEkmIzM5O20gZ29pbmcgdG8gbGlzdCBpdCBleHBsaWNpdGx5IGZvciBjbGFyaXR5LgoKSSYjMzk7bSBza2lwcGluZyB0aGUgYE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUYCBjb25maWcsIHNpbmNlIHRoYXQmIzM5O3MgYSBLVW5pdCB0ZXN0LCBhbmQgZnV6emluZyBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgcmVxdWlyZSB0aG9zZS4gSXQmIzM5O3MgbW9yZSBhYm91dCBjb2RlIGNvdmVyYWdlIHRoYW4gcnVubmluZyB1bml0IHRlc3RzLgoKU28sIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTtsbCBzZXQgdXAgZm9yIHRoZSBmdXp6aW5nIHJ1bjoKCioqV29ydGhGdXp6aW5nOiB0cnVlKioKCioqRm9jdXNTeW1ib2xzOioqCi0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZQotIG1jdHBfdXNibGliX3J4X2NvbXBsZXRlCi0gbWN0cF91c2JsaWJfdHhfcHVzaAotIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUKLSBtY3RwX3VzYl9pbl9jb21wbGV0ZQotIG1jdHBfdXNiX291dF9jb21wbGV0ZQotIG1jdHBfdXNiX3R4X3NlbmQKLSBtY3RwX3VzYl9zdGFydF94bWl0Ci0gbWN0cF91c2JfcnhfcXVldWUKCioqRW5hYmxlQ29uZmlnczoqKgotIE1DVFAKLSBNQ1RQX1RSQU5TUE9SVF9VU0IKLSBNQ1RQX1RSQU5TUE9SVF9VU0JMSUIKClRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29tbW9uIGxpYnJhcnkgZm9yIE1DVFAtb3Zlci1VU0IgYW5kIG1vZGlmaWVzIHRoZSBNQ1RQIFVTQiB0cmFuc3BvcnQgZHJpdmVyIHRvIHVzZSBpdC4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24uIEl0JiMzOTtzIHByaW1lIHRlcnJpdG9yeSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7TUNUUF9UUkFOU1BPUlRfVVNCJiMzNDssCiAgICAmIzM0O01DVFBfVFJBTlNQT1JUX1VTQkxJQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21jdHBfdXNibGliX3J4X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfcnhfY29tcGxldGUmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfcHVzaCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O21jdHBfdXNiX2luX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O21jdHBfdXNiX291dF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYl90eF9zZW5kJiMzNDssCiAgICAmIzM0O21jdHBfdXNiX3N0YXJ0X3htaXQmIzM0OywKICAgICYjMzQ7bWN0cF91c2JfcnhfcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiAoYG1jdHAtdXNibGliYCkgYW5kIG1vZGlmaWVzIHRoZSBNQ1RQIFVTQiB0cmFuc3BvcnQgZHJpdmVyIChgbWN0cC11c2JgKSB0byB1c2UgaXQuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIFVTQiBnYWRnZXQgZW11bGF0aW9uIChlLmcuLCByYXctZ2FkZ2V0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUNUUCYjMzQ7LAogICAgJiMzNDtNQ1RQX1RSQU5TUE9SVF9VU0ImIzM0OywKICAgICYjMzQ7TUNUUF9UUkFOU1BPUlRfVVNCTElCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWN0cF91c2JsaWJfcnhfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9wdXNoJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUmIzM0OywKICAgICYjMzQ7bWN0cF91c2JfaW5fY29tcGxldGUmIzM0OywKICAgICYjMzQ7bWN0cF91c2Jfb3V0X2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O21jdHBfdXNiX3R4X3NlbmQmIzM0OywKICAgICYjMzQ7bWN0cF91c2Jfc3RhcnRfeG1pdCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYl9yeF9xdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBsaWJyYXJ5IGZvciBNQ1RQLW92ZXItVVNCIChgbWN0cC11c2JsaWJgKSBhbmQgbW9kaWZpZXMgdGhlIE1DVFAgVVNCIHRyYW5zcG9ydCBkcml2ZXIgKGBtY3RwLXVzYmApIHRvIHVzZSBpdC4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24gKGUuZy4sIHJhdy1nYWRnZXQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6Mjk6NDguNTIxNzc3MTk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzNzM1ODgwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUNUUFwiLFxuICAgIFwiTUNUUF9UUkFOU1BPUlRfVVNCXCIsXG4gICAgXCJNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9wcmVwYXJlXCIsXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfcHVzaFwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2JfaW5fY29tcGxldGVcIixcbiAgICBcIm1jdHBfdXNiX291dF9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2JfdHhfc2VuZFwiLFxuICAgIFwibWN0cF91c2Jfc3RhcnRfeG1pdFwiLFxuICAgIFwibWN0cF91c2JfcnhfcXVldWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBsaWJyYXJ5IGZvciBNQ1RQLW92ZXItVVNCIChgbWN0cC11c2JsaWJgKSBhbmQgbW9kaWZpZXMgdGhlIE1DVFAgVVNCIHRyYW5zcG9ydCBkcml2ZXIgKGBtY3RwLXVzYmApIHRvIHVzZSBpdC4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24gKGUuZy4sIHJhdy1nYWRnZXQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzoyOTo0OC41MjE3ODIzMTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNTQyMjMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ2ZGE3NzQ0ZjI1OWEyMzYyYmE0MTM0NDlkNjZlMTYxMDEzNThlODFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgOCAyMzoyOTo0NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL0tjb25maWcgYi9kcml2ZXJzL25ldC9tY3RwL0tjb25maWdcXG5pbmRleCBjZjMyNWFiMGIxZWY1NS4uYzQwYWM5YzY2NWI3NTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXFxuQEAgLTQ3LDkgKzQ3LDI1IEBAIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0NcXG4gXFx0ICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCBmb3IgZWFjaCBJM0MgYnVzXFxuIFxcdCAgaGF2aW5nIGEgXFxcIm1jdHAtY29udHJvbGxlclxcXCIgZGV2aWNldHJlZSBwcm9wZXJ0eS5cXG4gXFxuK2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcXG4rXFx0dHJpc3RhdGUgXFxcIk1DVFAgb3ZlciBVU0IgY29tbW9uIGxpYnJhcnlcXFwiXFxuK1xcdGRlcGVuZHMgb24gVVNCXFxuK1xcdGhlbHBcXG4rXFx0ICBDb21tb24gcHJvdG9jb2wgaGFuZGxpbmcgZnVuY3Rpb25zIGZvciBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydFxcbitcXHQgIGltcGxlbWVudGF0aW9ucywgc3VpdGFibGUgZm9yIHVzZSBpbiBlaXRoZXIgaG9zdC0gb3IgZ2FkZ2V0LXNpZGVcXG4rXFx0ICB0cmFuc3BvcnQgZHJpdmVyXFxuK1xcbitcXHQgIFRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYnkgdGhlIHRyYW5zcG9ydCBkcml2ZXIuXFxuK1xcbitjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1RcXG4rICAgICAgICBib29sIFxcXCJNQ1RQIHVzYmxpYiB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbisgICAgICAgIGRlcGVuZHMgb24gTUNUUF9UUkFOU1BPUlRfVVNCTElCPXkgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbisgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuK1xcbiBjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCXFxuIFxcdHRyaXN0YXRlIFxcXCJNQ1RQIFVTQiB0cmFuc3BvcnRcXFwiXFxuIFxcdGRlcGVuZHMgb24gVVNCXFxuK1xcdHNlbGVjdCBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcXG4gXFx0aGVscFxcbiBcXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBVU0IgdHJhbnNwb3J0LFxcbiBcXHQgIGRlZmluZWQgYnkgRE1URiBzcGVjaWZpY2F0aW9uIERTUDAyODMuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXFxuaW5kZXggYzM2MDA2ODQ5YTFlN2QuLmM4NzBiNjJkM2YxYzk1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXFxuQEAgLTIsMyArMiw0IEBAIG9iai0kKENPTkZJR19NQ1RQX1NFUklBTCkgKz0gbWN0cC1zZXJpYWwub1xcbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTJDKSArPSBtY3RwLWkyYy5vXFxuIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JM0MpICs9IG1jdHAtaTNjLm9cXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQikgKz0gbWN0cC11c2Iub1xcbitvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCTElCKSArPSBtY3RwLXVzYmxpYi5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1xcbmluZGV4IGZhZGU2NWYyZjI2OTk1Li4yZDMxMDc1Mzc0YjQ1YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNcXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNcXG5AQCAtMyw5ICszLDkgQEBcXG4gICogbWN0cC11c2IuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGJpbmRpbmcgZHJpdmVyLlxcbiAgKlxcbiAgKiBEU1AwMjgzIGlzIGF2YWlsYWJsZSBhdDpcXG4tICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4wLjEucGRmXFxuKyAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMS4wLnBkZlxcbiAgKlxcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNSBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuQEAgLTIyLDk1ICsyMiwxMTUgQEBcXG4gc3RydWN0IG1jdHBfdXNiIHtcXG4gXFx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjtcXG4gXFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7XFxuK1xcdGJvb2wgc3BhbjtcXG4gXFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuIFxcbiBcXHR1OCBlcF9pbjtcXG4gXFx0dTggZXBfb3V0O1xcbiBcXG4tXFx0c3RydWN0IHVyYiAqdHhfdXJiO1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggcng7XFxuIFxcdHN0cnVjdCB1cmIgKnJ4X3VyYjtcXG4rXFx0aW50IGluX2Vycl9jb3VudDtcXG4rXFx0aW50IGluX2Vycl9vcmlnO1xcbitcXHRib29sIGNsZWFyX2hhbHQ7XFxuIFxcbiBcXHQvKiBlbmZvcmNlcyBhdG9taWMgYWNjZXNzIHRvIHJ4X3N0b3BwZWQgYW5kIHJlcXVldWluZyB0aGUgcmV0cnkgd29yayAqL1xcbiBcXHRzcGlubG9ja190IHJ4X2xvY2s7XFxuIFxcdGJvb2wgcnhfc3RvcHBlZDtcXG4gXFx0c3RydWN0IGRlbGF5ZWRfd29yayByeF9yZXRyeV93b3JrO1xcbitcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4IHR4O1xcbitcXHRzdHJ1Y3QgdXNiX2FuY2hvciB0eF9hbmNob3I7XFxuK1xcdC8qIHNlcmlhbGlzZXMgdHhfcW1lbSB1cGRhdGVzIHRvIG5ldGRldiBxdWV1ZSBzdGF0ZXMgKi9cXG4rXFx0c3BpbmxvY2tfdCB0eF9xbWVtX2xvY2s7XFxuK1xcdGludCB0eF9xbWVtO1xcbit9O1xcbitcXG4rZW51bSB7XFxuK1xcdE1DVFBfVVNCX1NVQkNMQVNTX0JBU0UgPSAweDAwLFxcbitcXHRNQ1RQX1VTQl9TVUJDTEFTU19TUEFOID0gMHgwMixcXG4gfTtcXG4gXFxuKy8qIFdlIHVzZSBhIHRvdGFsLXNpemUgbGltaXQgZm9yIG91dHN0YW5kaW5nIFVSQnMsIGFzIHRoZSB0cmFuc2ZlciBjb3VudHNcXG4rICogbWF5IHZhcnkgYSBsb3QgYmV0d2VlbiBzcGFubmluZy0gYW5kIG5vbi1zcGFubmluZyBtb2Rlcy4gSW4gc3Bhbm5pbmcgbW9kZSxcXG4rICogdGhpcyB3aWxsIGFsbG93IGZvciBhIGNvdXBsZSBvZiBtYXgtc2l6ZWQgdHJhbnNmZXJzIHRvIGJlIGluIGZsaWdodC4gSW5cXG4rICogbm9uLXNwYW5uaW5nIG1vZGUsIDMyLlxcbisgKlxcbisgKiBXZSB3YW50IHRvIGF2b2lkIGRpc2FibGluZyB0aGUgdHggcXVldWUgaWYgcG9zc2libGU7IGRvaW5nIHNvIHdpbGwgZW5kIHVwXFxuKyAqIHJlcXVldWVpbmcgdG8gZ3NvX3NrYiwgYW5kIHdlIG9ubHkgZGVxdWV1ZSBmcm9tIHRoYXQgb25lIHNrYiBhdCBhIHRpbWUsXFxuKyAqIHNvIGNhbiBubyBsb25nZXIgcGVyZm9ybSB0cmFuc2ZlciBwYWNraW5nLlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUWF9RTUVNX01BWCA9IDE2Mzg0O1xcbitcXG4gc3RhdGljIHZvaWQgbWN0cF91c2Jfb3V0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4ge1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLVxcdTAwM2Vjb250ZXh0O1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuLVxcdGludCBzdGF0dXM7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCA9IHVyYi1cXHUwMDNlY29udGV4dDtcXG4rXFx0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7XFxuK1xcdHVuc2lnbmVkIGludCBsZW4gPSB1cmItXFx1MDAzZXRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBtY3RwX3VzYi1cXHUwMDNlbmV0ZGV2O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4tXFx0c3RhdHVzID0gdXJiLVxcdTAwM2VzdGF0dXM7XFxuK1xcdG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUodHhfY3R4LCBuZXRkZXYsIHVyYi1cXHUwMDNlc3RhdHVzID09IDApO1xcbiBcXG4tXFx0c3dpdGNoIChzdGF0dXMpIHtcXG4tXFx0Y2FzZSAtRU5PRU5UOlxcbi1cXHRjYXNlIC1FQ09OTlJFU0VUOlxcbi1cXHRjYXNlIC1FU0hVVERPV046XFxuLVxcdGNhc2UgLUVQUk9UTzpcXG4tXFx0XFx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKG5ldGRldik7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIDA6XFxuLVxcdFxcdGRldl9kc3RhdHNfdHhfYWRkKG5ldGRldiwgc2tiLVxcdTAwM2VsZW4pO1xcbi1cXHRcXHRuZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7XFxuLVxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFxcXCJ1bmV4cGVjdGVkIHR4IHVyYiBzdGF0dXM6ICVkXFxcXG5cXFwiLCBzdGF0dXMpO1xcbi1cXHRcXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQobmV0ZGV2KTtcXG4tXFx0fVxcbitcXHR1c2JfZnJlZV91cmIodXJiKTtcXG4gXFxuLVxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xcbitcXHRtY3RwX3VzYi1cXHUwMDNldHhfcW1lbSAtPSBsZW47XFxuK1xcdGlmIChtY3RwX3VzYi1cXHUwMDNldHhfcW1lbSBcXHUwMDNjIFRYX1FNRU1fTUFYIFxcdTAwMjZcXHUwMDI2IG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcXG4rXFx0XFx0bmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNldHhfcW1lbV9sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbitzdGF0aWMgaW50IG1jdHBfdXNiX3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxcbitcXHRcXHRcXHQgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcXG4ge1xcbi1cXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4tXFx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xcbi1cXHR1bnNpZ25lZCBpbnQgcGxlbjtcXG4rXFx0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHN0cnVjdCB1cmIgKnVyYjtcXG4gXFx0aW50IHJjO1xcbiBcXG4tXFx0cGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbi1cXG4tXFx0aWYgKHBsZW4gKyBzaXplb2YoKmhkcikgXFx1MDAzZSBNQ1RQX1VTQl9YRkVSX1NJWkUpXFxuLVxcdFxcdGdvdG8gZXJyX2Ryb3A7XFxuLVxcbi1cXHRyYyA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqaGRyKSk7XFxuLVxcdGlmIChyYylcXG4tXFx0XFx0Z290byBlcnJfZHJvcDtcXG4tXFxuLVxcdGhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTtcXG4tXFx0aWYgKCFoZHIpXFxuLVxcdFxcdGdvdG8gZXJyX2Ryb3A7XFxuLVxcbi1cXHRoZHItXFx1MDAzZWlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7XFxuLVxcdGhkci1cXHUwMDNlcnN2ZCA9IDA7XFxuLVxcdGhkci1cXHUwMDNlbGVuID0gcGxlbiArIHNpemVvZigqaGRyKTtcXG4tXFxuLVxcdHVyYiA9IG1jdHBfdXNiLVxcdTAwM2V0eF91cmI7XFxuK1xcdHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7XFxuK1xcdGlmICghdXJiKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgbWN0cF91c2ItXFx1MDAzZXVzYmRldixcXG4gXFx0XFx0XFx0ICB1c2Jfc25kYnVsa3BpcGUobWN0cF91c2ItXFx1MDAzZXVzYmRldiwgbWN0cF91c2ItXFx1MDAzZWVwX291dCksXFxuLVxcdFxcdFxcdCAgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbixcXG4tXFx0XFx0XFx0ICBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHNrYik7XFxuK1xcdFxcdFxcdCAgZGF0YSwgbGVuLCBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHR4X2N0eCk7XFxuK1xcbitcXHRpZiAobWN0cF91c2ItXFx1MDAzZXNwYW4pXFxuK1xcdFxcdHVyYi1cXHUwMDNldHJhbnNmZXJfZmxhZ3MgfD0gVVJCX1pFUk9fUEFDS0VUO1xcbitcXG4rXFx0dXNiX2FuY2hvcl91cmIodXJiLCBcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXR4X2FuY2hvcik7XFxuIFxcbi1cXHQvKiBTdG9wcyBUWCBxdWV1ZSBmaXJzdCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uIHdpdGggVVJCIGNvbXBsZXRlICovXFxuLVxcdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcXG4gXFx0cmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpO1xcbiBcXHRpZiAocmMpIHtcXG4tXFx0XFx0bmV0aWZfd2FrZV9xdWV1ZShkZXYpO1xcbi1cXHRcXHRnb3RvIGVycl9kcm9wO1xcbitcXHRcXHRuZXRkZXZfZGJnKG1jdHBfdXNiLVxcdTAwM2VuZXRkZXYsIFxcXCJUWCB1cmIgc3VibWl0IGZhaWxlZCwgJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0dXNiX3VuYW5jaG9yX3VyYih1cmIpO1xcbitcXHRcXHR1c2JfZnJlZV91cmIodXJiKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2V0eF9xbWVtX2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0bWN0cF91c2ItXFx1MDAzZXR4X3FtZW0gKz0gbGVuO1xcbitcXHRcXHRpZiAobWN0cF91c2ItXFx1MDAzZXR4X3FtZW0gXFx1MDAzZT0gVFhfUU1FTV9NQVgpXFxuK1xcdFxcdFxcdG5ldGlmX3N0b3BfcXVldWUobWN0cF91c2ItXFx1MDAzZW5ldGRldik7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2V0eF9xbWVtX2xvY2ssIGZsYWdzKTtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB0eF9vcHMgPSB7XFxuK1xcdC5zZW5kID0gbWN0cF91c2JfdHhfc2VuZCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRib29sIG1vcmUgPSBuZXRkZXZfeG1pdF9tb3JlKCk7XFxuK1xcbitcXHRtY3RwX3VzYmxpYl90eF9wdXNoKGRldiwgXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2V0eCwgc2tiLCBtb3JlKTtcXG4gXFxuLWVycl9kcm9wOlxcbi1cXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTtcXG4tXFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIH1cXG4gXFxuQEAgLTEyNSwyNCArMTQ1LDIzIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIFJYX1JFVFJZX0RFTEFZID0gSFogLyA0O1xcbiBzdGF0aWMgaW50IG1jdHBfdXNiX3J4X3F1ZXVlKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGdmcF90IGdmcClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRzaXplX3QgbGVuO1xcbitcXHR2b2lkICpidWY7XFxuIFxcdGludCByYztcXG4gXFxuLVxcdHNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihtY3RwX3VzYi1cXHUwMDNlbmV0ZGV2LCBNQ1RQX1VTQl9YRkVSX1NJWkUsIGdmcCk7XFxuLVxcdGlmICghc2tiKSB7XFxuLVxcdFxcdHJjID0gLUVOT01FTTtcXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKG1jdHBfdXNiLVxcdTAwM2VuZXRkZXYsIFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcngsXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2YnVmLCBcXHUwMDI2bGVuLCBnZnApO1xcbitcXHRpZiAocmMpXFxuIFxcdFxcdGdvdG8gZXJyX3JldHJ5O1xcbi1cXHR9XFxuIFxcbiBcXHR1c2JfZmlsbF9idWxrX3VyYihtY3RwX3VzYi1cXHUwMDNlcnhfdXJiLCBtY3RwX3VzYi1cXHUwMDNldXNiZGV2LFxcbiBcXHRcXHRcXHQgIHVzYl9yY3ZidWxrcGlwZShtY3RwX3VzYi1cXHUwMDNldXNiZGV2LCBtY3RwX3VzYi1cXHUwMDNlZXBfaW4pLFxcbi1cXHRcXHRcXHQgIHNrYi1cXHUwMDNlZGF0YSwgTUNUUF9VU0JfWEZFUl9TSVpFLFxcbi1cXHRcXHRcXHQgIG1jdHBfdXNiX2luX2NvbXBsZXRlLCBza2IpO1xcbitcXHRcXHRcXHQgIGJ1ZiwgbGVuLCBtY3RwX3VzYl9pbl9jb21wbGV0ZSwgbWN0cF91c2IpO1xcbiBcXG4gXFx0cmMgPSB1c2Jfc3VibWl0X3VyYihtY3RwX3VzYi1cXHUwMDNlcnhfdXJiLCBnZnApO1xcbiBcXHRpZiAocmMpIHtcXG4gXFx0XFx0bmV0ZGV2X2RiZyhtY3RwX3VzYi1cXHUwMDNlbmV0ZGV2LCBcXFwicnggdXJiIHN1Ym1pdCBmYWlsdXJlOiAlZFxcXFxuXFxcIiwgcmMpO1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcngpO1xcbiBcXHRcXHRpZiAocmMgPT0gLUVOT01FTSlcXG4gXFx0XFx0XFx0Z290byBlcnJfcmV0cnk7XFxuIFxcdH1cXG5AQCAtMTU3LDEzICsxNzYsMTMgQEAgc3RhdGljIGludCBtY3RwX3VzYl9yeF9xdWV1ZShzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiLCBnZnBfdCBnZnApXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJ4X2Vycl9tYXggPSAxMDtcXG4rXFxuIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2luX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4ge1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLVxcdTAwM2Vjb250ZXh0O1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuLVxcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbi1cXHRzdHJ1Y3QgbWN0cF9za2JfY2IgKmNiO1xcbi1cXHR1bnNpZ25lZCBpbnQgbGVuO1xcbitcXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gdXJiLVxcdTAwM2Vjb250ZXh0O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbWN0cF91c2ItXFx1MDAzZW5ldGRldjtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IHN0YXR1cztcXG4gXFxuIFxcdHN0YXR1cyA9IHVyYi1cXHUwMDNlc3RhdHVzO1xcbkBAIC0xNzIsODAgKzE5MSw1NCBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9pbl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXFxuIFxcdGNhc2UgLUVOT0VOVDpcXG4gXFx0Y2FzZSAtRUNPTk5SRVNFVDpcXG4gXFx0Y2FzZSAtRVNIVVRET1dOOlxcbi1cXHRjYXNlIC1FUFJPVE86XFxuLVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHQvKiBkZXZpY2Ugc2h1dGRvd24sIGRvbid0IHJlc3VibWl0ICovXFxuK1xcdFxcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXJ4KTtcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHRjYXNlIDA6XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcInVuZXhwZWN0ZWQgcnggdXJiIHN0YXR1czogJWRcXFxcblxcXCIsIHN0YXR1cyk7XFxuLVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4tXFxuLVxcdGxlbiA9IHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aDtcXG4tXFx0X19za2JfcHV0KHNrYiwgbGVuKTtcXG4tXFxuLVxcdHdoaWxlIChza2IpIHtcXG4tXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBOVUxMO1xcbi1cXHRcXHRzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7XFxuLVxcdFxcdHU4IHBrdF9sZW47IC8qIGxlbmd0aCBvZiBNQ1RQIHBhY2tldCwgbm8gVVNCIGhlYWRlciAqL1xcbiBcXG4tXFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4tXFx0XFx0aGRyID0gc2tiX3B1bGxfZGF0YShza2IsIHNpemVvZigqaGRyKSk7XFxuLVxcdFxcdGlmICghaGRyKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdGlmIChiZTE2X3RvX2NwdShoZHItXFx1MDAzZWlkKSAhPSBNQ1RQX1VTQl9ETVRGX0lEKSB7XFxuLVxcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LCBcXFwicng6IGludmFsaWQgaWQgJTA0eFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgYmUxNl90b19jcHUoaGRyLVxcdTAwM2VpZCkpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbitcXHRjYXNlIC1FUElQRTpcXG4rXFx0XFx0LyogZW5kcG9pbnQgc3RhbGw6IGNsZWFyIGhhbHQsIHdoaWNoIHdpbGwgY2F1c2UgYSByZXN1Ym1pdCAqL1xcbiBcXG4tXFx0XFx0aWYgKGhkci1cXHUwMDNlbGVuIFxcdTAwM2NcXG4tXFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgbWN0cF9oZHIpICsgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKSB7XFxuLVxcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LCBcXFwicng6IHNob3J0IHBhY2tldCAoaGRyKSAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgaGRyLVxcdTAwM2VsZW4pO1xcbi1cXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0aWYgKCFtY3RwX3VzYi1cXHUwMDNlaW5fZXJyX2NvdW50KyspXFxuK1xcdFxcdFxcdG1jdHBfdXNiLVxcdTAwM2Vpbl9lcnJfb3JpZyA9IHN0YXR1cztcXG4rXFx0XFx0aWYgKG1jdHBfdXNiLVxcdTAwM2Vpbl9lcnJfY291bnQgXFx1MDAzZT0gcnhfZXJyX21heCkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcImV4Y2Vzc2l2ZSBzdGFsbHMgZnJvbSBJTiBFUFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0Lyogd2Uga25vdyB3ZSBoYXZlIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSBoZXJlICovXFxuLVxcdFxcdHBrdF9sZW4gPSBoZHItXFx1MDAzZWxlbiAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTtcXG4tXFx0XFx0aWYgKHBrdF9sZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbikge1xcbi1cXHRcXHRcXHRuZXRkZXZfZGJnKG5ldGRldixcXG4tXFx0XFx0XFx0XFx0ICAgXFxcInJ4OiBzaG9ydCBwYWNrZXQgKHhmZXIpICVkLCBhY3R1YWwgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgIGhkci1cXHUwMDNlbGVuLCBza2ItXFx1MDAzZWxlbik7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuK1xcdFxcdG1jdHBfdXNiLVxcdTAwM2VjbGVhcl9oYWx0ID0gdHJ1ZTtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2VyeF9sb2NrLCBmbGFncyk7XFxuK1xcdFxcdGlmICghbWN0cF91c2ItXFx1MDAzZXJ4X3N0b3BwZWQpXFxuK1xcdFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXJ4X3JldHJ5X3dvcmssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFJYX1JFVFJZX0RFTEFZKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXJ4X2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcngpO1xcbitcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRcXHRpZiAocGt0X2xlbiBcXHUwMDNjIHNrYi1cXHUwMDNlbGVuKSB7XFxuLVxcdFxcdFxcdC8qIG1vcmUgcGFja2V0cyBtYXkgZm9sbG93IC0gY2xvbmUgdG8gYSBuZXdcXG4tXFx0XFx0XFx0ICogc2tiIHRvIHVzZSBvbiB0aGUgbmV4dCBpdGVyYXRpb25cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG4tXFx0XFx0XFx0aWYgKHNrYjIpIHtcXG4tXFx0XFx0XFx0XFx0aWYgKCFza2JfcHVsbChza2IyLCBwa3RfbGVuKSkge1xcbi1cXHRcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiMik7XFxuLVxcdFxcdFxcdFxcdFxcdHNrYjIgPSBOVUxMO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0c2tiX3RyaW0oc2tiLCBwa3RfbGVuKTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFxcXCJ1bmV4cGVjdGVkIHJ4IHVyYiBzdGF0dXM6ICVkXFxcXG5cXFwiLCBzdGF0dXMpO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSAtRVRJTUU6XFxuK1xcdGNhc2UgLUVQUk9UTzpcXG4rXFx0Y2FzZSAtRUlMU0VROlxcbitcXHRjYXNlIC1FT1ZFUkZMT1c6XFxuK1xcdFxcdC8qIHBvc3NpYmx5IHRyYW5zaWVudDsgcmVjb3JkIGZpcnN0IGZhaWx1cmUsIHJlc3VibWl0ICovXFxuK1xcdFxcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXJ4KTtcXG4rXFx0XFx0aWYgKCFtY3RwX3VzYi1cXHUwMDNlaW5fZXJyX2NvdW50KyspXFxuK1xcdFxcdFxcdG1jdHBfdXNiLVxcdTAwM2Vpbl9lcnJfb3JpZyA9IHN0YXR1cztcXG4rXFx0XFx0aWYgKG1jdHBfdXNiLVxcdTAwM2Vpbl9lcnJfY291bnQgXFx1MDAzZT0gcnhfZXJyX21heCkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcImV4Y2Vzc2l2ZSBlcnJvcnMgZnJvbSBJTiBFUCwgZmlyc3Q6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtY3RwX3VzYi1cXHUwMDNlaW5fZXJyX29yaWcpO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4rXFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRkZXZfZHN0YXRzX3J4X2FkZChuZXRkZXYsIHNrYi1cXHUwMDNlbGVuKTtcXG4tXFxuLVxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9NQ1RQKTtcXG4tXFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuLVxcdFxcdGNiID0gX19tY3RwX2NiKHNrYik7XFxuLVxcdFxcdGNiLVxcdTAwM2VoYWxlbiA9IDA7XFxuLVxcdFxcdG5ldGlmX3J4KHNrYik7XFxuLVxcbi1cXHRcXHRza2IgPSBza2IyO1xcbitcXHRjYXNlIDA6XFxuK1xcdFxcdG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKG5ldGRldiwgXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2VyeCwgdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoKTtcXG4rXFx0XFx0bWN0cF91c2ItXFx1MDAzZWluX2Vycl9jb3VudCA9IDA7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc2tiKVxcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tXFxuIFxcdG1jdHBfdXNiX3J4X3F1ZXVlKG1jdHBfdXNiLCBHRlBfQVRPTUlDKTtcXG4gfVxcbiBcXG5AQCAtMjUzLDYgKzI0NiwyMCBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9yeF9yZXRyeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtY3RwX3VzYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHJ4X3JldHJ5X3dvcmsud29yayk7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdC8qIFdlIGFyZSBvbmx5IGNhbGxlZCB3aGVuIHJ4IGNvbXBsZXRpb25zIGFyZSBzdXNwZW5kZWQgKi9cXG4rXFx0aWYgKG1jdHBfdXNiLVxcdTAwM2VjbGVhcl9oYWx0KSB7XFxuK1xcdFxcdGludCBwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKG1jdHBfdXNiLVxcdTAwM2V1c2JkZXYsIG1jdHBfdXNiLVxcdTAwM2VlcF9pbik7XFxuK1xcbitcXHRcXHRyYyA9IHVzYl9jbGVhcl9oYWx0KG1jdHBfdXNiLVxcdTAwM2V1c2JkZXYsIHBpcGUpO1xcbitcXHRcXHRpZiAocmMpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihtY3RwX3VzYi1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwiY2FuJ3QgY2xlYXIgSU4gRVAgaGFsdDogJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1jdHBfdXNiLVxcdTAwM2VjbGVhcl9oYWx0ID0gZmFsc2U7XFxuK1xcdH1cXG4gXFxuIFxcdG1jdHBfdXNiX3J4X3F1ZXVlKG1jdHBfdXNiLCBHRlBfS0VSTkVMKTtcXG4gfVxcbkBAIC0yNjIsNiArMjY5LDggQEAgc3RhdGljIGludCBtY3RwX3VzYl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXG4gXFx0V1JJVEVfT05DRShtY3RwX3VzYi1cXHUwMDNlcnhfc3RvcHBlZCwgZmFsc2UpO1xcbitcXHRtY3RwX3VzYi1cXHUwMDNlY2xlYXJfaGFsdCA9IGZhbHNlO1xcbitcXHRtY3RwX3VzYi1cXHUwMDNlaW5fZXJyX2NvdW50ID0gMDtcXG4gXFxuIFxcdG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7XFxuIFxcbkBAIC0yODQsNyArMjkzLDEwIEBAIHN0YXRpYyBpbnQgbWN0cF91c2Jfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2VyeF9yZXRyeV93b3JrKTtcXG4gXFxuIFxcdHVzYl9raWxsX3VyYihtY3RwX3VzYi1cXHUwMDNlcnhfdXJiKTtcXG4tXFx0dXNiX2tpbGxfdXJiKG1jdHBfdXNiLVxcdTAwM2V0eF91cmIpO1xcbitcXG4rXFx0dXNiX2tpbGxfYW5jaG9yZWRfdXJicyhcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXR4X2FuY2hvcik7XFxuK1xcbitcXHRtY3RwX3VzYmxpYl90eF9jYW5jZWwoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2V0eCwgZGV2LCBTS0JfRFJPUF9SRUFTT05fREVWX1JFQURZKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTMwMSw3ICszMTMsNyBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9uZXRkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdGRldi1cXHUwMDNlbXR1ID0gTUNUUF9VU0JfTVRVX01JTjtcXG4gXFx0ZGV2LVxcdTAwM2VtaW5fbXR1ID0gTUNUUF9VU0JfTVRVX01JTjtcXG4tXFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gTUNUUF9VU0JfTVRVX01BWDtcXG4rXFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gTUNUUF9VU0JfMV8wX01UVV9NQVg7XFxuIFxcbiBcXHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTtcXG4gXFx0ZGV2LVxcdTAwM2V0eF9xdWV1ZV9sZW4gPSBERUZBVUxUX1RYX1FVRVVFX0xFTjtcXG5AQCAtMzE3LDYgKzMyOSw3IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIFxcdHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuIFxcdHN0cnVjdCBtY3RwX3VzYiAqZGV2O1xcbitcXHRib29sIHNwYW47XFxuIFxcdGludCByYztcXG4gXFxuIFxcdC8qIG9ubHkgb25lIGFsdGVybmF0ZSAqL1xcbkBAIC0zMjgsNiArMzQxLDggQEAgc3RhdGljIGludCBtY3RwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXHR9XFxuIFxcbitcXHRzcGFuID0gaWZhY2VfZGVzYy1cXHUwMDNlZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gTUNUUF9VU0JfU1VCQ0xBU1NfU1BBTjtcXG4rXFxuIFxcdG5ldGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksIFxcXCJtY3RwdXNiJWRcXFwiLCBORVRfTkFNRV9FTlVNLFxcbiBcXHRcXHRcXHQgICAgICBtY3RwX3VzYl9uZXRkZXZfc2V0dXApO1xcbiBcXHRpZiAoIW5ldGRldilcXG5AQCAtMzM1LDMzICszNTAsNDMgQEAgc3RhdGljIGludCBtY3RwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4gXFxuIFxcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgXFx1MDAyNmludGYtXFx1MDAzZWRldik7XFxuIFxcdGRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdGRldi1cXHUwMDNlc3BhbiA9IHNwYW47XFxuIFxcdGRldi1cXHUwMDNlbmV0ZGV2ID0gbmV0ZGV2O1xcbiBcXHRkZXYtXFx1MDAzZXVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XFxuIFxcdGRldi1cXHUwMDNlaW50ZiA9IGludGY7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXJ4X2xvY2spO1xcbitcXHRpZiAoZGV2LVxcdTAwM2VzcGFuKVxcbitcXHRcXHRuZXRkZXYtXFx1MDAzZW1heF9tdHUgPSBNQ1RQX1VTQl8xXzFfTVRVX01BWDtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmRldi1cXHUwMDNldHhfcW1lbV9sb2NrKTtcXG4gXFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpO1xcbiBcXG4rXFx0bWN0cF91c2JsaWJfcnhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VyeCwgbGUxNl90b19jcHUoZXBfaW4tXFx1MDAzZXdNYXhQYWNrZXRTaXplKSxcXG4rXFx0XFx0XFx0ICAgIGRldi1cXHUwMDNlc3Bhbik7XFxuK1xcdG1jdHBfdXNibGliX3R4X2luaXQoXFx1MDAyNmRldi1cXHUwMDNldHgsIFxcdTAwMjZ0eF9vcHMsIGRldiwgZGV2LVxcdTAwM2VzcGFuKTtcXG4rXFx0aW5pdF91c2JfYW5jaG9yKFxcdTAwMjZkZXYtXFx1MDAzZXR4X2FuY2hvcik7XFxuK1xcbiBcXHRkZXYtXFx1MDAzZWVwX2luID0gZXBfaW4tXFx1MDAzZWJFbmRwb2ludEFkZHJlc3M7XFxuIFxcdGRldi1cXHUwMDNlZXBfb3V0ID0gZXBfb3V0LVxcdTAwM2ViRW5kcG9pbnRBZGRyZXNzO1xcbiBcXG4tXFx0ZGV2LVxcdTAwM2V0eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpO1xcbiBcXHRkZXYtXFx1MDAzZXJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmICghZGV2LVxcdTAwM2V0eF91cmIgfHwgIWRldi1cXHUwMDNlcnhfdXJiKSB7XFxuK1xcdGlmICghZGV2LVxcdTAwM2VyeF91cmIpIHtcXG4gXFx0XFx0cmMgPSAtRU5PTUVNO1xcbi1cXHRcXHRnb3RvIGVycl9mcmVlX3VyYnM7XFxuK1xcdFxcdGdvdG8gZXJyX2Zpbmlfcnh0eDtcXG4gXFx0fVxcbiBcXG4gXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNmRldi1cXHUwMDNlcnhfcmV0cnlfd29yaywgbWN0cF91c2JfcnhfcmV0cnlfd29yayk7XFxuIFxcbiBcXHRyYyA9IG1jdHBfcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldiwgTlVMTCwgTUNUUF9QSFlTX0JJTkRJTkdfVVNCKTtcXG4gXFx0aWYgKHJjKVxcbi1cXHRcXHRnb3RvIGVycl9mcmVlX3VyYnM7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfdXJiO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1lcnJfZnJlZV91cmJzOlxcbi1cXHR1c2JfZnJlZV91cmIoZGV2LVxcdTAwM2V0eF91cmIpO1xcbitlcnJfZnJlZV91cmI6XFxuIFxcdHVzYl9mcmVlX3VyYihkZXYtXFx1MDAzZXJ4X3VyYik7XFxuK2Vycl9maW5pX3J4dHg6XFxuK1xcdG1jdHBfdXNibGliX3R4X2ZpbmkoXFx1MDAyNmRldi1cXHUwMDNldHgpO1xcbitcXHRtY3RwX3VzYmxpYl9yeF9maW5pKFxcdTAwMjZkZXYtXFx1MDAzZXJ4KTtcXG4gXFx0ZnJlZV9uZXRkZXYobmV0ZGV2KTtcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuQEAgLTM3MSwxMyArMzk2LDE1IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIFxcdHN0cnVjdCBtY3RwX3VzYiAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcXG4gXFxuIFxcdG1jdHBfdW5yZWdpc3Rlcl9uZXRkZXYoZGV2LVxcdTAwM2VuZXRkZXYpO1xcbi1cXHR1c2JfZnJlZV91cmIoZGV2LVxcdTAwM2V0eF91cmIpO1xcbitcXHRtY3RwX3VzYmxpYl9yeF9maW5pKFxcdTAwMjZkZXYtXFx1MDAzZXJ4KTtcXG4rXFx0bWN0cF91c2JsaWJfdHhfZmluaShcXHUwMDI2ZGV2LVxcdTAwM2V0eCk7XFxuIFxcdHVzYl9mcmVlX3VyYihkZXYtXFx1MDAzZXJ4X3VyYik7XFxuIFxcdGZyZWVfbmV0ZGV2KGRldi1cXHUwMDNlbmV0ZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1jdHBfdXNiX2RldmljZXNbXSA9IHtcXG4tXFx0eyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01DVFAsIDB4MCwgMHgxKSB9LFxcbitcXHR7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgTUNUUF9VU0JfU1VCQ0xBU1NfQkFTRSwgMHgxKSB9LFxcbitcXHR7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgTUNUUF9VU0JfU1VCQ0xBU1NfU1BBTiwgMHgxKSB9LFxcbiBcXHR7IDAgfSxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yYTIyYmU5OTlmYTBhMVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuY1xcbkBAIC0wLDAgKzEsNDEwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIG1jdHAtdXNibGliLXRlc3QuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGhlbHBlciBsaWJyYXJ5LFxcbisgKiB1bml0IHRlc3QgZGVmaW5pdGlvbnMuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2t1bml0L3Rlc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2FycC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L21jdHAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9tY3RwZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2IvbWN0cC11c2IuaFxcdTAwM2VcXG4rXFxuK3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiB7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xcbitcXHRzdHJ1Y3QgbWN0cF9kZXYgKm1kZXY7XFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWQgcnhfcGt0cztcXG4rfTtcXG4rXFxuK3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCB7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xcbitcXHRzdHJ1Y3QgbWN0cF9yb3V0ZSBydDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYmxpYl9kZXZfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0Lyogd2UgZG9uJ3QgdHJhY2sgYW55IFRYZWQgcGFja2V0cyBhdCBwcmVzZW50ICovXFxuK1xcdGtmcmVlX3NrYihza2IpO1xcbitcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1jdHBfdGVzdF9uZXRkZXZfb3BzID0ge1xcbitcXHQubmRvX3N0YXJ0X3htaXQgPSBtY3RwX3VzYmxpYl9kZXZfdHgsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3QgdTE2IGVwX21heHBhY2tldCA9IDUxMjtcXG4rc3RhdGljIGNvbnN0IG1jdHBfZWlkX3QgbG9jYWxfZWlkID0gODtcXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRuZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX01DVFA7XFxuK1xcdG5kZXYtXFx1MDAzZW10dSA9IDgxOTI7XFxuK1xcdG5kZXYtXFx1MDAzZWZsYWdzID0gSUZGX05PQVJQO1xcbitcXHRuZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNm1jdHBfdGVzdF9uZXRkZXZfb3BzO1xcbitcXHRuZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XFxuK1xcdG5kZXYtXFx1MDAzZXBjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9EU1RBVFM7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZGV2X2FjdGlvbih2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2ID0gZGF0YTtcXG4rXFxuK1xcdHNrYl9xdWV1ZV9wdXJnZShcXHUwMDI2ZGV2LVxcdTAwM2VyeF9wa3RzKTtcXG4rXFx0aWYgKGRldi1cXHUwMDNlbWRldilcXG4rXFx0XFx0bWN0cF9kZXZfcHV0KGRldi1cXHUwMDNlbWRldik7XFxuK1xcdHVucmVnaXN0ZXJfbmV0ZGV2KGRldi1cXHUwMDNlbmRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKlxcbittY3RwX3VzYmxpYl90ZXN0X2NyZWF0ZV9kZXYoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0bmRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksIFxcXCJtY3RwdGVzdCVkXFxcIiwgTkVUX05BTUVfRU5VTSxcXG4rXFx0XFx0XFx0ICAgIG1jdHBfdXNibGliX2Rldl9zZXR1cCk7XFxuK1xcdGlmICghbmRldilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0ZGV2LVxcdTAwM2VuZGV2ID0gbmRldjtcXG4rXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VyeF9wa3RzKTtcXG4rXFxuK1xcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0ZnJlZV9uZXRkZXYobmRldik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgbWN0cF91c2JsaWJfdGVzdF9kZXZfYWN0aW9uLCBkZXYpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRkZXYtXFx1MDAzZW1kZXYgPSBfX21jdHBfZGV2X2dldChuZGV2KTtcXG4rXFx0aWYgKGRldi1cXHUwMDNlbWRldilcXG4rXFx0XFx0ZGV2LVxcdTAwM2VtZGV2LVxcdTAwM2VuZXQgPSBtY3RwX2RlZmF1bHRfbmV0KGRldl9uZXQobmRldikpO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VtZGV2KVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRyYyA9IGRldl9vcGVuKG5kZXYsIE5VTEwpO1xcbitcXHRydG5sX3VubG9jaygpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIGRldjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X2RzdF9vdXRwdXQoc3RydWN0IG1jdHBfZHN0ICpkc3QsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYoc2tiLVxcdTAwM2VkZXYpO1xcbitcXG4rXFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmRldi1cXHUwMDNlcnhfcGt0cywgc2tiKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHggPSBkYXRhO1xcbitcXG4rXFx0LyogVGhlIGRldmljZSB3aWxsIGhhdmUgYmVlbiBkZXN0cm95ZWQsIHNvIC1cXHUwMDNlcnQgd2lsbCBiZSB1bmxpbmtlZC5cXG4rXFx0ICogSnVzdCBlbnN1cmUgdGhhdCB0aGUgcmVmY291bnQgaXMgYXMgZXhwZWN0ZWQuXFxuK1xcdCAqL1xcbitcXHRLVU5JVF9BU1NFUlRfVFJVRShjdXJyZW50LVxcdTAwM2VrdW5pdF90ZXN0LFxcbitcXHRcXHRcXHQgIHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2Y3R4LVxcdTAwM2VydC5yZWZzKSk7XFxuK1xcbitcXHRrZnJlZShjdHgpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICptY3RwX3VzYmxpYl90ZXN0X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xcbitcXHRzdHJ1Y3QgbWN0cF9yb3V0ZSAqcnQ7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xcbitcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgY3R4KTtcXG4rXFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjdHgtXFx1MDAzZXJ0Lmxpc3QpO1xcbitcXHRydCA9IFxcdTAwMjZjdHgtXFx1MDAzZXJ0O1xcbitcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnJ0LVxcdTAwM2VyZWZzLCAxKTtcXG4rXFxuK1xcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uLCBjdHgpO1xcbitcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VkZXYgPSBtY3RwX3VzYmxpYl90ZXN0X2NyZWF0ZV9kZXYodGVzdCk7XFxuK1xcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBjdHgtXFx1MDAzZWRldik7XFxuK1xcbitcXHRydC1cXHUwMDNlbWluID0gbG9jYWxfZWlkO1xcbitcXHRydC1cXHUwMDNlbWF4ID0gbG9jYWxfZWlkO1xcbitcXHRydC1cXHUwMDNlZHN0X3R5cGUgPSBNQ1RQX1JPVVRFX0RJUkVDVDtcXG4rXFx0cnQtXFx1MDAzZXR5cGUgPSBSVE5fTE9DQUw7XFxuK1xcdHJ0LVxcdTAwM2VkZXYgPSBjdHgtXFx1MDAzZWRldi1cXHUwMDNlbWRldjtcXG4rXFx0cnQtXFx1MDAzZW91dHB1dCA9IG1jdHBfdXNibGliX3Rlc3RfZHN0X291dHB1dDtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRsaXN0X2FkZF9yY3UoXFx1MDAyNmN0eC1cXHUwMDNlcnQubGlzdCwgXFx1MDAyNmluaXRfbmV0Lm1jdHAucm91dGVzKTtcXG4rXFx0cmVmY291bnRfaW5jKFxcdTAwMjZydC1cXHUwMDNlcmVmcyk7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gY3R4O1xcbit9XFxuK1xcbisvKiBJbml0IGEgTUNUUC1vdmVyLVVTQiBwYWNrZXQgd2l0aGluIGEgYnVmZmVyLiBAbGVuIGlzIHRoZSBsZW5ndGggb2YgdGhlXFxuKyAqIGJ1ZmZlciB0byB3cml0ZSwgQHBheWxvYWRfbGVuIGlzIHRoZSByZXBvcnRlZCBzaXplIG9mIHRoZSBNQ1RQLW92ZXItVVNCXFxuKyAqIHBhY2tldC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3Qodm9pZCAqZGF0YSwgc2l6ZV90IGxlbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IHBheWxvYWRfbGVuKVxcbit7XFxuK1xcdHN0cnVjdCB7XFxuK1xcdFxcdHN0cnVjdCBtY3RwX3VzYl9oZHIgdXNiO1xcbitcXHRcXHRzdHJ1Y3QgbWN0cF9oZHIgbWN0cDtcXG4rXFx0fSBoZHI7XFxuK1xcbitcXHRoZHIudXNiLmlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7XFxuK1xcdGhkci51c2IubGVuID0gY3B1X3RvX2JlMTYocGF5bG9hZF9sZW4pO1xcbitcXHRoZHIubWN0cC52ZXIgPSAxO1xcbitcXHRoZHIubWN0cC5kZXN0ID0gbG9jYWxfZWlkO1xcbitcXHRoZHIubWN0cC5zcmMgPSAwO1xcbitcXHRoZHIubWN0cC5mbGFnc19zZXFfdGFnID0gMDtcXG4rXFxuK1xcdG1lbWNweShkYXRhLCBcXHUwMDI2aGRyLCBtaW4obGVuLCBzaXplb2YoaGRyKSkpO1xcbitcXHRpZiAobGVuIFxcdTAwM2Ugc2l6ZW9mKGhkcikpXFxuK1xcdFxcdG1lbXNldChkYXRhICsgc2l6ZW9mKGhkciksIDAsIGxlbiAtIHNpemVvZihoZHIpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWN0aW9uX3J4X2Zpbmkodm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4ID0gZGF0YTtcXG4rXFxuK1xcdG1jdHBfdXNibGliX3J4X2ZpbmkocngpO1xcbitcXHRrZnJlZShyeCk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKlxcbittY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0LCBib29sIHNwYW4pXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cnggPSBremFsbG9jX29iaigqcngpO1xcbitcXHRpZiAocngpIHtcXG4rXFx0XFx0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIGFjdGlvbl9yeF9maW5pLCByeCk7XFxuK1xcdFxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XFxuK1xcdH1cXG4rXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJ4KTtcXG4rXFx0bWN0cF91c2JsaWJfcnhfaW5pdChyeCwgZXBfbWF4cGFja2V0LCBzcGFuKTtcXG4rXFxuK1xcdHJldHVybiByeDtcXG4rfVxcbitcXG4rLyogV3JhcHBlcnMgZm9yIHVzYmxpYidzIHJ4X2NvbXBsZXRlIGNhbGxiYWNrLCB3aGljaCBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWRcXG4rICogZnJvbSBhdG9taWMgY29udGV4dFxcbisgKi9cXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKG5ldGRldiwgcngsIGxlbik7XFxuK1xcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbisvKiBTaW5nbGUgcGFja2V0LCBzdGFydGluZyBvbiBhIHRyYW5zZmVyIGJvdW5kYXJ5LCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluXFxuKyAqIHRoZSB0cmFuc2ZlclxcbisgKi9cXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0c2l6ZV90IGxlbjtcXG4rXFx0dm9pZCAqYnVmO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XFxuK1xcdGRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbitcXG4rXFx0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XFxuK1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVxcdTAwM2VuZGV2LCByeCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZidWYsIFxcdTAwMjZsZW4sIEdGUF9LRVJORUwpO1xcbitcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xcbitcXG4rXFx0Lyogd2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgbWF4cGFja2V0IG9mIHRyYW5zZmVyIGF2YWlsYWJsZSAqL1xcbitcXHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgbGVuLCBlcF9tYXhwYWNrZXQpO1xcbitcXG4rXFx0bWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChidWYsIDgsIDgpO1xcbitcXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cXHUwMDNlbmRldiwgcngsIDgpO1xcbitcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xcbitcXG4rXFx0c2tiID0gX19za2JfZGVxdWV1ZShcXHUwMDI2ZGV2LVxcdTAwM2VyeF9wa3RzKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05PVF9OVUxMKHRlc3QsIHNrYik7XFxuK1xcdGlmIChza2IpXFxuK1xcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXFx1MDAzZWxlbiwgNCk7XFxuK1xcdGtmcmVlX3NrYihza2IpO1xcbit9XFxuK1xcbitzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiB7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdHNpemVfdCBuX3BrdHM7XFxuK1xcdHNpemVfdCBwa3RzWzZdO1xcbitcXHRzaXplX3Qgbl94ZmVycztcXG4rXFx0c2l6ZV90IHhmZXJzWzZdO1xcbit9O1xcbitcXG4rc3RhdGljIHZvaWRcXG4rbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl90b19kZXNjKGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICp0LFxcbitcXHRcXHRcXHRcXHQgIGNoYXIgKmRlc2MpXFxuK3tcXG4rXFx0c3Ryc2NweShkZXNjLCB0LVxcdTAwM2VuYW1lLCBLVU5JVF9QQVJBTV9ERVNDX1NJWkUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZFxcbittY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3ZhbGlkYXRlKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnNwYW4sXFxuK1xcdFxcdFxcdFxcdCAgIHNpemVfdCAqbGVuKVxcbit7XFxuK1xcdHNpemVfdCBwa3RfbGVuID0gMCwgeGZlcl9sZW4gPSAwO1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzcGFuLVxcdTAwM2VuX3BrdHM7IGkrKykge1xcbitcXHRcXHRLVU5JVF9BU1NFUlRfR0VfTVNHKHRlc3QsIHNwYW4tXFx1MDAzZXBrdHNbaV0sIDgsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwicGt0WyVkXSBsZW4gdG9vIHNtYWxsICglemQpIGZvciAlc1xcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBpLCBzcGFuLVxcdTAwM2Vwa3RzW2ldLCBzcGFuLVxcdTAwM2VuYW1lKTtcXG4rXFx0XFx0cGt0X2xlbiArPSBzcGFuLVxcdTAwM2Vwa3RzW2ldO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3Bhbi1cXHUwMDNlbl94ZmVyczsgaSsrKVxcbitcXHRcXHR4ZmVyX2xlbiArPSBzcGFuLVxcdTAwM2V4ZmVyc1tpXTtcXG4rXFxuK1xcdEtVTklUX0FTU0VSVF9FUV9NU0codGVzdCwgcGt0X2xlbiwgeGZlcl9sZW4sXFxuK1xcdFxcdFxcdCAgICBcXFwiaW52YWxpZCBwa3RfbGVuICglemQpICE9IHhmZXJfbGVuICglemQpIGZvciAlc1xcXCIsXFxuK1xcdFxcdFxcdCAgICBwa3RfbGVuLCB4ZmVyX2xlbiwgc3Bhbi1cXHUwMDNlbmFtZSk7XFxuK1xcbitcXHQqbGVuID0gcGt0X2xlbjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3BhbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnBrdF9zcGFuID0gdGVzdC1cXHUwMDNlcGFyYW1fdmFsdWU7XFxuK1xcdHNpemVfdCBsZW4sIHhmZXJfbGVuLCBvZmYsIHhmZXJfb2ZmO1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXHR1OCAqcGt0YnVmO1xcbitcXHR2b2lkICpidWY7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdmFsaWRhdGUodGVzdCwgcGt0X3NwYW4sIFxcdTAwMjZsZW4pO1xcbitcXHRwa3RidWYgPSBrdW5pdF9rbWFsbG9jX2FycmF5KHRlc3QsIDEsIGxlbiwgR0ZQX0tFUk5FTCk7XFxuK1xcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBwa3RidWYpO1xcbitcXG4rXFx0LyogbGF5IG91dCBwYWNrZXRzICovXFxuK1xcdGZvciAob2ZmID0gMCwgaSA9IDA7IGkgXFx1MDAzYyBwa3Rfc3Bhbi1cXHUwMDNlbl9wa3RzOyBpKyspIHtcXG4rXFx0XFx0bGVuID0gcGt0X3NwYW4tXFx1MDAzZXBrdHNbaV07XFxuK1xcdFxcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QocGt0YnVmICsgb2ZmLCBsZW4sIGxlbik7XFxuK1xcdFxcdG9mZiArPSBsZW47XFxuK1xcdH1cXG4rXFxuK1xcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcXG4rXFx0ZGV2ID0gY3R4LVxcdTAwM2VkZXY7XFxuK1xcbitcXHRyeCA9IG1jdHBfdXNibGliX3Rlc3RfcnhfaW5pdCh0ZXN0LCB0cnVlKTtcXG4rXFxuK1xcdC8qIGZlZWQgdHJhbnNmZXJzICovXFxuK1xcdGZvciAob2ZmID0gMCwgeGZlcl9vZmYgPSAwLCBpID0gMDsgaSBcXHUwMDNjIHBrdF9zcGFuLVxcdTAwM2VuX3hmZXJzOykge1xcbitcXHRcXHR4ZmVyX2xlbiA9IHBrdF9zcGFuLVxcdTAwM2V4ZmVyc1tpXSAtIHhmZXJfb2ZmO1xcbitcXHRcXHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVxcdTAwM2VuZGV2LCByeCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZidWYsIFxcdTAwMjZsZW4sIEdGUF9LRVJORUwpO1xcbitcXHRcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xcbitcXG4rXFx0XFx0S1VOSVRfQVNTRVJUX0dFKHRlc3QsIGxlbiwgZXBfbWF4cGFja2V0KTtcXG4rXFxuK1xcdFxcdGxlbiA9IG1pbihsZW4sIHhmZXJfbGVuKTtcXG4rXFx0XFx0bWVtY3B5KGJ1ZiwgcGt0YnVmICsgb2ZmLCBsZW4pO1xcbitcXG4rXFx0XFx0aWYgKGxlbiA9PSB4ZmVyX2xlbikge1xcbitcXHRcXHRcXHQvKiB3aG9sZS9lbmQgeGZlciwgcHJvY2VlZCB0byBuZXh0ICovXFxuK1xcdFxcdFxcdHhmZXJfb2ZmID0gMDtcXG4rXFx0XFx0XFx0aSsrO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHQvKiBwYXJ0aWFsICovXFxuK1xcdFxcdFxcdHhmZXJfb2ZmICs9IGxlbjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cXHUwMDNlbmRldiwgcngsIGxlbik7XFxuK1xcdFxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XFxuK1xcdFxcdG9mZiArPSBsZW47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIGNoZWNrIHJlY2VpdmVkIHBhY2tldHMgKi9cXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRldi1cXHUwMDNlcnhfcGt0cy5xbGVuLCBwa3Rfc3Bhbi1cXHUwMDNlbl9wa3RzKTtcXG4rXFx0Zm9yIChpID0gMDsgOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNmRldi1cXHUwMDNlcnhfcGt0cyk7XFxuK1xcbitcXHRcXHRpZiAoIXNrYilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRpZiAoaSBcXHUwMDNjIHBrdF9zcGFuLVxcdTAwM2VuX3BrdHMpXFxuK1xcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXFx1MDAzZWxlbiwgcGt0X3NwYW4tXFx1MDAzZXBrdHNbaV0gLSA0KTtcXG4rXFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuc1tdID0ge1xcbitcXHQvKiBPbmUgcGFja2V0IGNvbXBsZXRlbHkgd2l0aGluIGEgdHJhbnNmZXIgKi9cXG4rXFx0eyBcXFwiMXAxeC1jb21wbGV0ZVxcXCIsIDEsIHsgOCB9LCAxLCB7IDggfSB9LFxcbitcXHQvKiBUd28gc21hbGwgcGFja2V0cyBjb21iaW5lZCB3aXRoaW4gb25lIHRyYW5zZmVyICovXFxuK1xcdHsgXFxcIjJwMXgtY29tYmluZWRcXFwiLCAyLCB7IDgsIDggfSwgMSwgeyAxNiB9IH0sXFxuK1xcdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIE1DVFAgcGF5bG9hZCAqL1xcbitcXHR7IFxcXCIxcDJ4LXNwbGl0LXBheWxvYWRcXFwiLCAxLCB7IDE2IH0sIDIsIHsgOCwgOCB9IH0sXFxuK1xcdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIFVTQiB0cmFuc3BvcnQgaGVhZGVyICovXFxuK1xcdHsgXFxcIjFwMngtc3BsaXQtdXNiaGRyXFxcIiwgMSwgeyAxNiB9LCAyLCB7IDIsIDE0IH0gfSxcXG4rXFx0LyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgTUNUUCBoZWFkZXIgKi9cXG4rXFx0eyBcXFwiMXAyeC1zcGxpdC1tY3RwaGRyXFxcIiwgMSwgeyAxNiB9LCAyLCB7IDYsIDEwIH0gfSxcXG4rXFx0LyogU2luZ2xlIHBhY2tldCBzcGxpdCBvdmVyIDMgdHJhbnNmZXJzLCBtaWRkbGUgZW50aXJlbHkgY29udGludWF0aW9uICovXFxuK1xcdHsgXFxcIjFwM3gtc3BsaXRcXFwiLCAxLCB7IDEyIH0sIDMsIHsgNCwgNCwgNCB9IH0sXFxuK1xcdC8qIE1heC1zaXplZCBzaW5nbGUgdHJhbnNmZXIgKi9cXG4rXFx0eyBcXFwiMXAxeC1sYXJnZVxcXCIsIDEsIHsgODE5MSB9LCAxLCB7IDgxOTEgfSB9LFxcbitcXHQvKiBUd28gbGFyZ2UgcGFja2V0cywgc3BsaXQgYXQgdGhlIHdvcnN0LWNhc2UgZm9yIGFsbG9jYXRpb24sIHdpdGggYVxcbitcXHQgKiBzaW5nbGUgYnl0ZSBjb250aW51aW5nIHRoZSBzcGFuXFxuK1xcdCAqL1xcbitcXHR7IFxcXCIycDJ4LWxhcmdlLXNwbGl0XFxcIiwgMiwgeyA4MTkwLCA4MTkwIH0sIDIsIHsgODE5MSwgODE4OSB9IH0sXFxuK307XFxuK1xcbitLVU5JVF9BUlJBWV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFucyxcXG4rXFx0XFx0ICBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3RvX2Rlc2MpO1xcbitcXG4rc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIG1jdHBfdXNibGliX3Rlc3RfY2FzZXNbXSA9IHtcXG4rXFx0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X3NpbmdsZSksXFxuK1xcdEtVTklUX0NBU0VfUEFSQU0obWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3BhbixcXG4rXFx0XFx0XFx0IG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW5fZ2VuX3BhcmFtcyksXFxuK1xcdHt9XFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IGt1bml0X3N1aXRlIG1jdHBfdXNibGliX3Rlc3Rfc3VpdGUgPSB7XFxuK1xcdC5uYW1lID0gXFxcIm1jdHAtdXNibGliXFxcIixcXG4rXFx0LnRlc3RfY2FzZXMgPSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzLFxcbit9O1xcbitcXG4ra3VuaXRfdGVzdF9zdWl0ZShtY3RwX3VzYmxpYl90ZXN0X3N1aXRlKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZmMwMjgyMTUyZTZlZmJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jXFxuQEAgLTAsMCArMSw2MTYgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogbWN0cC11c2JsaWIuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGhlbHBlciBsaWJyYXJ5XFxuKyAqXFxuKyAqIERTUDAyODMgaXMgYXZhaWxhYmxlIGF0OlxcbisgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGZcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjYgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZFxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2IvbWN0cC11c2IuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9tY3RwLmhcXHUwMDNlXFxuK1xcbit2b2lkIG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKVxcbit7XFxuK1xcdG1lbXNldChyeCwgMCwgc2l6ZW9mKCpyeCkpO1xcbitcXHRyeC1cXHUwMDNlc3BhbiA9IHNwYW47XFxuK1xcdHJ4LVxcdTAwM2VlcF9wa3RsZW4gPSBlcF9wa3RsZW47XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfaW5pdCk7XFxuK1xcbit2b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcXG4re1xcbitcXHRrZnJlZV9za2IocngtXFx1MDAzZXNrYik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfZmluaSk7XFxuK1xcbisvKlxcbisgKiBQcmVwYXJlIGEgdHJhbnNmZXIgYnVmZmVyIGZvciBmdXR1cmUgY29tcGxldGlvbjsgKmJ1ZnAgYW5kICpsZW5wIHdpbGxcXG4rICogYmUgcG9wdWxhdGVkIG9uIHN1Y2Nlc3MuXFxuKyAqL1xcbitpbnQgbWN0cF91c2JsaWJfcnhfcHJlcGFyZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LFxcbitcXHRcXHRcXHQgICB2b2lkICoqYnVmcCwgc2l6ZV90ICpsZW5wLCBnZnBfdCBnZnApXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LVxcdTAwM2Vza2I7XFxuK1xcdHVuc2lnbmVkIGludCBsZW4gPSAwO1xcbitcXG4rXFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiBza2ItXFx1MDAzZWxlbiBcXHUwMDNlPSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCkge1xcbitcXHRcXHQvKiBzb21ldGhpbmcgbXVzdCBoYXZlIGdvbmUgdGVycmlibHkgd3JvbmcuIGNsZWFyIGFuZCByZXN0YXJ0ICovXFxuK1xcdFxcdG1jdHBfdXNibGliX3J4X2NhbmNlbChyeCk7XFxuK1xcdFxcdHNrYiA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGxlbiA9IHJ4LVxcdTAwM2VzcGFuID8gQUxJR04oTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgsIHJ4LVxcdTAwM2VlcF9wa3RsZW4pXFxuK1xcdFxcdDogTUNUUF9VU0JfMV8wX1hGRVJfU0laRTtcXG4rXFxuK1xcdGlmICghc2tiKSB7XFxuK1xcdFxcdHNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIGxlbiwgZ2ZwKTtcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0fSBlbHNlIGlmIChza2ItXFx1MDAzZWNsb25lZCB8fCBza2JfdGFpbHJvb20oc2tiKSBcXHUwMDNjIHJ4LVxcdTAwM2VlcF9wa3RsZW4pIHtcXG4rXFx0XFx0LyogV2UgYWx3YXlzIG5lZWQgdG8gcmVhbGxvYyBpZiAtXFx1MDAzZWNsb25lZCwgYXMgd2UgY2Fubm90XFxuK1xcdFxcdCAqIHJlc3VibWl0IHRoZSAobm93LXNoYXJlZCkgc2tiIGJ1ZmZlciBmb3IgcG9zc2libGUgRE1BLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBPdGhlcndpc2UgKGlmIHdlIGhhdmUgYW4gdW4tY2xvbmVkIFNLQik6IGp1c3QgZW5zdXJlIHdlXFxuK1xcdFxcdCAqIGhhdmUgc3VmZmljaWVudCBzcGFjZSB0byBwcmV2ZW50IGJhYmJsZS4gU2luY2Ugd2UgYWxsb2NhdGVkXFxuK1xcdFxcdCAqIGZvciBtYXggc2l6ZSBpbiB0aGUgbGFzdCBwcmVwYXJlIChhbmQgaGF2ZSBub3QgY29uc3VtZWQgYW55XFxuK1xcdFxcdCAqIG9mIHRoYXQgc3BhY2UgZm9yIGEgcHJpb3IgTUNUUCBwYWNrZXQsIGJlY2F1c2UgIWNsb25lZCksIHdlXFxuK1xcdFxcdCAqIGhhdmUgc3VmZmljaWVudCBkYXRhIHRvIGZpbmlzaCB0aGUgY3VycmVudCBNQ1RQIHBhY2tldC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHN0cnVjdCBza19idWZmICpza2IyO1xcbitcXG4rXFx0XFx0c2tiMiA9IHNrYl9jb3B5X2V4cGFuZChza2IsIDAsIGxlbiwgZ2ZwKTtcXG4rXFx0XFx0aWYgKCFza2IyKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4rXFx0XFx0c2tiID0gc2tiMjtcXG4rXFx0fVxcbitcXG4rXFx0cngtXFx1MDAzZXNrYiA9IHNrYjtcXG4rXFxuK1xcdC8qIFNwYW5uaW5nIG1vZGUgYWxsb3dzIFpMUHMsIHNvIHdlIGRvbid0IHJlcXVpcmUgZXhhY3RseSBvbmVcXG4rXFx0ICogdHJhbnNmZXIgcGFja2V0LiBJZiB3ZSBoYXZlIGV4dHJhIHRhaWxyb29tLCBtYXkgYXMgd2VsbCB1c2UgaXQsXFxuK1xcdCAqIGFuZCB3ZSBoYXZlIGVuc3VyZWQgdGhhdCB0aGUgdGFpbHJvb20gXFx1MDAzZT0gZXBfcGt0bGVuLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJ4LVxcdTAwM2VzcGFuKVxcbitcXHRcXHRsZW4gPSBBTElHTl9ET1dOKHNrYl90YWlscm9vbShza2IpLCByeC1cXHUwMDNlZXBfcGt0bGVuKTtcXG4rXFxuK1xcdCpidWZwID0gc2tiX3RhaWxfcG9pbnRlcihza2IpO1xcbitcXHQqbGVucCA9IGxlbjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X3ByZXBhcmUpO1xcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IHRoaXNfY3B1X3B0cihuZXRkZXYtXFx1MDAzZWRzdGF0cyk7XFxuK1xcdHN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbitcXHRza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSk7XFxuK1xcbitcXHQvKiB3ZSdyZSBjYWxsZWQgZnJvbSBhbiBVUkIgY29tcGxldGlvbiBoYW5kbGVyLCBhbmQgY2Fubm90IGFzc3VtZSBsb2NhbFxcbitcXHQgKiBpcnFzIGFyZSBhbHdheXMgZGlzYWJsZWRcXG4rXFx0ICovXFxuK1xcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4rXFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2ZHN0YXRzLVxcdTAwM2VyeF9wYWNrZXRzKTtcXG4rXFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2ZHN0YXRzLVxcdTAwM2VyeF9ieXRlcywgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXN5bmNwLCBmbGFncyk7XFxuK1xcbitcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7XFxuK1xcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbitcXHRjYiA9IF9fbWN0cF9jYihza2IpO1xcbitcXHRjYi1cXHUwMDNlaGFsZW4gPSAwO1xcbitcXHRuZXRpZl9yeChza2IpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gdGhpc19jcHVfcHRyKGRldi1cXHUwMDNlZHN0YXRzKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4rXFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2ZHN0YXRzLVxcdTAwM2VyeF9kcm9wcyk7XFxuK1xcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNmRzdGF0cy1cXHUwMDNlc3luY3AsIGZsYWdzKTtcXG4rfVxcbitcXG4rLypcXG4rICogUmVjZWl2ZSBhIFVTQiBjb21wbGV0aW9uIG9mIEBsZW4gYnl0ZXMgb2YgaW5jb21pbmcgZGF0YS4gV2Ugd2lsbCB0aGVuIHNwbGl0XFxuKyAqIHRoaXMgaW50byBwYWNrZXRzIGFuZCBuZXRpZl9yeCgpIGVhY2guIEludGVuZGVkIHRvIGJlIGNhbGxlZCBpbiBhdG9taWNcXG4rICogY29udGV4dHMgLSBpZS4sIFVSQiBjb21wbGV0aW9uLlxcbisgKlxcbisgKiBBc3N1bWVzIEBuZXRkZXYgdXNlcyBkc3RhdHMuXFxuKyAqL1xcbitpbnQgbWN0cF91c2JsaWJfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LVxcdTAwM2Vza2I7XFxuK1xcdGludCByYyA9IDA7XFxuK1xcbitcXHRfX3NrYl9wdXQoc2tiLCBsZW4pO1xcbitcXG4rXFx0Zm9yICg7Oykge1xcbitcXHRcXHRzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7XFxuK1xcdFxcdHN0cnVjdCBza19idWZmICpza2IyO1xcbitcXHRcXHQvKiBsZW5ndGggb2YgTUNUUCBwYWNrZXQsIGluY2x1ZGluZyBVU0IgaGVhZGVyICovXFxuK1xcdFxcdHUxNiBwa3RfbGVuO1xcbitcXG4rXFx0XFx0Lyogbm8gaGVhZGVyIHlldCwgcmVzdWJtaXQgZm9yIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgKi9cXG4rXFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2Mgc2l6ZW9mKCpoZHIpKSB7XFxuK1xcdFxcdFxcdGlmICghcngtXFx1MDAzZXNwYW4pIHtcXG4rXFx0XFx0XFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJyeDogdGlueSB4ZmVyICglZCkgaW4gbm9uLXNwYW4gbW9kZVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0XFx0XFx0cmMgPSAtRU5PTVNHO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXNldDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aGRyID0gKHN0cnVjdCBtY3RwX3VzYl9oZHIgKilza2ItXFx1MDAzZWRhdGE7XFxuK1xcbitcXHRcXHRpZiAoYmUxNl90b19jcHUoaGRyLVxcdTAwM2VpZCkgIT0gTUNUUF9VU0JfRE1URl9JRCkge1xcbitcXHRcXHRcXHQvKiBCeSByZXNldHRpbmcgaGVyZSwgd2lsbCBzdGFydCB0aGUgbmV4dCBJTiB0cmFuc2ZlclxcbitcXHRcXHRcXHQgKiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgc2tiLiBUaGlzIHdpbGwgbWVhblxcbitcXHRcXHRcXHQgKiB3ZSByZS1zeW5jIHdoZW4gd2UgbmV4dCBzZWUgYSBzcGFubmVkIHBhY2tldCBhbGlnbmVkXFxuK1xcdFxcdFxcdCAqIHdpdGggdGhlIHN0YXJ0IG9mIGEgdHJhbnNmZXIuXFxuK1xcdFxcdFxcdCAqXFxuK1xcdFxcdFxcdCAqIEluIG5vbi1zcGFubmluZyBtb2RlLCB0aGlzIGp1c3QgbWVhbnMgd2UnbGwgZHJvcFxcbitcXHRcXHRcXHQgKiB0aGUgY3VycmVudCB0cmFuc2ZlciBvbmx5XFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcInJ4OiBpbnZhbGlkIGlkICUwNHhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIGJlMTZfdG9fY3B1KGhkci1cXHUwMDNlaWQpKTtcXG4rXFx0XFx0XFx0cmMgPSAtRVBST1RPO1xcbitcXHRcXHRcXHRnb3RvIGVycl9yZXNldDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cGt0X2xlbiA9IGJlMTZfdG9fY3B1KGhkci1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0LyogdjEuMSwgd2l0aCBzcGFuIGVuYWJsZWQsIGhhcyBhIDEzLWJpdCBsZW5ndGggKi9cXG4rXFx0XFx0cGt0X2xlbiBcXHUwMDI2PSByeC1cXHUwMDNlc3BhbiA/XFxuK1xcdFxcdFxcdE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYIDogTUNUUF9VU0JfMV8wX1BLVExFTl9NQVg7XFxuK1xcdFxcdGlmIChwa3RfbGVuIFxcdTAwM2Mgc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKHN0cnVjdCBtY3RwX2hkcikpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFxcXCJyeDogaW52YWxpZCBsZW4gJWRcXFxcblxcXCIsIHBrdF9sZW4pO1xcbitcXHRcXHRcXHRyYyA9IC1FUFJPVE87XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc2V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBzcGFuIGNvbnRpbnVlcyB0byB0aGUgbmV4dCB0cmFuc2ZlciwgcmVzdWJtaXQgKi9cXG4rXFx0XFx0aWYgKHBrdF9sZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbikge1xcbitcXHRcXHRcXHRpZiAoIXJ4LVxcdTAwM2VzcGFuKSB7XFxuK1xcdFxcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwicng6IHNob3J0IHhmZXIgKCVkIHZzICVkKSBpbiBub24tc3BhbiBtb2RlXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgcGt0X2xlbiwgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHRcXHRcXHRcXHRyYyA9IC1FTk9NU0c7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc2V0O1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiB3ZSBoYXZlIChleGFjdGx5KSBhIGNvbXBsZXRlIHBhY2tldCwgUlggaXQgZGlyZWN0bHkgKi9cXG4rXFx0XFx0aWYgKHBrdF9sZW4gPT0gc2tiLVxcdTAwM2VsZW4pIHtcXG4rXFx0XFx0XFx0bWN0cF91c2JsaWJfcngobmV0ZGV2LCBza2IpO1xcbitcXHRcXHRcXHRyeC1cXHUwMDNlc2tiID0gTlVMTDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIG1vcmUgcGFja2V0cyBmb2xsb3cgLSBSWCBhIGNsb25lIHNvIHRoYXQgd2UgY2FuIGNvbnRpbnVlXFxuK1xcdFxcdCAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgU0tCLCB3aGljaCBtYXkgYmUgdGhlIHN0YXJ0IG9mIGFcXG4rXFx0XFx0ICogc3Bhbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0aWYgKHNrYjIpIHtcXG4rXFx0XFx0XFx0c2tiX3RyaW0oc2tiMiwgcGt0X2xlbik7XFxuK1xcdFxcdFxcdG1jdHBfdXNibGliX3J4KG5ldGRldiwgc2tiMik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdG1jdHBfdXNibGliX3J4X3N0YXRzX3NpbmdsZV9kcm9wKG5ldGRldik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c2tiX3B1bGwoc2tiLCBwa3RfbGVuKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcmVzZXQ6XFxuK1xcdGRldl9rZnJlZV9za2JfYW55KHJ4LVxcdTAwM2Vza2IpO1xcbitcXHRyeC1cXHUwMDNlc2tiID0gTlVMTDtcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKTtcXG4rXFxuKy8qXFxuKyAqIENhbmNlbCBhIHJ4IGNvbnRleHQ7IHN1YnNlcXVlbnQgcHJlcGFyZS9jb21wbGV0ZSBjYWxscyB3aWxsIG5vdCBiZSBhXFxuKyAqIGNvbnRpbnVhdGlvbiBvZiBhbnkgZGF0YSBhbHJlYWR5IHJlY2VpdmVkLlxcbisgKi9cXG4rdm9pZCBtY3RwX3VzYmxpYl9yeF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcXG4re1xcbitcXHRkZXZfa2ZyZWVfc2tiX2FueShyeC1cXHUwMDNlc2tiKTtcXG4rXFx0cngtXFx1MDAzZXNrYiA9IE5VTEw7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfY2FuY2VsKTtcXG4rXFxuKy8qIHRyYW5zbWl0IGNvbnRleHQ6IGVuY2Fwc3VsYXRlcyBvbmUgdHJhbnNmZXIgKi9cXG4rc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCB7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHg7XFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWQgc2ticztcXG4rXFx0dW5zaWduZWQgaW50IGJ1Zl9sZW4sIGxlbjtcXG4rXFx0ZW51bSBtY3RwX3VzYmxpYl90eF9idWZfdHlwZSB7XFxuK1xcdFxcdFRYX1NJTkdMRSxcXG4rXFx0XFx0VFhfRkxBVCxcXG4rXFx0fSBidWZfdHlwZTtcXG4rXFx0dTggYnVmW10gX19fX2NhY2hlbGluZV9hbGlnbmVkO1xcbit9O1xcbitcXG4rdm9pZCBtY3RwX3VzYmxpYl90eF9pbml0KHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsXFxuK1xcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzICpvcHMsXFxuK1xcdFxcdFxcdCB2b2lkICpwcml2LCBib29sIHNwYW4pXFxuK3tcXG4rXFx0bWVtc2V0KHR4LCAwLCBzaXplb2YoKnR4KSk7XFxuK1xcdHR4LVxcdTAwM2VvcHMgPSAqb3BzO1xcbitcXHR0eC1cXHUwMDNlcHJpdiA9IHByaXY7XFxuK1xcdHR4LVxcdTAwM2VzcGFuID0gc3BhbjtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnR4LVxcdTAwM2Vsb2NrKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9pbml0KTtcXG4rXFxuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfYXZhaWwoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBjdHgtXFx1MDAzZWJ1Zl90eXBlID09IFRYX1NJTkdMRSA/IDAgOiBjdHgtXFx1MDAzZWJ1Zl9sZW4gLSBjdHgtXFx1MDAzZWxlbjtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KVxcbit7XFxuK1xcdC8qIFVzZSB0aGUgYmFzZWxpbmUgbGVuZ3RoIChpZSwgQlRVKSBhcyBhbiBhcHByb3hpbWF0ZVxcbitcXHQgKiBcXFwicmVhc29uYWJseS1zaXplZFxcXCIgcGFja2V0IHdlIGNvdWxkIGV4cGVjdC4gSWYgdGhlcmUgaXNcXG4rXFx0ICogaW5zdWZmaWNpZW50IGNhcGFjaXR5IGZvciB0aGF0LCB0aGVuIHNlbmQuXFxuK1xcdCAqL1xcbitcXHRjb25zdCBzaXplX3QgcGt0X2xlbiA9IE1DVFBfVVNCX0JUVSArIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTtcXG4rXFxuK1xcdHJldHVybiBtY3RwX3VzYmxpYl90eF9hdmFpbChjdHgpIFxcdTAwM2MgcGt0X2xlbjtcXG4rfVxcbitcXG4rLypcXG4rICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUgLSBpbmRpY2F0aW5nIHRoYXQgdGhlIG5ldyBza2JcXG4rICogY291bGQgbm90IGJlIGFwcGVuZGVkLiBTbywgZXJyb3JzIHJlcG9ydGVkIGhlcmUgdG8gdGhlIFRYIHBhdGggd2lsbCByZXN1bHRcXG4rICogaW4gdGhlIFRYIGJlaW5nIHRyYW5zbWl0dGVkLlxcbisgKi9cXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90eF9hcHBlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRpZiAoY3R4LVxcdTAwM2VidWZfdHlwZSA9PSBUWF9TSU5HTEUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKG1jdHBfdXNibGliX3R4X2F2YWlsKGN0eCkgXFx1MDAzYyBza2ItXFx1MDAzZWxlbilcXG4rXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbitcXG4rXFx0X19za2JfcXVldWVfdGFpbChcXHUwMDI2Y3R4LVxcdTAwM2Vza2JzLCBza2IpO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VsZW4gKz0gc2tiLVxcdTAwM2VsZW47XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90eF9zZW5kKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eClcXG4re1xcbitcXHR2b2lkICpidWY7XFxuK1xcbitcXHQvKiBJZiB3ZSBoYXZlIGEgcWxlbiBvZiAxLCB3ZSBvbmx5IGVuZGVkIHVwIHBhY2tpbmcgYSBzaW5nbGUgc2tiLFxcbitcXHQgKiBkZXNwaXRlIGFsbG9jYXRpbmcgZm9yIG11bHRpcGxlLiBTa2lwIHRoZSBjb3B5IGFuZCBzZW5kIGRpcmVjdGx5XFxuK1xcdCAqIGZyb20gdGhlIHNrYiBkYXRhLlxcbitcXHQgKi9cXG4rXFx0aWYgKGN0eC1cXHUwMDNlYnVmX3R5cGUgPT0gVFhfU0lOR0xFIHx8IGN0eC1cXHUwMDNlc2ticy5xbGVuID09IDEpIHtcXG4rXFx0XFx0YnVmID0gY3R4LVxcdTAwM2Vza2JzLm5leHQtXFx1MDAzZWRhdGE7XFxuK1xcbitcXHR9IGVsc2UgaWYgKGN0eC1cXHUwMDNlYnVmX3R5cGUgPT0gVFhfRkxBVCkge1xcbitcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRcXHRzaXplX3QgcG9zID0gMDtcXG4rXFxuK1xcdFxcdHNrYl9xdWV1ZV93YWxrKFxcdTAwMjZjdHgtXFx1MDAzZXNrYnMsIHNrYikge1xcbitcXHRcXHRcXHRza2JfY29weV9iaXRzKHNrYiwgMCwgY3R4LVxcdTAwM2VidWYgKyBwb3MsIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0XFx0cG9zICs9IHNrYi1cXHUwMDNlbGVuO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRidWYgPSBjdHgtXFx1MDAzZWJ1ZjtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBjdHgtXFx1MDAzZXR4LVxcdTAwM2VvcHMuc2VuZChjdHgsIGJ1ZiwgY3R4LVxcdTAwM2VsZW4pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsXFxuK1xcdFxcdFxcdFxcdCAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFxuK1xcdGlmICghY3R4KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNmN0eC1cXHUwMDNlc2ticykpICE9IE5VTEwpXFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55X3JlYXNvbihza2IsIHJlYXNvbik7XFxuK1xcdGtmcmVlKGN0eCk7XFxuK31cXG4rXFxuK3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eClcXG4re1xcbitcXHRyZXR1cm4gdHhfY3R4LVxcdTAwM2V0eC1cXHUwMDNlcHJpdjtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jdHhfcHJpdik7XFxuK1xcbisvKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIHR4IFxcdTAwMjYgY29tcGxldGlvbiBwYXRoIGlzIHF1aWVzY2VkICovXFxuK3ZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KVxcbit7XFxuK1xcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHR4LVxcdTAwM2VjdXJfY3R4LCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfZmluaSk7XFxuK1xcbisvKiBNYXggc2l6ZSBvZiBhIHNwYW5uZWQgVFguIFNpbmNlIHdlIGFsbG9jYXRlIGEgc2VwYXJhdGUgc3BhbiBidWZmZXIsIGxpbWl0XFxuKyAqIHRoZSB0eC10aW1lIGFsbG9jYXRpb25zIHRvIDRrLiBMYXJnZXIgcGFja2V0cyB3aWxsIGJlIHNlbnQgYXMgc2luZ2xlXFxuKyAqIHRyYW5zZmVycy5cXG4rICovXFxuK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgVFhfU1BBTl9NQVggPSA0MDk2IC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHgpO1xcbitcXG4rc3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKlxcbittY3RwX3VzYmxpYl90eF9jdHhfY3JlYXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdCAgYm9vbCBzaW5nbGUpXFxuK3tcXG4rXFx0ZW51bSBtY3RwX3VzYmxpYl90eF9idWZfdHlwZSB0eXBlO1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHg7XFxuK1xcdHNpemVfdCBzeiA9IDA7XFxuK1xcbitcXHRpZiAoc2luZ2xlIHx8IHNrYi1cXHUwMDNlbGVuIFxcdTAwM2UgVFhfU1BBTl9NQVgpIHtcXG4rXFx0XFx0dHlwZSA9IFRYX1NJTkdMRTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0dHlwZSA9IFRYX0ZMQVQ7XFxuK1xcdFxcdHN6ID0gdHgtXFx1MDAzZXNwYW4gPyBUWF9TUEFOX01BWCA6IE1DVFBfVVNCXzFfMF9YRkVSX1NJWkU7XFxuK1xcdH1cXG4rXFxuK1xcdGN0eCA9IGt6YWxsb2NfZmxleCgqY3R4LCBidWYsIHN6LCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKCFjdHgpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2V0eCA9IHR4O1xcbitcXHRjdHgtXFx1MDAzZWJ1Zl90eXBlID0gdHlwZTtcXG4rXFx0Y3R4LVxcdTAwM2VidWZfbGVuID0gc3o7XFxuK1xcdGN0eC1cXHUwMDNlbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuK1xcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmN0eC1cXHUwMDNlc2ticyk7XFxuK1xcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmN0eC1cXHUwMDNlc2ticywgc2tiKTtcXG4rXFxuK1xcdHJldHVybiBjdHg7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdGJvb2wgb2spXFxuK3tcXG4rXFx0c3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSBnZXRfY3B1X3B0cihkZXYtXFx1MDAzZWRzdGF0cyk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2ZHN0YXRzLVxcdTAwM2VzeW5jcCk7XFxuK1xcdGlmIChvaykge1xcbitcXHRcXHQvKiBPbmx5IGluY2x1ZGUgdGhlIG5ldHdvcmstbGF5ZXIgZGF0YSBpbiB0eCBzdGF0czsgd2Uga25vd1xcbitcXHRcXHQgKiB0aGF0IHRoZXJlIGlzIGEgNC1ieXRlIGhlYWRlciBwdXNoZWQgdG8gYWxsIHNrYnMgaW5cXG4rXFx0XFx0ICogdHhfc2tiX3ByZXBhcmUoKVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dTY0IG4gPSBjdHgtXFx1MDAzZXNrYnMucWxlbjtcXG4rXFx0XFx0czY0IGxlbiA9IGN0eC1cXHUwMDNlbGVuIC0gKG4gKiBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpO1xcbitcXG4rXFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2ZHN0YXRzLVxcdTAwM2V0eF9wYWNrZXRzLCBuKTtcXG4rXFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2ZHN0YXRzLVxcdTAwM2V0eF9ieXRlcywgbGVuKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2ZHN0YXRzLVxcdTAwM2V0eF9kcm9wcywgY3R4LVxcdTAwM2Vza2JzLnFsZW4pO1xcbitcXHR9XFxuK1xcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNmRzdGF0cy1cXHUwMDNlc3luY3AsIGZsYWdzKTtcXG4rXFx0cHV0X2NwdV9wdHIoZGV2LVxcdTAwM2Vkc3RhdHMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gZ2V0X2NwdV9wdHIoZGV2LVxcdTAwM2Vkc3RhdHMpO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXFx1MDAyNmRzdGF0cy1cXHUwMDNlc3luY3ApO1xcbitcXHR1NjRfc3RhdHNfaW5jKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXR4X2Ryb3BzKTtcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcXHUwMDI2ZHN0YXRzLVxcdTAwM2VzeW5jcCwgZmxhZ3MpO1xcbitcXHRwdXRfY3B1X3B0cihkZXYtXFx1MDAzZWRzdGF0cyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENvbXBsZXRpb24gZm9yIHRoZSAtXFx1MDAzZXNlbmQoKSBvcC4gVGhpcyB3aWxsIHVwZGF0ZSBuZXRkZXYgc3RhdHMgYW5kXFxuKyAqIGZyZWUgdGhlIHR4IGNvbnRleHQuXFxuKyAqXFxuKyAqIExpa2VseSBjYWxsZWQgZnJvbSAoYXRvbWljKSBVUkIgY29tcGxldGlvbiBjb250ZXh0LlxcbisgKi9cXG4rdm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG9rKVxcbit7XFxuK1xcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9XFxuK1xcdFxcdG9rID8gU0tCX0NPTlNVTUVEIDogU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XFxuK1xcbitcXHRtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUodHhfY3R4LCBkZXYsIG9rKTtcXG4rXFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUodHhfY3R4LCByZWFzb24pO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUpO1xcbitcXG4rLyogUHJlcGFyZSBhIHNrYiBmb3IgcHVzaCgpXFxuKyAqXFxuKyAqIE9uIGVycm9yLCBwb3B1bGF0ZXMgQHJlYXNvbi5cXG4rICovXFxuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2tiX3ByZXBhcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzcGFuLFxcbitcXHRcXHRcXHRcXHQgICAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiAqcmVhc29uKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcGxlbiwgbWF4X2xlbjtcXG4rXFx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRtYXhfbGVuID0gc3BhbiA/IE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYIDogTUNUUF9VU0JfMV8wX1BLVExFTl9NQVg7XFxuK1xcbitcXHRwbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuK1xcdGlmIChwbGVuICsgc2l6ZW9mKCpoZHIpIFxcdTAwM2UgbWF4X2xlbikge1xcbitcXHRcXHQqcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1BLVF9UT09fQklHO1xcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXHR9XFxuK1xcbitcXHRyYyA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqaGRyKSk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHQqcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PTUVNO1xcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4rXFxuK1xcdGhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTtcXG4rXFx0aWYgKCFoZHIpIHtcXG4rXFx0XFx0KnJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT01FTTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdGhkci1cXHUwMDNlaWQgPSBjcHVfdG9fYmUxNihNQ1RQX1VTQl9ETVRGX0lEKTtcXG4rXFx0aGRyLVxcdTAwM2VsZW4gPSBjcHVfdG9fYmUxNihwbGVuICsgc2l6ZW9mKCpoZHIpKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBQdXNoIGEgbmV3IHNrYiB0byB0aGUgdHJhbnNmZXIuIE1heSByZXN1bHQgaW4gemVybyBvciBtb3JlIGNhbGxzIHRvXFxuKyAqIG9wcy1cXHUwMDNlc2VuZCgpLlxcbisgKlxcbisgKiBUYWtlcyBvd25lcnNoaXAgb2YgQHNrYiwgaW5jbHVkaW5nIG9uIGVycm9yLlxcbisgKi9cXG4raW50IG1jdHBfdXNibGliX3R4X3B1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcXG4rXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBtb3JlKVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCwgKnNlbmRfY3R4ID0gTlVMTDtcXG4rXFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uO1xcbitcXHRjb25zdCBpbnQgbWF4X3RyaWVzID0gMztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0aW50IHRyeSA9IDEsIHJjO1xcbitcXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl90eF9za2JfcHJlcGFyZShza2IsIHR4LVxcdTAwM2VzcGFuLCBcXHUwMDI2cmVhc29uKTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7XFxuK1xcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xcbitcXHRcXHQvKiB3ZSBtYXkgc3RpbGwgbmVlZCB0byBwcm9jZWVkLCBpbiBjYXNlIGFuIGV4aXN0aW5nIGN0eFxcbitcXHRcXHQgKiBpcyBub3cgc2VuZGFibGUgKGllLjogIW1vcmUpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2tiID0gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XFxuK3JldHJ5OlxcbitcXHQvKiBUcnkgYW5kIHF1ZXVlIHRvIHRoZSBjdXJyZW50IGNvbnRleHQuIFdlIGV4aXQgdGhpcyBjcml0aWNhbCBzZWN0aW9uXFxuK1xcdCAqIHdpdGggYSBmZXcgYml0cyBvZiBzdGF0ZTpcXG4rXFx0ICogIC0gc2VuZF9jdHg6IGluZGljYXRpbmcgYSBwcmlvciBjb250ZXh0IHRoYXQgbmVlZHMgdG8gYmUgc2VudFxcbitcXHQgKiAgLSBza2I6IGluZGljYXRpbmcgdGhhdCBhIHNrYiBzdGlsbCBuZWVkcyB0byBiZSBxdWV1ZWQvc2VudFxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnR4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdGN0eCA9IHR4LVxcdTAwM2VjdXJfY3R4O1xcbitcXHRpZiAoY3R4KSB7XFxuK1xcdFxcdGlmIChza2IpIHtcXG4rXFx0XFx0XFx0cmMgPSBtY3RwX3VzYmxpYl90eF9hcHBlbmQoY3R4LCBza2IpO1xcbitcXHRcXHRcXHRpZiAocmMpIHtcXG4rXFx0XFx0XFx0XFx0LyogY2FuJ3QgYXBwZW5kIHRvIHRoZSBwZW5kaW5nIHR4IC0gZGV0YWNoIGZvclxcbitcXHRcXHRcXHRcXHQgKiBzZW5kaW5nLCBhbmQgd2UnbGwgY3JlYXRlIGEgbmV3IHR4IGJlbG93LlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0c3dhcCh0eC1cXHUwMDNlY3VyX2N0eCwgc2VuZF9jdHgpO1xcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHQvKiB3ZSBoYXZlIHF1ZXVlZCAqL1xcbitcXHRcXHRcXHRcXHRza2IgPSBOVUxMO1xcbitcXHRcXHRcXHRcXHRpZiAoIW1vcmUgfHwgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoY3R4KSlcXG4rXFx0XFx0XFx0XFx0XFx0c3dhcCh0eC1cXHUwMDNlY3VyX2N0eCwgc2VuZF9jdHgpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSBpZiAoIW1vcmUpIHtcXG4rXFx0XFx0XFx0c3dhcCh0eC1cXHUwMDNlY3VyX2N0eCwgc2VuZF9jdHgpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdGlmIChzZW5kX2N0eCkge1xcbitcXHRcXHRyYyA9IG1jdHBfdXNibGliX3R4X3NlbmQoc2VuZF9jdHgpO1xcbitcXHRcXHRpZiAocmMpIHtcXG4rXFx0XFx0XFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKHNlbmRfY3R4LCBkZXYsIGZhbHNlKTtcXG4rXFx0XFx0XFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoc2VuZF9jdHgsIHJlYXNvbik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c2VuZF9jdHggPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHQvKiB3ZSBoYXZlIGVpdGhlciBxdWV1ZWQsIG9yIHRoZSBwcmVwYXJlIGZhaWxlZDsgbm90aGluZyBtb3JlIHRvIGRvICovXFxuK1xcdGlmICghc2tiKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGN0eCA9IG1jdHBfdXNibGliX3R4X2N0eF9jcmVhdGUodHgsIHNrYiwgIW1vcmUpO1xcbitcXHRpZiAoIWN0eCkge1xcbitcXHRcXHRuZXRkZXZfZGJnKGRldiwgXFxcIlRYIGNvbnRleHQgY3JlYXRlIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0LyogaWYgd2UncmUgcmVhZHkgdG8gc2VuZCBub3csIG5vIG5lZWQgdG8gZW5xdWV1ZSAqL1xcbitcXHRpZiAoIW1vcmUgfHwgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoY3R4KSkge1xcbitcXHRcXHRyYyA9IG1jdHBfdXNibGliX3R4X3NlbmQoY3R4KTtcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShjdHgsIGRldiwgZmFsc2UpO1xcbitcXHRcXHRcXHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShjdHgsIHJlYXNvbik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRpZiAoIXR4LVxcdTAwM2VjdXJfY3R4KSB7XFxuK1xcdFxcdHR4LVxcdTAwM2VjdXJfY3R4ID0gY3R4O1xcbitcXHRcXHRjdHggPSBOVUxMO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnR4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHQvKiB3ZSBtYXkgaGF2ZSBsb3N0IHRoZSByYWNlIHdpdGggYSBjb25jdXJyZW50IHR4OyBzaG91bGRuJ3QgaGFwcGVuLCBhc1xcbitcXHQgKiBuZG9fc3RhcnRfeG1pdCBzaG91bGQgYmUgc2VyaWFsaXNlZCBvdmVyIG9uZSBxdWV1ZSwgYnV0IHRyeSBhZ2FpblxcbitcXHQgKiBmcm9tIHRoZSB0b3AsIGFzIHdlIG1heSBiZSBhYmxlIHRvIHF1ZXVlIHRoZSBza2IgdG8gdGhhdCBjb250ZXh0LlxcbitcXHQgKi9cXG4rXFx0aWYgKGN0eCkge1xcbitcXHRcXHQvKiB1bmxpbmsgdGhlIG5ldyAoc29sZSkgc2tiLCB3ZSBkb24ndCB3YW50IGl0IGZyZWVkIHdpdGggY3R4ICovXFxuK1xcdFxcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2Vza2JzKTtcXG4rXFx0XFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pO1xcbitcXHRcXHRpZiAoKyt0cnkgXFx1MDAzZSBtYXhfdHJpZXMpIHtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfcHVzaCk7XFxuK1xcbisvKiBDYW5jZWwgYSB0eDogYW55IHVuLXNlbnQgY29udGV4dCBpcyByZWxlYXNlZC4gKi9cXG4rdm9pZCBtY3RwX3VzYmxpYl90eF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCA9IE5VTEw7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0c3dhcCh0eC1cXHUwMDNlY3VyX2N0eCwgY3R4KTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdGlmICghY3R4KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoY3R4LCBkZXYsIGZhbHNlKTtcXG4rXFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2NhbmNlbCk7XFxuK1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkplcmVteSBLZXJyIFxcdTAwM2Nqa0Bjb2RlY29uc3RydWN0LmNvbS5hdVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNQ1RQIFVTQiB0cmFuc3BvcnQgbGlicmFyeVxcXCIpO1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUKVxcbisjaW5jbHVkZSBcXFwibWN0cC11c2JsaWItdGVzdC5jXFxcIlxcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcXG5pbmRleCBhMmY2ZjFlMDRlZmJkMC4uMzVjYzJjYzE1ZjlhMDQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcXG5AQCAtMiw3ICsyLDcgQEBcXG4gLypcXG4gICogbWN0cC11c2IuaCAtIE1DVFAgVVNCIHRyYW5zcG9ydCBiaW5kaW5nOiBjb21tb24gZGVmaW5pdGlvbnMsXFxuICAqIGJhc2VkIG9uIERNVEYwMjgzIHNwZWNpZmljYXRpb246XFxuLSAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMC4xLnBkZlxcbisgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGZcXG4gICpcXG4gICogVGhlc2UgYXJlIHByb3RvY29sLWxldmVsIGRlZmluaXRpb25zLCB0aGF0IG1heSBiZSBzaGFyZWQgYmV0d2VlbiBob3N0XFxuICAqIGFuZCBnYWRnZXQgZHJpdmVycy5cXG5AQCAtMTMsMTggKzEzLDk2IEBAXFxuICNpZm5kZWYgX19MSU5VWF9VU0JfTUNUUF9VU0JfSFxcbiAjZGVmaW5lIF9fTElOVVhfVVNCX01DVFBfVVNCX0hcXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuKy8qXFxuKyAqIE1DVFAtb3Zlci1VU0IgdHJhbnNwb3J0IGhlYWRlci4gRFNQMDI4MyB2MS4wIGhhcyBhbiA4LWJpdCBsZW5ndGggZmllbGRcXG4rICogKHByZWNlZGVkIGJ5IDggcmVzZXJ2ZWQgYml0cyksIHYxLjEgaGFzIGEgMTMtYml0IGxlbmd0aCBmaWVsZCAocHJlY2VkZWQgYnlcXG4rICogMyByZXNlcnZlZCBiaXRzKS4gV2UgdXNlIGEgYmUxNiBmb3Igb3VyIGxlbmd0aCB0byBoYW5kbGUgdGhlIGxhcmdlciB2MS4xXFxuKyAqIHJlcHJlc2VudGF0aW9uLCBhbmQgbWFzayBhcyBhcHByb3ByaWF0ZS5cXG4rICovXFxuIHN0cnVjdCBtY3RwX3VzYl9oZHIge1xcbiBcXHRfX2JlMTZcXHRpZDtcXG4tXFx0dThcXHRyc3ZkO1xcbi1cXHR1OFxcdGxlbjtcXG4rXFx0X19iZTE2XFx0bGVuO1xcbiB9IF9fcGFja2VkO1xcbiBcXG4tI2RlZmluZSBNQ1RQX1VTQl9YRkVSX1NJWkVcXHQ1MTJcXG4rLyogbWF4IHRyYW5zZmVyIHNpemUgZm9yIERTUDAyODMgdjEuMCAqL1xcbisjZGVmaW5lIE1DVFBfVVNCXzFfMF9YRkVSX1NJWkVcXHQ1MTJcXG4gI2RlZmluZSBNQ1RQX1VTQl9CVFVcXHRcXHQ2OFxcbiAjZGVmaW5lIE1DVFBfVVNCX01UVV9NSU5cXHRNQ1RQX1VTQl9CVFVcXG4tI2RlZmluZSBNQ1RQX1VTQl9NVFVfTUFYXFx0KFU4X01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSlcXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzBfUEtUTEVOX01BWFxcdFU4X01BWFxcbisjZGVmaW5lIE1DVFBfVVNCXzFfMF9NVFVfTUFYXFx0KE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKVxcbisjZGVmaW5lIE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYXFx0R0VOTUFTSygxMiwgMClcXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzFfTVRVX01BWFxcdChNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSlcXG4gI2RlZmluZSBNQ1RQX1VTQl9ETVRGX0lEXFx0MHgxYWI0XFxuIFxcbisvKiBtY3RwLXVzYmxpYiAqL1xcbitcXG4rLypcXG4rICogUlggaGFuZGxlOiBkcml2ZXJzIHdpbGwgdHlwaWNhbGx5IGNyZWF0ZSBvbmUgb24gaW5pdCwgd2hpY2ggcGVyc2lzdHMgZm9yXFxuKyAqIHRoZSBsaWZlIG9mIHRoZSBkcml2ZXIuIFRoZSBzYW1lIGhhbmRsZSBpcyB1c2VkIGZvciBwcm9ncmVzc2l2ZVxcbisgKiBwcmVwYXJlIC1cXHUwMDNlIGNvbXBsZXRlIG9wZXJhdGlvbnMgKGZvciBlYWNoIGluY29taW5nIFVTQiB0cmFuc2ZlciksIHdoaWNoXFxuKyAqIHJlc3VsdCBpbiBuZXRpZl9yeCgpLWluZyB0aGUgTUNUUCBwYWNrZXRzIHJlY2VpdmVkXFxuKyAqL1xcbitzdHJ1Y3QgbWN0cF91c2JsaWJfcngge1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHR1MTYgZXBfcGt0bGVuO1xcbitcXHRib29sIHNwYW47XFxuK307XFxuK1xcbit2b2lkIG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKTtcXG4rdm9pZCBtY3RwX3VzYmxpYl9yeF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpO1xcbitcXG4raW50IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCxcXG4rXFx0XFx0XFx0ICAgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqbGVucCwgZ2ZwX3QgZ2ZwKTtcXG4rXFxuK2ludCBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbik7XFxuK1xcbit2b2lkIG1jdHBfdXNibGliX3J4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KTtcXG4rXFxuKy8qXFxuKyAqIFRYIGhhbmRsZTogY3JlYXRlZCBieSBtY3RwX3VzYmxpYl90eF9wdXNoKCkgZHVyaW5nIHRoZSB0eCBwYXRoLCBhbmRcXG4rICogbWF5IHBlcnNpc3QgYWNyb3NzIG11bHRpcGxlIHBhY2tldCB0cmFuc21pdHMuXFxuKyAqL1xcbitzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4O1xcbitcXG4rc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB7XFxuK1xcdC8qIFN0YXJ0IGEgVVNCIFRYIGZvciBAZGF0YS4gT24gcmV0dXJuaW5nIHN1Y2Nlc3MsIHRoZSBpbXBsZW1lbnRhdGlvblxcbitcXHQgKiBtdXN0IGFycmFuZ2UgZm9yIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUoKSB0byBiZSBjYWxsZWQgYXQgc29tZVxcbitcXHQgKiBsYXRlciBwb2ludCAoZWcuLCBvbiB1cmIgY29tcGxldGlvbikuXFxuK1xcdCAqL1xcbitcXHRpbnQgKCpzZW5kKShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pO1xcbit9O1xcbitcXG4rc3RydWN0IG1jdHBfdXNibGliX3R4IHtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7XFxuK1xcdHZvaWQgKnByaXY7XFxuK1xcdGJvb2wgc3BhbjtcXG4rXFx0LyogcHJvdGVjdHMgYWNjZXNzIHRvIGN1cl9jdHggKi9cXG4rXFx0c3BpbmxvY2tfdCBsb2NrO1xcbitcXHQvKiBjb250ZXh0IHRvIHdoaWNoIHdlIGFyZSBhZGRpbmcgcGFja2V0cywgY2xlYXJlZCBvbiBzZW5kICovXFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN1cl9jdHg7XFxuK307XFxuK1xcbit2b2lkIG1jdHBfdXNibGliX3R4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcXG4rXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgKm9wcywgdm9pZCAqcHJpdixcXG4rXFx0XFx0XFx0IGJvb2wgc3Bhbik7XFxuK3ZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KTtcXG4rXFxuK3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCk7XFxuK1xcbitpbnQgbWN0cF91c2JsaWJfdHhfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxcbitcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpO1xcbitcXG4rdm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG9rKTtcXG4rXFxuK3ZvaWQgbWN0cF91c2JsaWJfdHhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbik7XFxuK1xcbiAjZW5kaWYgLyogIF9fTElOVVhfVVNCX01DVFBfVVNCX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6Mjk6NDguOTI3NzY1NDU1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk2NzU4OTQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQ1RQXCIsXG4gICAgXCJNQ1RQX1RSQU5TUE9SVF9VU0JcIixcbiAgICBcIk1DVFBfVFJBTlNQT1JUX1VTQkxJQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1jdHBfdXNibGliX3J4X3ByZXBhcmVcIixcbiAgICBcIm1jdHBfdXNibGliX3J4X2NvbXBsZXRlXCIsXG4gICAgXCJtY3RwX3VzYmxpYl90eF9wdXNoXCIsXG4gICAgXCJtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlXCIsXG4gICAgXCJtY3RwX3VzYl9pbl9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2Jfb3V0X2NvbXBsZXRlXCIsXG4gICAgXCJtY3RwX3VzYl90eF9zZW5kXCIsXG4gICAgXCJtY3RwX3VzYl9zdGFydF94bWl0XCIsXG4gICAgXCJtY3RwX3VzYl9yeF9xdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29tbW9uIGxpYnJhcnkgZm9yIE1DVFAtb3Zlci1VU0IgKGBtY3RwLXVzYmxpYmApIGFuZCBtb2RpZmllcyB0aGUgTUNUUCBVU0IgdHJhbnNwb3J0IGRyaXZlciAoYG1jdHAtdXNiYCkgdG8gdXNlIGl0LiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiAoZS5nLiwgcmF3LWdhZGdldCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDZkYTc3NDRmMjU5YTIzNjJiYTQxMzQ0OWQ2NmUxNjEwMTM1OGU4MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMjM6Mjk6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL0tjb25maWcgYi9kcml2ZXJzL25ldC9tY3RwL0tjb25maWdcbmluZGV4IGNmMzI1YWIwYjFlZjU1Li5jNDBhYzljNjY1Yjc1OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXG5AQCAtNDcsOSArNDcsMjUgQEAgY29uZmlnIE1DVFBfVFJBTlNQT1JUX0kzQ1xuIFx0ICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCBmb3IgZWFjaCBJM0MgYnVzXG4gXHQgIGhhdmluZyBhIFwibWN0cC1jb250cm9sbGVyXCIgZGV2aWNldHJlZSBwcm9wZXJ0eS5cbiBcbitjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4rXHR0cmlzdGF0ZSBcIk1DVFAgb3ZlciBVU0IgY29tbW9uIGxpYnJhcnlcIlxuK1x0ZGVwZW5kcyBvbiBVU0JcbitcdGhlbHBcbitcdCAgQ29tbW9uIHByb3RvY29sIGhhbmRsaW5nIGZ1bmN0aW9ucyBmb3IgTUNUUC1vdmVyLVVTQiB0cmFuc3BvcnRcbitcdCAgaW1wbGVtZW50YXRpb25zLCBzdWl0YWJsZSBmb3IgdXNlIGluIGVpdGhlciBob3N0LSBvciBnYWRnZXQtc2lkZVxuK1x0ICB0cmFuc3BvcnQgZHJpdmVyXG4rXG4rXHQgIFRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYnkgdGhlIHRyYW5zcG9ydCBkcml2ZXIuXG4rXG4rY29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUXG4rICAgICAgICBib29sIFwiTUNUUCB1c2JsaWIgdGVzdHNcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXG4rICAgICAgICBkZXBlbmRzIG9uIE1DVFBfVFJBTlNQT1JUX1VTQkxJQj15IFx1MDAyNlx1MDAyNiBLVU5JVD15XG4rICAgICAgICBkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuK1xuIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JcbiBcdHRyaXN0YXRlIFwiTUNUUCBVU0IgdHJhbnNwb3J0XCJcbiBcdGRlcGVuZHMgb24gVVNCXG4rXHRzZWxlY3QgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4gXHRoZWxwXG4gXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBVU0IgdHJhbnNwb3J0LFxuIFx0ICBkZWZpbmVkIGJ5IERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjgzLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG5pbmRleCBjMzYwMDY4NDlhMWU3ZC4uYzg3MGI2MmQzZjFjOTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG5AQCAtMiwzICsyLDQgQEAgb2JqLSQoQ09ORklHX01DVFBfU0VSSUFMKSArPSBtY3RwLXNlcmlhbC5vXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX0kyQykgKz0gbWN0cC1pMmMub1xuIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JM0MpICs9IG1jdHAtaTNjLm9cbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCKSArPSBtY3RwLXVzYi5vXG4rb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQkxJQikgKz0gbWN0cC11c2JsaWIub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1xuaW5kZXggZmFkZTY1ZjJmMjY5OTUuLjJkMzEwNzUzNzRiNDViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNcbkBAIC0zLDkgKzMsOSBAQFxuICAqIG1jdHAtdXNiLmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBiaW5kaW5nIGRyaXZlci5cbiAgKlxuICAqIERTUDAyODMgaXMgYXZhaWxhYmxlIGF0OlxuLSAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMC4xLnBkZlxuKyAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMS4wLnBkZlxuICAqXG4tICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjUgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZFxuKyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuQEAgLTIyLDk1ICsyMiwxMTUgQEBcbiBzdHJ1Y3QgbWN0cF91c2Ige1xuIFx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjtcbiBcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmO1xuK1x0Ym9vbCBzcGFuO1xuIFxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcbiBcdHU4IGVwX2luO1xuIFx0dTggZXBfb3V0O1xuIFxuLVx0c3RydWN0IHVyYiAqdHhfdXJiO1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3J4IHJ4O1xuIFx0c3RydWN0IHVyYiAqcnhfdXJiO1xuK1x0aW50IGluX2Vycl9jb3VudDtcbitcdGludCBpbl9lcnJfb3JpZztcbitcdGJvb2wgY2xlYXJfaGFsdDtcbiBcbiBcdC8qIGVuZm9yY2VzIGF0b21pYyBhY2Nlc3MgdG8gcnhfc3RvcHBlZCBhbmQgcmVxdWV1aW5nIHRoZSByZXRyeSB3b3JrICovXG4gXHRzcGlubG9ja190IHJ4X2xvY2s7XG4gXHRib29sIHJ4X3N0b3BwZWQ7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHJ4X3JldHJ5X3dvcms7XG4rXG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggdHg7XG4rXHRzdHJ1Y3QgdXNiX2FuY2hvciB0eF9hbmNob3I7XG4rXHQvKiBzZXJpYWxpc2VzIHR4X3FtZW0gdXBkYXRlcyB0byBuZXRkZXYgcXVldWUgc3RhdGVzICovXG4rXHRzcGlubG9ja190IHR4X3FtZW1fbG9jaztcbitcdGludCB0eF9xbWVtO1xuK307XG4rXG4rZW51bSB7XG4rXHRNQ1RQX1VTQl9TVUJDTEFTU19CQVNFID0gMHgwMCxcbitcdE1DVFBfVVNCX1NVQkNMQVNTX1NQQU4gPSAweDAyLFxuIH07XG4gXG4rLyogV2UgdXNlIGEgdG90YWwtc2l6ZSBsaW1pdCBmb3Igb3V0c3RhbmRpbmcgVVJCcywgYXMgdGhlIHRyYW5zZmVyIGNvdW50c1xuKyAqIG1heSB2YXJ5IGEgbG90IGJldHdlZW4gc3Bhbm5pbmctIGFuZCBub24tc3Bhbm5pbmcgbW9kZXMuIEluIHNwYW5uaW5nIG1vZGUsXG4rICogdGhpcyB3aWxsIGFsbG93IGZvciBhIGNvdXBsZSBvZiBtYXgtc2l6ZWQgdHJhbnNmZXJzIHRvIGJlIGluIGZsaWdodC4gSW5cbisgKiBub24tc3Bhbm5pbmcgbW9kZSwgMzIuXG4rICpcbisgKiBXZSB3YW50IHRvIGF2b2lkIGRpc2FibGluZyB0aGUgdHggcXVldWUgaWYgcG9zc2libGU7IGRvaW5nIHNvIHdpbGwgZW5kIHVwXG4rICogcmVxdWV1ZWluZyB0byBnc29fc2tiLCBhbmQgd2Ugb25seSBkZXF1ZXVlIGZyb20gdGhhdCBvbmUgc2tiIGF0IGEgdGltZSxcbisgKiBzbyBjYW4gbm8gbG9uZ2VyIHBlcmZvcm0gdHJhbnNmZXIgcGFja2luZy5cbisgKi9cbitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFRYX1FNRU1fTUFYID0gMTYzODQ7XG4rXG4gc3RhdGljIHZvaWQgbWN0cF91c2Jfb3V0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiB7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLVx1MDAzZWRldjtcbi1cdGludCBzdGF0dXM7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHggPSB1cmItXHUwMDNlY29udGV4dDtcbitcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBtY3RwX3VzYmxpYl90eF9jdHhfcHJpdih0eF9jdHgpO1xuK1x0dW5zaWduZWQgaW50IGxlbiA9IHVyYi1cdTAwM2V0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG1jdHBfdXNiLVx1MDAzZW5ldGRldjtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tXHRzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuK1x0bWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSh0eF9jdHgsIG5ldGRldiwgdXJiLVx1MDAzZXN0YXR1cyA9PSAwKTtcbiBcbi1cdHN3aXRjaCAoc3RhdHVzKSB7XG4tXHRjYXNlIC1FTk9FTlQ6XG4tXHRjYXNlIC1FQ09OTlJFU0VUOlxuLVx0Y2FzZSAtRVNIVVRET1dOOlxuLVx0Y2FzZSAtRVBST1RPOlxuLVx0XHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQobmV0ZGV2KTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIDA6XG4tXHRcdGRldl9kc3RhdHNfdHhfYWRkKG5ldGRldiwgc2tiLVx1MDAzZWxlbik7XG4tXHRcdG5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTtcbi1cdFx0Y29uc3VtZV9za2Ioc2tiKTtcbi1cdFx0cmV0dXJuO1xuLVx0ZGVmYXVsdDpcbi1cdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwidW5leHBlY3RlZCB0eCB1cmIgc3RhdHVzOiAlZFxcblwiLCBzdGF0dXMpO1xuLVx0XHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQobmV0ZGV2KTtcbi1cdH1cbitcdHVzYl9mcmVlX3VyYih1cmIpO1xuIFxuLVx0a2ZyZWVfc2tiKHNrYik7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtY3RwX3VzYi1cdTAwM2V0eF9xbWVtX2xvY2ssIGZsYWdzKTtcbitcdG1jdHBfdXNiLVx1MDAzZXR4X3FtZW0gLT0gbGVuO1xuK1x0aWYgKG1jdHBfdXNiLVx1MDAzZXR4X3FtZW0gXHUwMDNjIFRYX1FNRU1fTUFYIFx1MDAyNlx1MDAyNiBuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRcdG5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfcW1lbV9sb2NrLCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbitzdGF0aWMgaW50IG1jdHBfdXNiX3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxuK1x0XHRcdCAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuKVxuIHtcbi1cdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xuLVx0dW5zaWduZWQgaW50IHBsZW47XG4rXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYodHhfY3R4KTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzdHJ1Y3QgdXJiICp1cmI7XG4gXHRpbnQgcmM7XG4gXG4tXHRwbGVuID0gc2tiLVx1MDAzZWxlbjtcbi1cbi1cdGlmIChwbGVuICsgc2l6ZW9mKCpoZHIpIFx1MDAzZSBNQ1RQX1VTQl9YRkVSX1NJWkUpXG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4tXG4tXHRyYyA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqaGRyKSk7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4tXG4tXHRoZHIgPSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7XG4tXHRpZiAoIWhkcilcbi1cdFx0Z290byBlcnJfZHJvcDtcbi1cbi1cdGhkci1cdTAwM2VpZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xuLVx0aGRyLVx1MDAzZXJzdmQgPSAwO1xuLVx0aGRyLVx1MDAzZWxlbiA9IHBsZW4gKyBzaXplb2YoKmhkcik7XG4tXG4tXHR1cmIgPSBtY3RwX3VzYi1cdTAwM2V0eF91cmI7XG4rXHR1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpO1xuK1x0aWYgKCF1cmIpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0dXNiX2ZpbGxfYnVsa191cmIodXJiLCBtY3RwX3VzYi1cdTAwM2V1c2JkZXYsXG4gXHRcdFx0ICB1c2Jfc25kYnVsa3BpcGUobWN0cF91c2ItXHUwMDNldXNiZGV2LCBtY3RwX3VzYi1cdTAwM2VlcF9vdXQpLFxuLVx0XHRcdCAgc2tiLVx1MDAzZWRhdGEsIHNrYi1cdTAwM2VsZW4sXG4tXHRcdFx0ICBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHNrYik7XG4rXHRcdFx0ICBkYXRhLCBsZW4sIG1jdHBfdXNiX291dF9jb21wbGV0ZSwgdHhfY3R4KTtcbitcbitcdGlmIChtY3RwX3VzYi1cdTAwM2VzcGFuKVxuK1x0XHR1cmItXHUwMDNldHJhbnNmZXJfZmxhZ3MgfD0gVVJCX1pFUk9fUEFDS0VUO1xuK1xuK1x0dXNiX2FuY2hvcl91cmIodXJiLCBcdTAwMjZtY3RwX3VzYi1cdTAwM2V0eF9hbmNob3IpO1xuIFxuLVx0LyogU3RvcHMgVFggcXVldWUgZmlyc3QgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbiB3aXRoIFVSQiBjb21wbGV0ZSAqL1xuLVx0bmV0aWZfc3RvcF9xdWV1ZShkZXYpO1xuIFx0cmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpO1xuIFx0aWYgKHJjKSB7XG4tXHRcdG5ldGlmX3dha2VfcXVldWUoZGV2KTtcbi1cdFx0Z290byBlcnJfZHJvcDtcbitcdFx0bmV0ZGV2X2RiZyhtY3RwX3VzYi1cdTAwM2VuZXRkZXYsIFwiVFggdXJiIHN1Ym1pdCBmYWlsZWQsICVkXFxuXCIsIHJjKTtcbitcdFx0dXNiX3VuYW5jaG9yX3VyYih1cmIpO1xuK1x0XHR1c2JfZnJlZV91cmIodXJiKTtcbitcdH0gZWxzZSB7XG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xuK1x0XHRtY3RwX3VzYi1cdTAwM2V0eF9xbWVtICs9IGxlbjtcbitcdFx0aWYgKG1jdHBfdXNiLVx1MDAzZXR4X3FtZW0gXHUwMDNlPSBUWF9RTUVNX01BWClcbitcdFx0XHRuZXRpZl9zdG9wX3F1ZXVlKG1jdHBfdXNiLVx1MDAzZW5ldGRldik7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfcW1lbV9sb2NrLCBmbGFncyk7XG4gXHR9XG4gXG4tXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB0eF9vcHMgPSB7XG4rXHQuc2VuZCA9IG1jdHBfdXNiX3R4X3NlbmQsXG4rfTtcbitcbitzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG5ldGRldl9wcml2KGRldik7XG4rXHRib29sIG1vcmUgPSBuZXRkZXZfeG1pdF9tb3JlKCk7XG4rXG4rXHRtY3RwX3VzYmxpYl90eF9wdXNoKGRldiwgXHUwMDI2bWN0cF91c2ItXHUwMDNldHgsIHNrYiwgbW9yZSk7XG4gXG4tZXJyX2Ryb3A6XG4tXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTtcbi1cdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG4gXG5AQCAtMTI1LDI0ICsxNDUsMjMgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgUlhfUkVUUllfREVMQVkgPSBIWiAvIDQ7XG4gc3RhdGljIGludCBtY3RwX3VzYl9yeF9xdWV1ZShzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiLCBnZnBfdCBnZnApXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4rXHRzaXplX3QgbGVuO1xuK1x0dm9pZCAqYnVmO1xuIFx0aW50IHJjO1xuIFxuLVx0c2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgTUNUUF9VU0JfWEZFUl9TSVpFLCBnZnApO1xuLVx0aWYgKCFza2IpIHtcbi1cdFx0cmMgPSAtRU5PTUVNO1xuK1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgXHUwMDI2bWN0cF91c2ItXHUwMDNlcngsXG4rXHRcdFx0XHQgICAgXHUwMDI2YnVmLCBcdTAwMjZsZW4sIGdmcCk7XG4rXHRpZiAocmMpXG4gXHRcdGdvdG8gZXJyX3JldHJ5O1xuLVx0fVxuIFxuIFx0dXNiX2ZpbGxfYnVsa191cmIobWN0cF91c2ItXHUwMDNlcnhfdXJiLCBtY3RwX3VzYi1cdTAwM2V1c2JkZXYsXG4gXHRcdFx0ICB1c2JfcmN2YnVsa3BpcGUobWN0cF91c2ItXHUwMDNldXNiZGV2LCBtY3RwX3VzYi1cdTAwM2VlcF9pbiksXG4tXHRcdFx0ICBza2ItXHUwMDNlZGF0YSwgTUNUUF9VU0JfWEZFUl9TSVpFLFxuLVx0XHRcdCAgbWN0cF91c2JfaW5fY29tcGxldGUsIHNrYik7XG4rXHRcdFx0ICBidWYsIGxlbiwgbWN0cF91c2JfaW5fY29tcGxldGUsIG1jdHBfdXNiKTtcbiBcbiBcdHJjID0gdXNiX3N1Ym1pdF91cmIobWN0cF91c2ItXHUwMDNlcnhfdXJiLCBnZnApO1xuIFx0aWYgKHJjKSB7XG4gXHRcdG5ldGRldl9kYmcobWN0cF91c2ItXHUwMDNlbmV0ZGV2LCBcInJ4IHVyYiBzdWJtaXQgZmFpbHVyZTogJWRcXG5cIiwgcmMpO1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4KTtcbiBcdFx0aWYgKHJjID09IC1FTk9NRU0pXG4gXHRcdFx0Z290byBlcnJfcmV0cnk7XG4gXHR9XG5AQCAtMTU3LDEzICsxNzYsMTMgQEAgc3RhdGljIGludCBtY3RwX3VzYl9yeF9xdWV1ZShzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiLCBnZnBfdCBnZnApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByeF9lcnJfbWF4ID0gMTA7XG4rXG4gc3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuIHtcbi1cdHN0cnVjdCBza19idWZmICpza2IgPSB1cmItXHUwMDNlY29udGV4dDtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBza2ItXHUwMDNlZGV2O1xuLVx0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4tXHRzdHJ1Y3QgbWN0cF9za2JfY2IgKmNiO1xuLVx0dW5zaWduZWQgaW50IGxlbjtcbitcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSB1cmItXHUwMDNlY29udGV4dDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBtY3RwX3VzYi1cdTAwM2VuZXRkZXY7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHN0YXR1cztcbiBcbiBcdHN0YXR1cyA9IHVyYi1cdTAwM2VzdGF0dXM7XG5AQCAtMTcyLDgwICsxOTEsNTQgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuIFx0Y2FzZSAtRU5PRU5UOlxuIFx0Y2FzZSAtRUNPTk5SRVNFVDpcbiBcdGNhc2UgLUVTSFVURE9XTjpcbi1cdGNhc2UgLUVQUk9UTzpcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdC8qIGRldmljZSBzaHV0ZG93biwgZG9uJ3QgcmVzdWJtaXQgKi9cbitcdFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4KTtcbiBcdFx0cmV0dXJuO1xuLVx0Y2FzZSAwOlxuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcInVuZXhwZWN0ZWQgcnggdXJiIHN0YXR1czogJWRcXG5cIiwgc3RhdHVzKTtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdGxlbiA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoO1xuLVx0X19za2JfcHV0KHNrYiwgbGVuKTtcbi1cbi1cdHdoaWxlIChza2IpIHtcbi1cdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBOVUxMO1xuLVx0XHRzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7XG4tXHRcdHU4IHBrdF9sZW47IC8qIGxlbmd0aCBvZiBNQ1RQIHBhY2tldCwgbm8gVVNCIGhlYWRlciAqL1xuIFxuLVx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuLVx0XHRoZHIgPSBza2JfcHVsbF9kYXRhKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbi1cdFx0aWYgKCFoZHIpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdGlmIChiZTE2X3RvX2NwdShoZHItXHUwMDNlaWQpICE9IE1DVFBfVVNCX0RNVEZfSUQpIHtcbi1cdFx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCJyeDogaW52YWxpZCBpZCAlMDR4XFxuXCIsXG4tXHRcdFx0XHQgICBiZTE2X3RvX2NwdShoZHItXHUwMDNlaWQpKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuK1x0Y2FzZSAtRVBJUEU6XG4rXHRcdC8qIGVuZHBvaW50IHN0YWxsOiBjbGVhciBoYWx0LCB3aGljaCB3aWxsIGNhdXNlIGEgcmVzdWJtaXQgKi9cbiBcbi1cdFx0aWYgKGhkci1cdTAwM2VsZW4gXHUwMDNjXG4tXHRcdCAgICBzaXplb2Yoc3RydWN0IG1jdHBfaGRyKSArIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSkge1xuLVx0XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcInJ4OiBzaG9ydCBwYWNrZXQgKGhkcikgJWRcXG5cIixcbi1cdFx0XHRcdCAgIGhkci1cdTAwM2VsZW4pO1xuLVx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoIW1jdHBfdXNiLVx1MDAzZWluX2Vycl9jb3VudCsrKVxuK1x0XHRcdG1jdHBfdXNiLVx1MDAzZWluX2Vycl9vcmlnID0gc3RhdHVzO1xuK1x0XHRpZiAobWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50IFx1MDAzZT0gcnhfZXJyX21heCkge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcImV4Y2Vzc2l2ZSBzdGFsbHMgZnJvbSBJTiBFUFxcblwiKTtcbitcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcbi1cdFx0Lyogd2Uga25vdyB3ZSBoYXZlIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSBoZXJlICovXG4tXHRcdHBrdF9sZW4gPSBoZHItXHUwMDNlbGVuIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpO1xuLVx0XHRpZiAocGt0X2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbikge1xuLVx0XHRcdG5ldGRldl9kYmcobmV0ZGV2LFxuLVx0XHRcdFx0ICAgXCJyeDogc2hvcnQgcGFja2V0ICh4ZmVyKSAlZCwgYWN0dWFsICVkXFxuXCIsXG4tXHRcdFx0XHQgICBoZHItXHUwMDNlbGVuLCBza2ItXHUwMDNlbGVuKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuK1x0XHRtY3RwX3VzYi1cdTAwM2VjbGVhcl9oYWx0ID0gdHJ1ZTtcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWN0cF91c2ItXHUwMDNlcnhfbG9jaywgZmxhZ3MpO1xuK1x0XHRpZiAoIW1jdHBfdXNiLVx1MDAzZXJ4X3N0b3BwZWQpXG4rXHRcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X3JldHJ5X3dvcmssXG4rXHRcdFx0XHRcdCAgICAgIFJYX1JFVFJZX0RFTEFZKTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeF9sb2NrLCBmbGFncyk7XG4rXHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeCk7XG4rXHRcdHJldHVybjtcbiBcbi1cdFx0aWYgKHBrdF9sZW4gXHUwMDNjIHNrYi1cdTAwM2VsZW4pIHtcbi1cdFx0XHQvKiBtb3JlIHBhY2tldHMgbWF5IGZvbGxvdyAtIGNsb25lIHRvIGEgbmV3XG4tXHRcdFx0ICogc2tiIHRvIHVzZSBvbiB0aGUgbmV4dCBpdGVyYXRpb25cbi1cdFx0XHQgKi9cbi1cdFx0XHRza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG4tXHRcdFx0aWYgKHNrYjIpIHtcbi1cdFx0XHRcdGlmICghc2tiX3B1bGwoc2tiMiwgcGt0X2xlbikpIHtcbi1cdFx0XHRcdFx0a2ZyZWVfc2tiKHNrYjIpO1xuLVx0XHRcdFx0XHRza2IyID0gTlVMTDtcbi1cdFx0XHRcdH1cbi1cdFx0XHR9XG4tXHRcdFx0c2tiX3RyaW0oc2tiLCBwa3RfbGVuKTtcbitcdGRlZmF1bHQ6XG4rXHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcInVuZXhwZWN0ZWQgcnggdXJiIHN0YXR1czogJWRcXG5cIiwgc3RhdHVzKTtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIC1FVElNRTpcbitcdGNhc2UgLUVQUk9UTzpcbitcdGNhc2UgLUVJTFNFUTpcbitcdGNhc2UgLUVPVkVSRkxPVzpcbitcdFx0LyogcG9zc2libHkgdHJhbnNpZW50OyByZWNvcmQgZmlyc3QgZmFpbHVyZSwgcmVzdWJtaXQgKi9cbitcdFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4KTtcbitcdFx0aWYgKCFtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfY291bnQrKylcbitcdFx0XHRtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfb3JpZyA9IHN0YXR1cztcbitcdFx0aWYgKG1jdHBfdXNiLVx1MDAzZWluX2Vycl9jb3VudCBcdTAwM2U9IHJ4X2Vycl9tYXgpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwiZXhjZXNzaXZlIGVycm9ycyBmcm9tIElOIEVQLCBmaXJzdDogJWRcXG5cIixcbitcdFx0XHRcdCAgIG1jdHBfdXNiLVx1MDAzZWluX2Vycl9vcmlnKTtcbitcdFx0XHRyZXR1cm47XG4gXHRcdH1cbitcdFx0YnJlYWs7XG4gXG4tXHRcdGRldl9kc3RhdHNfcnhfYWRkKG5ldGRldiwgc2tiLVx1MDAzZWxlbik7XG4tXG4tXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX01DVFApO1xuLVx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbi1cdFx0Y2IgPSBfX21jdHBfY2Ioc2tiKTtcbi1cdFx0Y2ItXHUwMDNlaGFsZW4gPSAwO1xuLVx0XHRuZXRpZl9yeChza2IpO1xuLVxuLVx0XHRza2IgPSBza2IyO1xuK1x0Y2FzZSAwOlxuK1x0XHRtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShuZXRkZXYsIFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4LCB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aCk7XG4rXHRcdG1jdHBfdXNiLVx1MDAzZWluX2Vycl9jb3VudCA9IDA7XG4rXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0aWYgKHNrYilcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXG4gXHRtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0FUT01JQyk7XG4gfVxuIFxuQEAgLTI1Myw2ICsyNDYsMjAgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfcnhfcmV0cnlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWN0cF91c2IsXG4gXHRcdFx0XHRcdFx0IHJ4X3JldHJ5X3dvcmsud29yayk7XG4rXHRpbnQgcmM7XG4rXG4rXHQvKiBXZSBhcmUgb25seSBjYWxsZWQgd2hlbiByeCBjb21wbGV0aW9ucyBhcmUgc3VzcGVuZGVkICovXG4rXHRpZiAobWN0cF91c2ItXHUwMDNlY2xlYXJfaGFsdCkge1xuK1x0XHRpbnQgcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShtY3RwX3VzYi1cdTAwM2V1c2JkZXYsIG1jdHBfdXNiLVx1MDAzZWVwX2luKTtcbitcbitcdFx0cmMgPSB1c2JfY2xlYXJfaGFsdChtY3RwX3VzYi1cdTAwM2V1c2JkZXYsIHBpcGUpO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG1jdHBfdXNiLVx1MDAzZW5ldGRldixcbitcdFx0XHRcdCAgIFwiY2FuJ3QgY2xlYXIgSU4gRVAgaGFsdDogJWRcXG5cIiwgcmMpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRtY3RwX3VzYi1cdTAwM2VjbGVhcl9oYWx0ID0gZmFsc2U7XG4rXHR9XG4gXG4gXHRtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0tFUk5FTCk7XG4gfVxuQEAgLTI2Miw2ICsyNjksOCBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuIFx0V1JJVEVfT05DRShtY3RwX3VzYi1cdTAwM2VyeF9zdG9wcGVkLCBmYWxzZSk7XG4rXHRtY3RwX3VzYi1cdTAwM2VjbGVhcl9oYWx0ID0gZmFsc2U7XG4rXHRtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfY291bnQgPSAwO1xuIFxuIFx0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbiBcbkBAIC0yODQsNyArMjkzLDEwIEBAIHN0YXRpYyBpbnQgbWN0cF91c2Jfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X3JldHJ5X3dvcmspO1xuIFxuIFx0dXNiX2tpbGxfdXJiKG1jdHBfdXNiLVx1MDAzZXJ4X3VyYik7XG4tXHR1c2Jfa2lsbF91cmIobWN0cF91c2ItXHUwMDNldHhfdXJiKTtcbitcbitcdHVzYl9raWxsX2FuY2hvcmVkX3VyYnMoXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfYW5jaG9yKTtcbitcbitcdG1jdHBfdXNibGliX3R4X2NhbmNlbChcdTAwMjZtY3RwX3VzYi1cdTAwM2V0eCwgZGV2LCBTS0JfRFJPUF9SRUFTT05fREVWX1JFQURZKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMDEsNyArMzEzLDcgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRkZXYtXHUwMDNlbXR1ID0gTUNUUF9VU0JfTVRVX01JTjtcbiBcdGRldi1cdTAwM2VtaW5fbXR1ID0gTUNUUF9VU0JfTVRVX01JTjtcbi1cdGRldi1cdTAwM2VtYXhfbXR1ID0gTUNUUF9VU0JfTVRVX01BWDtcbitcdGRldi1cdTAwM2VtYXhfbXR1ID0gTUNUUF9VU0JfMV8wX01UVV9NQVg7XG4gXG4gXHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpO1xuIFx0ZGV2LVx1MDAzZXR4X3F1ZXVlX2xlbiA9IERFRkFVTFRfVFhfUVVFVUVfTEVOO1xuQEAgLTMxNyw2ICszMjksNyBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFx0c3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYztcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXHRzdHJ1Y3QgbWN0cF91c2IgKmRldjtcbitcdGJvb2wgc3BhbjtcbiBcdGludCByYztcbiBcbiBcdC8qIG9ubHkgb25lIGFsdGVybmF0ZSAqL1xuQEAgLTMyOCw2ICszNDEsOCBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFx0XHRyZXR1cm4gcmM7XG4gXHR9XG4gXG4rXHRzcGFuID0gaWZhY2VfZGVzYy1cdTAwM2VkZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBNQ1RQX1VTQl9TVUJDTEFTU19TUEFOO1xuK1xuIFx0bmV0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqZGV2KSwgXCJtY3RwdXNiJWRcIiwgTkVUX05BTUVfRU5VTSxcbiBcdFx0XHQgICAgICBtY3RwX3VzYl9uZXRkZXZfc2V0dXApO1xuIFx0aWYgKCFuZXRkZXYpXG5AQCAtMzM1LDMzICszNTAsNDMgQEAgc3RhdGljIGludCBtY3RwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcbiBcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgXHUwMDI2aW50Zi1cdTAwM2VkZXYpO1xuIFx0ZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdGRldi1cdTAwM2VzcGFuID0gc3BhbjtcbiBcdGRldi1cdTAwM2VuZXRkZXYgPSBuZXRkZXY7XG4gXHRkZXYtXHUwMDNldXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcbiBcdGRldi1cdTAwM2VpbnRmID0gaW50ZjtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRldi1cdTAwM2VyeF9sb2NrKTtcbitcdGlmIChkZXYtXHUwMDNlc3BhbilcbitcdFx0bmV0ZGV2LVx1MDAzZW1heF9tdHUgPSBNQ1RQX1VTQl8xXzFfTVRVX01BWDtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRldi1cdTAwM2V0eF9xbWVtX2xvY2spO1xuIFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpO1xuIFxuK1x0bWN0cF91c2JsaWJfcnhfaW5pdChcdTAwMjZkZXYtXHUwMDNlcngsIGxlMTZfdG9fY3B1KGVwX2luLVx1MDAzZXdNYXhQYWNrZXRTaXplKSxcbitcdFx0XHQgICAgZGV2LVx1MDAzZXNwYW4pO1xuK1x0bWN0cF91c2JsaWJfdHhfaW5pdChcdTAwMjZkZXYtXHUwMDNldHgsIFx1MDAyNnR4X29wcywgZGV2LCBkZXYtXHUwMDNlc3Bhbik7XG4rXHRpbml0X3VzYl9hbmNob3IoXHUwMDI2ZGV2LVx1MDAzZXR4X2FuY2hvcik7XG4rXG4gXHRkZXYtXHUwMDNlZXBfaW4gPSBlcF9pbi1cdTAwM2ViRW5kcG9pbnRBZGRyZXNzO1xuIFx0ZGV2LVx1MDAzZWVwX291dCA9IGVwX291dC1cdTAwM2ViRW5kcG9pbnRBZGRyZXNzO1xuIFxuLVx0ZGV2LVx1MDAzZXR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7XG4gXHRkZXYtXHUwMDNlcnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghZGV2LVx1MDAzZXR4X3VyYiB8fCAhZGV2LVx1MDAzZXJ4X3VyYikge1xuK1x0aWYgKCFkZXYtXHUwMDNlcnhfdXJiKSB7XG4gXHRcdHJjID0gLUVOT01FTTtcbi1cdFx0Z290byBlcnJfZnJlZV91cmJzO1xuK1x0XHRnb3RvIGVycl9maW5pX3J4dHg7XG4gXHR9XG4gXG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZkZXYtXHUwMDNlcnhfcmV0cnlfd29yaywgbWN0cF91c2JfcnhfcmV0cnlfd29yayk7XG4gXG4gXHRyYyA9IG1jdHBfcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldiwgTlVMTCwgTUNUUF9QSFlTX0JJTkRJTkdfVVNCKTtcbiBcdGlmIChyYylcbi1cdFx0Z290byBlcnJfZnJlZV91cmJzO1xuK1x0XHRnb3RvIGVycl9mcmVlX3VyYjtcbiBcbiBcdHJldHVybiAwO1xuIFxuLWVycl9mcmVlX3VyYnM6XG4tXHR1c2JfZnJlZV91cmIoZGV2LVx1MDAzZXR4X3VyYik7XG4rZXJyX2ZyZWVfdXJiOlxuIFx0dXNiX2ZyZWVfdXJiKGRldi1cdTAwM2VyeF91cmIpO1xuK2Vycl9maW5pX3J4dHg6XG4rXHRtY3RwX3VzYmxpYl90eF9maW5pKFx1MDAyNmRldi1cdTAwM2V0eCk7XG4rXHRtY3RwX3VzYmxpYl9yeF9maW5pKFx1MDAyNmRldi1cdTAwM2VyeCk7XG4gXHRmcmVlX25ldGRldihuZXRkZXYpO1xuIFx0cmV0dXJuIHJjO1xuIH1cbkBAIC0zNzEsMTMgKzM5NiwxNSBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFx0c3RydWN0IG1jdHBfdXNiICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuIFxuIFx0bWN0cF91bnJlZ2lzdGVyX25ldGRldihkZXYtXHUwMDNlbmV0ZGV2KTtcbi1cdHVzYl9mcmVlX3VyYihkZXYtXHUwMDNldHhfdXJiKTtcbitcdG1jdHBfdXNibGliX3J4X2ZpbmkoXHUwMDI2ZGV2LVx1MDAzZXJ4KTtcbitcdG1jdHBfdXNibGliX3R4X2ZpbmkoXHUwMDI2ZGV2LVx1MDAzZXR4KTtcbiBcdHVzYl9mcmVlX3VyYihkZXYtXHUwMDNlcnhfdXJiKTtcbiBcdGZyZWVfbmV0ZGV2KGRldi1cdTAwM2VuZXRkZXYpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgbWN0cF91c2JfZGV2aWNlc1tdID0ge1xuLVx0eyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01DVFAsIDB4MCwgMHgxKSB9LFxuK1x0eyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01DVFAsIE1DVFBfVVNCX1NVQkNMQVNTX0JBU0UsIDB4MSkgfSxcbitcdHsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQ1RQLCBNQ1RQX1VTQl9TVUJDTEFTU19TUEFOLCAweDEpIH0sXG4gXHR7IDAgfSxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmEyMmJlOTk5ZmEwYTFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jXG5AQCAtMCwwICsxLDQxMCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBtY3RwLXVzYmxpYi10ZXN0LmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBoZWxwZXIgbGlicmFyeSxcbisgKiB1bml0IHRlc3QgZGVmaW5pdGlvbnMuXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZFxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2t1bml0L3Rlc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L21jdHAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9tY3RwZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IvbWN0cC11c2IuaFx1MDAzZVxuK1xuK3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiB7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbitcdHN0cnVjdCBtY3RwX2RldiAqbWRldjtcbitcdHN0cnVjdCBza19idWZmX2hlYWQgcnhfcGt0cztcbit9O1xuK1xuK3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCB7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcbitcdHN0cnVjdCBtY3RwX3JvdXRlIHJ0O1xuK307XG4rXG4rc3RhdGljIG5ldGRldl90eF90IG1jdHBfdXNibGliX2Rldl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0Lyogd2UgZG9uJ3QgdHJhY2sgYW55IFRYZWQgcGFja2V0cyBhdCBwcmVzZW50ICovXG4rXHRrZnJlZV9za2Ioc2tiKTtcbitcdHJldHVybiBORVRERVZfVFhfT0s7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWN0cF90ZXN0X25ldGRldl9vcHMgPSB7XG4rXHQubmRvX3N0YXJ0X3htaXQgPSBtY3RwX3VzYmxpYl9kZXZfdHgsXG4rfTtcbitcbitzdGF0aWMgY29uc3QgdTE2IGVwX21heHBhY2tldCA9IDUxMjtcbitzdGF0aWMgY29uc3QgbWN0cF9laWRfdCBsb2NhbF9laWQgPSA4O1xuK1xuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRuZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfTUNUUDtcbitcdG5kZXYtXHUwMDNlbXR1ID0gODE5MjtcbitcdG5kZXYtXHUwMDNlZmxhZ3MgPSBJRkZfTk9BUlA7XG4rXHRuZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZtY3RwX3Rlc3RfbmV0ZGV2X29wcztcbitcdG5kZXYtXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO1xuK1x0bmRldi1cdTAwM2VwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfRFNUQVRTO1xuK31cbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2Rldl9hY3Rpb24odm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldiA9IGRhdGE7XG4rXG4rXHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2ZGV2LVx1MDAzZXJ4X3BrdHMpO1xuK1x0aWYgKGRldi1cdTAwM2VtZGV2KVxuK1x0XHRtY3RwX2Rldl9wdXQoZGV2LVx1MDAzZW1kZXYpO1xuK1x0dW5yZWdpc3Rlcl9uZXRkZXYoZGV2LVx1MDAzZW5kZXYpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpcbittY3RwX3VzYmxpYl90ZXN0X2NyZWF0ZV9kZXYoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4rXHRpbnQgcmM7XG4rXG4rXHRuZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqZGV2KSwgXCJtY3RwdGVzdCVkXCIsIE5FVF9OQU1FX0VOVU0sXG4rXHRcdFx0ICAgIG1jdHBfdXNibGliX2Rldl9zZXR1cCk7XG4rXHRpZiAoIW5kZXYpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0ZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRkZXYtXHUwMDNlbmRldiA9IG5kZXY7XG4rXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmRldi1cdTAwM2VyeF9wa3RzKTtcbitcbitcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBtY3RwX3VzYmxpYl90ZXN0X2Rldl9hY3Rpb24sIGRldik7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZGV2LVx1MDAzZW1kZXYgPSBfX21jdHBfZGV2X2dldChuZGV2KTtcbitcdGlmIChkZXYtXHUwMDNlbWRldilcbitcdFx0ZGV2LVx1MDAzZW1kZXYtXHUwMDNlbmV0ID0gbWN0cF9kZWZhdWx0X25ldChkZXZfbmV0KG5kZXYpKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlbWRldilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdHJjID0gZGV2X29wZW4obmRldiwgTlVMTCk7XG4rXHRydG5sX3VubG9jaygpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiBkZXY7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0KHN0cnVjdCBtY3RwX2RzdCAqZHN0LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihza2ItXHUwMDNlZGV2KTtcbitcbitcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmRldi1cdTAwM2VyeF9wa3RzLCBza2IpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZmluaV9hY3Rpb24odm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eCA9IGRhdGE7XG4rXG4rXHQvKiBUaGUgZGV2aWNlIHdpbGwgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gLVx1MDAzZXJ0IHdpbGwgYmUgdW5saW5rZWQuXG4rXHQgKiBKdXN0IGVuc3VyZSB0aGF0IHRoZSByZWZjb3VudCBpcyBhcyBleHBlY3RlZC5cbitcdCAqL1xuK1x0S1VOSVRfQVNTRVJUX1RSVUUoY3VycmVudC1cdTAwM2VrdW5pdF90ZXN0LFxuK1x0XHRcdCAgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2VydC5yZWZzKSk7XG4rXG4rXHRrZnJlZShjdHgpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICptY3RwX3VzYmxpYl90ZXN0X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xuK1x0c3RydWN0IG1jdHBfcm91dGUgKnJ0O1xuK1x0aW50IHJjO1xuK1xuK1x0Y3R4ID0ga3phbGxvY19vYmooKmN0eCk7XG4rXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgY3R4KTtcbitcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmN0eC1cdTAwM2VydC5saXN0KTtcbitcdHJ0ID0gXHUwMDI2Y3R4LVx1MDAzZXJ0O1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNnJ0LVx1MDAzZXJlZnMsIDEpO1xuK1xuK1x0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIG1jdHBfdXNibGliX3Rlc3RfZmluaV9hY3Rpb24sIGN0eCk7XG4rXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuK1xuK1x0Y3R4LVx1MDAzZWRldiA9IG1jdHBfdXNibGliX3Rlc3RfY3JlYXRlX2Rldih0ZXN0KTtcbitcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBjdHgtXHUwMDNlZGV2KTtcbitcbitcdHJ0LVx1MDAzZW1pbiA9IGxvY2FsX2VpZDtcbitcdHJ0LVx1MDAzZW1heCA9IGxvY2FsX2VpZDtcbitcdHJ0LVx1MDAzZWRzdF90eXBlID0gTUNUUF9ST1VURV9ESVJFQ1Q7XG4rXHRydC1cdTAwM2V0eXBlID0gUlROX0xPQ0FMO1xuK1x0cnQtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldi1cdTAwM2VtZGV2O1xuK1x0cnQtXHUwMDNlb3V0cHV0ID0gbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0O1xuK1xuK1x0cnRubF9sb2NrKCk7XG4rXHRsaXN0X2FkZF9yY3UoXHUwMDI2Y3R4LVx1MDAzZXJ0Lmxpc3QsIFx1MDAyNmluaXRfbmV0Lm1jdHAucm91dGVzKTtcbitcdHJlZmNvdW50X2luYyhcdTAwMjZydC1cdTAwM2VyZWZzKTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gY3R4O1xuK31cbitcbisvKiBJbml0IGEgTUNUUC1vdmVyLVVTQiBwYWNrZXQgd2l0aGluIGEgYnVmZmVyLiBAbGVuIGlzIHRoZSBsZW5ndGggb2YgdGhlXG4rICogYnVmZmVyIHRvIHdyaXRlLCBAcGF5bG9hZF9sZW4gaXMgdGhlIHJlcG9ydGVkIHNpemUgb2YgdGhlIE1DVFAtb3Zlci1VU0JcbisgKiBwYWNrZXQuXG4rICovXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdCh2b2lkICpkYXRhLCBzaXplX3QgbGVuLFxuK1x0XHRcdFx0ICAgICAgc2l6ZV90IHBheWxvYWRfbGVuKVxuK3tcbitcdHN0cnVjdCB7XG4rXHRcdHN0cnVjdCBtY3RwX3VzYl9oZHIgdXNiO1xuK1x0XHRzdHJ1Y3QgbWN0cF9oZHIgbWN0cDtcbitcdH0gaGRyO1xuK1xuK1x0aGRyLnVzYi5pZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xuK1x0aGRyLnVzYi5sZW4gPSBjcHVfdG9fYmUxNihwYXlsb2FkX2xlbik7XG4rXHRoZHIubWN0cC52ZXIgPSAxO1xuK1x0aGRyLm1jdHAuZGVzdCA9IGxvY2FsX2VpZDtcbitcdGhkci5tY3RwLnNyYyA9IDA7XG4rXHRoZHIubWN0cC5mbGFnc19zZXFfdGFnID0gMDtcbitcbitcdG1lbWNweShkYXRhLCBcdTAwMjZoZHIsIG1pbihsZW4sIHNpemVvZihoZHIpKSk7XG4rXHRpZiAobGVuIFx1MDAzZSBzaXplb2YoaGRyKSlcbitcdFx0bWVtc2V0KGRhdGEgKyBzaXplb2YoaGRyKSwgMCwgbGVuIC0gc2l6ZW9mKGhkcikpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhY3Rpb25fcnhfZmluaSh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcnggPSBkYXRhO1xuK1xuK1x0bWN0cF91c2JsaWJfcnhfZmluaShyeCk7XG4rXHRrZnJlZShyeCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKlxuK21jdHBfdXNibGliX3Rlc3RfcnhfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QsIGJvb2wgc3Bhbilcbit7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xuK1x0aW50IHJjO1xuK1xuK1x0cnggPSBremFsbG9jX29iaigqcngpO1xuK1x0aWYgKHJ4KSB7XG4rXHRcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBhY3Rpb25fcnhfZmluaSwgcngpO1xuK1x0XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuK1x0fVxuK1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJ4KTtcbitcdG1jdHBfdXNibGliX3J4X2luaXQocngsIGVwX21heHBhY2tldCwgc3Bhbik7XG4rXG4rXHRyZXR1cm4gcng7XG4rfVxuK1xuKy8qIFdyYXBwZXJzIGZvciB1c2JsaWIncyByeF9jb21wbGV0ZSBjYWxsYmFjaywgd2hpY2ggaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkXG4rICogZnJvbSBhdG9taWMgY29udGV4dFxuKyAqL1xuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCBzaXplX3QgbGVuKVxuK3tcbitcdGludCByYztcbitcbitcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdHJjID0gbWN0cF91c2JsaWJfcnhfY29tcGxldGUobmV0ZGV2LCByeCwgbGVuKTtcbitcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbisvKiBTaW5nbGUgcGFja2V0LCBzdGFydGluZyBvbiBhIHRyYW5zZmVyIGJvdW5kYXJ5LCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluXG4rICogdGhlIHRyYW5zZmVyXG4rICovXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHNpemVfdCBsZW47XG4rXHR2b2lkICpidWY7XG4rXHRpbnQgcmM7XG4rXG4rXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XG4rXHRkZXYgPSBjdHgtXHUwMDNlZGV2O1xuK1xuK1x0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XG4rXG4rXHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVx1MDAzZW5kZXYsIHJ4LFxuK1x0XHRcdFx0ICAgIFx1MDAyNmJ1ZiwgXHUwMDI2bGVuLCBHRlBfS0VSTkVMKTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXG4rXHQvKiB3ZSBzaG91bGQgYWx3YXlzIGhhdmUgYSBtYXhwYWNrZXQgb2YgdHJhbnNmZXIgYXZhaWxhYmxlICovXG4rXHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgbGVuLCBlcF9tYXhwYWNrZXQpO1xuK1xuK1x0bWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChidWYsIDgsIDgpO1xuK1xuK1x0cmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgOCk7XG4rXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuK1xuK1x0c2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4rXHRLVU5JVF9FWFBFQ1RfTk9UX05VTEwodGVzdCwgc2tiKTtcbitcdGlmIChza2IpXG4rXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXHUwMDNlbGVuLCA0KTtcbitcdGtmcmVlX3NrYihza2IpO1xuK31cbitcbitzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiB7XG4rXHRjb25zdCBjaGFyICpuYW1lO1xuK1x0c2l6ZV90IG5fcGt0cztcbitcdHNpemVfdCBwa3RzWzZdO1xuK1x0c2l6ZV90IG5feGZlcnM7XG4rXHRzaXplX3QgeGZlcnNbNl07XG4rfTtcbitcbitzdGF0aWMgdm9pZFxuK21jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdG9fZGVzYyhjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiAqdCxcbitcdFx0XHRcdCAgY2hhciAqZGVzYylcbit7XG4rXHRzdHJzY3B5KGRlc2MsIHQtXHUwMDNlbmFtZSwgS1VOSVRfUEFSQU1fREVTQ19TSVpFKTtcbit9XG4rXG4rc3RhdGljIHZvaWRcbittY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3ZhbGlkYXRlKHN0cnVjdCBrdW5pdCAqdGVzdCxcbitcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICpzcGFuLFxuK1x0XHRcdFx0ICAgc2l6ZV90ICpsZW4pXG4re1xuK1x0c2l6ZV90IHBrdF9sZW4gPSAwLCB4ZmVyX2xlbiA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwYW4tXHUwMDNlbl9wa3RzOyBpKyspIHtcbitcdFx0S1VOSVRfQVNTRVJUX0dFX01TRyh0ZXN0LCBzcGFuLVx1MDAzZXBrdHNbaV0sIDgsXG4rXHRcdFx0XHQgICAgXCJwa3RbJWRdIGxlbiB0b28gc21hbGwgKCV6ZCkgZm9yICVzXCIsXG4rXHRcdFx0XHQgICAgaSwgc3Bhbi1cdTAwM2Vwa3RzW2ldLCBzcGFuLVx1MDAzZW5hbWUpO1xuK1x0XHRwa3RfbGVuICs9IHNwYW4tXHUwMDNlcGt0c1tpXTtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwYW4tXHUwMDNlbl94ZmVyczsgaSsrKVxuK1x0XHR4ZmVyX2xlbiArPSBzcGFuLVx1MDAzZXhmZXJzW2ldO1xuK1xuK1x0S1VOSVRfQVNTRVJUX0VRX01TRyh0ZXN0LCBwa3RfbGVuLCB4ZmVyX2xlbixcbitcdFx0XHQgICAgXCJpbnZhbGlkIHBrdF9sZW4gKCV6ZCkgIT0geGZlcl9sZW4gKCV6ZCkgZm9yICVzXCIsXG4rXHRcdFx0ICAgIHBrdF9sZW4sIHhmZXJfbGVuLCBzcGFuLVx1MDAzZW5hbWUpO1xuK1xuK1x0KmxlbiA9IHBrdF9sZW47XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4oc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICpwa3Rfc3BhbiA9IHRlc3QtXHUwMDNlcGFyYW1fdmFsdWU7XG4rXHRzaXplX3QgbGVuLCB4ZmVyX2xlbiwgb2ZmLCB4ZmVyX29mZjtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXHR1OCAqcGt0YnVmO1xuK1x0dm9pZCAqYnVmO1xuK1x0aW50IHJjO1xuK1xuK1x0bWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl92YWxpZGF0ZSh0ZXN0LCBwa3Rfc3BhbiwgXHUwMDI2bGVuKTtcbitcdHBrdGJ1ZiA9IGt1bml0X2ttYWxsb2NfYXJyYXkodGVzdCwgMSwgbGVuLCBHRlBfS0VSTkVMKTtcbitcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBwa3RidWYpO1xuK1xuK1x0LyogbGF5IG91dCBwYWNrZXRzICovXG4rXHRmb3IgKG9mZiA9IDAsIGkgPSAwOyBpIFx1MDAzYyBwa3Rfc3Bhbi1cdTAwM2VuX3BrdHM7IGkrKykge1xuK1x0XHRsZW4gPSBwa3Rfc3Bhbi1cdTAwM2Vwa3RzW2ldO1xuK1x0XHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiArIG9mZiwgbGVuLCBsZW4pO1xuK1x0XHRvZmYgKz0gbGVuO1xuK1x0fVxuK1xuK1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuK1x0ZGV2ID0gY3R4LVx1MDAzZWRldjtcbitcbitcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xuK1xuK1x0LyogZmVlZCB0cmFuc2ZlcnMgKi9cbitcdGZvciAob2ZmID0gMCwgeGZlcl9vZmYgPSAwLCBpID0gMDsgaSBcdTAwM2MgcGt0X3NwYW4tXHUwMDNlbl94ZmVyczspIHtcbitcdFx0eGZlcl9sZW4gPSBwa3Rfc3Bhbi1cdTAwM2V4ZmVyc1tpXSAtIHhmZXJfb2ZmO1xuK1x0XHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVx1MDAzZW5kZXYsIHJ4LFxuK1x0XHRcdFx0XHQgICAgXHUwMDI2YnVmLCBcdTAwMjZsZW4sIEdGUF9LRVJORUwpO1xuK1x0XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuK1xuK1x0XHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgbGVuLCBlcF9tYXhwYWNrZXQpO1xuK1xuK1x0XHRsZW4gPSBtaW4obGVuLCB4ZmVyX2xlbik7XG4rXHRcdG1lbWNweShidWYsIHBrdGJ1ZiArIG9mZiwgbGVuKTtcbitcbitcdFx0aWYgKGxlbiA9PSB4ZmVyX2xlbikge1xuK1x0XHRcdC8qIHdob2xlL2VuZCB4ZmVyLCBwcm9jZWVkIHRvIG5leHQgKi9cbitcdFx0XHR4ZmVyX29mZiA9IDA7XG4rXHRcdFx0aSsrO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdC8qIHBhcnRpYWwgKi9cbitcdFx0XHR4ZmVyX29mZiArPSBsZW47XG4rXHRcdH1cbitcbitcdFx0cmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgbGVuKTtcbitcdFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbitcdFx0b2ZmICs9IGxlbjtcbitcdH1cbitcbitcdC8qIGNoZWNrIHJlY2VpdmVkIHBhY2tldHMgKi9cbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtXHUwMDNlcnhfcGt0cy5xbGVuLCBwa3Rfc3Bhbi1cdTAwM2VuX3BrdHMpO1xuK1x0Zm9yIChpID0gMDsgOyBpKyspIHtcbitcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2ZGV2LVx1MDAzZXJ4X3BrdHMpO1xuK1xuK1x0XHRpZiAoIXNrYilcbitcdFx0XHRicmVhaztcbitcbitcdFx0aWYgKGkgXHUwMDNjIHBrdF9zcGFuLVx1MDAzZW5fcGt0cylcbitcdFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2tiLVx1MDAzZWxlbiwgcGt0X3NwYW4tXHUwMDNlcGt0c1tpXSAtIDQpO1xuK1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuIG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5zW10gPSB7XG4rXHQvKiBPbmUgcGFja2V0IGNvbXBsZXRlbHkgd2l0aGluIGEgdHJhbnNmZXIgKi9cbitcdHsgXCIxcDF4LWNvbXBsZXRlXCIsIDEsIHsgOCB9LCAxLCB7IDggfSB9LFxuK1x0LyogVHdvIHNtYWxsIHBhY2tldHMgY29tYmluZWQgd2l0aGluIG9uZSB0cmFuc2ZlciAqL1xuK1x0eyBcIjJwMXgtY29tYmluZWRcIiwgMiwgeyA4LCA4IH0sIDEsIHsgMTYgfSB9LFxuK1x0LyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgTUNUUCBwYXlsb2FkICovXG4rXHR7IFwiMXAyeC1zcGxpdC1wYXlsb2FkXCIsIDEsIHsgMTYgfSwgMiwgeyA4LCA4IH0gfSxcbitcdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIFVTQiB0cmFuc3BvcnQgaGVhZGVyICovXG4rXHR7IFwiMXAyeC1zcGxpdC11c2JoZHJcIiwgMSwgeyAxNiB9LCAyLCB7IDIsIDE0IH0gfSxcbitcdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIE1DVFAgaGVhZGVyICovXG4rXHR7IFwiMXAyeC1zcGxpdC1tY3RwaGRyXCIsIDEsIHsgMTYgfSwgMiwgeyA2LCAxMCB9IH0sXG4rXHQvKiBTaW5nbGUgcGFja2V0IHNwbGl0IG92ZXIgMyB0cmFuc2ZlcnMsIG1pZGRsZSBlbnRpcmVseSBjb250aW51YXRpb24gKi9cbitcdHsgXCIxcDN4LXNwbGl0XCIsIDEsIHsgMTIgfSwgMywgeyA0LCA0LCA0IH0gfSxcbitcdC8qIE1heC1zaXplZCBzaW5nbGUgdHJhbnNmZXIgKi9cbitcdHsgXCIxcDF4LWxhcmdlXCIsIDEsIHsgODE5MSB9LCAxLCB7IDgxOTEgfSB9LFxuK1x0LyogVHdvIGxhcmdlIHBhY2tldHMsIHNwbGl0IGF0IHRoZSB3b3JzdC1jYXNlIGZvciBhbGxvY2F0aW9uLCB3aXRoIGFcbitcdCAqIHNpbmdsZSBieXRlIGNvbnRpbnVpbmcgdGhlIHNwYW5cbitcdCAqL1xuK1x0eyBcIjJwMngtbGFyZ2Utc3BsaXRcIiwgMiwgeyA4MTkwLCA4MTkwIH0sIDIsIHsgODE5MSwgODE4OSB9IH0sXG4rfTtcbitcbitLVU5JVF9BUlJBWV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFucyxcbitcdFx0ICBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3RvX2Rlc2MpO1xuK1xuK3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzW10gPSB7XG4rXHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3Rfcnhfc2luZ2xlKSxcbitcdEtVTklUX0NBU0VfUEFSQU0obWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3BhbixcbitcdFx0XHQgbWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3Bhbl9nZW5fcGFyYW1zKSxcbitcdHt9XG4rfTtcbitcbitzdGF0aWMgc3RydWN0IGt1bml0X3N1aXRlIG1jdHBfdXNibGliX3Rlc3Rfc3VpdGUgPSB7XG4rXHQubmFtZSA9IFwibWN0cC11c2JsaWJcIixcbitcdC50ZXN0X2Nhc2VzID0gbWN0cF91c2JsaWJfdGVzdF9jYXNlcyxcbit9O1xuK1xuK2t1bml0X3Rlc3Rfc3VpdGUobWN0cF91c2JsaWJfdGVzdF9zdWl0ZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZjMDI4MjE1MmU2ZWZiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmNcbkBAIC0wLDAgKzEsNjE2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIG1jdHAtdXNibGliLmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBoZWxwZXIgbGlicmFyeVxuKyAqXG4rICogRFNQMDI4MyBpcyBhdmFpbGFibGUgYXQ6XG4rICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4xLjAucGRmXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL21jdHAtdXNiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvbWN0cC5oXHUwMDNlXG4rXG4rdm9pZCBtY3RwX3VzYmxpYl9yeF9pbml0KHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHUxNiBlcF9wa3RsZW4sIGJvb2wgc3Bhbilcbit7XG4rXHRtZW1zZXQocngsIDAsIHNpemVvZigqcngpKTtcbitcdHJ4LVx1MDAzZXNwYW4gPSBzcGFuO1xuK1x0cngtXHUwMDNlZXBfcGt0bGVuID0gZXBfcGt0bGVuO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9pbml0KTtcbitcbit2b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcbit7XG4rXHRrZnJlZV9za2IocngtXHUwMDNlc2tiKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfZmluaSk7XG4rXG4rLypcbisgKiBQcmVwYXJlIGEgdHJhbnNmZXIgYnVmZmVyIGZvciBmdXR1cmUgY29tcGxldGlvbjsgKmJ1ZnAgYW5kICpsZW5wIHdpbGxcbisgKiBiZSBwb3B1bGF0ZWQgb24gc3VjY2Vzcy5cbisgKi9cbitpbnQgbWN0cF91c2JsaWJfcnhfcHJlcGFyZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdCAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsXG4rXHRcdFx0ICAgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqbGVucCwgZ2ZwX3QgZ2ZwKVxuK3tcbitcdHN0cnVjdCBza19idWZmICpza2IgPSByeC1cdTAwM2Vza2I7XG4rXHR1bnNpZ25lZCBpbnQgbGVuID0gMDtcbitcbitcdGlmIChza2IgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VsZW4gXHUwMDNlPSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCkge1xuK1x0XHQvKiBzb21ldGhpbmcgbXVzdCBoYXZlIGdvbmUgdGVycmlibHkgd3JvbmcuIGNsZWFyIGFuZCByZXN0YXJ0ICovXG4rXHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChyeCk7XG4rXHRcdHNrYiA9IE5VTEw7XG4rXHR9XG4rXG4rXHRsZW4gPSByeC1cdTAwM2VzcGFuID8gQUxJR04oTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgsIHJ4LVx1MDAzZWVwX3BrdGxlbilcbitcdFx0OiBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFO1xuK1xuK1x0aWYgKCFza2IpIHtcbitcdFx0c2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwgbGVuLCBnZnApO1xuK1x0XHRpZiAoIXNrYilcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdH0gZWxzZSBpZiAoc2tiLVx1MDAzZWNsb25lZCB8fCBza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgcngtXHUwMDNlZXBfcGt0bGVuKSB7XG4rXHRcdC8qIFdlIGFsd2F5cyBuZWVkIHRvIHJlYWxsb2MgaWYgLVx1MDAzZWNsb25lZCwgYXMgd2UgY2Fubm90XG4rXHRcdCAqIHJlc3VibWl0IHRoZSAobm93LXNoYXJlZCkgc2tiIGJ1ZmZlciBmb3IgcG9zc2libGUgRE1BLlxuK1x0XHQgKlxuK1x0XHQgKiBPdGhlcndpc2UgKGlmIHdlIGhhdmUgYW4gdW4tY2xvbmVkIFNLQik6IGp1c3QgZW5zdXJlIHdlXG4rXHRcdCAqIGhhdmUgc3VmZmljaWVudCBzcGFjZSB0byBwcmV2ZW50IGJhYmJsZS4gU2luY2Ugd2UgYWxsb2NhdGVkXG4rXHRcdCAqIGZvciBtYXggc2l6ZSBpbiB0aGUgbGFzdCBwcmVwYXJlIChhbmQgaGF2ZSBub3QgY29uc3VtZWQgYW55XG4rXHRcdCAqIG9mIHRoYXQgc3BhY2UgZm9yIGEgcHJpb3IgTUNUUCBwYWNrZXQsIGJlY2F1c2UgIWNsb25lZCksIHdlXG4rXHRcdCAqIGhhdmUgc3VmZmljaWVudCBkYXRhIHRvIGZpbmlzaCB0aGUgY3VycmVudCBNQ1RQIHBhY2tldC5cbitcdFx0ICovXG4rXHRcdHN0cnVjdCBza19idWZmICpza2IyO1xuK1xuK1x0XHRza2IyID0gc2tiX2NvcHlfZXhwYW5kKHNrYiwgMCwgbGVuLCBnZnApO1xuK1x0XHRpZiAoIXNrYjIpXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4rXHRcdHNrYiA9IHNrYjI7XG4rXHR9XG4rXG4rXHRyeC1cdTAwM2Vza2IgPSBza2I7XG4rXG4rXHQvKiBTcGFubmluZyBtb2RlIGFsbG93cyBaTFBzLCBzbyB3ZSBkb24ndCByZXF1aXJlIGV4YWN0bHkgb25lXG4rXHQgKiB0cmFuc2ZlciBwYWNrZXQuIElmIHdlIGhhdmUgZXh0cmEgdGFpbHJvb20sIG1heSBhcyB3ZWxsIHVzZSBpdCxcbitcdCAqIGFuZCB3ZSBoYXZlIGVuc3VyZWQgdGhhdCB0aGUgdGFpbHJvb20gXHUwMDNlPSBlcF9wa3RsZW4uXG4rXHQgKi9cbitcdGlmIChyeC1cdTAwM2VzcGFuKVxuK1x0XHRsZW4gPSBBTElHTl9ET1dOKHNrYl90YWlscm9vbShza2IpLCByeC1cdTAwM2VlcF9wa3RsZW4pO1xuK1xuK1x0KmJ1ZnAgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7XG4rXHQqbGVucCA9IGxlbjtcbitcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKTtcbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gdGhpc19jcHVfcHRyKG5ldGRldi1cdTAwM2Vkc3RhdHMpO1xuK1x0c3RydWN0IG1jdHBfc2tiX2NiICpjYjtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuK1x0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpO1xuK1xuK1x0Lyogd2UncmUgY2FsbGVkIGZyb20gYW4gVVJCIGNvbXBsZXRpb24gaGFuZGxlciwgYW5kIGNhbm5vdCBhc3N1bWUgbG9jYWxcbitcdCAqIGlycXMgYXJlIGFsd2F5cyBkaXNhYmxlZFxuK1x0ICovXG4rXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuK1x0dTY0X3N0YXRzX2luYyhcdTAwMjZkc3RhdHMtXHUwMDNlcnhfcGFja2V0cyk7XG4rXHR1NjRfc3RhdHNfYWRkKFx1MDAyNmRzdGF0cy1cdTAwM2VyeF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuK1xuK1x0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7XG4rXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbitcdGNiID0gX19tY3RwX2NiKHNrYik7XG4rXHRjYi1cdTAwM2VoYWxlbiA9IDA7XG4rXHRuZXRpZl9yeChza2IpO1xuK31cbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2Vkc3RhdHMpO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCk7XG4rXHR1NjRfc3RhdHNfaW5jKFx1MDAyNmRzdGF0cy1cdTAwM2VyeF9kcm9wcyk7XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuK31cbitcbisvKlxuKyAqIFJlY2VpdmUgYSBVU0IgY29tcGxldGlvbiBvZiBAbGVuIGJ5dGVzIG9mIGluY29taW5nIGRhdGEuIFdlIHdpbGwgdGhlbiBzcGxpdFxuKyAqIHRoaXMgaW50byBwYWNrZXRzIGFuZCBuZXRpZl9yeCgpIGVhY2guIEludGVuZGVkIHRvIGJlIGNhbGxlZCBpbiBhdG9taWNcbisgKiBjb250ZXh0cyAtIGllLiwgVVJCIGNvbXBsZXRpb24uXG4rICpcbisgKiBBc3N1bWVzIEBuZXRkZXYgdXNlcyBkc3RhdHMuXG4rICovXG4raW50IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LVx1MDAzZXNrYjtcbitcdGludCByYyA9IDA7XG4rXG4rXHRfX3NrYl9wdXQoc2tiLCBsZW4pO1xuK1xuK1x0Zm9yICg7Oykge1xuK1x0XHRzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7XG4rXHRcdHN0cnVjdCBza19idWZmICpza2IyO1xuK1x0XHQvKiBsZW5ndGggb2YgTUNUUCBwYWNrZXQsIGluY2x1ZGluZyBVU0IgaGVhZGVyICovXG4rXHRcdHUxNiBwa3RfbGVuO1xuK1xuK1x0XHQvKiBubyBoZWFkZXIgeWV0LCByZXN1Ym1pdCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHBhY2tldCAqL1xuK1x0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKCpoZHIpKSB7XG4rXHRcdFx0aWYgKCFyeC1cdTAwM2VzcGFuKSB7XG4rXHRcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbitcdFx0XHRcdFx0ICAgXCJyeDogdGlueSB4ZmVyICglZCkgaW4gbm9uLXNwYW4gbW9kZVwiLFxuK1x0XHRcdFx0XHQgICBza2ItXHUwMDNlbGVuKTtcbitcdFx0XHRcdHJjID0gLUVOT01TRztcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc2V0O1xuK1x0XHRcdH1cbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHRoZHIgPSAoc3RydWN0IG1jdHBfdXNiX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuK1xuK1x0XHRpZiAoYmUxNl90b19jcHUoaGRyLVx1MDAzZWlkKSAhPSBNQ1RQX1VTQl9ETVRGX0lEKSB7XG4rXHRcdFx0LyogQnkgcmVzZXR0aW5nIGhlcmUsIHdpbGwgc3RhcnQgdGhlIG5leHQgSU4gdHJhbnNmZXJcbitcdFx0XHQgKiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgc2tiLiBUaGlzIHdpbGwgbWVhblxuK1x0XHRcdCAqIHdlIHJlLXN5bmMgd2hlbiB3ZSBuZXh0IHNlZSBhIHNwYW5uZWQgcGFja2V0IGFsaWduZWRcbitcdFx0XHQgKiB3aXRoIHRoZSBzdGFydCBvZiBhIHRyYW5zZmVyLlxuK1x0XHRcdCAqXG4rXHRcdFx0ICogSW4gbm9uLXNwYW5uaW5nIG1vZGUsIHRoaXMganVzdCBtZWFucyB3ZSdsbCBkcm9wXG4rXHRcdFx0ICogdGhlIGN1cnJlbnQgdHJhbnNmZXIgb25seVxuK1x0XHRcdCAqL1xuK1x0XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcInJ4OiBpbnZhbGlkIGlkICUwNHhcXG5cIixcbitcdFx0XHRcdCAgIGJlMTZfdG9fY3B1KGhkci1cdTAwM2VpZCkpO1xuK1x0XHRcdHJjID0gLUVQUk9UTztcbitcdFx0XHRnb3RvIGVycl9yZXNldDtcbitcdFx0fVxuK1xuK1x0XHRwa3RfbGVuID0gYmUxNl90b19jcHUoaGRyLVx1MDAzZWxlbik7XG4rXHRcdC8qIHYxLjEsIHdpdGggc3BhbiBlbmFibGVkLCBoYXMgYSAxMy1iaXQgbGVuZ3RoICovXG4rXHRcdHBrdF9sZW4gXHUwMDI2PSByeC1cdTAwM2VzcGFuID9cbitcdFx0XHRNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYO1xuK1x0XHRpZiAocGt0X2xlbiBcdTAwM2Mgc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKHN0cnVjdCBtY3RwX2hkcikpIHtcbitcdFx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCJyeDogaW52YWxpZCBsZW4gJWRcXG5cIiwgcGt0X2xlbik7XG4rXHRcdFx0cmMgPSAtRVBST1RPO1xuK1x0XHRcdGdvdG8gZXJyX3Jlc2V0O1xuK1x0XHR9XG4rXG4rXHRcdC8qIHNwYW4gY29udGludWVzIHRvIHRoZSBuZXh0IHRyYW5zZmVyLCByZXN1Ym1pdCAqL1xuK1x0XHRpZiAocGt0X2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbikge1xuK1x0XHRcdGlmICghcngtXHUwMDNlc3Bhbikge1xuK1x0XHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4rXHRcdFx0XHRcdCAgIFwicng6IHNob3J0IHhmZXIgKCVkIHZzICVkKSBpbiBub24tc3BhbiBtb2RlXCIsXG4rXHRcdFx0XHRcdCAgIHBrdF9sZW4sIHNrYi1cdTAwM2VsZW4pO1xuK1x0XHRcdFx0cmMgPSAtRU5PTVNHO1xuK1x0XHRcdFx0Z290byBlcnJfcmVzZXQ7XG4rXHRcdFx0fVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdC8qIHdlIGhhdmUgKGV4YWN0bHkpIGEgY29tcGxldGUgcGFja2V0LCBSWCBpdCBkaXJlY3RseSAqL1xuK1x0XHRpZiAocGt0X2xlbiA9PSBza2ItXHUwMDNlbGVuKSB7XG4rXHRcdFx0bWN0cF91c2JsaWJfcngobmV0ZGV2LCBza2IpO1xuK1x0XHRcdHJ4LVx1MDAzZXNrYiA9IE5VTEw7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0LyogbW9yZSBwYWNrZXRzIGZvbGxvdyAtIFJYIGEgY2xvbmUgc28gdGhhdCB3ZSBjYW4gY29udGludWVcbitcdFx0ICogcHJvY2Vzc2luZyB0aGUgY3VycmVudCBTS0IsIHdoaWNoIG1heSBiZSB0aGUgc3RhcnQgb2YgYVxuK1x0XHQgKiBzcGFuLlxuK1x0XHQgKi9cbitcdFx0c2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuK1x0XHRpZiAoc2tiMikge1xuK1x0XHRcdHNrYl90cmltKHNrYjIsIHBrdF9sZW4pO1xuK1x0XHRcdG1jdHBfdXNibGliX3J4KG5ldGRldiwgc2tiMik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0bWN0cF91c2JsaWJfcnhfc3RhdHNfc2luZ2xlX2Ryb3AobmV0ZGV2KTtcbitcdFx0fVxuK1x0XHRza2JfcHVsbChza2IsIHBrdF9sZW4pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3Jlc2V0OlxuK1x0ZGV2X2tmcmVlX3NrYl9hbnkocngtXHUwMDNlc2tiKTtcbitcdHJ4LVx1MDAzZXNrYiA9IE5VTEw7XG4rXHRyZXR1cm4gcmM7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKTtcbitcbisvKlxuKyAqIENhbmNlbCBhIHJ4IGNvbnRleHQ7IHN1YnNlcXVlbnQgcHJlcGFyZS9jb21wbGV0ZSBjYWxscyB3aWxsIG5vdCBiZSBhXG4rICogY29udGludWF0aW9uIG9mIGFueSBkYXRhIGFscmVhZHkgcmVjZWl2ZWQuXG4rICovXG4rdm9pZCBtY3RwX3VzYmxpYl9yeF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcbit7XG4rXHRkZXZfa2ZyZWVfc2tiX2FueShyeC1cdTAwM2Vza2IpO1xuK1x0cngtXHUwMDNlc2tiID0gTlVMTDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfY2FuY2VsKTtcbitcbisvKiB0cmFuc21pdCBjb250ZXh0OiBlbmNhcHN1bGF0ZXMgb25lIHRyYW5zZmVyICovXG4rc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCB7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4O1xuK1x0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2JzO1xuK1x0dW5zaWduZWQgaW50IGJ1Zl9sZW4sIGxlbjtcbitcdGVudW0gbWN0cF91c2JsaWJfdHhfYnVmX3R5cGUge1xuK1x0XHRUWF9TSU5HTEUsXG4rXHRcdFRYX0ZMQVQsXG4rXHR9IGJ1Zl90eXBlO1xuK1x0dTggYnVmW10gX19fX2NhY2hlbGluZV9hbGlnbmVkO1xuK307XG4rXG4rdm9pZCBtY3RwX3VzYmxpYl90eF9pbml0KHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsXG4rXHRcdFx0IGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgKm9wcyxcbitcdFx0XHQgdm9pZCAqcHJpdiwgYm9vbCBzcGFuKVxuK3tcbitcdG1lbXNldCh0eCwgMCwgc2l6ZW9mKCp0eCkpO1xuK1x0dHgtXHUwMDNlb3BzID0gKm9wcztcbitcdHR4LVx1MDAzZXByaXYgPSBwcml2O1xuK1x0dHgtXHUwMDNlc3BhbiA9IHNwYW47XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0eC1cdTAwM2Vsb2NrKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfaW5pdCk7XG4rXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90eF9hdmFpbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgpXG4re1xuK1x0cmV0dXJuIGN0eC1cdTAwM2VidWZfdHlwZSA9PSBUWF9TSU5HTEUgPyAwIDogY3R4LVx1MDAzZWJ1Zl9sZW4gLSBjdHgtXHUwMDNlbGVuO1xuK31cbitcbitzdGF0aWMgYm9vbCBtY3RwX3VzYmxpYl90eF9zaG91bGRfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgpXG4re1xuK1x0LyogVXNlIHRoZSBiYXNlbGluZSBsZW5ndGggKGllLCBCVFUpIGFzIGFuIGFwcHJveGltYXRlXG4rXHQgKiBcInJlYXNvbmFibHktc2l6ZWRcIiBwYWNrZXQgd2UgY291bGQgZXhwZWN0LiBJZiB0aGVyZSBpc1xuK1x0ICogaW5zdWZmaWNpZW50IGNhcGFjaXR5IGZvciB0aGF0LCB0aGVuIHNlbmQuXG4rXHQgKi9cbitcdGNvbnN0IHNpemVfdCBwa3RfbGVuID0gTUNUUF9VU0JfQlRVICsgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpO1xuK1xuK1x0cmV0dXJuIG1jdHBfdXNibGliX3R4X2F2YWlsKGN0eCkgXHUwMDNjIHBrdF9sZW47XG4rfVxuK1xuKy8qXG4rICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUgLSBpbmRpY2F0aW5nIHRoYXQgdGhlIG5ldyBza2JcbisgKiBjb3VsZCBub3QgYmUgYXBwZW5kZWQuIFNvLCBlcnJvcnMgcmVwb3J0ZWQgaGVyZSB0byB0aGUgVFggcGF0aCB3aWxsIHJlc3VsdFxuKyAqIGluIHRoZSBUWCBiZWluZyB0cmFuc21pdHRlZC5cbisgKi9cbitzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X2FwcGVuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsXG4rXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRpZiAoY3R4LVx1MDAzZWJ1Zl90eXBlID09IFRYX1NJTkdMRSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAobWN0cF91c2JsaWJfdHhfYXZhaWwoY3R4KSBcdTAwM2Mgc2tiLVx1MDAzZWxlbilcbitcdFx0cmV0dXJuIC1FTk9CVUZTO1xuK1xuK1x0X19za2JfcXVldWVfdGFpbChcdTAwMjZjdHgtXHUwMDNlc2ticywgc2tiKTtcbitcbitcdGN0eC1cdTAwM2VsZW4gKz0gc2tiLVx1MDAzZWxlbjtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KVxuK3tcbitcdHZvaWQgKmJ1ZjtcbitcbitcdC8qIElmIHdlIGhhdmUgYSBxbGVuIG9mIDEsIHdlIG9ubHkgZW5kZWQgdXAgcGFja2luZyBhIHNpbmdsZSBza2IsXG4rXHQgKiBkZXNwaXRlIGFsbG9jYXRpbmcgZm9yIG11bHRpcGxlLiBTa2lwIHRoZSBjb3B5IGFuZCBzZW5kIGRpcmVjdGx5XG4rXHQgKiBmcm9tIHRoZSBza2IgZGF0YS5cbitcdCAqL1xuK1x0aWYgKGN0eC1cdTAwM2VidWZfdHlwZSA9PSBUWF9TSU5HTEUgfHwgY3R4LVx1MDAzZXNrYnMucWxlbiA9PSAxKSB7XG4rXHRcdGJ1ZiA9IGN0eC1cdTAwM2Vza2JzLm5leHQtXHUwMDNlZGF0YTtcbitcbitcdH0gZWxzZSBpZiAoY3R4LVx1MDAzZWJ1Zl90eXBlID09IFRYX0ZMQVQpIHtcbitcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdFx0c2l6ZV90IHBvcyA9IDA7XG4rXG4rXHRcdHNrYl9xdWV1ZV93YWxrKFx1MDAyNmN0eC1cdTAwM2Vza2JzLCBza2IpIHtcbitcdFx0XHRza2JfY29weV9iaXRzKHNrYiwgMCwgY3R4LVx1MDAzZWJ1ZiArIHBvcywgc2tiLVx1MDAzZWxlbik7XG4rXHRcdFx0cG9zICs9IHNrYi1cdTAwM2VsZW47XG4rXHRcdH1cbitcbitcdFx0YnVmID0gY3R4LVx1MDAzZWJ1ZjtcbitcdH0gZWxzZSB7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGN0eC1cdTAwM2V0eC1cdTAwM2VvcHMuc2VuZChjdHgsIGJ1ZiwgY3R4LVx1MDAzZWxlbik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCxcbitcdFx0XHRcdCAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcbitcdGlmICghY3R4KVxuK1x0XHRyZXR1cm47XG4rXG4rXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2Y3R4LVx1MDAzZXNrYnMpKSAhPSBOVUxMKVxuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueV9yZWFzb24oc2tiLCByZWFzb24pO1xuK1x0a2ZyZWUoY3R4KTtcbit9XG4rXG4rdm9pZCAqbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4KVxuK3tcbitcdHJldHVybiB0eF9jdHgtXHUwMDNldHgtXHUwMDNlcHJpdjtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfY3R4X3ByaXYpO1xuK1xuKy8qIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgdHggXHUwMDI2IGNvbXBsZXRpb24gcGF0aCBpcyBxdWllc2NlZCAqL1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KVxuK3tcbitcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHR4LVx1MDAzZWN1cl9jdHgsIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfZmluaSk7XG4rXG4rLyogTWF4IHNpemUgb2YgYSBzcGFubmVkIFRYLiBTaW5jZSB3ZSBhbGxvY2F0ZSBhIHNlcGFyYXRlIHNwYW4gYnVmZmVyLCBsaW1pdFxuKyAqIHRoZSB0eC10aW1lIGFsbG9jYXRpb25zIHRvIDRrLiBMYXJnZXIgcGFja2V0cyB3aWxsIGJlIHNlbnQgYXMgc2luZ2xlXG4rICogdHJhbnNmZXJzLlxuKyAqL1xuK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgVFhfU1BBTl9NQVggPSA0MDk2IC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHgpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpcbittY3RwX3VzYmxpYl90eF9jdHhfY3JlYXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0ICBib29sIHNpbmdsZSlcbit7XG4rXHRlbnVtIG1jdHBfdXNibGliX3R4X2J1Zl90eXBlIHR5cGU7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHg7XG4rXHRzaXplX3Qgc3ogPSAwO1xuK1xuK1x0aWYgKHNpbmdsZSB8fCBza2ItXHUwMDNlbGVuIFx1MDAzZSBUWF9TUEFOX01BWCkge1xuK1x0XHR0eXBlID0gVFhfU0lOR0xFO1xuK1x0fSBlbHNlIHtcbitcdFx0dHlwZSA9IFRYX0ZMQVQ7XG4rXHRcdHN6ID0gdHgtXHUwMDNlc3BhbiA/IFRYX1NQQU5fTUFYIDogTUNUUF9VU0JfMV8wX1hGRVJfU0laRTtcbitcdH1cbitcbitcdGN0eCA9IGt6YWxsb2NfZmxleCgqY3R4LCBidWYsIHN6LCBHRlBfQVRPTUlDKTtcbitcdGlmICghY3R4KVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGN0eC1cdTAwM2V0eCA9IHR4O1xuK1x0Y3R4LVx1MDAzZWJ1Zl90eXBlID0gdHlwZTtcbitcdGN0eC1cdTAwM2VidWZfbGVuID0gc3o7XG4rXHRjdHgtXHUwMDNlbGVuID0gc2tiLVx1MDAzZWxlbjtcbitcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2Y3R4LVx1MDAzZXNrYnMpO1xuK1x0X19za2JfcXVldWVfdGFpbChcdTAwMjZjdHgtXHUwMDNlc2ticywgc2tiKTtcbitcbitcdHJldHVybiBjdHg7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsXG4rXHRcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdGJvb2wgb2spXG4re1xuK1x0c3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSBnZXRfY3B1X3B0cihkZXYtXHUwMDNlZHN0YXRzKTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuK1x0aWYgKG9rKSB7XG4rXHRcdC8qIE9ubHkgaW5jbHVkZSB0aGUgbmV0d29yay1sYXllciBkYXRhIGluIHR4IHN0YXRzOyB3ZSBrbm93XG4rXHRcdCAqIHRoYXQgdGhlcmUgaXMgYSA0LWJ5dGUgaGVhZGVyIHB1c2hlZCB0byBhbGwgc2ticyBpblxuK1x0XHQgKiB0eF9za2JfcHJlcGFyZSgpXG4rXHRcdCAqL1xuK1x0XHR1NjQgbiA9IGN0eC1cdTAwM2Vza2JzLnFsZW47XG4rXHRcdHM2NCBsZW4gPSBjdHgtXHUwMDNlbGVuIC0gKG4gKiBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpO1xuK1xuK1x0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNmRzdGF0cy1cdTAwM2V0eF9wYWNrZXRzLCBuKTtcbitcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZkc3RhdHMtXHUwMDNldHhfYnl0ZXMsIGxlbik7XG4rXHR9IGVsc2Uge1xuK1x0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNmRzdGF0cy1cdTAwM2V0eF9kcm9wcywgY3R4LVx1MDAzZXNrYnMucWxlbik7XG4rXHR9XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuK1x0cHV0X2NwdV9wdHIoZGV2LVx1MDAzZWRzdGF0cyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSBnZXRfY3B1X3B0cihkZXYtXHUwMDNlZHN0YXRzKTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuK1x0dTY0X3N0YXRzX2luYyhcdTAwMjZkc3RhdHMtXHUwMDNldHhfZHJvcHMpO1xuK1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcdHB1dF9jcHVfcHRyKGRldi1cdTAwM2Vkc3RhdHMpO1xuK31cbitcbisvKlxuKyAqIENvbXBsZXRpb24gZm9yIHRoZSAtXHUwMDNlc2VuZCgpIG9wLiBUaGlzIHdpbGwgdXBkYXRlIG5ldGRldiBzdGF0cyBhbmRcbisgKiBmcmVlIHRoZSB0eCBjb250ZXh0LlxuKyAqXG4rICogTGlrZWx5IGNhbGxlZCBmcm9tIChhdG9taWMpIFVSQiBjb21wbGV0aW9uIGNvbnRleHQuXG4rICovXG4rdm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcbitcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBvaylcbit7XG4rXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPVxuK1x0XHRvayA/IFNLQl9DT05TVU1FRCA6IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xuK1xuK1x0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKHR4X2N0eCwgZGV2LCBvayk7XG4rXHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZSh0eF9jdHgsIHJlYXNvbik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUpO1xuK1xuKy8qIFByZXBhcmUgYSBza2IgZm9yIHB1c2goKVxuKyAqXG4rICogT24gZXJyb3IsIHBvcHVsYXRlcyBAcmVhc29uLlxuKyAqL1xuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2tiX3ByZXBhcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzcGFuLFxuK1x0XHRcdFx0ICAgICAgZW51bSBza2JfZHJvcF9yZWFzb24gKnJlYXNvbilcbit7XG4rXHR1bnNpZ25lZCBsb25nIHBsZW4sIG1heF9sZW47XG4rXHRzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7XG4rXHRpbnQgcmM7XG4rXG4rXHRtYXhfbGVuID0gc3BhbiA/IE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYIDogTUNUUF9VU0JfMV8wX1BLVExFTl9NQVg7XG4rXG4rXHRwbGVuID0gc2tiLVx1MDAzZWxlbjtcbitcdGlmIChwbGVuICsgc2l6ZW9mKCpoZHIpIFx1MDAzZSBtYXhfbGVuKSB7XG4rXHRcdCpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUEtUX1RPT19CSUc7XG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXHR9XG4rXG4rXHRyYyA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqaGRyKSk7XG4rXHRpZiAocmMpIHtcbitcdFx0KnJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT01FTTtcbitcdFx0cmV0dXJuIHJjO1xuK1x0fVxuK1xuK1x0aGRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKmhkcikpO1xuK1x0aWYgKCFoZHIpIHtcbitcdFx0KnJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT01FTTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRoZHItXHUwMDNlaWQgPSBjcHVfdG9fYmUxNihNQ1RQX1VTQl9ETVRGX0lEKTtcbitcdGhkci1cdTAwM2VsZW4gPSBjcHVfdG9fYmUxNihwbGVuICsgc2l6ZW9mKCpoZHIpKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIFB1c2ggYSBuZXcgc2tiIHRvIHRoZSB0cmFuc2Zlci4gTWF5IHJlc3VsdCBpbiB6ZXJvIG9yIG1vcmUgY2FsbHMgdG9cbisgKiBvcHMtXHUwMDNlc2VuZCgpLlxuKyAqXG4rICogVGFrZXMgb3duZXJzaGlwIG9mIEBza2IsIGluY2x1ZGluZyBvbiBlcnJvci5cbisgKi9cbitpbnQgbWN0cF91c2JsaWJfdHhfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsXG4rXHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBtb3JlKVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCwgKnNlbmRfY3R4ID0gTlVMTDtcbitcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjtcbitcdGNvbnN0IGludCBtYXhfdHJpZXMgPSAzO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGludCB0cnkgPSAxLCByYztcbitcbitcdHJjID0gbWN0cF91c2JsaWJfdHhfc2tiX3ByZXBhcmUoc2tiLCB0eC1cdTAwM2VzcGFuLCBcdTAwMjZyZWFzb24pO1xuK1x0aWYgKHJjKSB7XG4rXHRcdG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7XG4rXHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xuK1x0XHQvKiB3ZSBtYXkgc3RpbGwgbmVlZCB0byBwcm9jZWVkLCBpbiBjYXNlIGFuIGV4aXN0aW5nIGN0eFxuK1x0XHQgKiBpcyBub3cgc2VuZGFibGUgKGllLjogIW1vcmUpLlxuK1x0XHQgKi9cbitcdFx0c2tiID0gTlVMTDtcbitcdH1cbitcbitcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xuK3JldHJ5OlxuK1x0LyogVHJ5IGFuZCBxdWV1ZSB0byB0aGUgY3VycmVudCBjb250ZXh0LiBXZSBleGl0IHRoaXMgY3JpdGljYWwgc2VjdGlvblxuK1x0ICogd2l0aCBhIGZldyBiaXRzIG9mIHN0YXRlOlxuK1x0ICogIC0gc2VuZF9jdHg6IGluZGljYXRpbmcgYSBwcmlvciBjb250ZXh0IHRoYXQgbmVlZHMgdG8gYmUgc2VudFxuK1x0ICogIC0gc2tiOiBpbmRpY2F0aW5nIHRoYXQgYSBza2Igc3RpbGwgbmVlZHMgdG8gYmUgcXVldWVkL3NlbnRcbitcdCAqL1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0Y3R4ID0gdHgtXHUwMDNlY3VyX2N0eDtcbitcdGlmIChjdHgpIHtcbitcdFx0aWYgKHNrYikge1xuK1x0XHRcdHJjID0gbWN0cF91c2JsaWJfdHhfYXBwZW5kKGN0eCwgc2tiKTtcbitcdFx0XHRpZiAocmMpIHtcbitcdFx0XHRcdC8qIGNhbid0IGFwcGVuZCB0byB0aGUgcGVuZGluZyB0eCAtIGRldGFjaCBmb3JcbitcdFx0XHRcdCAqIHNlbmRpbmcsIGFuZCB3ZSdsbCBjcmVhdGUgYSBuZXcgdHggYmVsb3cuXG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdHN3YXAodHgtXHUwMDNlY3VyX2N0eCwgc2VuZF9jdHgpO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHQvKiB3ZSBoYXZlIHF1ZXVlZCAqL1xuK1x0XHRcdFx0c2tiID0gTlVMTDtcbitcdFx0XHRcdGlmICghbW9yZSB8fCBtY3RwX3VzYmxpYl90eF9zaG91bGRfc2VuZChjdHgpKVxuK1x0XHRcdFx0XHRzd2FwKHR4LVx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcbitcdFx0XHR9XG4rXHRcdH0gZWxzZSBpZiAoIW1vcmUpIHtcbitcdFx0XHRzd2FwKHR4LVx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcbitcdFx0fVxuK1x0fVxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHRpZiAoc2VuZF9jdHgpIHtcbitcdFx0cmMgPSBtY3RwX3VzYmxpYl90eF9zZW5kKHNlbmRfY3R4KTtcbitcdFx0aWYgKHJjKSB7XG4rXHRcdFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKHNlbmRfY3R4LCBkZXYsIGZhbHNlKTtcbitcdFx0XHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShzZW5kX2N0eCwgcmVhc29uKTtcbitcdFx0fVxuK1x0XHRzZW5kX2N0eCA9IE5VTEw7XG4rXHR9XG4rXG4rXHQvKiB3ZSBoYXZlIGVpdGhlciBxdWV1ZWQsIG9yIHRoZSBwcmVwYXJlIGZhaWxlZDsgbm90aGluZyBtb3JlIHRvIGRvICovXG4rXHRpZiAoIXNrYilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRjdHggPSBtY3RwX3VzYmxpYl90eF9jdHhfY3JlYXRlKHR4LCBza2IsICFtb3JlKTtcbitcdGlmICghY3R4KSB7XG4rXHRcdG5ldGRldl9kYmcoZGV2LCBcIlRYIGNvbnRleHQgY3JlYXRlIGZhaWxlZFxcblwiKTtcbitcdFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3AoZGV2KTtcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0LyogaWYgd2UncmUgcmVhZHkgdG8gc2VuZCBub3csIG5vIG5lZWQgdG8gZW5xdWV1ZSAqL1xuK1x0aWYgKCFtb3JlIHx8IG1jdHBfdXNibGliX3R4X3Nob3VsZF9zZW5kKGN0eCkpIHtcbitcdFx0cmMgPSBtY3RwX3VzYmxpYl90eF9zZW5kKGN0eCk7XG4rXHRcdGlmIChyYykge1xuK1x0XHRcdG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShjdHgsIGRldiwgZmFsc2UpO1xuK1x0XHRcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKGN0eCwgcmVhc29uKTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnR4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdGlmICghdHgtXHUwMDNlY3VyX2N0eCkge1xuK1x0XHR0eC1cdTAwM2VjdXJfY3R4ID0gY3R4O1xuK1x0XHRjdHggPSBOVUxMO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHQvKiB3ZSBtYXkgaGF2ZSBsb3N0IHRoZSByYWNlIHdpdGggYSBjb25jdXJyZW50IHR4OyBzaG91bGRuJ3QgaGFwcGVuLCBhc1xuK1x0ICogbmRvX3N0YXJ0X3htaXQgc2hvdWxkIGJlIHNlcmlhbGlzZWQgb3ZlciBvbmUgcXVldWUsIGJ1dCB0cnkgYWdhaW5cbitcdCAqIGZyb20gdGhlIHRvcCwgYXMgd2UgbWF5IGJlIGFibGUgdG8gcXVldWUgdGhlIHNrYiB0byB0aGF0IGNvbnRleHQuXG4rXHQgKi9cbitcdGlmIChjdHgpIHtcbitcdFx0LyogdW5saW5rIHRoZSBuZXcgKHNvbGUpIHNrYiwgd2UgZG9uJ3Qgd2FudCBpdCBmcmVlZCB3aXRoIGN0eCAqL1xuK1x0XHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2Y3R4LVx1MDAzZXNrYnMpO1xuK1x0XHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShjdHgsIHJlYXNvbik7XG4rXHRcdGlmICgrK3RyeSBcdTAwM2UgbWF4X3RyaWVzKSB7XG4rXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3AoZGV2KTtcbitcdFx0XHRyZXR1cm4gLUVCVVNZO1xuK1x0XHR9XG4rXHRcdGdvdG8gcmV0cnk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfcHVzaCk7XG4rXG4rLyogQ2FuY2VsIGEgdHg6IGFueSB1bi1zZW50IGNvbnRleHQgaXMgcmVsZWFzZWQuICovXG4rdm9pZCBtY3RwX3VzYmxpYl90eF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4ID0gTlVMTDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRzd2FwKHR4LVx1MDAzZWN1cl9jdHgsIGN0eCk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnR4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdGlmICghY3R4KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoY3R4LCBkZXYsIGZhbHNlKTtcbitcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKGN0eCwgcmVhc29uKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfY2FuY2VsKTtcbitcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbitNT0RVTEVfQVVUSE9SKFwiSmVyZW15IEtlcnIgXHUwMDNjamtAY29kZWNvbnN0cnVjdC5jb20uYXVcdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiTUNUUCBVU0IgdHJhbnNwb3J0IGxpYnJhcnlcIik7XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUKVxuKyNpbmNsdWRlIFwibWN0cC11c2JsaWItdGVzdC5jXCJcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9tY3RwLXVzYi5oIGIvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaFxuaW5kZXggYTJmNmYxZTA0ZWZiZDAuLjM1Y2MyY2MxNWY5YTA0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaFxuKysrIGIvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaFxuQEAgLTIsNyArMiw3IEBAXG4gLypcbiAgKiBtY3RwLXVzYi5oIC0gTUNUUCBVU0IgdHJhbnNwb3J0IGJpbmRpbmc6IGNvbW1vbiBkZWZpbml0aW9ucyxcbiAgKiBiYXNlZCBvbiBETVRGMDI4MyBzcGVjaWZpY2F0aW9uOlxuLSAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMC4xLnBkZlxuKyAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMS4wLnBkZlxuICAqXG4gICogVGhlc2UgYXJlIHByb3RvY29sLWxldmVsIGRlZmluaXRpb25zLCB0aGF0IG1heSBiZSBzaGFyZWQgYmV0d2VlbiBob3N0XG4gICogYW5kIGdhZGdldCBkcml2ZXJzLlxuQEAgLTEzLDE4ICsxMyw5NiBAQFxuICNpZm5kZWYgX19MSU5VWF9VU0JfTUNUUF9VU0JfSFxuICNkZWZpbmUgX19MSU5VWF9VU0JfTUNUUF9VU0JfSFxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4rLypcbisgKiBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydCBoZWFkZXIuIERTUDAyODMgdjEuMCBoYXMgYW4gOC1iaXQgbGVuZ3RoIGZpZWxkXG4rICogKHByZWNlZGVkIGJ5IDggcmVzZXJ2ZWQgYml0cyksIHYxLjEgaGFzIGEgMTMtYml0IGxlbmd0aCBmaWVsZCAocHJlY2VkZWQgYnlcbisgKiAzIHJlc2VydmVkIGJpdHMpLiBXZSB1c2UgYSBiZTE2IGZvciBvdXIgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgbGFyZ2VyIHYxLjFcbisgKiByZXByZXNlbnRhdGlvbiwgYW5kIG1hc2sgYXMgYXBwcm9wcmlhdGUuXG4rICovXG4gc3RydWN0IG1jdHBfdXNiX2hkciB7XG4gXHRfX2JlMTZcdGlkO1xuLVx0dThcdHJzdmQ7XG4tXHR1OFx0bGVuO1xuK1x0X19iZTE2XHRsZW47XG4gfSBfX3BhY2tlZDtcbiBcbi0jZGVmaW5lIE1DVFBfVVNCX1hGRVJfU0laRVx0NTEyXG4rLyogbWF4IHRyYW5zZmVyIHNpemUgZm9yIERTUDAyODMgdjEuMCAqL1xuKyNkZWZpbmUgTUNUUF9VU0JfMV8wX1hGRVJfU0laRVx0NTEyXG4gI2RlZmluZSBNQ1RQX1VTQl9CVFVcdFx0NjhcbiAjZGVmaW5lIE1DVFBfVVNCX01UVV9NSU5cdE1DVFBfVVNCX0JUVVxuLSNkZWZpbmUgTUNUUF9VU0JfTVRVX01BWFx0KFU4X01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSlcbisjZGVmaW5lIE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYXHRVOF9NQVhcbisjZGVmaW5lIE1DVFBfVVNCXzFfMF9NVFVfTUFYXHQoTUNUUF9VU0JfMV8wX1BLVExFTl9NQVggLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWFx0R0VOTUFTSygxMiwgMClcbisjZGVmaW5lIE1DVFBfVVNCXzFfMV9NVFVfTUFYXHQoTUNUUF9VU0JfMV8xX1BLVExFTl9NQVggLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpXG4gI2RlZmluZSBNQ1RQX1VTQl9ETVRGX0lEXHQweDFhYjRcbiBcbisvKiBtY3RwLXVzYmxpYiAqL1xuK1xuKy8qXG4rICogUlggaGFuZGxlOiBkcml2ZXJzIHdpbGwgdHlwaWNhbGx5IGNyZWF0ZSBvbmUgb24gaW5pdCwgd2hpY2ggcGVyc2lzdHMgZm9yXG4rICogdGhlIGxpZmUgb2YgdGhlIGRyaXZlci4gVGhlIHNhbWUgaGFuZGxlIGlzIHVzZWQgZm9yIHByb2dyZXNzaXZlXG4rICogcHJlcGFyZSAtXHUwMDNlIGNvbXBsZXRlIG9wZXJhdGlvbnMgKGZvciBlYWNoIGluY29taW5nIFVTQiB0cmFuc2ZlciksIHdoaWNoXG4rICogcmVzdWx0IGluIG5ldGlmX3J4KCktaW5nIHRoZSBNQ1RQIHBhY2tldHMgcmVjZWl2ZWRcbisgKi9cbitzdHJ1Y3QgbWN0cF91c2JsaWJfcngge1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHUxNiBlcF9wa3RsZW47XG4rXHRib29sIHNwYW47XG4rfTtcbitcbit2b2lkIG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKTtcbit2b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCk7XG4rXG4raW50IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHQgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LFxuK1x0XHRcdCAgIHZvaWQgKipidWZwLCBzaXplX3QgKmxlbnAsIGdmcF90IGdmcCk7XG4rXG4raW50IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pO1xuK1xuK3ZvaWQgbWN0cF91c2JsaWJfcnhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpO1xuK1xuKy8qXG4rICogVFggaGFuZGxlOiBjcmVhdGVkIGJ5IG1jdHBfdXNibGliX3R4X3B1c2goKSBkdXJpbmcgdGhlIHR4IHBhdGgsIGFuZFxuKyAqIG1heSBwZXJzaXN0IGFjcm9zcyBtdWx0aXBsZSBwYWNrZXQgdHJhbnNtaXRzLlxuKyAqL1xuK3N0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHg7XG4rXG4rc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB7XG4rXHQvKiBTdGFydCBhIFVTQiBUWCBmb3IgQGRhdGEuIE9uIHJldHVybmluZyBzdWNjZXNzLCB0aGUgaW1wbGVtZW50YXRpb25cbitcdCAqIG11c3QgYXJyYW5nZSBmb3IgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSgpIHRvIGJlIGNhbGxlZCBhdCBzb21lXG4rXHQgKiBsYXRlciBwb2ludCAoZWcuLCBvbiB1cmIgY29tcGxldGlvbikuXG4rXHQgKi9cbitcdGludCAoKnNlbmQpKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7XG4rfTtcbitcbitzdHJ1Y3QgbWN0cF91c2JsaWJfdHgge1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7XG4rXHR2b2lkICpwcml2O1xuK1x0Ym9vbCBzcGFuO1xuK1x0LyogcHJvdGVjdHMgYWNjZXNzIHRvIGN1cl9jdHggKi9cbitcdHNwaW5sb2NrX3QgbG9jaztcbitcdC8qIGNvbnRleHQgdG8gd2hpY2ggd2UgYXJlIGFkZGluZyBwYWNrZXRzLCBjbGVhcmVkIG9uIHNlbmQgKi9cbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN1cl9jdHg7XG4rfTtcbitcbit2b2lkIG1jdHBfdXNibGliX3R4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcbitcdFx0XHQgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLCB2b2lkICpwcml2LFxuK1x0XHRcdCBib29sIHNwYW4pO1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KTtcbitcbit2b2lkICptY3RwX3VzYmxpYl90eF9jdHhfcHJpdihzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgpO1xuK1xuK2ludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcbitcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpO1xuK1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgb2spO1xuK1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcbitcbiAjZW5kaWYgLyogIF9fTElOVVhfVVNCX01DVFBfVVNCX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjI5OjQ4LjkyNzc2NjQ5NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0ODk0MDE1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNQ1RQLW92ZXItVVNCIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCBsb29rcyBsaWtlIGl0J3MgbWFraW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgTUNUUCBVU0IgdHJhbnNwb3J0IGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCdzIHVwZGF0aW5nIGBkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNgIGFuZCBpbnRyb2R1Y2luZyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiwgd2hpY2ggaXMgYGRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuY2AuICBUaGV5J3ZlIGFsc28gYWRkZWQgc29tZSBLVW5pdCB0ZXN0cyBpbiBgZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNgIOKAkyBhbHdheXMgYSBnb29kIHNpZ24uIEFuZCBvZiBjb3Vyc2UsIHRoZXJlIGFyZSBuZXcgS2NvbmZpZyBvcHRpb25zLCBgTUNUUF9UUkFOU1BPUlRfVVNCTElCYCBhbmQgYE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUYC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgXCJDYW4gdGhpcyB0aGluZyBldmVuICpiZSogZnV6emVkIGVmZmVjdGl2ZWx5P1wiICBMZXQncyBzZWUuIFRoaXMgYG1jdHAtdXNiLmNgIGRyaXZlciBpcyBhIFVTQiBkZXZpY2UgZHJpdmVyLCByaWdodD8gQW5kIGl0IGJpbmRzIHRvIFVTQiBpbnRlcmZhY2VzIHdpdGggYFVTQl9DTEFTU19NQ1RQYC4gT2theSwgZ29vZC4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUsIHdlIGNhbiBlbXVsYXRlIFVTQiBkZXZpY2VzIHVzaW5nIGB1c2ItZHVtbXlgIG9yIGB1c2ItZ2FkZ2V0YC4gIEFuZCB0aGUgcmVhbGx5IGltcG9ydGFudCBiaXQuLi4gc3l6a2FsbGVyLCB3aGljaCBpcyB3aGF0IEknZCBsaWtlbHkgdXNlLCAqZG9lcyogc3VwcG9ydCBmdXp6aW5nIFVTQiBkcml2ZXJzIHZpYSBgcmF3LWdhZGdldGAuICBTbywgeWVzLCBpdCBzZWVtcyB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCB0aGUgZWZmb3J0LiAgRXhjZWxsZW50LlxuXG5Ob3csIGxldCdzIGRpZyBpbnRvIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLiAgSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgcmVmYWN0b3JpbmcgYG1jdHAtdXNiLmNgIHRvIGxldmVyYWdlIHRoZSBuZXcgZnVuY3Rpb25zIGluIGBtY3RwLXVzYmxpYi5jYC4gVGhpcyBpcyB3aGVyZSB0aGUganVpY3kgYml0cyBhcmUuIFRoZSBuZXcgZnVuY3Rpb25zIGFyZTogYG1jdHBfdXNibGliX3J4X2luaXRgLCBgbWN0cF91c2JsaWJfcnhfZmluaWAsIGBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlYCwgYG1jdHBfdXNibGliX3J4X2NvbXBsZXRlYCwgYG1jdHBfdXNibGliX3J4X2NhbmNlbGAsIGBtY3RwX3VzYmxpYl90eF9pbml0YCwgYG1jdHBfdXNibGliX3R4X2ZpbmlgLCBgbWN0cF91c2JsaWJfdHhfY3R4X3ByaXZgLCBgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZWAsIGBtY3RwX3VzYmxpYl90eF9wdXNoYCwgYW5kIGBtY3RwX3VzYmxpYl90eF9jYW5jZWxgLiBUaGVzZSBsb29rIGxpa2UgY29yZSBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIHRoZSBSWC9UWCBzaWRlIG9mIHRoZSBNQ1RQLW92ZXItVVNCIGNvbW11bmljYXRpb24uICBUaGlzIGlzIGRlZmluaXRlbHkgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cblxuSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggYWxzbyBoYXMgdXBkYXRlZCBzb21lIGV4aXN0aW5nIGBtY3RwLXVzYi5jYCBmdW5jdGlvbnMgdG8gYWxpZ24gd2l0aCB0aGUgbmV3IGxpYnJhcnk6IGBtY3RwX3VzYl9vdXRfY29tcGxldGVgLCBgbWN0cF91c2JfdHhfc2VuZGAsIGBtY3RwX3VzYl9zdGFydF94bWl0YCwgYG1jdHBfdXNiX3J4X3F1ZXVlYCwgYG1jdHBfdXNiX2luX2NvbXBsZXRlYCwgYG1jdHBfdXNiX3J4X3JldHJ5X3dvcmtgLCBgbWN0cF91c2Jfb3BlbmAsIGBtY3RwX3VzYl9zdG9wYCwgYG1jdHBfdXNiX25ldGRldl9zZXR1cGAsIGBtY3RwX3VzYl9wcm9iZWAsIGFuZCBgbWN0cF91c2JfZGlzY29ubmVjdGAuIFRoZXkgYXJlIGNoYW5naW5nIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBVU0Igc3RhY2ssIHdoaWNoIG1lYW5zIHRoaXMgY291bGQgZXhwb3NlIG5ldyBhdHRhY2sgc3VyZmFjZXMuXG5cblJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCB0byBwcm9wZXJseSBlbmFibGUgdGhpcyBmb3IgZnV6emluZywgSSdsbCBuZWVkIGBNQ1RQX1RSQU5TUE9SVF9VU0JgIGFuZCwgc2luY2UgaXQgbG9va3MgbGlrZSBgTUNUUF9UUkFOU1BPUlRfVVNCTElCYCBpcyBzZWxlY3RlZCBieSBgTUNUUF9UUkFOU1BPUlRfVVNCYCwgSSBjYW4gZXhwZWN0IHRoZW0gdG8gYmUgZW5hYmxlZCB0b2dldGhlci4gT2YgY291cnNlLCBgVVNCYCBpdHNlbGYgd2lsbCBoYXZlIHRvIGJlIGVuYWJsZWQuIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgYGRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ2AgdG8gY29uZmlybSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIGJ1aWxkIHJlcXVpcmVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1NjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzoyOTo1OC40MTcxNzAyNzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg4OTQ2MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tY3RwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTQxPWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0NcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy00OS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NTA6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQlxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy01MS1cXHR0cmlzdGF0ZSBcXFwiTUNUUCBvdmVyIFVTQiBjb21tb24gbGlicmFyeVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy01OS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NjA6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTYxLSAgICAgICAgYm9vbCBcXFwiTUNUUCB1c2JsaWIgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02NC1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NjU6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQlxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02Ni1cXHR0cmlzdGF0ZSBcXFwiTUNUUCBVU0IgdHJhbnNwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzoyOTo1OC40ODYwNjkzODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDg2MTYzMDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIHRoZSBNQ1RQX1RSQU5TUE9SVF9VU0IgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYE1DVFBfVFJBTlNQT1JUX1VTQmAgZGVwZW5kZW5jeSBzaXR1YXRpb24uIExldCdzIHN0YXJ0IGJ5IG1hcHBpbmcgb3V0IGV4YWN0bHkgd2hhdCBpdCByZWxpZXMgdXBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0cmFuc3BvcnQgbGF5ZXIgaW5zaWRlIGFuZCBvdXQsIGVzcGVjaWFsbHkgYW55IGV4dGVybmFsIGxpYnJhcmllcyBvciBrZXJuZWwgbW9kdWxlcyBpdCBtaWdodCBiZSB0aWVkIHRvLiBJJ20gdGhpbmtpbmcgYWJvdXQgZHJpdmVyIGludGVyZmFjZXMsIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVycyAoSEFMcyksIHBvdGVudGlhbGx5IHNwZWNpZmljIFVTQiBob3N0IGNvbnRyb2xsZXIgZGVwZW5kZW5jaWVzLCBtYXliZSBldmVuIGZpcm13YXJlIGludGVyYWN0aW9ucywgaWYgYXBwbGljYWJsZS4gQSBjb21wcmVoZW5zaXZlIGRlcGVuZGVuY3kgdHJlZSBpcyBjcnVjaWFsIGhlcmUuIEkgbmVlZCB0byBjb25zaWRlciBub3QganVzdCBkaXJlY3QgZGVwZW5kZW5jaWVzLCBidXQgYWxzbyB0cmFuc2l0aXZlIG9uZXMuIEFueSByaXBwbGUgZWZmZWN0cyBmcm9tIHVwZGF0aW5nIG9yIG1vZGlmeWluZyB0aGlzIGNvbXBvbmVudCBkb3duIHRoZSBsaW5lIGFyZSBhIG1ham9yIGNvbmNlcm4uIEFueSBrbm93biBpc3N1ZXMgb3IgY29uZmxpY3RzIHdpdGhpbiB0aGUgZXhpc3Rpbmcgc3lzdGVtIGFsc28gbmVlZCB0byBiZSBub3RlZC4gSSB3YW50IHRvIGJ1aWxkIGEgdHJ1bHkgcm9idXN0IGRlcGVuZGVuY3kgbW9kZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzQ3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MDEuNTcyMjM0NjE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MTc2MzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz02PWNvbmZpZyBNQ1RQX1NFUklBTFxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJNQ1RQIHNlcmlhbCB0cmFuc3BvcnRcXFwiXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBUVFlcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctOS1cXHRzZWxlY3QgQ1JDX0NDSVRUXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc9MjQ9Y29uZmlnIE1DVFBfU0VSSUFMX1RFU1RcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMjUtICAgICAgICBib29sIFxcXCJNQ1RQIHNlcmlhbCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzoyNjogICAgICAgIGRlcGVuZHMgb24gTUNUUF9TRVJJQUw9eSBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTI3LSAgICAgICAgZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz0yOT1jb25maWcgTUNUUF9UUkFOU1BPUlRfSTJDXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMzEtXFx0IyBpMmMtbXV4IGlzIG9wdGlvbmFsLCBidXQgd2UgbXVzdCBidWlsZCBhcyBhIG1vZHVsZSBpZiBpMmMtbXV4IGlzIGEgbW9kdWxlXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjMyOlxcdGRlcGVuZHMgb24gSTJDX01VWCB8fCAhSTJDX01VWFxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzozMzpcXHRkZXBlbmRzIG9uIEkyQ1xcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzozNDpcXHRkZXBlbmRzIG9uIEkyQ19TTEFWRVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy0zNS1cXHRzZWxlY3QgTUNUUF9GTE9XU1xcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTQxPWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0NcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNDItXFx0dHJpc3RhdGUgXFxcIk1DVFAgSTNDIHRyYW5zcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBJM0NcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNDQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTUwPWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNTEtXFx0dHJpc3RhdGUgXFxcIk1DVFAgb3ZlciBVU0IgY29tbW9uIGxpYnJhcnlcXFwiXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjUyOlxcdGRlcGVuZHMgb24gVVNCXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTUzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz02MD1jb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1RcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjEtICAgICAgICBib29sIFxcXCJNQ1RQIHVzYmxpYiB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo2MjogICAgICAgIGRlcGVuZHMgb24gTUNUUF9UUkFOU1BPUlRfVVNCTElCPXkgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02My0gICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc9NjU9Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQlxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02Ni1cXHR0cmlzdGF0ZSBcXFwiTUNUUCBVU0IgdHJhbnNwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo2NzpcXHRkZXBlbmRzIG9uIFVTQlxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02OC1cXHRzZWxlY3QgTUNUUF9UUkFOU1BPUlRfVVNCTElCXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjMwOjAxLjY0OTQxNjQyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NjMxNjQzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgTUNUUF9UUkFOU1BPUlRfVVNCYCByZWxpZXMgb24gYFVTQmAsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIE5vdywgdGhlIGJpZ2dlciBxdWVzdGlvbiBpcywgd2hhdCdzIHRoZSBkZXBlbmRlbmN5IG9uIGBNQ1RQYCBpdHNlbGY/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIExldCdzIGRpZyBpbnRvIGBuZXQvbWN0cC9LY29uZmlnYC4gSSdsbCBvcGVuIHVwIHRoYXQgS2NvbmZpZyBmaWxlIGFuZCBzZWUgd2hhdCBraW5kIG9mIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCBmb3IgdGhlIHdob2xlIGBNQ1RQYCBzdGFjayBhbmQgaG93IGBNQ1RQX1RSQU5TUE9SVF9VU0JgIGlzIHRpZWQgdG8gaXQuIEdvdHRhIGVuc3VyZSBJJ20gZ2V0dGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhlIGdvYWwgaXMgYSBjbGVhciB2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoZSBNQ1RQIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNDEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzozMDowNC41MTI1ODM2NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyNTc5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1DVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21jdHAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWN0cC9LY29uZmlnLTEtXFxubmV0L21jdHAvS2NvbmZpZzoyOm1lbnVjb25maWcgTUNUUFxcbm5ldC9tY3RwL0tjb25maWctMy1cXHRkZXBlbmRzIG9uIE5FVFxcbi0tXFxubmV0L21jdHAvS2NvbmZpZy0xNC1cXG5uZXQvbWN0cC9LY29uZmlnOjE1OmNvbmZpZyBNQ1RQX1RFU1RcXG5uZXQvbWN0cC9LY29uZmlnLTE2LSAgICAgICAgYm9vbCBcXFwiTUNUUCBjb3JlIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5uZXQvbWN0cC9LY29uZmlnLTIwLVxcbm5ldC9tY3RwL0tjb25maWc6MjE6Y29uZmlnIE1DVFBfRkxPV1NcXG5uZXQvbWN0cC9LY29uZmlnLTIyLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MDQuNTc5ODQ2NjA2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwNzc3Njc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBNQ1RQIG92ZXIgVVNCKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnVzaW5lc3MuIEZpcnN0IHRoaW5ncyBmaXJzdDogZW5zdXJlIGBNQ1RQYCBhbmQgYE1DVFBfVFJBTlNQT1JUX1VTQmAgYXJlIGVuYWJsZWQuIFRoYXQncyB0aGUgZm91bmRhdGlvbiB3ZSBuZWVkLiBOb3csIHRoZSBrZXkgaXMgdG8gcGlucG9pbnQgdGhlIG1vc3QgZnJ1aXRmdWwgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hlcmUgdG8gdGFyZ2V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cbkxldCdzIGJlZ2luIGJ5IGV4YW1pbmluZyBgbWN0cC11c2JsaWIuY2AuIFRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIGNsb3NlIGF0dGVudGlvbiBoZXJlIGFyZTogYG1jdHBfdXNibGliX3J4X3ByZXBhcmVgLCBgbWN0cF91c2JsaWJfcnhfY29tcGxldGVgLCBgbWN0cF91c2JsaWJfdHhfcHVzaGAsIGFuZCBgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMgZm9yIGRhdGEgdHJhbnNmZXIgYW5kIHByb2Nlc3Npbmcgd2l0aGluIHRoZSB1c2JsaWIgY29tcG9uZW50LlxuXG5OZXh0LCB3ZSdsbCBzaGlmdCBvdXIgZm9jdXMgdG8gYG1jdHAtdXNiLmNgLiBIZXJlLCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3YXJyYW50IGEgZGVlcCBkaXZlOiBgbWN0cF91c2JfaW5fY29tcGxldGVgLCBgbWN0cF91c2Jfb3V0X2NvbXBsZXRlYCwgYG1jdHBfdXNiX3R4X3NlbmRgLCBgbWN0cF91c2Jfc3RhcnRfeG1pdGAsIGFuZCBgbWN0cF91c2JfcnhfcXVldWVgLiBUaGVzZSBhbGwgaGFuZGxlIGRhdGEgZmxvdyBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBVU0IgaGFyZHdhcmUuIFRoZXkgYXJlIG9mIGhpZ2ggaW50ZXJlc3QuXG5cbldhaXQuLi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIExldCBtZSBzZWUgaWYgYG1jdHBfdXNibGliX3J4YCBpcyBhIGZ1bmN0aW9uLiBBaCwgbm8sIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gaW5zaWRlIGBtY3RwLXVzYmxpYi5jYCwgd2hpY2ggbWFrZXMgaXQgYSBzbGlnaHRseSBkaWZmZXJlbnQgdGFyZ2V0LiBJdCdzIGxpa2VseSBpbXBvcnRhbnQgaW4gdGhlIG92ZXJhbGwgZmxvdywgYnV0IHdlIGNhbid0IGRpcmVjdGx5IHRhcmdldCBpdC4gTGV0J3Mgc3RpbGwgbWFrZSBzdXJlIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBgbWN0cF91c2JsaWJfcnhgIG5vdywgc3BlY2lmaWNhbGx5IGluIGBtY3RwLXVzYmxpYi5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3NDksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MDkuODg3NjI2Mzc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTA2OTU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtY3RwX3VzYmxpYl9yeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTE2LVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoxNzp2b2lkIG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0xOC17XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjItfVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoyMzpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9pbml0KTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjQtXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjI1OnZvaWQgbWN0cF91c2JsaWJfcnhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yNi17XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjgtfVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoyOTpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9maW5pKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMzAtXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMzQtICovXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjM1OmludCBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjM2OlxcdFxcdFxcdCAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTM3LVxcdFxcdFxcdCAgIHZvaWQgKipidWZwLCBzaXplX3QgKmxlbnAsIGdmcF90IGdmcClcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy00My1cXHRcXHQvKiBzb21ldGhpbmcgbXVzdCBoYXZlIGdvbmUgdGVycmlibHkgd3JvbmcuIGNsZWFyIGFuZCByZXN0YXJ0ICovXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjQ0OlxcdFxcdG1jdHBfdXNibGliX3J4X2NhbmNlbChyeCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTQ1LVxcdFxcdHNrYiA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtODgtfVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzo4OTpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtOTAtXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjkxOnN0YXRpYyB2b2lkIG1jdHBfdXNibGliX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTkyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0xMTQtXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjExNTpzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0xMTYte1xcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTEzMS0gKi9cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MTMyOmludCBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoxMzM6XFx0XFx0XFx0ICAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTEzNC17XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMTk4LVxcdFxcdGlmIChwa3RfbGVuID09IHNrYi1cXHUwMDNlbGVuKSB7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjE5OTpcXHRcXHRcXHRtY3RwX3VzYmxpYl9yeChuZXRkZXYsIHNrYik7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIwMC1cXHRcXHRcXHRyeC1cXHUwMDNlc2tiID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMTAtXFx0XFx0XFx0c2tiX3RyaW0oc2tiMiwgcGt0X2xlbik7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjIxMTpcXHRcXHRcXHRtY3RwX3VzYmxpYl9yeChuZXRkZXYsIHNrYjIpO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMTItXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjEzOlxcdFxcdFxcdG1jdHBfdXNibGliX3J4X3N0YXRzX3NpbmdsZV9kcm9wKG5ldGRldik7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIxNC1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjI0LX1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjI1OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjI2LVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIzMC0gKi9cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjMxOnZvaWQgbWN0cF91c2JsaWJfcnhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIzMi17XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjM1LX1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjM2OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NhbmNlbCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIzNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MDkuOTUyNzAxMzQzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzAwNTYzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gVVNCIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHRoZSBVU0IgaW50ZXJmYWNlIGluIHRoaXMgTUNUUCBpbXBsZW1lbnRhdGlvbi4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBjZW50ZXJzIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnMsIHdoaWNoIGFyZSB0aGUgbGluY2hwaW5zIG9mIHRoZSBkYXRhIGZsb3c6IGBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlYCwgYG1jdHBfdXNibGliX3J4X2NvbXBsZXRlYCwgYG1jdHBfdXNibGliX3R4X3B1c2hgLCBgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZWAsIGBtY3RwX3VzYl9pbl9jb21wbGV0ZWAsIGBtY3RwX3VzYl9vdXRfY29tcGxldGVgLCBgbWN0cF91c2JfdHhfc2VuZGAsIGBtY3RwX3VzYl9zdGFydF94bWl0YCwgYW5kIGBtY3RwX3VzYl9yeF9xdWV1ZWAuIEkgbmVlZCB0byBlbnN1cmUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IGRhdGEgaXMgcmVjZWl2ZWQsIHRyYW5zbWl0dGVkLCBhbmQgbWFuYWdlZCB0aHJvdWdob3V0IHRoZSBVU0IgY29tbXVuaWNhdGlvbiBsaWZlY3ljbGUuIEEgdGhvcm91Z2ggZXhhbWluYXRpb24gb2YgdGhlc2UgZWxlbWVudHMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtLiBJIHdpbGwgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBtY3RwX3VzYl9pbl9jb21wbGV0ZWAgd2l0aGluIHRoZSBgbWN0cC11c2IuY2AgZmlsZS4gVGhpcyBmdW5jdGlvbiBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gYW5hbHl6ZSB0aGUgUlggZGF0YSBwcm9jZXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODAxOSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzozMDoxMy44ODI3NjAzOTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDE0NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1jdHBfdXNiX2luX2NvbXBsZXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MTI2PXN0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTM2LVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYzoxMzc6c3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTM4LVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jPTE0NT1zdGF0aWMgaW50IG1jdHBfdXNiX3J4X3F1ZXVlKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGdmcF90IGdmcClcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0xNTgtXFx0XFx0XFx0ICB1c2JfcmN2YnVsa3BpcGUobWN0cF91c2ItXFx1MDAzZXVzYmRldiwgbWN0cF91c2ItXFx1MDAzZWVwX2luKSxcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MTU5OlxcdFxcdFxcdCAgYnVmLCBsZW4sIG1jdHBfdXNiX2luX2NvbXBsZXRlLCBtY3RwX3VzYik7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTE2MC1cXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz0xNzk9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByeF9lcnJfbWF4ID0gMTA7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTE4MC1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MTgxOnN0YXRpYyB2b2lkIG1jdHBfdXNiX2luX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTgyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MTMuOTQxMTgwNzY1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTI4NTQ1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBtY3RwX3VzYl9vdXRfY29tcGxldGUgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlIG91dHB1dCBjb21wbGV0aW9uIGhhbmRsaW5nIGluIHRoZSBNQ1RQLW92ZXItVVNCIGRyaXZlci4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgbWN0cF91c2Jfb3V0X2NvbXBsZXRlYCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyBpbiBgbWN0cC11c2IuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgZnVuY3Rpb24uIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGF0IGNvZGUgYW5kIHNlZWluZyB3aGF0IGl0J3MgZG9pbmcuIEknbSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdHMgcm9sZSBpbiB0aGUgZGF0YSB0cmFuc2ZlciBwcm9jZXNzIGZyb20gdGhlIHN5c3RlbSB0byB0aGUgVVNCIGRldmljZSwgcGFydGljdWxhcmx5IHdoZW4gYSB0cmFuc2ZlciBpcyBjb25zaWRlcmVkIGNvbXBsZXRlLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2U6IHdoYXQgaGFwcGVucyB0byB0aGUgZGF0YSwgaXMgdGhlcmUgYW55IGVycm9yIGhhbmRsaW5nLCBhbmQgaG93IGRvZXMgaXQgc2lnbmFsIHRoZSBjb21wbGV0aW9uIHRvIHRoZSBoaWdoZXIgbGF5ZXJzP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyODg4OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjMwOjE2Ljk5NDAzNzgxN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2Mjg1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWN0cF91c2Jfb3V0X2NvbXBsZXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9NjQ9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUWF9RTUVNX01BWCA9IDE2Mzg0O1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy02NS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6NjY6c3RhdGljIHZvaWQgbWN0cF91c2Jfb3V0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtNjcte1xcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jPTg1PXN0YXRpYyBpbnQgbWN0cF91c2JfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtOTgtXFx0XFx0XFx0ICB1c2Jfc25kYnVsa3BpcGUobWN0cF91c2ItXFx1MDAzZXVzYmRldiwgbWN0cF91c2ItXFx1MDAzZWVwX291dCksXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjk5OlxcdFxcdFxcdCAgZGF0YSwgbGVuLCBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHR4X2N0eCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTEwMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MTcuMDUzNjc0NDM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTE3MTM5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNQ1RQLVVTQiBUWCBTZW5kIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBtY3RwX3VzYl90eF9zZW5kYCB3aXRoaW4gYG1jdHAtdXNiLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IHB1c2hlcyBvdXIgTUNUUCBkYXRhIG91dCBvdmVyIFVTQi4gSSB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgaW50cmljYWNpZXMgb2YgdGhlIFVTQiB0cmFuc3BvcnQgbGF5ZXIsIGVzcGVjaWFsbHkgZXJyb3IgY2hlY2tpbmcgYW5kIGJ1ZmZlcmluZy4gSSdtIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGUgZGF0YSB0cmFuc2ZlciwgcGFydGljdWxhcmx5IHdoYXQgaGFwcGVucyBpZiB0aGVyZSdzIGNvbnRlbnRpb24gb24gdGhlIFVTQiBidXMgb3IgaWYgYW4gZW5kcG9pbnQgaXMgYnVzeS4gQXJlIHRoZXkgdXNpbmcgRE1BIGVmZmVjdGl2ZWx5PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbiB0aGlzIHNlbmQgZnVuY3Rpb24gdGhhdCBtaWdodCBpbXBhY3Qgb3ZlcmFsbCBNQ1RQIHBlcmZvcm1hbmNlPyBBbnkgbG9jayBjb250ZW50aW9uIGlzc3VlcyBJIHNob3VsZCBrbm93PyBBcmUgdGhleSB1c2luZyBhbnkgdHJpY2tzIHdpdGggdGhlIFVTQiB0cmFuc2ZlciBkZXNjcmlwdG9ycyB0byBvcHRpbWl6ZSB0aGUgcHJvY2VzcywgbWF5YmUgaGFuZGxpbmcgdGhlIHBhY2tldGl6YXRpb24gb2YgTUNUUCBkYXRhPyBUaW1lIHRvIGdldCB0aGUgZGVidWdnZXIgb3V0IGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDIzLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MjAuMjQ1MzkyNTM0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDAwMDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtY3RwX3VzYl90eF9zZW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9NjY9c3RhdGljIHZvaWQgbWN0cF91c2Jfb3V0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy04NC1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6ODU6c3RhdGljIGludCBtY3RwX3VzYl90eF9zZW5kKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtODYtXFx0XFx0XFx0ICAgIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIHR4X29wcyA9IHtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MTIzOlxcdC5zZW5kID0gbWN0cF91c2JfdHhfc2VuZCxcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTI0LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjMwOjIwLjMwNTM5OTE1NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA4MjA0NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtY3RwX3VzYl9zdGFydF94bWl0YCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGBtY3RwX3VzYl9zdGFydF94bWl0YCwgc3BlY2lmaWNhbGx5IGluIGBtY3RwLXVzYi5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgVVNCIHRyYW5zcG9ydCBpbml0aWF0ZXMgdHJhbnNtaXNzaW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIE1DVFAgbWVzc2FnZXMgYXJlIG1hcnNoYWxlZCwgd2hlcmUgdGhlIERNQSBpcyBzZXQgdXAgKGlmIGFwcGxpY2FibGUpLCBhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBwb3RlbnRpYWwgYnVzIGNvbnRlbnRpb24gb3IgZXJyb3JzLiBJJ20gcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4gdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGVtcGxveWVkIHRvIGVuc3VyZSBhdG9taWMgb3BlcmF0aW9ucywgYmVjYXVzZSB0aGF0J3MgYWx3YXlzIGEgcG9pbnQgb2Ygc3VidGxlIGJ1Z3MgaW4gbXVsdGktdGhyZWFkZWQgY29udGV4dHMuIExldCdzIHNlZSBob3cgdGhlIHBhY2tldCBkZXNjcmlwdG9yIGlzIHVzZWQsIGFuZCBob3cgdGhlIGJ1ZmZlciBwb29sIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIHNldHVwIHRvbzsgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIGhvdyB0aGUgVFggY29tcGxldGlvbiBpbnRlcnJ1cHQgaXMgaGFuZGxlZCBhbmQgaWYgd2UncmUgdXNpbmcgcG9sbGluZy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIGFyb3VuZCBzaGFyZWQgcmVzb3VyY2VzLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgcmluZyBidWZmZXIgaWYgaXQncyB0aGVyZS4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IHRoaXMgcGFydCBvZiB0aGUgZHJpdmVyIGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgdG8gdGhlIGV4aXN0aW5nIE1DVFAgaW1wbGVtZW50YXRpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgYnVmZmVyIG1hbmFnZW1lbnQgdG8gYXZvaWQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTUwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MjMuNzEzNjA2MTc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTQ0NjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtY3RwX3VzYl9zdGFydF94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIHR4X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0xMjUtXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjEyNjpzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0xMjctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MzA0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWN0cF91c2JfbmV0ZGV2X29wcyA9IHtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MzA1OlxcdC5uZG9fc3RhcnRfeG1pdCA9IG1jdHBfdXNiX3N0YXJ0X3htaXQsXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTMwNi1cXHQubmRvX29wZW4gPSBtY3RwX3VzYl9vcGVuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzozMDoyMy43NzUwNTg0MTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMjM5OTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbWN0cF91c2JfcnhfcXVldWVgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBtY3RwX3VzYl9yeF9xdWV1ZWAgZnVuY3Rpb24gd2l0aGluIHRoZSBgbWN0cC11c2IuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgaW5jb21pbmcgVVNCIGRhdGEgcmVjZXB0aW9uIGlzIGhhbmRsZWQsIHNvIGl0J3MgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBxdWV1ZSBvcGVyYXRlcywgaG93IGl0J3MgbWFuYWdlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBjb21wb25lbnRzIGluIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGJ1ZmZlciBtYW5hZ2VtZW50LCBhbmQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoaXMgcGFydCBvZiB0aGUgY29kZS4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHB1bGxpbmcgaW5jb21pbmcgcGFja2V0cyBvZmYgdGhlIFVTQiBpbnRlcmZhY2UsIHZhbGlkYXRpbmcgdGhlbSwgYW5kIHRoZW4gcGVyaGFwcyBlbnF1ZXVpbmcgdGhlbSBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBJIGV4cGVjdCB0byBzZWUgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gYnVmZmVyaW5nLCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBwZXJoYXBzIHNvbWUgZm9ybSBvZiBsb2NraW5nIG9yIHN5bmNocm9uaXphdGlvbiB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkuIExldCdzIHNlZSB3aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDU3NCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjMwOjI3LjM3NzQ2MTUzM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI2MTQzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWN0cF91c2JfcnhfcXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz0xNDM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgUlhfUkVUUllfREVMQVkgPSBIWiAvIDQ7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTE0NC1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MTQ1OnN0YXRpYyBpbnQgbWN0cF91c2JfcnhfcXVldWUoc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiwgZ2ZwX3QgZ2ZwKVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0xNDYte1xcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jPTE4MT1zdGF0aWMgdm9pZCBtY3RwX3VzYl9pbl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMjQxLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYzoyNDI6XFx0bWN0cF91c2JfcnhfcXVldWUobWN0cF91c2IsIEdGUF9BVE9NSUMpO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0yNDMtfVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jPTI0NT1zdGF0aWMgdm9pZCBtY3RwX3VzYl9yeF9yZXRyeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0yNjMtXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjI2NDpcXHRtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTI2NS19XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MjY3PXN0YXRpYyBpbnQgbWN0cF91c2Jfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTI3Ni1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6Mjc3OlxcdHJldHVybiBtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTI3OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjMwOjI3LjQ0MDA4MDgxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIzMDAyNTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtY3RwX3VzYmxpYl90eF9wdXNoYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGUgdHJhbnNtaXQgc2lkZSBvZiB0aGUgVVNCIGxpYnJhcnkgaW1wbGVtZW50YXRpb24uIFRoZSBmaXJzdCBwbGFjZSB0byBjaGVjaywgbmF0dXJhbGx5LCBpcyBgbWN0cF91c2JsaWJfdHhfcHVzaGAgd2l0aGluIGBtY3RwLXVzYmxpYi5jYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGNvcmUgb2YgcHVzaGluZyBkYXRhIG9udG8gdGhlIFVTQiB0cmFuc21pdCBxdWV1ZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSBidWZmZXIgYWxsb2NhdGlvbiwgaW50ZXJydXB0IHByb3RlY3Rpb24gKHByb2JhYmx5IG11dGV4ZXMgb3Igc3BpbmxvY2tzKSwgYW55IHBvdGVudGlhbCBmbG93IGNvbnRyb2wgbWVjaGFuaXNtcywgYW5kIG9mIGNvdXJzZSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBVU0IgY29udHJvbGxlciBoYXJkd2FyZSByZWdpc3RlcnMgb3IgZHJpdmVyIGZ1bmN0aW9ucyB0byBhY3R1YWxseSBpbml0aWF0ZSB0aGUgdHJhbnNtaXNzaW9uLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBkZWFscyB3aXRoIHBhcnRpYWwgcGFja2V0cyBvciBpZiBpdCBoYXMgYW55IHNtYXJ0IGJ1ZmZlcmluZyBzY2hlbWVzIGZvciBkaWZmZXJlbnQgbWVzc2FnZSBzaXplcy4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiBpdCByZXR1cm5zIGFueSBlcnJvciBjb2RlcyB0aGF0IHdvdWxkIHRlbGwgbWUgaG93IHRoZSBmdW5jdGlvbiBkZWFscyB3aXRoIGEgZnVsbCBxdWV1ZS4gTGV0J3Mgc2VlIGhvdyB0aGV5IGhhbmRsZWQgdGhlIERNQSBjb25maWd1cmF0aW9uIHRvby4gR290IHRvIGJlIHN1cmUgdGhleSdyZSBub3QgYmxvY2tpbmcgdW5uZWNlc3NhcmlseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzODYsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzozMDozMC44NjMwODUzN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxNzY4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWN0cF91c2JsaWJfdHhfcHVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTQ0NT1zdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X3NrYl9wcmVwYXJlKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgc3BhbixcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy00ODMtICovXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjQ4NDppbnQgbWN0cF91c2JsaWJfdHhfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy00ODUtXFx0XFx0XFx0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy01ODgtfVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzo1ODk6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfcHVzaCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTU5MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MzAuOTIyMjY4MDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NzcwMzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgbWN0cC11c2JsaWIuYyBUcmFuc2FjdGlvbiBDb21wbGV0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoZSBjb21wbGV0aW9uIG9mIGEgdHJhbnNtaXNzaW9uLiBUaW1lIHRvIHplcm8gaW4gb24gYG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGVgIHdpdGhpbiBgbWN0cC11c2JsaWIuY2AuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIHByb3BlciB0cmFuc2FjdGlvbiBoYW5kbGluZyBhbmQgZXJyb3IgbWFuYWdlbWVudCBhdCB0aGUgVVNCIGxheWVyIG9mIHRoZSBNQ1RQIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGNvbXBsZXRpb24gY2FsbGJhY2sgdGllcyBpbnRvIHRoZSBvdmVyYWxsIHN0YXRlIG1hY2hpbmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgVVNCIGRyaXZlciBhcyB3ZWxsIGFzIHRoZSBNQ1RQIGNvcmUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB2YXJpYWJsZXMgYXJlIGJlaW5nIHNldCBvciBjbGVhcmVkLCBhbnkgaW50ZXJydXB0cyBiZWluZyB0cmlnZ2VyZWQsIGFuZCBlcnJvciBjb2RlcyBiZWluZyBoYW5kbGVkIG9uIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBidWZmZXIgbWFuYWdlbWVudC4gSSdsbCBwcm9iYWJseSBzdGFydCBieSBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHJlbGV2YW50IGludGVycnVwdCBoYW5kbGVycyBhbmQgZXJyb3IgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxOTUzLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MzQuMjE5OTczOTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTI3NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz00MTM9c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy00MjktICovXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjQzMDp2b2lkIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy00MzEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG9rKVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTQzOC19XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjQzOTpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNDQwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzozMDozNC4yNzcxMDcyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDU3NTQ3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoYXQgY29kZSBzbmlwcGV0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNQ1RQIFVTQiBMaWJyYXJ5KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB0cmFuc21pc3Npb24gY2FuY2VsbGF0aW9uIHdvcmtzIHdpdGhpbiB0aGUgTUNUUCBVU0IgbGlicmFyeS4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbWN0cF91c2JsaWJfdHhfY2FuY2VsYCBpbiBgbWN0cC11c2JsaWIuY2AuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY2Vzc2F0aW9uIG9mIGRhdGEgdHJhbnNtaXNzaW9uLiBJcyBpdCBhIGdyYWNlZnVsIHNodXRkb3duIG9mIHRoZSBVU0IgZW5kcG9pbnQsIGEgcXVldWluZyBpc3N1ZSwgb3IganVzdCBjbGVhcmluZyBhIGZsYWc/IEFuZCwgd2hhdCBzdGF0ZSBkb2VzIHRoZSBkZXZpY2Ugb3IgY29udHJvbGxlciBlbnRlciB1cG9uIHRoZSBjYW5jZWxsYXRpb24/IEknbGwgcHJvYmFibHkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIFVTQiBkcml2ZXIgYW5kIHRoZSBNQ1RQIHByb3RvY29sIGxheWVycy4gSSdtIGV4cGVjdGluZyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIHJlZ2FyZGluZyBkaWZmZXJlbnQgdHJhbnNtaXNzaW9uIHN0YXRlcyBvciBlcnJvciBjb25kaXRpb25zLCBzbyB0aGF0IHdpbGwgYmUgdGhlIGZvY2FsIHBvaW50IG9mIG15IHNjcnV0aW55LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjUyMSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjMwOjM3LjQ4Mjg2NTM3NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc5MDM0MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWN0cF91c2JsaWJfdHhfY2FuY2VsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9NTg5PUVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3B1c2gpO1xcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTU5MS0vKiBDYW5jZWwgYSB0eDogYW55IHVuLXNlbnQgY29udGV4dCBpcyByZWxlYXNlZC4gKi9cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6NTkyOnZvaWQgbWN0cF91c2JsaWJfdHhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTU5My1cXHRcXHRcXHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNjA3LX1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6NjA4OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2NhbmNlbCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYwOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MzcuNTQwNzc0NTY2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNjg3NDI0OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBNQ1RQLW92ZXItVVNCIHdpdGggdGhlIE5ldyBMaWJyYXJ5KipcblxuT2theSwgc28gSSd2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIG5ldyBjb21tb24gbGlicmFyeSwgYG1jdHAtdXNibGliYCwgYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBleGlzdGluZyBgbWN0cC11c2JgIHRyYW5zcG9ydCBkcml2ZXIuXG5cbk15IG1haW4gZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGluY2x1ZGVkIGluIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb246IGBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlYCwgYG1jdHBfdXNibGliX3J4X2NvbXBsZXRlYCwgYG1jdHBfdXNibGliX3R4X3B1c2hgLCBgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZWAsIGBtY3RwX3VzYl9pbl9jb21wbGV0ZWAsIGBtY3RwX3VzYl9vdXRfY29tcGxldGVgLCBgbWN0cF91c2JfdHhfc2VuZGAsIGBtY3RwX3VzYl9zdGFydF94bWl0YCwgYW5kIGBtY3RwX3VzYl9yeF9xdWV1ZWAuIFRoZXNlIGFyZSB0aGUgY29yZSBlbnRyeSBwb2ludHMgYW5kIGNvbXBsZXRpb24gcm91dGluZXMsIHNvIHRob3NlIGFyZSB3aGF0IEknbGwgc3RhcnQgd2l0aC5cblxuVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgZnVuY3Rpb25hbC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGdhZGdldCBlbXVsYXRpb24sIHdoaWNoIGlzIHdoYXQgSSdkIGV4cGVjdC4gVG8gZW5zdXJlIHRoaXMgaXMgc2V0dXAgcHJvcGVybHksIEknbGwgbmVlZCB0byBlbmFibGUgYSBmZXcgY29uZmlndXJhdGlvbnM6IEZpcnN0LCB0aGUgYmFzaWMgYE1DVFBgIHN1cHBvcnQuIFRoZW4sIG9mIGNvdXJzZSwgdGhlIGBNQ1RQX1RSQU5TUE9SVF9VU0JgIG9wdGlvbiwgYW5kIGZpbmFsbHksIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJgLiBJIG5vdGVkIHRoYXQgYE1DVFBfVFJBTlNQT1JUX1VTQkxJQmAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBieSBgTUNUUF9UUkFOU1BPUlRfVVNCYCwgYnV0IEknbSBnb2luZyB0byBsaXN0IGl0IGV4cGxpY2l0bHkgZm9yIGNsYXJpdHkuXG5cbkknbSBza2lwcGluZyB0aGUgYE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUYCBjb25maWcsIHNpbmNlIHRoYXQncyBhIEtVbml0IHRlc3QsIGFuZCBmdXp6aW5nIGRvZXNuJ3QgdHlwaWNhbGx5IHJlcXVpcmUgdGhvc2UuIEl0J3MgbW9yZSBhYm91dCBjb2RlIGNvdmVyYWdlIHRoYW4gcnVubmluZyB1bml0IHRlc3RzLlxuXG5TbywgaGVyZSdzIHdoYXQgSSdsbCBzZXQgdXAgZm9yIHRoZSBmdXp6aW5nIHJ1bjpcblxuKipXb3J0aEZ1enppbmc6IHRydWUqKlxuXG4qKkZvY3VzU3ltYm9sczoqKlxuLSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlXG4tIG1jdHBfdXNibGliX3J4X2NvbXBsZXRlXG4tIG1jdHBfdXNibGliX3R4X3B1c2hcbi0gbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZVxuLSBtY3RwX3VzYl9pbl9jb21wbGV0ZVxuLSBtY3RwX3VzYl9vdXRfY29tcGxldGVcbi0gbWN0cF91c2JfdHhfc2VuZFxuLSBtY3RwX3VzYl9zdGFydF94bWl0XG4tIG1jdHBfdXNiX3J4X3F1ZXVlXG5cbioqRW5hYmxlQ29uZmlnczoqKlxuLSBNQ1RQXG4tIE1DVFBfVFJBTlNQT1JUX1VTQlxuLSBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcblxuVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiBhbmQgbW9kaWZpZXMgdGhlIE1DVFAgVVNCIHRyYW5zcG9ydCBkcml2ZXIgdG8gdXNlIGl0LiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi4gSXQncyBwcmltZSB0ZXJyaXRvcnkgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDQxLCJPdXRwdXRUb2tlbnMiOjIzOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzozMDo0Ni44MDk1MjMyMjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTgyNjIwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUNUUFwiLFxuICAgIFwiTUNUUF9UUkFOU1BPUlRfVVNCXCIsXG4gICAgXCJNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9wcmVwYXJlXCIsXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfcHVzaFwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2JfaW5fY29tcGxldGVcIixcbiAgICBcIm1jdHBfdXNiX291dF9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2JfdHhfc2VuZFwiLFxuICAgIFwibWN0cF91c2Jfc3RhcnRfeG1pdFwiLFxuICAgIFwibWN0cF91c2JfcnhfcXVldWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBsaWJyYXJ5IGZvciBNQ1RQLW92ZXItVVNCIChgbWN0cC11c2JsaWJgKSBhbmQgbW9kaWZpZXMgdGhlIE1DVFAgVVNCIHRyYW5zcG9ydCBkcml2ZXIgKGBtY3RwLXVzYmApIHRvIHVzZSBpdC4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24gKGUuZy4sIHJhdy1nYWRnZXQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1DVFBcIixcbiAgICBcIk1DVFBfVFJBTlNQT1JUX1VTQlwiLFxuICAgIFwiTUNUUF9UUkFOU1BPUlRfVVNCTElCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWN0cF91c2JsaWJfcnhfcHJlcGFyZVwiLFxuICAgIFwibWN0cF91c2JsaWJfcnhfY29tcGxldGVcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X3B1c2hcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGVcIixcbiAgICBcIm1jdHBfdXNiX2luX2NvbXBsZXRlXCIsXG4gICAgXCJtY3RwX3VzYl9vdXRfY29tcGxldGVcIixcbiAgICBcIm1jdHBfdXNiX3R4X3NlbmRcIixcbiAgICBcIm1jdHBfdXNiX3N0YXJ0X3htaXRcIixcbiAgICBcIm1jdHBfdXNiX3J4X3F1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiAoYG1jdHAtdXNibGliYCkgYW5kIG1vZGlmaWVzIHRoZSBNQ1RQIFVTQiB0cmFuc3BvcnQgZHJpdmVyIChgbWN0cC11c2JgKSB0byB1c2UgaXQuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIFVTQiBnYWRnZXQgZW11bGF0aW9uIChlLmcuLCByYXctZ2FkZ2V0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow6glw2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 23:18:39 +0000 UTC FinishedAt: 2026-07-08 23:30:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MCTP", "MCTP_TRANSPORT_USB", "MCTP_TRANSPORT_USBLIB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MCTP", "MCTP_TRANSPORT_USB", "MCTP_TRANSPORT_USBLIB" ], "series_id": "ea616825-019c-408e-9c2b-76afe964466e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mctp_usblib_rx_prepare", "mctp_usblib_rx_complete", "mctp_usblib_tx_push", "mctp_usblib_tx_send_complete", "mctp_usb_in_complete", "mctp_usb_out_complete", "mctp_usb_tx_send", "mctp_usb_start_xmit", "mctp_usb_rx_queue" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7TUNUUF9UUkFOU1BPUlRfVVNCJiMzNDssCiAgICAmIzM0O01DVFBfVFJBTlNQT1JUX1VTQkxJQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21jdHBfdXNibGliX3J4X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfcnhfY29tcGxldGUmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfcHVzaCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O21jdHBfdXNiX2luX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O21jdHBfdXNiX291dF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYl90eF9zZW5kJiMzNDssCiAgICAmIzM0O21jdHBfdXNiX3N0YXJ0X3htaXQmIzM0OywKICAgICYjMzQ7bWN0cF91c2JfcnhfcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiAoYG1jdHAtdXNibGliYCkgYW5kIG1vZGlmaWVzIHRoZSBNQ1RQIFVTQiB0cmFuc3BvcnQgZHJpdmVyIChgbWN0cC11c2JgKSB0byB1c2UgaXQuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIFVTQiBnYWRnZXQgZW11bGF0aW9uIChlLmcuLCByYXctZ2FkZ2V0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ2ZGE3NzQ0ZjI1OWEyMzYyYmE0MTM0NDlkNjZlMTYxMDEzNThlODFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDIzOjI5OjQ3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xuaW5kZXggY2YzMjVhYjBiMWVmNTUuLmM0MGFjOWM2NjViNzU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL0tjb25maWdcbkBAIC00Nyw5ICYjNDM7NDcsMjUgQEAgY29uZmlnIE1DVFBfVFJBTlNQT1JUX0kzQ1xuIFx0ICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCBmb3IgZWFjaCBJM0MgYnVzXG4gXHQgIGhhdmluZyBhIFwmIzM0O21jdHAtY29udHJvbGxlclwmIzM0OyBkZXZpY2V0cmVlIHByb3BlcnR5LlxuIFxuJiM0Mztjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7TUNUUCBvdmVyIFVTQiBjb21tb24gbGlicmFyeVwmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gVVNCXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgQ29tbW9uIHByb3RvY29sIGhhbmRsaW5nIGZ1bmN0aW9ucyBmb3IgTUNUUC1vdmVyLVVTQiB0cmFuc3BvcnRcbiYjNDM7XHQgIGltcGxlbWVudGF0aW9ucywgc3VpdGFibGUgZm9yIHVzZSBpbiBlaXRoZXIgaG9zdC0gb3IgZ2FkZ2V0LXNpZGVcbiYjNDM7XHQgIHRyYW5zcG9ydCBkcml2ZXJcbiYjNDM7XG4mIzQzO1x0ICBUaGlzIHdpbGwgYmUgYXV0b21hdGljYWxseSBlbmFibGVkIGJ5IHRoZSB0cmFuc3BvcnQgZHJpdmVyLlxuJiM0MztcbiYjNDM7Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUXG4mIzQzOyAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIHVzYmxpYiB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzQzOyAgICAgICAgZGVwZW5kcyBvbiBNQ1RQX1RSQU5TUE9SVF9VU0JMSUI9eSBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuJiM0MzsgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4mIzQzO1xuIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JcbiBcdHRyaXN0YXRlIFwmIzM0O01DVFAgVVNCIHRyYW5zcG9ydFwmIzM0O1xuIFx0ZGVwZW5kcyBvbiBVU0JcbiYjNDM7XHRzZWxlY3QgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4gXHRoZWxwXG4gXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBVU0IgdHJhbnNwb3J0LFxuIFx0ICBkZWZpbmVkIGJ5IERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjgzLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG5pbmRleCBjMzYwMDY4NDlhMWU3ZC4uYzg3MGI2MmQzZjFjOTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG5AQCAtMiwzICYjNDM7Miw0IEBAIG9iai0kKENPTkZJR19NQ1RQX1NFUklBTCkgJiM0Mzs9IG1jdHAtc2VyaWFsLm9cbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTJDKSAmIzQzOz0gbWN0cC1pMmMub1xuIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JM0MpICYjNDM7PSBtY3RwLWkzYy5vXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQikgJiM0Mzs9IG1jdHAtdXNiLm9cbiYjNDM7b2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQkxJQikgJiM0Mzs9IG1jdHAtdXNibGliLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNcbmluZGV4IGZhZGU2NWYyZjI2OTk1Li4yZDMxMDc1Mzc0YjQ1YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jXG5AQCAtMyw5ICYjNDM7Myw5IEBAXG4gICogbWN0cC11c2IuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGJpbmRpbmcgZHJpdmVyLlxuICAqXG4gICogRFNQMDI4MyBpcyBhdmFpbGFibGUgYXQ6XG4tICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4wLjEucGRmXG4mIzQzOyAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMS4wLnBkZlxuICAqXG4tICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjUgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZFxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbkBAIC0yMiw5NSAmIzQzOzIyLDExNSBAQFxuIHN0cnVjdCBtY3RwX3VzYiB7XG4gXHRzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2O1xuIFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7XG4mIzQzO1x0Ym9vbCBzcGFuO1xuIFxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcbiBcdHU4IGVwX2luO1xuIFx0dTggZXBfb3V0O1xuIFxuLVx0c3RydWN0IHVyYiAqdHhfdXJiO1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCByeDtcbiBcdHN0cnVjdCB1cmIgKnJ4X3VyYjtcbiYjNDM7XHRpbnQgaW5fZXJyX2NvdW50O1xuJiM0MztcdGludCBpbl9lcnJfb3JpZztcbiYjNDM7XHRib29sIGNsZWFyX2hhbHQ7XG4gXG4gXHQvKiBlbmZvcmNlcyBhdG9taWMgYWNjZXNzIHRvIHJ4X3N0b3BwZWQgYW5kIHJlcXVldWluZyB0aGUgcmV0cnkgd29yayAqL1xuIFx0c3BpbmxvY2tfdCByeF9sb2NrO1xuIFx0Ym9vbCByeF9zdG9wcGVkO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayByeF9yZXRyeV93b3JrO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggdHg7XG4mIzQzO1x0c3RydWN0IHVzYl9hbmNob3IgdHhfYW5jaG9yO1xuJiM0MztcdC8qIHNlcmlhbGlzZXMgdHhfcW1lbSB1cGRhdGVzIHRvIG5ldGRldiBxdWV1ZSBzdGF0ZXMgKi9cbiYjNDM7XHRzcGlubG9ja190IHR4X3FtZW1fbG9jaztcbiYjNDM7XHRpbnQgdHhfcW1lbTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0ge1xuJiM0MztcdE1DVFBfVVNCX1NVQkNMQVNTX0JBU0UgPSAweDAwLFxuJiM0MztcdE1DVFBfVVNCX1NVQkNMQVNTX1NQQU4gPSAweDAyLFxuIH07XG4gXG4mIzQzOy8qIFdlIHVzZSBhIHRvdGFsLXNpemUgbGltaXQgZm9yIG91dHN0YW5kaW5nIFVSQnMsIGFzIHRoZSB0cmFuc2ZlciBjb3VudHNcbiYjNDM7ICogbWF5IHZhcnkgYSBsb3QgYmV0d2VlbiBzcGFubmluZy0gYW5kIG5vbi1zcGFubmluZyBtb2Rlcy4gSW4gc3Bhbm5pbmcgbW9kZSxcbiYjNDM7ICogdGhpcyB3aWxsIGFsbG93IGZvciBhIGNvdXBsZSBvZiBtYXgtc2l6ZWQgdHJhbnNmZXJzIHRvIGJlIGluIGZsaWdodC4gSW5cbiYjNDM7ICogbm9uLXNwYW5uaW5nIG1vZGUsIDMyLlxuJiM0MzsgKlxuJiM0MzsgKiBXZSB3YW50IHRvIGF2b2lkIGRpc2FibGluZyB0aGUgdHggcXVldWUgaWYgcG9zc2libGU7IGRvaW5nIHNvIHdpbGwgZW5kIHVwXG4mIzQzOyAqIHJlcXVldWVpbmcgdG8gZ3NvX3NrYiwgYW5kIHdlIG9ubHkgZGVxdWV1ZSBmcm9tIHRoYXQgb25lIHNrYiBhdCBhIHRpbWUsXG4mIzQzOyAqIHNvIGNhbiBubyBsb25nZXIgcGVyZm9ybSB0cmFuc2ZlciBwYWNraW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUWF9RTUVNX01BWCA9IDE2Mzg0O1xuJiM0MztcbiBzdGF0aWMgdm9pZCBtY3RwX3VzYl9vdXRfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuIHtcbi1cdHN0cnVjdCBza19idWZmICpza2IgPSB1cmItXHUwMDNlY29udGV4dDtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBza2ItXHUwMDNlZGV2O1xuLVx0aW50IHN0YXR1cztcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHggPSB1cmItXHUwMDNlY29udGV4dDtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYodHhfY3R4KTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbGVuID0gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG1jdHBfdXNiLVx1MDAzZW5ldGRldjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0c3RhdHVzID0gdXJiLVx1MDAzZXN0YXR1cztcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHR4X2N0eCwgbmV0ZGV2LCB1cmItXHUwMDNlc3RhdHVzID09IDApO1xuIFxuLVx0c3dpdGNoIChzdGF0dXMpIHtcbi1cdGNhc2UgLUVOT0VOVDpcbi1cdGNhc2UgLUVDT05OUkVTRVQ6XG4tXHRjYXNlIC1FU0hVVERPV046XG4tXHRjYXNlIC1FUFJPVE86XG4tXHRcdGRldl9kc3RhdHNfdHhfZHJvcHBlZChuZXRkZXYpO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgMDpcbi1cdFx0ZGV2X2RzdGF0c190eF9hZGQobmV0ZGV2LCBza2ItXHUwMDNlbGVuKTtcbi1cdFx0bmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpO1xuLVx0XHRjb25zdW1lX3NrYihza2IpO1xuLVx0XHRyZXR1cm47XG4tXHRkZWZhdWx0OlxuLVx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7dW5leHBlY3RlZCB0eCB1cmIgc3RhdHVzOiAlZFxcblwmIzM0Oywgc3RhdHVzKTtcbi1cdFx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKG5ldGRldik7XG4tXHR9XG4mIzQzO1x0dXNiX2ZyZWVfdXJiKHVyYik7XG4gXG4tXHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtY3RwX3VzYi1cdTAwM2V0eF9xbWVtX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRtY3RwX3VzYi1cdTAwM2V0eF9xbWVtIC09IGxlbjtcbiYjNDM7XHRpZiAobWN0cF91c2ItXHUwMDNldHhfcW1lbSBcdTAwM2MgVFhfUU1FTV9NQVggXHUwMDI2XHUwMDI2IG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiYjNDM7XHRcdG5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4mIzQzO1x0XHRcdCAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuKVxuIHtcbi1cdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xuLVx0dW5zaWduZWQgaW50IHBsZW47XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCB1cmIgKnVyYjtcbiBcdGludCByYztcbiBcbi1cdHBsZW4gPSBza2ItXHUwMDNlbGVuO1xuLVxuLVx0aWYgKHBsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpIFx1MDAzZSBNQ1RQX1VTQl9YRkVSX1NJWkUpXG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4tXG4tXHRyYyA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqaGRyKSk7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4tXG4tXHRoZHIgPSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7XG4tXHRpZiAoIWhkcilcbi1cdFx0Z290byBlcnJfZHJvcDtcbi1cbi1cdGhkci1cdTAwM2VpZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xuLVx0aGRyLVx1MDAzZXJzdmQgPSAwO1xuLVx0aGRyLVx1MDAzZWxlbiA9IHBsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpO1xuLVxuLVx0dXJiID0gbWN0cF91c2ItXHUwMDNldHhfdXJiO1xuJiM0MztcdHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0aWYgKCF1cmIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgbWN0cF91c2ItXHUwMDNldXNiZGV2LFxuIFx0XHRcdCAgdXNiX3NuZGJ1bGtwaXBlKG1jdHBfdXNiLVx1MDAzZXVzYmRldiwgbWN0cF91c2ItXHUwMDNlZXBfb3V0KSxcbi1cdFx0XHQgIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuLFxuLVx0XHRcdCAgbWN0cF91c2Jfb3V0X2NvbXBsZXRlLCBza2IpO1xuJiM0MztcdFx0XHQgIGRhdGEsIGxlbiwgbWN0cF91c2Jfb3V0X2NvbXBsZXRlLCB0eF9jdHgpO1xuJiM0MztcbiYjNDM7XHRpZiAobWN0cF91c2ItXHUwMDNlc3BhbilcbiYjNDM7XHRcdHVyYi1cdTAwM2V0cmFuc2Zlcl9mbGFncyB8PSBVUkJfWkVST19QQUNLRVQ7XG4mIzQzO1xuJiM0MztcdHVzYl9hbmNob3JfdXJiKHVyYiwgXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfYW5jaG9yKTtcbiBcbi1cdC8qIFN0b3BzIFRYIHF1ZXVlIGZpcnN0IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb24gd2l0aCBVUkIgY29tcGxldGUgKi9cbi1cdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcbiBcdHJjID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTtcbiBcdGlmIChyYykge1xuLVx0XHRuZXRpZl93YWtlX3F1ZXVlKGRldik7XG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4mIzQzO1x0XHRuZXRkZXZfZGJnKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgXCYjMzQ7VFggdXJiIHN1Ym1pdCBmYWlsZWQsICVkXFxuXCYjMzQ7LCByYyk7XG4mIzQzO1x0XHR1c2JfdW5hbmNob3JfdXJiKHVyYik7XG4mIzQzO1x0XHR1c2JfZnJlZV91cmIodXJiKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfcW1lbV9sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRtY3RwX3VzYi1cdTAwM2V0eF9xbWVtICYjNDM7PSBsZW47XG4mIzQzO1x0XHRpZiAobWN0cF91c2ItXHUwMDNldHhfcW1lbSBcdTAwM2U9IFRYX1FNRU1fTUFYKVxuJiM0MztcdFx0XHRuZXRpZl9zdG9wX3F1ZXVlKG1jdHBfdXNiLVx1MDAzZW5ldGRldik7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xuIFx0fVxuIFxuLVx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIHR4X29wcyA9IHtcbiYjNDM7XHQuc2VuZCA9IG1jdHBfdXNiX3R4X3NlbmQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0Ym9vbCBtb3JlID0gbmV0ZGV2X3htaXRfbW9yZSgpO1xuJiM0MztcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9wdXNoKGRldiwgXHUwMDI2bWN0cF91c2ItXHUwMDNldHgsIHNrYiwgbW9yZSk7XG4gXG4tZXJyX2Ryb3A6XG4tXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTtcbi1cdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG4gXG5AQCAtMTI1LDI0ICYjNDM7MTQ1LDIzIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIFJYX1JFVFJZX0RFTEFZID0gSFogLyA0O1xuIHN0YXRpYyBpbnQgbWN0cF91c2JfcnhfcXVldWUoc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiwgZ2ZwX3QgZ2ZwKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1x0dm9pZCAqYnVmO1xuIFx0aW50IHJjO1xuIFxuLVx0c2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgTUNUUF9VU0JfWEZFUl9TSVpFLCBnZnApO1xuLVx0aWYgKCFza2IpIHtcbi1cdFx0cmMgPSAtRU5PTUVNO1xuJiM0MztcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShtY3RwX3VzYi1cdTAwM2VuZXRkZXYsIFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4LFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZidWYsIFx1MDAyNmxlbiwgZ2ZwKTtcbiYjNDM7XHRpZiAocmMpXG4gXHRcdGdvdG8gZXJyX3JldHJ5O1xuLVx0fVxuIFxuIFx0dXNiX2ZpbGxfYnVsa191cmIobWN0cF91c2ItXHUwMDNlcnhfdXJiLCBtY3RwX3VzYi1cdTAwM2V1c2JkZXYsXG4gXHRcdFx0ICB1c2JfcmN2YnVsa3BpcGUobWN0cF91c2ItXHUwMDNldXNiZGV2LCBtY3RwX3VzYi1cdTAwM2VlcF9pbiksXG4tXHRcdFx0ICBza2ItXHUwMDNlZGF0YSwgTUNUUF9VU0JfWEZFUl9TSVpFLFxuLVx0XHRcdCAgbWN0cF91c2JfaW5fY29tcGxldGUsIHNrYik7XG4mIzQzO1x0XHRcdCAgYnVmLCBsZW4sIG1jdHBfdXNiX2luX2NvbXBsZXRlLCBtY3RwX3VzYik7XG4gXG4gXHRyYyA9IHVzYl9zdWJtaXRfdXJiKG1jdHBfdXNiLVx1MDAzZXJ4X3VyYiwgZ2ZwKTtcbiBcdGlmIChyYykge1xuIFx0XHRuZXRkZXZfZGJnKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgXCYjMzQ7cnggdXJiIHN1Ym1pdCBmYWlsdXJlOiAlZFxcblwmIzM0OywgcmMpO1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeCk7XG4gXHRcdGlmIChyYyA9PSAtRU5PTUVNKVxuIFx0XHRcdGdvdG8gZXJyX3JldHJ5O1xuIFx0fVxuQEAgLTE1NywxMyAmIzQzOzE3NiwxMyBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3J4X3F1ZXVlKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGdmcF90IGdmcClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByeF9lcnJfbWF4ID0gMTA7XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2luX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiB7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLVx1MDAzZWRldjtcbi1cdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IG1jdHBfc2tiX2NiICpjYjtcbi1cdHVuc2lnbmVkIGludCBsZW47XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IHVyYi1cdTAwM2Vjb250ZXh0O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBtY3RwX3VzYi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBzdGF0dXM7XG4gXG4gXHRzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuQEAgLTE3Miw4MCAmIzQzOzE5MSw1NCBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9pbl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHRjYXNlIC1FTk9FTlQ6XG4gXHRjYXNlIC1FQ09OTlJFU0VUOlxuIFx0Y2FzZSAtRVNIVVRET1dOOlxuLVx0Y2FzZSAtRVBST1RPOlxuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdC8qIGRldmljZSBzaHV0ZG93biwgZG9uJiMzOTt0IHJlc3VibWl0ICovXG4mIzQzO1x0XHRtY3RwX3VzYmxpYl9yeF9jYW5jZWwoXHUwMDI2bWN0cF91c2ItXHUwMDNlcngpO1xuIFx0XHRyZXR1cm47XG4tXHRjYXNlIDA6XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwmIzM0O3VuZXhwZWN0ZWQgcnggdXJiIHN0YXR1czogJWRcXG5cJiMzNDssIHN0YXR1cyk7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRsZW4gPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aDtcbi1cdF9fc2tiX3B1dChza2IsIGxlbik7XG4tXG4tXHR3aGlsZSAoc2tiKSB7XG4tXHRcdHN0cnVjdCBza19idWZmICpza2IyID0gTlVMTDtcbi1cdFx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xuLVx0XHR1OCBwa3RfbGVuOyAvKiBsZW5ndGggb2YgTUNUUCBwYWNrZXQsIG5vIFVTQiBoZWFkZXIgKi9cbiBcbi1cdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdFx0aGRyID0gc2tiX3B1bGxfZGF0YShza2IsIHNpemVvZigqaGRyKSk7XG4tXHRcdGlmICghaGRyKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0XHRpZiAoYmUxNl90b19jcHUoaGRyLVx1MDAzZWlkKSAhPSBNQ1RQX1VTQl9ETVRGX0lEKSB7XG4tXHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwmIzM0O3J4OiBpbnZhbGlkIGlkICUwNHhcXG5cJiMzNDssXG4tXHRcdFx0XHQgICBiZTE2X3RvX2NwdShoZHItXHUwMDNlaWQpKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuJiM0MztcdGNhc2UgLUVQSVBFOlxuJiM0MztcdFx0LyogZW5kcG9pbnQgc3RhbGw6IGNsZWFyIGhhbHQsIHdoaWNoIHdpbGwgY2F1c2UgYSByZXN1Ym1pdCAqL1xuIFxuLVx0XHRpZiAoaGRyLVx1MDAzZWxlbiBcdTAwM2Ncbi1cdFx0ICAgIHNpemVvZihzdHJ1Y3QgbWN0cF9oZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSkge1xuLVx0XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcJiMzNDtyeDogc2hvcnQgcGFja2V0IChoZHIpICVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgaGRyLVx1MDAzZWxlbik7XG4tXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRpZiAoIW1jdHBfdXNiLVx1MDAzZWluX2Vycl9jb3VudCYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdG1jdHBfdXNiLVx1MDAzZWluX2Vycl9vcmlnID0gc3RhdHVzO1xuJiM0MztcdFx0aWYgKG1jdHBfdXNiLVx1MDAzZWluX2Vycl9jb3VudCBcdTAwM2U9IHJ4X2Vycl9tYXgpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O2V4Y2Vzc2l2ZSBzdGFsbHMgZnJvbSBJTiBFUFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuLVx0XHQvKiB3ZSBrbm93IHdlIGhhdmUgYXQgbGVhc3Qgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpIGhlcmUgKi9cbi1cdFx0cGt0X2xlbiA9IGhkci1cdTAwM2VsZW4gLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcik7XG4tXHRcdGlmIChwa3RfbGVuIFx1MDAzZSBza2ItXHUwMDNlbGVuKSB7XG4tXHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4tXHRcdFx0XHQgICBcJiMzNDtyeDogc2hvcnQgcGFja2V0ICh4ZmVyKSAlZCwgYWN0dWFsICVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgaGRyLVx1MDAzZWxlbiwgc2tiLVx1MDAzZWxlbik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiYjNDM7XHRcdG1jdHBfdXNiLVx1MDAzZWNsZWFyX2hhbHQgPSB0cnVlO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWN0cF91c2ItXHUwMDNlcnhfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0aWYgKCFtY3RwX3VzYi1cdTAwM2VyeF9zdG9wcGVkKVxuJiM0MztcdFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bWN0cF91c2ItXHUwMDNlcnhfcmV0cnlfd29yayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFJYX1JFVFJZX0RFTEFZKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bWN0cF91c2ItXHUwMDNlcnhfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4KTtcbiYjNDM7XHRcdHJldHVybjtcbiBcbi1cdFx0aWYgKHBrdF9sZW4gXHUwMDNjIHNrYi1cdTAwM2VsZW4pIHtcbi1cdFx0XHQvKiBtb3JlIHBhY2tldHMgbWF5IGZvbGxvdyAtIGNsb25lIHRvIGEgbmV3XG4tXHRcdFx0ICogc2tiIHRvIHVzZSBvbiB0aGUgbmV4dCBpdGVyYXRpb25cbi1cdFx0XHQgKi9cbi1cdFx0XHRza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG4tXHRcdFx0aWYgKHNrYjIpIHtcbi1cdFx0XHRcdGlmICghc2tiX3B1bGwoc2tiMiwgcGt0X2xlbikpIHtcbi1cdFx0XHRcdFx0a2ZyZWVfc2tiKHNrYjIpO1xuLVx0XHRcdFx0XHRza2IyID0gTlVMTDtcbi1cdFx0XHRcdH1cbi1cdFx0XHR9XG4tXHRcdFx0c2tiX3RyaW0oc2tiLCBwa3RfbGVuKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwmIzM0O3VuZXhwZWN0ZWQgcnggdXJiIHN0YXR1czogJWRcXG5cJiMzNDssIHN0YXR1cyk7XG4mIzQzO1x0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRjYXNlIC1FVElNRTpcbiYjNDM7XHRjYXNlIC1FUFJPVE86XG4mIzQzO1x0Y2FzZSAtRUlMU0VROlxuJiM0MztcdGNhc2UgLUVPVkVSRkxPVzpcbiYjNDM7XHRcdC8qIHBvc3NpYmx5IHRyYW5zaWVudDsgcmVjb3JkIGZpcnN0IGZhaWx1cmUsIHJlc3VibWl0ICovXG4mIzQzO1x0XHRtY3RwX3VzYmxpYl9yeF9jYW5jZWwoXHUwMDI2bWN0cF91c2ItXHUwMDNlcngpO1xuJiM0MztcdFx0aWYgKCFtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfY291bnQmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfb3JpZyA9IHN0YXR1cztcbiYjNDM7XHRcdGlmIChtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfY291bnQgXHUwMDNlPSByeF9lcnJfbWF4KSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O2V4Y2Vzc2l2ZSBlcnJvcnMgZnJvbSBJTiBFUCwgZmlyc3Q6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1jdHBfdXNiLVx1MDAzZWluX2Vycl9vcmlnKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4mIzQzO1x0XHRicmVhaztcbiBcbi1cdFx0ZGV2X2RzdGF0c19yeF9hZGQobmV0ZGV2LCBza2ItXHUwMDNlbGVuKTtcbi1cbi1cdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7XG4tXHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuLVx0XHRjYiA9IF9fbWN0cF9jYihza2IpO1xuLVx0XHRjYi1cdTAwM2VoYWxlbiA9IDA7XG4tXHRcdG5ldGlmX3J4KHNrYik7XG4tXG4tXHRcdHNrYiA9IHNrYjI7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdFx0bWN0cF91c2JsaWJfcnhfY29tcGxldGUobmV0ZGV2LCBcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeCwgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGgpO1xuJiM0MztcdFx0bWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50ID0gMDtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0aWYgKHNrYilcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXG4gXHRtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0FUT01JQyk7XG4gfVxuIFxuQEAgLTI1Myw2ICYjNDM7MjQ2LDIwIEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX3J4X3JldHJ5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbiBcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1jdHBfdXNiLFxuIFx0XHRcdFx0XHRcdCByeF9yZXRyeV93b3JrLndvcmspO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogV2UgYXJlIG9ubHkgY2FsbGVkIHdoZW4gcnggY29tcGxldGlvbnMgYXJlIHN1c3BlbmRlZCAqL1xuJiM0MztcdGlmIChtY3RwX3VzYi1cdTAwM2VjbGVhcl9oYWx0KSB7XG4mIzQzO1x0XHRpbnQgcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShtY3RwX3VzYi1cdTAwM2V1c2JkZXYsIG1jdHBfdXNiLVx1MDAzZWVwX2luKTtcbiYjNDM7XG4mIzQzO1x0XHRyYyA9IHVzYl9jbGVhcl9oYWx0KG1jdHBfdXNiLVx1MDAzZXVzYmRldiwgcGlwZSk7XG4mIzQzO1x0XHRpZiAocmMpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihtY3RwX3VzYi1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7Y2FuJiMzOTt0IGNsZWFyIElOIEVQIGhhbHQ6ICVkXFxuXCYjMzQ7LCByYyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG1jdHBfdXNiLVx1MDAzZWNsZWFyX2hhbHQgPSBmYWxzZTtcbiYjNDM7XHR9XG4gXG4gXHRtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0tFUk5FTCk7XG4gfVxuQEAgLTI2Miw2ICYjNDM7MjY5LDggQEAgc3RhdGljIGludCBtY3RwX3VzYl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbiBcdFdSSVRFX09OQ0UobWN0cF91c2ItXHUwMDNlcnhfc3RvcHBlZCwgZmFsc2UpO1xuJiM0MztcdG1jdHBfdXNiLVx1MDAzZWNsZWFyX2hhbHQgPSBmYWxzZTtcbiYjNDM7XHRtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfY291bnQgPSAwO1xuIFxuIFx0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbiBcbkBAIC0yODQsNyAmIzQzOzI5MywxMCBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeF9yZXRyeV93b3JrKTtcbiBcbiBcdHVzYl9raWxsX3VyYihtY3RwX3VzYi1cdTAwM2VyeF91cmIpO1xuLVx0dXNiX2tpbGxfdXJiKG1jdHBfdXNiLVx1MDAzZXR4X3VyYik7XG4mIzQzO1xuJiM0MztcdHVzYl9raWxsX2FuY2hvcmVkX3VyYnMoXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfYW5jaG9yKTtcbiYjNDM7XG4mIzQzO1x0bWN0cF91c2JsaWJfdHhfY2FuY2VsKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4LCBkZXYsIFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFkpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMwMSw3ICYjNDM7MzEzLDcgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRkZXYtXHUwMDNlbXR1ID0gTUNUUF9VU0JfTVRVX01JTjtcbiBcdGRldi1cdTAwM2VtaW5fbXR1ID0gTUNUUF9VU0JfTVRVX01JTjtcbi1cdGRldi1cdTAwM2VtYXhfbXR1ID0gTUNUUF9VU0JfTVRVX01BWDtcbiYjNDM7XHRkZXYtXHUwMDNlbWF4X210dSA9IE1DVFBfVVNCXzFfMF9NVFVfTUFYO1xuIFxuIFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTtcbiBcdGRldi1cdTAwM2V0eF9xdWV1ZV9sZW4gPSBERUZBVUxUX1RYX1FVRVVFX0xFTjtcbkBAIC0zMTcsNiAmIzQzOzMyOSw3IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXHRzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcdHN0cnVjdCBtY3RwX3VzYiAqZGV2O1xuJiM0MztcdGJvb2wgc3BhbjtcbiBcdGludCByYztcbiBcbiBcdC8qIG9ubHkgb25lIGFsdGVybmF0ZSAqL1xuQEAgLTMyOCw2ICYjNDM7MzQxLDggQEAgc3RhdGljIGludCBtY3RwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcdFx0cmV0dXJuIHJjO1xuIFx0fVxuIFxuJiM0MztcdHNwYW4gPSBpZmFjZV9kZXNjLVx1MDAzZWRlc2MuYkludGVyZmFjZVN1YkNsYXNzID09IE1DVFBfVVNCX1NVQkNMQVNTX1NQQU47XG4mIzQzO1xuIFx0bmV0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqZGV2KSwgXCYjMzQ7bWN0cHVzYiVkXCYjMzQ7LCBORVRfTkFNRV9FTlVNLFxuIFx0XHRcdCAgICAgIG1jdHBfdXNiX25ldGRldl9zZXR1cCk7XG4gXHRpZiAoIW5ldGRldilcbkBAIC0zMzUsMzMgJiM0MzszNTAsNDMgQEAgc3RhdGljIGludCBtY3RwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcbiBcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgXHUwMDI2aW50Zi1cdTAwM2VkZXYpO1xuIFx0ZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRkZXYtXHUwMDNlc3BhbiA9IHNwYW47XG4gXHRkZXYtXHUwMDNlbmV0ZGV2ID0gbmV0ZGV2O1xuIFx0ZGV2LVx1MDAzZXVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XG4gXHRkZXYtXHUwMDNlaW50ZiA9IGludGY7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZkZXYtXHUwMDNlcnhfbG9jayk7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VzcGFuKVxuJiM0MztcdFx0bmV0ZGV2LVx1MDAzZW1heF9tdHUgPSBNQ1RQX1VTQl8xXzFfTVRVX01BWDtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZkZXYtXHUwMDNldHhfcW1lbV9sb2NrKTtcbiBcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGV2KTtcbiBcbiYjNDM7XHRtY3RwX3VzYmxpYl9yeF9pbml0KFx1MDAyNmRldi1cdTAwM2VyeCwgbGUxNl90b19jcHUoZXBfaW4tXHUwMDNld01heFBhY2tldFNpemUpLFxuJiM0MztcdFx0XHQgICAgZGV2LVx1MDAzZXNwYW4pO1xuJiM0MztcdG1jdHBfdXNibGliX3R4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZXR4LCBcdTAwMjZ0eF9vcHMsIGRldiwgZGV2LVx1MDAzZXNwYW4pO1xuJiM0MztcdGluaXRfdXNiX2FuY2hvcihcdTAwMjZkZXYtXHUwMDNldHhfYW5jaG9yKTtcbiYjNDM7XG4gXHRkZXYtXHUwMDNlZXBfaW4gPSBlcF9pbi1cdTAwM2ViRW5kcG9pbnRBZGRyZXNzO1xuIFx0ZGV2LVx1MDAzZWVwX291dCA9IGVwX291dC1cdTAwM2ViRW5kcG9pbnRBZGRyZXNzO1xuIFxuLVx0ZGV2LVx1MDAzZXR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7XG4gXHRkZXYtXHUwMDNlcnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghZGV2LVx1MDAzZXR4X3VyYiB8fCAhZGV2LVx1MDAzZXJ4X3VyYikge1xuJiM0MztcdGlmICghZGV2LVx1MDAzZXJ4X3VyYikge1xuIFx0XHRyYyA9IC1FTk9NRU07XG4tXHRcdGdvdG8gZXJyX2ZyZWVfdXJicztcbiYjNDM7XHRcdGdvdG8gZXJyX2Zpbmlfcnh0eDtcbiBcdH1cbiBcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNmRldi1cdTAwM2VyeF9yZXRyeV93b3JrLCBtY3RwX3VzYl9yeF9yZXRyeV93b3JrKTtcbiBcbiBcdHJjID0gbWN0cF9yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2LCBOVUxMLCBNQ1RQX1BIWVNfQklORElOR19VU0IpO1xuIFx0aWYgKHJjKVxuLVx0XHRnb3RvIGVycl9mcmVlX3VyYnM7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX3VyYjtcbiBcbiBcdHJldHVybiAwO1xuIFxuLWVycl9mcmVlX3VyYnM6XG4tXHR1c2JfZnJlZV91cmIoZGV2LVx1MDAzZXR4X3VyYik7XG4mIzQzO2Vycl9mcmVlX3VyYjpcbiBcdHVzYl9mcmVlX3VyYihkZXYtXHUwMDNlcnhfdXJiKTtcbiYjNDM7ZXJyX2Zpbmlfcnh0eDpcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9maW5pKFx1MDAyNmRldi1cdTAwM2V0eCk7XG4mIzQzO1x0bWN0cF91c2JsaWJfcnhfZmluaShcdTAwMjZkZXYtXHUwMDNlcngpO1xuIFx0ZnJlZV9uZXRkZXYobmV0ZGV2KTtcbiBcdHJldHVybiByYztcbiB9XG5AQCAtMzcxLDEzICYjNDM7Mzk2LDE1IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHRzdHJ1Y3QgbWN0cF91c2IgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XG4gXG4gXHRtY3RwX3VucmVnaXN0ZXJfbmV0ZGV2KGRldi1cdTAwM2VuZXRkZXYpO1xuLVx0dXNiX2ZyZWVfdXJiKGRldi1cdTAwM2V0eF91cmIpO1xuJiM0MztcdG1jdHBfdXNibGliX3J4X2ZpbmkoXHUwMDI2ZGV2LVx1MDAzZXJ4KTtcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9maW5pKFx1MDAyNmRldi1cdTAwM2V0eCk7XG4gXHR1c2JfZnJlZV91cmIoZGV2LVx1MDAzZXJ4X3VyYik7XG4gXHRmcmVlX25ldGRldihkZXYtXHUwMDNlbmV0ZGV2KTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1jdHBfdXNiX2RldmljZXNbXSA9IHtcbi1cdHsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQ1RQLCAweDAsIDB4MSkgfSxcbiYjNDM7XHR7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgTUNUUF9VU0JfU1VCQ0xBU1NfQkFTRSwgMHgxKSB9LFxuJiM0MztcdHsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQ1RQLCBNQ1RQX1VTQl9TVUJDTEFTU19TUEFOLCAweDEpIH0sXG4gXHR7IDAgfSxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmEyMmJlOTk5ZmEwYTFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jXG5AQCAtMCwwICYjNDM7MSw0MTAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogbWN0cC11c2JsaWItdGVzdC5jIC0gTUNUUC1vdmVyLVVTQiAoRE1URiBEU1AwMjgzKSB0cmFuc3BvcnQgaGVscGVyIGxpYnJhcnksXG4mIzQzOyAqIHVuaXQgdGVzdCBkZWZpbml0aW9ucy5cbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2t1bml0L3Rlc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbWN0cC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9tY3RwZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL21jdHAtdXNiLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiB7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4mIzQzO1x0c3RydWN0IG1jdHBfZGV2ICptZGV2O1xuJiM0MztcdHN0cnVjdCBza19idWZmX2hlYWQgcnhfcGt0cztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCB7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4mIzQzO1x0c3RydWN0IG1jdHBfcm91dGUgcnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2JsaWJfZGV2X3R4KHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHQvKiB3ZSBkb24mIzM5O3QgdHJhY2sgYW55IFRYZWQgcGFja2V0cyBhdCBwcmVzZW50ICovXG4mIzQzO1x0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0cmV0dXJuIE5FVERFVl9UWF9PSztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtY3RwX3Rlc3RfbmV0ZGV2X29wcyA9IHtcbiYjNDM7XHQubmRvX3N0YXJ0X3htaXQgPSBtY3RwX3VzYmxpYl9kZXZfdHgsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgdTE2IGVwX21heHBhY2tldCA9IDUxMjtcbiYjNDM7c3RhdGljIGNvbnN0IG1jdHBfZWlkX3QgbG9jYWxfZWlkID0gODtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdG5kZXYtXHUwMDNldHlwZSA9IEFSUEhSRF9NQ1RQO1xuJiM0MztcdG5kZXYtXHUwMDNlbXR1ID0gODE5MjtcbiYjNDM7XHRuZGV2LVx1MDAzZWZsYWdzID0gSUZGX05PQVJQO1xuJiM0MztcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNm1jdHBfdGVzdF9uZXRkZXZfb3BzO1xuJiM0MztcdG5kZXYtXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO1xuJiM0MztcdG5kZXYtXHUwMDNlcGNwdV9zdGF0X3R5cGUgPSBORVRERVZfUENQVV9TVEFUX0RTVEFUUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9kZXZfYWN0aW9uKHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldiA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VtZGV2KVxuJiM0MztcdFx0bWN0cF9kZXZfcHV0KGRldi1cdTAwM2VtZGV2KTtcbiYjNDM7XHR1bnJlZ2lzdGVyX25ldGRldihkZXYtXHUwMDNlbmRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKlxuJiM0MzttY3RwX3VzYmxpYl90ZXN0X2NyZWF0ZV9kZXYoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRuZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqZGV2KSwgXCYjMzQ7bWN0cHRlc3QlZFwmIzM0OywgTkVUX05BTUVfRU5VTSxcbiYjNDM7XHRcdFx0ICAgIG1jdHBfdXNibGliX2Rldl9zZXR1cCk7XG4mIzQzO1x0aWYgKCFuZGV2KVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGRldiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdGRldi1cdTAwM2VuZGV2ID0gbmRldjtcbiYjNDM7XHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmRldi1cdTAwM2VyeF9wa3RzKTtcbiYjNDM7XG4mIzQzO1x0cmMgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRmcmVlX25ldGRldihuZGV2KTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIG1jdHBfdXNibGliX3Rlc3RfZGV2X2FjdGlvbiwgZGV2KTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGRldi1cdTAwM2VtZGV2ID0gX19tY3RwX2Rldl9nZXQobmRldik7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VtZGV2KVxuJiM0MztcdFx0ZGV2LVx1MDAzZW1kZXYtXHUwMDNlbmV0ID0gbWN0cF9kZWZhdWx0X25ldChkZXZfbmV0KG5kZXYpKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlbWRldilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRyYyA9IGRldl9vcGVuKG5kZXYsIE5VTEwpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0KHN0cnVjdCBtY3RwX2RzdCAqZHN0LFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihza2ItXHUwMDNlZGV2KTtcbiYjNDM7XG4mIzQzO1x0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXJ4X3BrdHMsIHNrYik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uKHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eCA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBkZXZpY2Ugd2lsbCBoYXZlIGJlZW4gZGVzdHJveWVkLCBzbyAtXHUwMDNlcnQgd2lsbCBiZSB1bmxpbmtlZC5cbiYjNDM7XHQgKiBKdXN0IGVuc3VyZSB0aGF0IHRoZSByZWZjb3VudCBpcyBhcyBleHBlY3RlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRLVU5JVF9BU1NFUlRfVFJVRShjdXJyZW50LVx1MDAzZWt1bml0X3Rlc3QsXG4mIzQzO1x0XHRcdCAgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2VydC5yZWZzKSk7XG4mIzQzO1xuJiM0MztcdGtmcmVlKGN0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKm1jdHBfdXNibGliX3Rlc3RfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9yb3V0ZSAqcnQ7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRjdHggPSBremFsbG9jX29iaigqY3R4KTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgY3R4KTtcbiYjNDM7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LVx1MDAzZXJ0Lmxpc3QpO1xuJiM0MztcdHJ0ID0gXHUwMDI2Y3R4LVx1MDAzZXJ0O1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZydC1cdTAwM2VyZWZzLCAxKTtcbiYjNDM7XG4mIzQzO1x0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIG1jdHBfdXNibGliX3Rlc3RfZmluaV9hY3Rpb24sIGN0eCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZWRldiA9IG1jdHBfdXNibGliX3Rlc3RfY3JlYXRlX2Rldih0ZXN0KTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgY3R4LVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdHJ0LVx1MDAzZW1pbiA9IGxvY2FsX2VpZDtcbiYjNDM7XHRydC1cdTAwM2VtYXggPSBsb2NhbF9laWQ7XG4mIzQzO1x0cnQtXHUwMDNlZHN0X3R5cGUgPSBNQ1RQX1JPVVRFX0RJUkVDVDtcbiYjNDM7XHRydC1cdTAwM2V0eXBlID0gUlROX0xPQ0FMO1xuJiM0MztcdHJ0LVx1MDAzZWRldiA9IGN0eC1cdTAwM2VkZXYtXHUwMDNlbWRldjtcbiYjNDM7XHRydC1cdTAwM2VvdXRwdXQgPSBtY3RwX3VzYmxpYl90ZXN0X2RzdF9vdXRwdXQ7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGxpc3RfYWRkX3JjdShcdTAwMjZjdHgtXHUwMDNlcnQubGlzdCwgXHUwMDI2aW5pdF9uZXQubWN0cC5yb3V0ZXMpO1xuJiM0MztcdHJlZmNvdW50X2luYyhcdTAwMjZydC1cdTAwM2VyZWZzKTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY3R4O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBJbml0IGEgTUNUUC1vdmVyLVVTQiBwYWNrZXQgd2l0aGluIGEgYnVmZmVyLiBAbGVuIGlzIHRoZSBsZW5ndGggb2YgdGhlXG4mIzQzOyAqIGJ1ZmZlciB0byB3cml0ZSwgQHBheWxvYWRfbGVuIGlzIHRoZSByZXBvcnRlZCBzaXplIG9mIHRoZSBNQ1RQLW92ZXItVVNCXG4mIzQzOyAqIHBhY2tldC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3Qodm9pZCAqZGF0YSwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdFx0XHQgICAgICBzaXplX3QgcGF5bG9hZF9sZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0c3RydWN0IG1jdHBfdXNiX2hkciB1c2I7XG4mIzQzO1x0XHRzdHJ1Y3QgbWN0cF9oZHIgbWN0cDtcbiYjNDM7XHR9IGhkcjtcbiYjNDM7XG4mIzQzO1x0aGRyLnVzYi5pZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xuJiM0MztcdGhkci51c2IubGVuID0gY3B1X3RvX2JlMTYocGF5bG9hZF9sZW4pO1xuJiM0MztcdGhkci5tY3RwLnZlciA9IDE7XG4mIzQzO1x0aGRyLm1jdHAuZGVzdCA9IGxvY2FsX2VpZDtcbiYjNDM7XHRoZHIubWN0cC5zcmMgPSAwO1xuJiM0MztcdGhkci5tY3RwLmZsYWdzX3NlcV90YWcgPSAwO1xuJiM0MztcbiYjNDM7XHRtZW1jcHkoZGF0YSwgXHUwMDI2aGRyLCBtaW4obGVuLCBzaXplb2YoaGRyKSkpO1xuJiM0MztcdGlmIChsZW4gXHUwMDNlIHNpemVvZihoZHIpKVxuJiM0MztcdFx0bWVtc2V0KGRhdGEgJiM0Mzsgc2l6ZW9mKGhkciksIDAsIGxlbiAtIHNpemVvZihoZHIpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWN0aW9uX3J4X2Zpbmkodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcnggPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRtY3RwX3VzYmxpYl9yeF9maW5pKHJ4KTtcbiYjNDM7XHRrZnJlZShyeCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKlxuJiM0MzttY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0LCBib29sIHNwYW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cnggPSBremFsbG9jX29iaigqcngpO1xuJiM0MztcdGlmIChyeCkge1xuJiM0MztcdFx0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIGFjdGlvbl9yeF9maW5pLCByeCk7XG4mIzQzO1x0XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuJiM0MztcdH1cbiYjNDM7XHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcngpO1xuJiM0MztcdG1jdHBfdXNibGliX3J4X2luaXQocngsIGVwX21heHBhY2tldCwgc3Bhbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByeDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogV3JhcHBlcnMgZm9yIHVzYmxpYiYjMzk7cyByeF9jb21wbGV0ZSBjYWxsYmFjaywgd2hpY2ggaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkXG4mIzQzOyAqIGZyb20gYXRvbWljIGNvbnRleHRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuJiM0MztcdHJjID0gbWN0cF91c2JsaWJfcnhfY29tcGxldGUobmV0ZGV2LCByeCwgbGVuKTtcbiYjNDM7XHRsb2NhbF9iaF9lbmFibGUoKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTaW5nbGUgcGFja2V0LCBzdGFydGluZyBvbiBhIHRyYW5zZmVyIGJvdW5kYXJ5LCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluXG4mIzQzOyAqIHRoZSB0cmFuc2ZlclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuJiM0MztcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xuJiM0MztcbiYjNDM7XHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVx1MDAzZW5kZXYsIHJ4LFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZidWYsIFx1MDAyNmxlbiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XG4mIzQzO1x0Lyogd2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgbWF4cGFja2V0IG9mIHRyYW5zZmVyIGF2YWlsYWJsZSAqL1xuJiM0MztcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBsZW4sIGVwX21heHBhY2tldCk7XG4mIzQzO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QoYnVmLCA4LCA4KTtcbiYjNDM7XG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgOCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XG4mIzQzO1x0c2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX05PVF9OVUxMKHRlc3QsIHNrYik7XG4mIzQzO1x0aWYgKHNrYilcbiYjNDM7XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXHUwMDNlbGVuLCA0KTtcbiYjNDM7XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4ge1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWU7XG4mIzQzO1x0c2l6ZV90IG5fcGt0cztcbiYjNDM7XHRzaXplX3QgcGt0c1s2XTtcbiYjNDM7XHRzaXplX3Qgbl94ZmVycztcbiYjNDM7XHRzaXplX3QgeGZlcnNbNl07XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzttY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3RvX2Rlc2MoY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnQsXG4mIzQzO1x0XHRcdFx0ICBjaGFyICpkZXNjKVxuJiM0Mzt7XG4mIzQzO1x0c3Ryc2NweShkZXNjLCB0LVx1MDAzZW5hbWUsIEtVTklUX1BBUkFNX0RFU0NfU0laRSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO21jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdmFsaWRhdGUoc3RydWN0IGt1bml0ICp0ZXN0LFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICpzcGFuLFxuJiM0MztcdFx0XHRcdCAgIHNpemVfdCAqbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IHBrdF9sZW4gPSAwLCB4ZmVyX2xlbiA9IDA7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwYW4tXHUwMDNlbl9wa3RzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0S1VOSVRfQVNTRVJUX0dFX01TRyh0ZXN0LCBzcGFuLVx1MDAzZXBrdHNbaV0sIDgsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3BrdFslZF0gbGVuIHRvbyBzbWFsbCAoJXpkKSBmb3IgJXNcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIGksIHNwYW4tXHUwMDNlcGt0c1tpXSwgc3Bhbi1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdHBrdF9sZW4gJiM0Mzs9IHNwYW4tXHUwMDNlcGt0c1tpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwYW4tXHUwMDNlbl94ZmVyczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR4ZmVyX2xlbiAmIzQzOz0gc3Bhbi1cdTAwM2V4ZmVyc1tpXTtcbiYjNDM7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRX01TRyh0ZXN0LCBwa3RfbGVuLCB4ZmVyX2xlbixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O2ludmFsaWQgcGt0X2xlbiAoJXpkKSAhPSB4ZmVyX2xlbiAoJXpkKSBmb3IgJXNcJiMzNDssXG4mIzQzO1x0XHRcdCAgICBwa3RfbGVuLCB4ZmVyX2xlbiwgc3Bhbi1cdTAwM2VuYW1lKTtcbiYjNDM7XG4mIzQzO1x0KmxlbiA9IHBrdF9sZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4oc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnBrdF9zcGFuID0gdGVzdC1cdTAwM2VwYXJhbV92YWx1ZTtcbiYjNDM7XHRzaXplX3QgbGVuLCB4ZmVyX2xlbiwgb2ZmLCB4ZmVyX29mZjtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcdHU4ICpwa3RidWY7XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl92YWxpZGF0ZSh0ZXN0LCBwa3Rfc3BhbiwgXHUwMDI2bGVuKTtcbiYjNDM7XHRwa3RidWYgPSBrdW5pdF9rbWFsbG9jX2FycmF5KHRlc3QsIDEsIGxlbiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHBrdGJ1Zik7XG4mIzQzO1xuJiM0MztcdC8qIGxheSBvdXQgcGFja2V0cyAqL1xuJiM0MztcdGZvciAob2ZmID0gMCwgaSA9IDA7IGkgXHUwMDNjIHBrdF9zcGFuLVx1MDAzZW5fcGt0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGxlbiA9IHBrdF9zcGFuLVx1MDAzZXBrdHNbaV07XG4mIzQzO1x0XHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiAmIzQzOyBvZmYsIGxlbiwgbGVuKTtcbiYjNDM7XHRcdG9mZiAmIzQzOz0gbGVuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuJiM0MztcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xuJiM0MztcbiYjNDM7XHQvKiBmZWVkIHRyYW5zZmVycyAqL1xuJiM0MztcdGZvciAob2ZmID0gMCwgeGZlcl9vZmYgPSAwLCBpID0gMDsgaSBcdTAwM2MgcGt0X3NwYW4tXHUwMDNlbl94ZmVyczspIHtcbiYjNDM7XHRcdHhmZXJfbGVuID0gcGt0X3NwYW4tXHUwMDNleGZlcnNbaV0gLSB4ZmVyX29mZjtcbiYjNDM7XHRcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2YnVmLCBcdTAwMjZsZW4sIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgbGVuLCBlcF9tYXhwYWNrZXQpO1xuJiM0MztcbiYjNDM7XHRcdGxlbiA9IG1pbihsZW4sIHhmZXJfbGVuKTtcbiYjNDM7XHRcdG1lbWNweShidWYsIHBrdGJ1ZiAmIzQzOyBvZmYsIGxlbik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlbiA9PSB4ZmVyX2xlbikge1xuJiM0MztcdFx0XHQvKiB3aG9sZS9lbmQgeGZlciwgcHJvY2VlZCB0byBuZXh0ICovXG4mIzQzO1x0XHRcdHhmZXJfb2ZmID0gMDtcbiYjNDM7XHRcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHQvKiBwYXJ0aWFsICovXG4mIzQzO1x0XHRcdHhmZXJfb2ZmICYjNDM7PSBsZW47XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgbGVuKTtcbiYjNDM7XHRcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4mIzQzO1x0XHRvZmYgJiM0Mzs9IGxlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIGNoZWNrIHJlY2VpdmVkIHBhY2tldHMgKi9cbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LVx1MDAzZXJ4X3BrdHMucWxlbiwgcGt0X3NwYW4tXHUwMDNlbl9wa3RzKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyA7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFza2IpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpIFx1MDAzYyBwa3Rfc3Bhbi1cdTAwM2VuX3BrdHMpXG4mIzQzO1x0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXHUwMDNlbGVuLCBwa3Rfc3Bhbi1cdTAwM2Vwa3RzW2ldIC0gNCk7XG4mIzQzO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnNbXSA9IHtcbiYjNDM7XHQvKiBPbmUgcGFja2V0IGNvbXBsZXRlbHkgd2l0aGluIGEgdHJhbnNmZXIgKi9cbiYjNDM7XHR7IFwmIzM0OzFwMXgtY29tcGxldGVcJiMzNDssIDEsIHsgOCB9LCAxLCB7IDggfSB9LFxuJiM0MztcdC8qIFR3byBzbWFsbCBwYWNrZXRzIGNvbWJpbmVkIHdpdGhpbiBvbmUgdHJhbnNmZXIgKi9cbiYjNDM7XHR7IFwmIzM0OzJwMXgtY29tYmluZWRcJiMzNDssIDIsIHsgOCwgOCB9LCAxLCB7IDE2IH0gfSxcbiYjNDM7XHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBNQ1RQIHBheWxvYWQgKi9cbiYjNDM7XHR7IFwmIzM0OzFwMngtc3BsaXQtcGF5bG9hZFwmIzM0OywgMSwgeyAxNiB9LCAyLCB7IDgsIDggfSB9LFxuJiM0MztcdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIFVTQiB0cmFuc3BvcnQgaGVhZGVyICovXG4mIzQzO1x0eyBcJiMzNDsxcDJ4LXNwbGl0LXVzYmhkclwmIzM0OywgMSwgeyAxNiB9LCAyLCB7IDIsIDE0IH0gfSxcbiYjNDM7XHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBNQ1RQIGhlYWRlciAqL1xuJiM0MztcdHsgXCYjMzQ7MXAyeC1zcGxpdC1tY3RwaGRyXCYjMzQ7LCAxLCB7IDE2IH0sIDIsIHsgNiwgMTAgfSB9LFxuJiM0MztcdC8qIFNpbmdsZSBwYWNrZXQgc3BsaXQgb3ZlciAzIHRyYW5zZmVycywgbWlkZGxlIGVudGlyZWx5IGNvbnRpbnVhdGlvbiAqL1xuJiM0MztcdHsgXCYjMzQ7MXAzeC1zcGxpdFwmIzM0OywgMSwgeyAxMiB9LCAzLCB7IDQsIDQsIDQgfSB9LFxuJiM0MztcdC8qIE1heC1zaXplZCBzaW5nbGUgdHJhbnNmZXIgKi9cbiYjNDM7XHR7IFwmIzM0OzFwMXgtbGFyZ2VcJiMzNDssIDEsIHsgODE5MSB9LCAxLCB7IDgxOTEgfSB9LFxuJiM0MztcdC8qIFR3byBsYXJnZSBwYWNrZXRzLCBzcGxpdCBhdCB0aGUgd29yc3QtY2FzZSBmb3IgYWxsb2NhdGlvbiwgd2l0aCBhXG4mIzQzO1x0ICogc2luZ2xlIGJ5dGUgY29udGludWluZyB0aGUgc3BhblxuJiM0MztcdCAqL1xuJiM0MztcdHsgXCYjMzQ7MnAyeC1sYXJnZS1zcGxpdFwmIzM0OywgMiwgeyA4MTkwLCA4MTkwIH0sIDIsIHsgODE5MSwgODE4OSB9IH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztLVU5JVF9BUlJBWV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFucyxcbiYjNDM7XHRcdCAgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl90b19kZXNjKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzW10gPSB7XG4mIzQzO1x0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X3NpbmdsZSksXG4mIzQzO1x0S1VOSVRfQ0FTRV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLFxuJiM0MztcdFx0XHQgbWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3Bhbl9nZW5fcGFyYW1zKSxcbiYjNDM7XHR7fVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBtY3RwX3VzYmxpYl90ZXN0X3N1aXRlID0ge1xuJiM0MztcdC5uYW1lID0gXCYjMzQ7bWN0cC11c2JsaWJcJiMzNDssXG4mIzQzO1x0LnRlc3RfY2FzZXMgPSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7a3VuaXRfdGVzdF9zdWl0ZShtY3RwX3VzYmxpYl90ZXN0X3N1aXRlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZmMwMjgyMTUyZTZlZmJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuY1xuQEAgLTAsMCAmIzQzOzEsNjE2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIG1jdHAtdXNibGliLmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBoZWxwZXIgbGlicmFyeVxuJiM0MzsgKlxuJiM0MzsgKiBEU1AwMjgzIGlzIGF2YWlsYWJsZSBhdDpcbiYjNDM7ICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4xLjAucGRmXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IvbWN0cC11c2IuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbWN0cC5oXHUwMDNlXG4mIzQzO1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKVxuJiM0Mzt7XG4mIzQzO1x0bWVtc2V0KHJ4LCAwLCBzaXplb2YoKnJ4KSk7XG4mIzQzO1x0cngtXHUwMDNlc3BhbiA9IHNwYW47XG4mIzQzO1x0cngtXHUwMDNlZXBfcGt0bGVuID0gZXBfcGt0bGVuO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2luaXQpO1xuJiM0MztcbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl9yeF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpXG4mIzQzO3tcbiYjNDM7XHRrZnJlZV9za2IocngtXHUwMDNlc2tiKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9maW5pKTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFByZXBhcmUgYSB0cmFuc2ZlciBidWZmZXIgZm9yIGZ1dHVyZSBjb21wbGV0aW9uOyAqYnVmcCBhbmQgKmxlbnAgd2lsbFxuJiM0MzsgKiBiZSBwb3B1bGF0ZWQgb24gc3VjY2Vzcy5cbiYjNDM7ICovXG4mIzQzO2ludCBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsXG4mIzQzO1x0XHRcdCAgIHZvaWQgKipidWZwLCBzaXplX3QgKmxlbnAsIGdmcF90IGdmcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2IgPSByeC1cdTAwM2Vza2I7XG4mIzQzO1x0dW5zaWduZWQgaW50IGxlbiA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChza2IgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VsZW4gXHUwMDNlPSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCkge1xuJiM0MztcdFx0Lyogc29tZXRoaW5nIG11c3QgaGF2ZSBnb25lIHRlcnJpYmx5IHdyb25nLiBjbGVhciBhbmQgcmVzdGFydCAqL1xuJiM0MztcdFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKHJ4KTtcbiYjNDM7XHRcdHNrYiA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsZW4gPSByeC1cdTAwM2VzcGFuID8gQUxJR04oTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgsIHJ4LVx1MDAzZWVwX3BrdGxlbilcbiYjNDM7XHRcdDogTUNUUF9VU0JfMV8wX1hGRVJfU0laRTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFza2IpIHtcbiYjNDM7XHRcdHNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIGxlbiwgZ2ZwKTtcbiYjNDM7XHRcdGlmICghc2tiKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0fSBlbHNlIGlmIChza2ItXHUwMDNlY2xvbmVkIHx8IHNrYl90YWlscm9vbShza2IpIFx1MDAzYyByeC1cdTAwM2VlcF9wa3RsZW4pIHtcbiYjNDM7XHRcdC8qIFdlIGFsd2F5cyBuZWVkIHRvIHJlYWxsb2MgaWYgLVx1MDAzZWNsb25lZCwgYXMgd2UgY2Fubm90XG4mIzQzO1x0XHQgKiByZXN1Ym1pdCB0aGUgKG5vdy1zaGFyZWQpIHNrYiBidWZmZXIgZm9yIHBvc3NpYmxlIERNQS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBPdGhlcndpc2UgKGlmIHdlIGhhdmUgYW4gdW4tY2xvbmVkIFNLQik6IGp1c3QgZW5zdXJlIHdlXG4mIzQzO1x0XHQgKiBoYXZlIHN1ZmZpY2llbnQgc3BhY2UgdG8gcHJldmVudCBiYWJibGUuIFNpbmNlIHdlIGFsbG9jYXRlZFxuJiM0MztcdFx0ICogZm9yIG1heCBzaXplIGluIHRoZSBsYXN0IHByZXBhcmUgKGFuZCBoYXZlIG5vdCBjb25zdW1lZCBhbnlcbiYjNDM7XHRcdCAqIG9mIHRoYXQgc3BhY2UgZm9yIGEgcHJpb3IgTUNUUCBwYWNrZXQsIGJlY2F1c2UgIWNsb25lZCksIHdlXG4mIzQzO1x0XHQgKiBoYXZlIHN1ZmZpY2llbnQgZGF0YSB0byBmaW5pc2ggdGhlIGN1cnJlbnQgTUNUUCBwYWNrZXQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHN0cnVjdCBza19idWZmICpza2IyO1xuJiM0MztcbiYjNDM7XHRcdHNrYjIgPSBza2JfY29weV9leHBhbmQoc2tiLCAwLCBsZW4sIGdmcCk7XG4mIzQzO1x0XHRpZiAoIXNrYjIpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRcdHNrYiA9IHNrYjI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyeC1cdTAwM2Vza2IgPSBza2I7XG4mIzQzO1xuJiM0MztcdC8qIFNwYW5uaW5nIG1vZGUgYWxsb3dzIFpMUHMsIHNvIHdlIGRvbiYjMzk7dCByZXF1aXJlIGV4YWN0bHkgb25lXG4mIzQzO1x0ICogdHJhbnNmZXIgcGFja2V0LiBJZiB3ZSBoYXZlIGV4dHJhIHRhaWxyb29tLCBtYXkgYXMgd2VsbCB1c2UgaXQsXG4mIzQzO1x0ICogYW5kIHdlIGhhdmUgZW5zdXJlZCB0aGF0IHRoZSB0YWlscm9vbSBcdTAwM2U9IGVwX3BrdGxlbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocngtXHUwMDNlc3BhbilcbiYjNDM7XHRcdGxlbiA9IEFMSUdOX0RPV04oc2tiX3RhaWxyb29tKHNrYiksIHJ4LVx1MDAzZWVwX3BrdGxlbik7XG4mIzQzO1xuJiM0MztcdCpidWZwID0gc2tiX3RhaWxfcG9pbnRlcihza2IpO1xuJiM0MztcdCpsZW5wID0gbGVuO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IHRoaXNfY3B1X3B0cihuZXRkZXYtXHUwMDNlZHN0YXRzKTtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9za2JfY2IgKmNiO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4mIzQzO1x0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpO1xuJiM0MztcbiYjNDM7XHQvKiB3ZSYjMzk7cmUgY2FsbGVkIGZyb20gYW4gVVJCIGNvbXBsZXRpb24gaGFuZGxlciwgYW5kIGNhbm5vdCBhc3N1bWUgbG9jYWxcbiYjNDM7XHQgKiBpcnFzIGFyZSBhbHdheXMgZGlzYWJsZWRcbiYjNDM7XHQgKi9cbiYjNDM7XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuJiM0MztcdHU2NF9zdGF0c19pbmMoXHUwMDI2ZHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMpO1xuJiM0MztcdHU2NF9zdGF0c19hZGQoXHUwMDI2ZHN0YXRzLVx1MDAzZXJ4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9NQ1RQKTtcbiYjNDM7XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiYjNDM7XHRjYiA9IF9fbWN0cF9jYihza2IpO1xuJiM0MztcdGNiLVx1MDAzZWhhbGVuID0gMDtcbiYjNDM7XHRuZXRpZl9yeChza2IpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZWRzdGF0cyk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwKTtcbiYjNDM7XHR1NjRfc3RhdHNfaW5jKFx1MDAyNmRzdGF0cy1cdTAwM2VyeF9kcm9wcyk7XG4mIzQzO1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3AsIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVjZWl2ZSBhIFVTQiBjb21wbGV0aW9uIG9mIEBsZW4gYnl0ZXMgb2YgaW5jb21pbmcgZGF0YS4gV2Ugd2lsbCB0aGVuIHNwbGl0XG4mIzQzOyAqIHRoaXMgaW50byBwYWNrZXRzIGFuZCBuZXRpZl9yeCgpIGVhY2guIEludGVuZGVkIHRvIGJlIGNhbGxlZCBpbiBhdG9taWNcbiYjNDM7ICogY29udGV4dHMgLSBpZS4sIFVSQiBjb21wbGV0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBBc3N1bWVzIEBuZXRkZXYgdXNlcyBkc3RhdHMuXG4mIzQzOyAqL1xuJiM0MztpbnQgbWN0cF91c2JsaWJfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtXHUwMDNlc2tiO1xuJiM0MztcdGludCByYyA9IDA7XG4mIzQzO1xuJiM0MztcdF9fc2tiX3B1dChza2IsIGxlbik7XG4mIzQzO1xuJiM0MztcdGZvciAoOzspIHtcbiYjNDM7XHRcdHN0cnVjdCBtY3RwX3VzYl9oZHIgKmhkcjtcbiYjNDM7XHRcdHN0cnVjdCBza19idWZmICpza2IyO1xuJiM0MztcdFx0LyogbGVuZ3RoIG9mIE1DVFAgcGFja2V0LCBpbmNsdWRpbmcgVVNCIGhlYWRlciAqL1xuJiM0MztcdFx0dTE2IHBrdF9sZW47XG4mIzQzO1xuJiM0MztcdFx0Lyogbm8gaGVhZGVyIHlldCwgcmVzdWJtaXQgZm9yIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgKi9cbiYjNDM7XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKmhkcikpIHtcbiYjNDM7XHRcdFx0aWYgKCFyeC1cdTAwM2VzcGFuKSB7XG4mIzQzO1x0XHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtyeDogdGlueSB4ZmVyICglZCkgaW4gbm9uLXNwYW4gbW9kZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdFx0XHRcdHJjID0gLUVOT01TRztcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXNldDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRoZHIgPSAoc3RydWN0IG1jdHBfdXNiX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuJiM0MztcbiYjNDM7XHRcdGlmIChiZTE2X3RvX2NwdShoZHItXHUwMDNlaWQpICE9IE1DVFBfVVNCX0RNVEZfSUQpIHtcbiYjNDM7XHRcdFx0LyogQnkgcmVzZXR0aW5nIGhlcmUsIHdpbGwgc3RhcnQgdGhlIG5leHQgSU4gdHJhbnNmZXJcbiYjNDM7XHRcdFx0ICogYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IHNrYi4gVGhpcyB3aWxsIG1lYW5cbiYjNDM7XHRcdFx0ICogd2UgcmUtc3luYyB3aGVuIHdlIG5leHQgc2VlIGEgc3Bhbm5lZCBwYWNrZXQgYWxpZ25lZFxuJiM0MztcdFx0XHQgKiB3aXRoIHRoZSBzdGFydCBvZiBhIHRyYW5zZmVyLlxuJiM0MztcdFx0XHQgKlxuJiM0MztcdFx0XHQgKiBJbiBub24tc3Bhbm5pbmcgbW9kZSwgdGhpcyBqdXN0IG1lYW5zIHdlJiMzOTtsbCBkcm9wXG4mIzQzO1x0XHRcdCAqIHRoZSBjdXJyZW50IHRyYW5zZmVyIG9ubHlcbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcJiMzNDtyeDogaW52YWxpZCBpZCAlMDR4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIGJlMTZfdG9fY3B1KGhkci1cdTAwM2VpZCkpO1xuJiM0MztcdFx0XHRyYyA9IC1FUFJPVE87XG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc2V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHBrdF9sZW4gPSBiZTE2X3RvX2NwdShoZHItXHUwMDNlbGVuKTtcbiYjNDM7XHRcdC8qIHYxLjEsIHdpdGggc3BhbiBlbmFibGVkLCBoYXMgYSAxMy1iaXQgbGVuZ3RoICovXG4mIzQzO1x0XHRwa3RfbGVuIFx1MDAyNj0gcngtXHUwMDNlc3BhbiA/XG4mIzQzO1x0XHRcdE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYIDogTUNUUF9VU0JfMV8wX1BLVExFTl9NQVg7XG4mIzQzO1x0XHRpZiAocGt0X2xlbiBcdTAwM2Mgc2l6ZW9mKCpoZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgbWN0cF9oZHIpKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcJiMzNDtyeDogaW52YWxpZCBsZW4gJWRcXG5cJiMzNDssIHBrdF9sZW4pO1xuJiM0MztcdFx0XHRyYyA9IC1FUFJPVE87XG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc2V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIHNwYW4gY29udGludWVzIHRvIHRoZSBuZXh0IHRyYW5zZmVyLCByZXN1Ym1pdCAqL1xuJiM0MztcdFx0aWYgKHBrdF9sZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pIHtcbiYjNDM7XHRcdFx0aWYgKCFyeC1cdTAwM2VzcGFuKSB7XG4mIzQzO1x0XHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtyeDogc2hvcnQgeGZlciAoJWQgdnMgJWQpIGluIG5vbi1zcGFuIG1vZGVcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBwa3RfbGVuLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHRcdFx0XHRyYyA9IC1FTk9NU0c7XG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzZXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0Lyogd2UgaGF2ZSAoZXhhY3RseSkgYSBjb21wbGV0ZSBwYWNrZXQsIFJYIGl0IGRpcmVjdGx5ICovXG4mIzQzO1x0XHRpZiAocGt0X2xlbiA9PSBza2ItXHUwMDNlbGVuKSB7XG4mIzQzO1x0XHRcdG1jdHBfdXNibGliX3J4KG5ldGRldiwgc2tiKTtcbiYjNDM7XHRcdFx0cngtXHUwMDNlc2tiID0gTlVMTDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogbW9yZSBwYWNrZXRzIGZvbGxvdyAtIFJYIGEgY2xvbmUgc28gdGhhdCB3ZSBjYW4gY29udGludWVcbiYjNDM7XHRcdCAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgU0tCLCB3aGljaCBtYXkgYmUgdGhlIHN0YXJ0IG9mIGFcbiYjNDM7XHRcdCAqIHNwYW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRcdGlmIChza2IyKSB7XG4mIzQzO1x0XHRcdHNrYl90cmltKHNrYjIsIHBrdF9sZW4pO1xuJiM0MztcdFx0XHRtY3RwX3VzYmxpYl9yeChuZXRkZXYsIHNrYjIpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bWN0cF91c2JsaWJfcnhfc3RhdHNfc2luZ2xlX2Ryb3AobmV0ZGV2KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNrYl9wdWxsKHNrYiwgcGt0X2xlbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9yZXNldDpcbiYjNDM7XHRkZXZfa2ZyZWVfc2tiX2FueShyeC1cdTAwM2Vza2IpO1xuJiM0MztcdHJ4LVx1MDAzZXNrYiA9IE5VTEw7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENhbmNlbCBhIHJ4IGNvbnRleHQ7IHN1YnNlcXVlbnQgcHJlcGFyZS9jb21wbGV0ZSBjYWxscyB3aWxsIG5vdCBiZSBhXG4mIzQzOyAqIGNvbnRpbnVhdGlvbiBvZiBhbnkgZGF0YSBhbHJlYWR5IHJlY2VpdmVkLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl9yeF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcbiYjNDM7e1xuJiM0MztcdGRldl9rZnJlZV9za2JfYW55KHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0cngtXHUwMDNlc2tiID0gTlVMTDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9jYW5jZWwpO1xuJiM0MztcbiYjNDM7LyogdHJhbnNtaXQgY29udGV4dDogZW5jYXBzdWxhdGVzIG9uZSB0cmFuc2ZlciAqL1xuJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4IHtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4O1xuJiM0MztcdHN0cnVjdCBza19idWZmX2hlYWQgc2ticztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYnVmX2xlbiwgbGVuO1xuJiM0MztcdGVudW0gbWN0cF91c2JsaWJfdHhfYnVmX3R5cGUge1xuJiM0MztcdFx0VFhfU0lOR0xFLFxuJiM0MztcdFx0VFhfRkxBVCxcbiYjNDM7XHR9IGJ1Zl90eXBlO1xuJiM0MztcdHU4IGJ1ZltdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxuJiM0MztcdFx0XHQgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLFxuJiM0MztcdFx0XHQgdm9pZCAqcHJpdiwgYm9vbCBzcGFuKVxuJiM0Mzt7XG4mIzQzO1x0bWVtc2V0KHR4LCAwLCBzaXplb2YoKnR4KSk7XG4mIzQzO1x0dHgtXHUwMDNlb3BzID0gKm9wcztcbiYjNDM7XHR0eC1cdTAwM2Vwcml2ID0gcHJpdjtcbiYjNDM7XHR0eC1cdTAwM2VzcGFuID0gc3BhbjtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0eC1cdTAwM2Vsb2NrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9pbml0KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfYXZhaWwoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGN0eC1cdTAwM2VidWZfdHlwZSA9PSBUWF9TSU5HTEUgPyAwIDogY3R4LVx1MDAzZWJ1Zl9sZW4gLSBjdHgtXHUwMDNlbGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBtY3RwX3VzYmxpYl90eF9zaG91bGRfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHQvKiBVc2UgdGhlIGJhc2VsaW5lIGxlbmd0aCAoaWUsIEJUVSkgYXMgYW4gYXBwcm94aW1hdGVcbiYjNDM7XHQgKiBcJiMzNDtyZWFzb25hYmx5LXNpemVkXCYjMzQ7IHBhY2tldCB3ZSBjb3VsZCBleHBlY3QuIElmIHRoZXJlIGlzXG4mIzQzO1x0ICogaW5zdWZmaWNpZW50IGNhcGFjaXR5IGZvciB0aGF0LCB0aGVuIHNlbmQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y29uc3Qgc2l6ZV90IHBrdF9sZW4gPSBNQ1RQX1VTQl9CVFUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWN0cF91c2JsaWJfdHhfYXZhaWwoY3R4KSBcdTAwM2MgcGt0X2xlbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUgLSBpbmRpY2F0aW5nIHRoYXQgdGhlIG5ldyBza2JcbiYjNDM7ICogY291bGQgbm90IGJlIGFwcGVuZGVkLiBTbywgZXJyb3JzIHJlcG9ydGVkIGhlcmUgdG8gdGhlIFRYIHBhdGggd2lsbCByZXN1bHRcbiYjNDM7ICogaW4gdGhlIFRYIGJlaW5nIHRyYW5zbWl0dGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBtY3RwX3VzYmxpYl90eF9hcHBlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2VidWZfdHlwZSA9PSBUWF9TSU5HTEUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKG1jdHBfdXNibGliX3R4X2F2YWlsKGN0eCkgXHUwMDNjIHNrYi1cdTAwM2VsZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0JVRlM7XG4mIzQzO1xuJiM0MztcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2Y3R4LVx1MDAzZXNrYnMsIHNrYik7XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VsZW4gJiM0Mzs9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcbiYjNDM7XHQvKiBJZiB3ZSBoYXZlIGEgcWxlbiBvZiAxLCB3ZSBvbmx5IGVuZGVkIHVwIHBhY2tpbmcgYSBzaW5nbGUgc2tiLFxuJiM0MztcdCAqIGRlc3BpdGUgYWxsb2NhdGluZyBmb3IgbXVsdGlwbGUuIFNraXAgdGhlIGNvcHkgYW5kIHNlbmQgZGlyZWN0bHlcbiYjNDM7XHQgKiBmcm9tIHRoZSBza2IgZGF0YS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY3R4LVx1MDAzZWJ1Zl90eXBlID09IFRYX1NJTkdMRSB8fCBjdHgtXHUwMDNlc2ticy5xbGVuID09IDEpIHtcbiYjNDM7XHRcdGJ1ZiA9IGN0eC1cdTAwM2Vza2JzLm5leHQtXHUwMDNlZGF0YTtcbiYjNDM7XG4mIzQzO1x0fSBlbHNlIGlmIChjdHgtXHUwMDNlYnVmX3R5cGUgPT0gVFhfRkxBVCkge1xuJiM0MztcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHRcdHNpemVfdCBwb3MgPSAwO1xuJiM0MztcbiYjNDM7XHRcdHNrYl9xdWV1ZV93YWxrKFx1MDAyNmN0eC1cdTAwM2Vza2JzLCBza2IpIHtcbiYjNDM7XHRcdFx0c2tiX2NvcHlfYml0cyhza2IsIDAsIGN0eC1cdTAwM2VidWYgJiM0MzsgcG9zLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHRcdFx0cG9zICYjNDM7PSBza2ItXHUwMDNlbGVuO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGJ1ZiA9IGN0eC1cdTAwM2VidWY7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGN0eC1cdTAwM2V0eC1cdTAwM2VvcHMuc2VuZChjdHgsIGJ1ZiwgY3R4LVx1MDAzZWxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCxcbiYjNDM7XHRcdFx0XHQgICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjdHgpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZjdHgtXHUwMDNlc2ticykpICE9IE5VTEwpXG4mIzQzO1x0XHRkZXZfa2ZyZWVfc2tiX2FueV9yZWFzb24oc2tiLCByZWFzb24pO1xuJiM0MztcdGtmcmVlKGN0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0eF9jdHgtXHUwMDNldHgtXHUwMDNlcHJpdjtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jdHhfcHJpdik7XG4mIzQzO1xuJiM0MzsvKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIHR4IFx1MDAyNiBjb21wbGV0aW9uIHBhdGggaXMgcXVpZXNjZWQgKi9cbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgpXG4mIzQzO3tcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZSh0eC1cdTAwM2VjdXJfY3R4LCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfZmluaSk7XG4mIzQzO1xuJiM0MzsvKiBNYXggc2l6ZSBvZiBhIHNwYW5uZWQgVFguIFNpbmNlIHdlIGFsbG9jYXRlIGEgc2VwYXJhdGUgc3BhbiBidWZmZXIsIGxpbWl0XG4mIzQzOyAqIHRoZSB0eC10aW1lIGFsbG9jYXRpb25zIHRvIDRrLiBMYXJnZXIgcGFja2V0cyB3aWxsIGJlIHNlbnQgYXMgc2luZ2xlXG4mIzQzOyAqIHRyYW5zZmVycy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgVFhfU1BBTl9NQVggPSA0MDk2IC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHgpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKlxuJiM0MzttY3RwX3VzYmxpYl90eF9jdHhfY3JlYXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdCAgYm9vbCBzaW5nbGUpXG4mIzQzO3tcbiYjNDM7XHRlbnVtIG1jdHBfdXNibGliX3R4X2J1Zl90eXBlIHR5cGU7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4O1xuJiM0MztcdHNpemVfdCBzeiA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChzaW5nbGUgfHwgc2tiLVx1MDAzZWxlbiBcdTAwM2UgVFhfU1BBTl9NQVgpIHtcbiYjNDM7XHRcdHR5cGUgPSBUWF9TSU5HTEU7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHR5cGUgPSBUWF9GTEFUO1xuJiM0MztcdFx0c3ogPSB0eC1cdTAwM2VzcGFuID8gVFhfU1BBTl9NQVggOiBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3R4ID0ga3phbGxvY19mbGV4KCpjdHgsIGJ1Ziwgc3osIEdGUF9BVE9NSUMpO1xuJiM0MztcdGlmICghY3R4KVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2V0eCA9IHR4O1xuJiM0MztcdGN0eC1cdTAwM2VidWZfdHlwZSA9IHR5cGU7XG4mIzQzO1x0Y3R4LVx1MDAzZWJ1Zl9sZW4gPSBzejtcbiYjNDM7XHRjdHgtXHUwMDNlbGVuID0gc2tiLVx1MDAzZWxlbjtcbiYjNDM7XHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmN0eC1cdTAwM2Vza2JzKTtcbiYjNDM7XHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNmN0eC1cdTAwM2Vza2JzLCBza2IpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY3R4O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdGJvb2wgb2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IGdldF9jcHVfcHRyKGRldi1cdTAwM2Vkc3RhdHMpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0aWYgKG9rKSB7XG4mIzQzO1x0XHQvKiBPbmx5IGluY2x1ZGUgdGhlIG5ldHdvcmstbGF5ZXIgZGF0YSBpbiB0eCBzdGF0czsgd2Uga25vd1xuJiM0MztcdFx0ICogdGhhdCB0aGVyZSBpcyBhIDQtYnl0ZSBoZWFkZXIgcHVzaGVkIHRvIGFsbCBza2JzIGluXG4mIzQzO1x0XHQgKiB0eF9za2JfcHJlcGFyZSgpXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHU2NCBuID0gY3R4LVx1MDAzZXNrYnMucWxlbjtcbiYjNDM7XHRcdHM2NCBsZW4gPSBjdHgtXHUwMDNlbGVuIC0gKG4gKiBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpO1xuJiM0MztcbiYjNDM7XHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X3BhY2tldHMsIG4pO1xuJiM0MztcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZkc3RhdHMtXHUwMDNldHhfYnl0ZXMsIGxlbik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X2Ryb3BzLCBjdHgtXHUwMDNlc2ticy5xbGVuKTtcbiYjNDM7XHR9XG4mIzQzO1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3AsIGZsYWdzKTtcbiYjNDM7XHRwdXRfY3B1X3B0cihkZXYtXHUwMDNlZHN0YXRzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gZ2V0X2NwdV9wdHIoZGV2LVx1MDAzZWRzdGF0cyk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwKTtcbiYjNDM7XHR1NjRfc3RhdHNfaW5jKFx1MDAyNmRzdGF0cy1cdTAwM2V0eF9kcm9wcyk7XG4mIzQzO1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3AsIGZsYWdzKTtcbiYjNDM7XHRwdXRfY3B1X3B0cihkZXYtXHUwMDNlZHN0YXRzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ29tcGxldGlvbiBmb3IgdGhlIC1cdTAwM2VzZW5kKCkgb3AuIFRoaXMgd2lsbCB1cGRhdGUgbmV0ZGV2IHN0YXRzIGFuZFxuJiM0MzsgKiBmcmVlIHRoZSB0eCBjb250ZXh0LlxuJiM0MzsgKlxuJiM0MzsgKiBMaWtlbHkgY2FsbGVkIGZyb20gKGF0b21pYykgVVJCIGNvbXBsZXRpb24gY29udGV4dC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG9rKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID1cbiYjNDM7XHRcdG9rID8gU0tCX0NPTlNVTUVEIDogU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG4mIzQzO1xuJiM0MztcdG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZSh0eF9jdHgsIGRldiwgb2spO1xuJiM0MztcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHR4X2N0eCwgcmVhc29uKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKTtcbiYjNDM7XG4mIzQzOy8qIFByZXBhcmUgYSBza2IgZm9yIHB1c2goKVxuJiM0MzsgKlxuJiM0MzsgKiBPbiBlcnJvciwgcG9wdWxhdGVzIEByZWFzb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X3NrYl9wcmVwYXJlKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgc3BhbixcbiYjNDM7XHRcdFx0XHQgICAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiAqcmVhc29uKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwbGVuLCBtYXhfbGVuO1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYl9oZHIgKmhkcjtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdG1heF9sZW4gPSBzcGFuID8gTUNUUF9VU0JfMV8xX1BLVExFTl9NQVggOiBNQ1RQX1VTQl8xXzBfUEtUTEVOX01BWDtcbiYjNDM7XG4mIzQzO1x0cGxlbiA9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1x0aWYgKHBsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpIFx1MDAzZSBtYXhfbGVuKSB7XG4mIzQzO1x0XHQqcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1BLVF9UT09fQklHO1xuJiM0MztcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJjID0gc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdCpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9NRU07XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRoZHIgPSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7XG4mIzQzO1x0aWYgKCFoZHIpIHtcbiYjNDM7XHRcdCpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9NRU07XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGhkci1cdTAwM2VpZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xuJiM0MztcdGhkci1cdTAwM2VsZW4gPSBjcHVfdG9fYmUxNihwbGVuICYjNDM7IHNpemVvZigqaGRyKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQdXNoIGEgbmV3IHNrYiB0byB0aGUgdHJhbnNmZXIuIE1heSByZXN1bHQgaW4gemVybyBvciBtb3JlIGNhbGxzIHRvXG4mIzQzOyAqIG9wcy1cdTAwM2VzZW5kKCkuXG4mIzQzOyAqXG4mIzQzOyAqIFRha2VzIG93bmVyc2hpcCBvZiBAc2tiLCBpbmNsdWRpbmcgb24gZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztpbnQgbWN0cF91c2JsaWJfdHhfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxuJiM0MztcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsICpzZW5kX2N0eCA9IE5VTEw7XG4mIzQzO1x0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uO1xuJiM0MztcdGNvbnN0IGludCBtYXhfdHJpZXMgPSAzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0aW50IHRyeSA9IDEsIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IG1jdHBfdXNibGliX3R4X3NrYl9wcmVwYXJlKHNrYiwgdHgtXHUwMDNlc3BhbiwgXHUwMDI2cmVhc29uKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7XG4mIzQzO1x0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcbiYjNDM7XHRcdC8qIHdlIG1heSBzdGlsbCBuZWVkIHRvIHByb2NlZWQsIGluIGNhc2UgYW4gZXhpc3RpbmcgY3R4XG4mIzQzO1x0XHQgKiBpcyBub3cgc2VuZGFibGUgKGllLjogIW1vcmUpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRza2IgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG4mIzQzO3JldHJ5OlxuJiM0MztcdC8qIFRyeSBhbmQgcXVldWUgdG8gdGhlIGN1cnJlbnQgY29udGV4dC4gV2UgZXhpdCB0aGlzIGNyaXRpY2FsIHNlY3Rpb25cbiYjNDM7XHQgKiB3aXRoIGEgZmV3IGJpdHMgb2Ygc3RhdGU6XG4mIzQzO1x0ICogIC0gc2VuZF9jdHg6IGluZGljYXRpbmcgYSBwcmlvciBjb250ZXh0IHRoYXQgbmVlZHMgdG8gYmUgc2VudFxuJiM0MztcdCAqICAtIHNrYjogaW5kaWNhdGluZyB0aGF0IGEgc2tiIHN0aWxsIG5lZWRzIHRvIGJlIHF1ZXVlZC9zZW50XG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdGN0eCA9IHR4LVx1MDAzZWN1cl9jdHg7XG4mIzQzO1x0aWYgKGN0eCkge1xuJiM0MztcdFx0aWYgKHNrYikge1xuJiM0MztcdFx0XHRyYyA9IG1jdHBfdXNibGliX3R4X2FwcGVuZChjdHgsIHNrYik7XG4mIzQzO1x0XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRcdC8qIGNhbiYjMzk7dCBhcHBlbmQgdG8gdGhlIHBlbmRpbmcgdHggLSBkZXRhY2ggZm9yXG4mIzQzO1x0XHRcdFx0ICogc2VuZGluZywgYW5kIHdlJiMzOTtsbCBjcmVhdGUgYSBuZXcgdHggYmVsb3cuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0c3dhcCh0eC1cdTAwM2VjdXJfY3R4LCBzZW5kX2N0eCk7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0Lyogd2UgaGF2ZSBxdWV1ZWQgKi9cbiYjNDM7XHRcdFx0XHRza2IgPSBOVUxMO1xuJiM0MztcdFx0XHRcdGlmICghbW9yZSB8fCBtY3RwX3VzYmxpYl90eF9zaG91bGRfc2VuZChjdHgpKVxuJiM0MztcdFx0XHRcdFx0c3dhcCh0eC1cdTAwM2VjdXJfY3R4LCBzZW5kX2N0eCk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH0gZWxzZSBpZiAoIW1vcmUpIHtcbiYjNDM7XHRcdFx0c3dhcCh0eC1cdTAwM2VjdXJfY3R4LCBzZW5kX2N0eCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAoc2VuZF9jdHgpIHtcbiYjNDM7XHRcdHJjID0gbWN0cF91c2JsaWJfdHhfc2VuZChzZW5kX2N0eCk7XG4mIzQzO1x0XHRpZiAocmMpIHtcbiYjNDM7XHRcdFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKHNlbmRfY3R4LCBkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoc2VuZF9jdHgsIHJlYXNvbik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzZW5kX2N0eCA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiB3ZSBoYXZlIGVpdGhlciBxdWV1ZWQsIG9yIHRoZSBwcmVwYXJlIGZhaWxlZDsgbm90aGluZyBtb3JlIHRvIGRvICovXG4mIzQzO1x0aWYgKCFza2IpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdHhfY3R4X2NyZWF0ZSh0eCwgc2tiLCAhbW9yZSk7XG4mIzQzO1x0aWYgKCFjdHgpIHtcbiYjNDM7XHRcdG5ldGRldl9kYmcoZGV2LCBcJiMzNDtUWCBjb250ZXh0IGNyZWF0ZSBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3AoZGV2KTtcbiYjNDM7XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBpZiB3ZSYjMzk7cmUgcmVhZHkgdG8gc2VuZCBub3csIG5vIG5lZWQgdG8gZW5xdWV1ZSAqL1xuJiM0MztcdGlmICghbW9yZSB8fCBtY3RwX3VzYmxpYl90eF9zaG91bGRfc2VuZChjdHgpKSB7XG4mIzQzO1x0XHRyYyA9IG1jdHBfdXNibGliX3R4X3NlbmQoY3R4KTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoY3R4LCBkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0aWYgKCF0eC1cdTAwM2VjdXJfY3R4KSB7XG4mIzQzO1x0XHR0eC1cdTAwM2VjdXJfY3R4ID0gY3R4O1xuJiM0MztcdFx0Y3R4ID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdC8qIHdlIG1heSBoYXZlIGxvc3QgdGhlIHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgdHg7IHNob3VsZG4mIzM5O3QgaGFwcGVuLCBhc1xuJiM0MztcdCAqIG5kb19zdGFydF94bWl0IHNob3VsZCBiZSBzZXJpYWxpc2VkIG92ZXIgb25lIHF1ZXVlLCBidXQgdHJ5IGFnYWluXG4mIzQzO1x0ICogZnJvbSB0aGUgdG9wLCBhcyB3ZSBtYXkgYmUgYWJsZSB0byBxdWV1ZSB0aGUgc2tiIHRvIHRoYXQgY29udGV4dC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY3R4KSB7XG4mIzQzO1x0XHQvKiB1bmxpbmsgdGhlIG5ldyAoc29sZSkgc2tiLCB3ZSBkb24mIzM5O3Qgd2FudCBpdCBmcmVlZCB3aXRoIGN0eCAqL1xuJiM0MztcdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmN0eC1cdTAwM2Vza2JzKTtcbiYjNDM7XHRcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKGN0eCwgcmVhc29uKTtcbiYjNDM7XHRcdGlmICgmIzQzOyYjNDM7dHJ5IFx1MDAzZSBtYXhfdHJpZXMpIHtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRcdG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7XG4mIzQzO1x0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfcHVzaCk7XG4mIzQzO1xuJiM0MzsvKiBDYW5jZWwgYSB0eDogYW55IHVuLXNlbnQgY29udGV4dCBpcyByZWxlYXNlZC4gKi9cbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4ID0gTlVMTDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0c3dhcCh0eC1cdTAwM2VjdXJfY3R4LCBjdHgpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWN0eClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKGN0eCwgZGV2LCBmYWxzZSk7XG4mIzQzO1x0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2NhbmNlbCk7XG4mIzQzO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0plcmVteSBLZXJyIFx1MDAzY2prQGNvZGVjb25zdHJ1Y3QuY29tLmF1XHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01DVFAgVVNCIHRyYW5zcG9ydCBsaWJyYXJ5XCYjMzQ7KTtcbiYjNDM7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVClcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bWN0cC11c2JsaWItdGVzdC5jXCYjMzQ7XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9tY3RwLXVzYi5oXG5pbmRleCBhMmY2ZjFlMDRlZmJkMC4uMzVjYzJjYzE1ZjlhMDQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9tY3RwLXVzYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3VzYi9tY3RwLXVzYi5oXG5AQCAtMiw3ICYjNDM7Miw3IEBAXG4gLypcbiAgKiBtY3RwLXVzYi5oIC0gTUNUUCBVU0IgdHJhbnNwb3J0IGJpbmRpbmc6IGNvbW1vbiBkZWZpbml0aW9ucyxcbiAgKiBiYXNlZCBvbiBETVRGMDI4MyBzcGVjaWZpY2F0aW9uOlxuLSAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMC4xLnBkZlxuJiM0MzsgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGZcbiAgKlxuICAqIFRoZXNlIGFyZSBwcm90b2NvbC1sZXZlbCBkZWZpbml0aW9ucywgdGhhdCBtYXkgYmUgc2hhcmVkIGJldHdlZW4gaG9zdFxuICAqIGFuZCBnYWRnZXQgZHJpdmVycy5cbkBAIC0xMywxOCAmIzQzOzEzLDk2IEBAXG4gI2lmbmRlZiBfX0xJTlVYX1VTQl9NQ1RQX1VTQl9IXG4gI2RlZmluZSBfX0xJTlVYX1VTQl9NQ1RQX1VTQl9IXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydCBoZWFkZXIuIERTUDAyODMgdjEuMCBoYXMgYW4gOC1iaXQgbGVuZ3RoIGZpZWxkXG4mIzQzOyAqIChwcmVjZWRlZCBieSA4IHJlc2VydmVkIGJpdHMpLCB2MS4xIGhhcyBhIDEzLWJpdCBsZW5ndGggZmllbGQgKHByZWNlZGVkIGJ5XG4mIzQzOyAqIDMgcmVzZXJ2ZWQgYml0cykuIFdlIHVzZSBhIGJlMTYgZm9yIG91ciBsZW5ndGggdG8gaGFuZGxlIHRoZSBsYXJnZXIgdjEuMVxuJiM0MzsgKiByZXByZXNlbnRhdGlvbiwgYW5kIG1hc2sgYXMgYXBwcm9wcmlhdGUuXG4mIzQzOyAqL1xuIHN0cnVjdCBtY3RwX3VzYl9oZHIge1xuIFx0X19iZTE2XHRpZDtcbi1cdHU4XHRyc3ZkO1xuLVx0dThcdGxlbjtcbiYjNDM7XHRfX2JlMTZcdGxlbjtcbiB9IF9fcGFja2VkO1xuIFxuLSNkZWZpbmUgTUNUUF9VU0JfWEZFUl9TSVpFXHQ1MTJcbiYjNDM7LyogbWF4IHRyYW5zZmVyIHNpemUgZm9yIERTUDAyODMgdjEuMCAqL1xuJiM0MzsjZGVmaW5lIE1DVFBfVVNCXzFfMF9YRkVSX1NJWkVcdDUxMlxuICNkZWZpbmUgTUNUUF9VU0JfQlRVXHRcdDY4XG4gI2RlZmluZSBNQ1RQX1VTQl9NVFVfTUlOXHRNQ1RQX1VTQl9CVFVcbi0jZGVmaW5lIE1DVFBfVVNCX01UVV9NQVhcdChVOF9NQVggLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpXG4mIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8wX1BLVExFTl9NQVhcdFU4X01BWFxuJiM0MzsjZGVmaW5lIE1DVFBfVVNCXzFfMF9NVFVfTUFYXHQoTUNUUF9VU0JfMV8wX1BLVExFTl9NQVggLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpXG4mIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8xX1BLVExFTl9NQVhcdEdFTk1BU0soMTIsIDApXG4mIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8xX01UVV9NQVhcdChNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSlcbiAjZGVmaW5lIE1DVFBfVVNCX0RNVEZfSURcdDB4MWFiNFxuIFxuJiM0MzsvKiBtY3RwLXVzYmxpYiAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUlggaGFuZGxlOiBkcml2ZXJzIHdpbGwgdHlwaWNhbGx5IGNyZWF0ZSBvbmUgb24gaW5pdCwgd2hpY2ggcGVyc2lzdHMgZm9yXG4mIzQzOyAqIHRoZSBsaWZlIG9mIHRoZSBkcml2ZXIuIFRoZSBzYW1lIGhhbmRsZSBpcyB1c2VkIGZvciBwcm9ncmVzc2l2ZVxuJiM0MzsgKiBwcmVwYXJlIC1cdTAwM2UgY29tcGxldGUgb3BlcmF0aW9ucyAoZm9yIGVhY2ggaW5jb21pbmcgVVNCIHRyYW5zZmVyKSwgd2hpY2hcbiYjNDM7ICogcmVzdWx0IGluIG5ldGlmX3J4KCktaW5nIHRoZSBNQ1RQIHBhY2tldHMgcmVjZWl2ZWRcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl9yeCB7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHR1MTYgZXBfcGt0bGVuO1xuJiM0MztcdGJvb2wgc3BhbjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3ZvaWQgbWN0cF91c2JsaWJfcnhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCB1MTYgZXBfcGt0bGVuLCBib29sIHNwYW4pO1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCk7XG4mIzQzO1xuJiM0MztpbnQgbWN0cF91c2JsaWJfcnhfcHJlcGFyZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LFxuJiM0MztcdFx0XHQgICB2b2lkICoqYnVmcCwgc2l6ZV90ICpsZW5wLCBnZnBfdCBnZnApO1xuJiM0MztcbiYjNDM7aW50IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCBzaXplX3QgbGVuKTtcbiYjNDM7XG4mIzQzO3ZvaWQgbWN0cF91c2JsaWJfcnhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVFggaGFuZGxlOiBjcmVhdGVkIGJ5IG1jdHBfdXNibGliX3R4X3B1c2goKSBkdXJpbmcgdGhlIHR4IHBhdGgsIGFuZFxuJiM0MzsgKiBtYXkgcGVyc2lzdCBhY3Jvc3MgbXVsdGlwbGUgcGFja2V0IHRyYW5zbWl0cy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHg7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIHtcbiYjNDM7XHQvKiBTdGFydCBhIFVTQiBUWCBmb3IgQGRhdGEuIE9uIHJldHVybmluZyBzdWNjZXNzLCB0aGUgaW1wbGVtZW50YXRpb25cbiYjNDM7XHQgKiBtdXN0IGFycmFuZ2UgZm9yIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUoKSB0byBiZSBjYWxsZWQgYXQgc29tZVxuJiM0MztcdCAqIGxhdGVyIHBvaW50IChlZy4sIG9uIHVyYiBjb21wbGV0aW9uKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnQgKCpzZW5kKShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3R4IHtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wcztcbiYjNDM7XHR2b2lkICpwcml2O1xuJiM0MztcdGJvb2wgc3BhbjtcbiYjNDM7XHQvKiBwcm90ZWN0cyBhY2Nlc3MgdG8gY3VyX2N0eCAqL1xuJiM0MztcdHNwaW5sb2NrX3QgbG9jaztcbiYjNDM7XHQvKiBjb250ZXh0IHRvIHdoaWNoIHdlIGFyZSBhZGRpbmcgcGFja2V0cywgY2xlYXJlZCBvbiBzZW5kICovXG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3VyX2N0eDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxuJiM0MztcdFx0XHQgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLCB2b2lkICpwcml2LFxuJiM0MztcdFx0XHQgYm9vbCBzcGFuKTtcbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgpO1xuJiM0MztcbiYjNDM7dm9pZCAqbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4KTtcbiYjNDM7XG4mIzQzO2ludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsXG4mIzQzO1x0XHRcdHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgbW9yZSk7XG4mIzQzO1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBvayk7XG4mIzQzO1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pO1xuJiM0MztcbiAjZW5kaWYgLyogIF9fTElOVVhfVVNCX01DVFBfVVNCX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQ1RQJiMzNDssCiAgICAmIzM0O01DVFBfVFJBTlNQT1JUX1VTQiYjMzQ7LAogICAgJiMzNDtNQ1RQX1RSQU5TUE9SVF9VU0JMSUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3J4X2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3R4X3B1c2gmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYl9pbl9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYl9vdXRfY29tcGxldGUmIzM0OywKICAgICYjMzQ7bWN0cF91c2JfdHhfc2VuZCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYl9zdGFydF94bWl0JiMzNDssCiAgICAmIzM0O21jdHBfdXNiX3J4X3F1ZXVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29tbW9uIGxpYnJhcnkgZm9yIE1DVFAtb3Zlci1VU0IgKGBtY3RwLXVzYmxpYmApIGFuZCBtb2RpZmllcyB0aGUgTUNUUCBVU0IgdHJhbnNwb3J0IGRyaXZlciAoYG1jdHAtdXNiYCkgdG8gdXNlIGl0LiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiAoZS5nLiwgcmF3LWdhZGdldCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ2ZGE3NzQ0ZjI1OWEyMzYyYmE0MTM0NDlkNjZlMTYxMDEzNThlODEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCA4IDIzOjI5OjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnCmluZGV4IGNmMzI1YWIwYjFlZjU1Li5jNDBhYzljNjY1Yjc1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZwpAQCAtNDcsOSAmIzQzOzQ3LDI1IEBAIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0MKIAkgIEEgTUNUUCBwcm90b2NvbCBuZXR3b3JrIGRldmljZSBpcyBjcmVhdGVkIGZvciBlYWNoIEkzQyBidXMKIAkgIGhhdmluZyBhICYjMzQ7bWN0cC1jb250cm9sbGVyJiMzNDsgZGV2aWNldHJlZSBwcm9wZXJ0eS4KIAomIzQzO2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUIKJiM0MzsJdHJpc3RhdGUgJiMzNDtNQ1RQIG92ZXIgVVNCIGNvbW1vbiBsaWJyYXJ5JiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBVU0IKJiM0MzsJaGVscAomIzQzOwkgIENvbW1vbiBwcm90b2NvbCBoYW5kbGluZyBmdW5jdGlvbnMgZm9yIE1DVFAtb3Zlci1VU0IgdHJhbnNwb3J0CiYjNDM7CSAgaW1wbGVtZW50YXRpb25zLCBzdWl0YWJsZSBmb3IgdXNlIGluIGVpdGhlciBob3N0LSBvciBnYWRnZXQtc2lkZQomIzQzOwkgIHRyYW5zcG9ydCBkcml2ZXIKJiM0MzsKJiM0MzsJICBUaGlzIHdpbGwgYmUgYXV0b21hdGljYWxseSBlbmFibGVkIGJ5IHRoZSB0cmFuc3BvcnQgZHJpdmVyLgomIzQzOwomIzQzO2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVAomIzQzOyAgICAgICAgYm9vbCAmIzM0O01DVFAgdXNibGliIHRlc3RzJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUUwomIzQzOyAgICAgICAgZGVwZW5kcyBvbiBNQ1RQX1RSQU5TUE9SVF9VU0JMSUI9eSAmYW1wOyZhbXA7IEtVTklUPXkKJiM0MzsgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTCiYjNDM7CiBjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCCiAJdHJpc3RhdGUgJiMzNDtNQ1RQIFVTQiB0cmFuc3BvcnQmIzM0OwogCWRlcGVuZHMgb24gVVNCCiYjNDM7CXNlbGVjdCBNQ1RQX1RSQU5TUE9SVF9VU0JMSUIKIAloZWxwCiAJICBQcm92aWRlcyBhIGRyaXZlciB0byBhY2Nlc3MgTUNUUCBkZXZpY2VzIG92ZXIgVVNCIHRyYW5zcG9ydCwKIAkgIGRlZmluZWQgYnkgRE1URiBzcGVjaWZpY2F0aW9uIERTUDAyODMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZQppbmRleCBjMzYwMDY4NDlhMWU3ZC4uYzg3MGI2MmQzZjFjOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZQpAQCAtMiwzICYjNDM7Miw0IEBAIG9iai0kKENPTkZJR19NQ1RQX1NFUklBTCkgJiM0Mzs9IG1jdHAtc2VyaWFsLm8KIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JMkMpICYjNDM7PSBtY3RwLWkyYy5vCiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTNDKSAmIzQzOz0gbWN0cC1pM2Mubwogb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQikgJiM0Mzs9IG1jdHAtdXNiLm8KJiM0MztvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCTElCKSAmIzQzOz0gbWN0cC11c2JsaWIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jCmluZGV4IGZhZGU2NWYyZjI2OTk1Li4yZDMxMDc1Mzc0YjQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYwpAQCAtMyw5ICYjNDM7Myw5IEBACiAgKiBtY3RwLXVzYi5jIC0gTUNUUC1vdmVyLVVTQiAoRE1URiBEU1AwMjgzKSB0cmFuc3BvcnQgYmluZGluZyBkcml2ZXIuCiAgKgogICogRFNQMDI4MyBpcyBhdmFpbGFibGUgYXQ6Ci0gKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjAuMS5wZGYKJiM0MzsgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGYKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNSBDb2RlIENvbnN0cnVjdCBQdHkgTHRkCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjYgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZAogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKQEAgLTIyLDk1ICYjNDM7MjIsMTE1IEBACiBzdHJ1Y3QgbWN0cF91c2IgewogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CiYjNDM7CWJvb2wgc3BhbjsKIAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAKIAl1OCBlcF9pbjsKIAl1OCBlcF9vdXQ7CiAKLQlzdHJ1Y3QgdXJiICp0eF91cmI7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl9yeCByeDsKIAlzdHJ1Y3QgdXJiICpyeF91cmI7CiYjNDM7CWludCBpbl9lcnJfY291bnQ7CiYjNDM7CWludCBpbl9lcnJfb3JpZzsKJiM0MzsJYm9vbCBjbGVhcl9oYWx0OwogCiAJLyogZW5mb3JjZXMgYXRvbWljIGFjY2VzcyB0byByeF9zdG9wcGVkIGFuZCByZXF1ZXVpbmcgdGhlIHJldHJ5IHdvcmsgKi8KIAlzcGlubG9ja190IHJ4X2xvY2s7CiAJYm9vbCByeF9zdG9wcGVkOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgcnhfcmV0cnlfd29yazsKJiM0MzsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4IHR4OwomIzQzOwlzdHJ1Y3QgdXNiX2FuY2hvciB0eF9hbmNob3I7CiYjNDM7CS8qIHNlcmlhbGlzZXMgdHhfcW1lbSB1cGRhdGVzIHRvIG5ldGRldiBxdWV1ZSBzdGF0ZXMgKi8KJiM0MzsJc3BpbmxvY2tfdCB0eF9xbWVtX2xvY2s7CiYjNDM7CWludCB0eF9xbWVtOwomIzQzO307CiYjNDM7CiYjNDM7ZW51bSB7CiYjNDM7CU1DVFBfVVNCX1NVQkNMQVNTX0JBU0UgPSAweDAwLAomIzQzOwlNQ1RQX1VTQl9TVUJDTEFTU19TUEFOID0gMHgwMiwKIH07CiAKJiM0MzsvKiBXZSB1c2UgYSB0b3RhbC1zaXplIGxpbWl0IGZvciBvdXRzdGFuZGluZyBVUkJzLCBhcyB0aGUgdHJhbnNmZXIgY291bnRzCiYjNDM7ICogbWF5IHZhcnkgYSBsb3QgYmV0d2VlbiBzcGFubmluZy0gYW5kIG5vbi1zcGFubmluZyBtb2Rlcy4gSW4gc3Bhbm5pbmcgbW9kZSwKJiM0MzsgKiB0aGlzIHdpbGwgYWxsb3cgZm9yIGEgY291cGxlIG9mIG1heC1zaXplZCB0cmFuc2ZlcnMgdG8gYmUgaW4gZmxpZ2h0LiBJbgomIzQzOyAqIG5vbi1zcGFubmluZyBtb2RlLCAzMi4KJiM0MzsgKgomIzQzOyAqIFdlIHdhbnQgdG8gYXZvaWQgZGlzYWJsaW5nIHRoZSB0eCBxdWV1ZSBpZiBwb3NzaWJsZTsgZG9pbmcgc28gd2lsbCBlbmQgdXAKJiM0MzsgKiByZXF1ZXVlaW5nIHRvIGdzb19za2IsIGFuZCB3ZSBvbmx5IGRlcXVldWUgZnJvbSB0aGF0IG9uZSBza2IgYXQgYSB0aW1lLAomIzQzOyAqIHNvIGNhbiBubyBsb25nZXIgcGVyZm9ybSB0cmFuc2ZlciBwYWNraW5nLgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgVFhfUU1FTV9NQVggPSAxNjM4NDsKJiM0MzsKIHN0YXRpYyB2b2lkIG1jdHBfdXNiX291dF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHVyYi0mZ3Q7Y29udGV4dDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLSZndDtkZXY7Ci0JaW50IHN0YXR1czsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4ID0gdXJiLSZndDtjb250ZXh0OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYodHhfY3R4KTsKJiM0MzsJdW5zaWduZWQgaW50IGxlbiA9IHVyYi0mZ3Q7dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG1jdHBfdXNiLSZndDtuZXRkZXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzdGF0dXMgPSB1cmItJmd0O3N0YXR1czsKJiM0MzsJbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSh0eF9jdHgsIG5ldGRldiwgdXJiLSZndDtzdGF0dXMgPT0gMCk7CiAKLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgLUVOT0VOVDoKLQljYXNlIC1FQ09OTlJFU0VUOgotCWNhc2UgLUVTSFVURE9XTjoKLQljYXNlIC1FUFJPVE86Ci0JCWRldl9kc3RhdHNfdHhfZHJvcHBlZChuZXRkZXYpOwotCQlicmVhazsKLQljYXNlIDA6Ci0JCWRldl9kc3RhdHNfdHhfYWRkKG5ldGRldiwgc2tiLSZndDtsZW4pOwotCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7Ci0JCWNvbnN1bWVfc2tiKHNrYik7Ci0JCXJldHVybjsKLQlkZWZhdWx0OgotCQluZXRkZXZfZGJnKG5ldGRldiwgJiMzNDt1bmV4cGVjdGVkIHR4IHVyYiBzdGF0dXM6ICVkXG4mIzM0Oywgc3RhdHVzKTsKLQkJZGV2X2RzdGF0c190eF9kcm9wcGVkKG5ldGRldik7Ci0JfQomIzQzOwl1c2JfZnJlZV91cmIodXJiKTsKIAotCWtmcmVlX3NrYihza2IpOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO21jdHBfdXNiLSZndDt0eF9xbWVtX2xvY2ssIGZsYWdzKTsKJiM0MzsJbWN0cF91c2ItJmd0O3R4X3FtZW0gLT0gbGVuOwomIzQzOwlpZiAobWN0cF91c2ItJmd0O3R4X3FtZW0gJmx0OyBUWF9RTUVNX01BWCAmYW1wOyZhbXA7IG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21jdHBfdXNiLSZndDt0eF9xbWVtX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIG5ldGRldl90eF90IG1jdHBfdXNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0MztzdGF0aWMgaW50IG1jdHBfdXNiX3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LAomIzQzOwkJCSAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtY3RwX3VzYl9oZHIgKmhkcjsKLQl1bnNpZ25lZCBpbnQgcGxlbjsKJiM0MzsJc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHVyYiAqdXJiOwogCWludCByYzsKIAotCXBsZW4gPSBza2ItJmd0O2xlbjsKLQotCWlmIChwbGVuICYjNDM7IHNpemVvZigqaGRyKSAmZ3Q7IE1DVFBfVVNCX1hGRVJfU0laRSkKLQkJZ290byBlcnJfZHJvcDsKLQotCXJjID0gc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKCpoZHIpKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyX2Ryb3A7Ci0KLQloZHIgPSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7Ci0JaWYgKCFoZHIpCi0JCWdvdG8gZXJyX2Ryb3A7Ci0KLQloZHItJmd0O2lkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7Ci0JaGRyLSZndDtyc3ZkID0gMDsKLQloZHItJmd0O2xlbiA9IHBsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpOwotCi0JdXJiID0gbWN0cF91c2ItJmd0O3R4X3VyYjsKJiM0MzsJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCF1cmIpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKIAogCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgbWN0cF91c2ItJmd0O3VzYmRldiwKIAkJCSAgdXNiX3NuZGJ1bGtwaXBlKG1jdHBfdXNiLSZndDt1c2JkZXYsIG1jdHBfdXNiLSZndDtlcF9vdXQpLAotCQkJICBza2ItJmd0O2RhdGEsIHNrYi0mZ3Q7bGVuLAotCQkJICBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHNrYik7CiYjNDM7CQkJICBkYXRhLCBsZW4sIG1jdHBfdXNiX291dF9jb21wbGV0ZSwgdHhfY3R4KTsKJiM0MzsKJiM0MzsJaWYgKG1jdHBfdXNiLSZndDtzcGFuKQomIzQzOwkJdXJiLSZndDt0cmFuc2Zlcl9mbGFncyB8PSBVUkJfWkVST19QQUNLRVQ7CiYjNDM7CiYjNDM7CXVzYl9hbmNob3JfdXJiKHVyYiwgJmFtcDttY3RwX3VzYi0mZ3Q7dHhfYW5jaG9yKTsKIAotCS8qIFN0b3BzIFRYIHF1ZXVlIGZpcnN0IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb24gd2l0aCBVUkIgY29tcGxldGUgKi8KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJcmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyYykgewotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCWdvdG8gZXJyX2Ryb3A7CiYjNDM7CQluZXRkZXZfZGJnKG1jdHBfdXNiLSZndDtuZXRkZXYsICYjMzQ7VFggdXJiIHN1Ym1pdCBmYWlsZWQsICVkXG4mIzM0OywgcmMpOwomIzQzOwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOwomIzQzOwkJdXNiX2ZyZWVfdXJiKHVyYik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO21jdHBfdXNiLSZndDt0eF9xbWVtX2xvY2ssIGZsYWdzKTsKJiM0MzsJCW1jdHBfdXNiLSZndDt0eF9xbWVtICYjNDM7PSBsZW47CiYjNDM7CQlpZiAobWN0cF91c2ItJmd0O3R4X3FtZW0gJmd0Oz0gVFhfUU1FTV9NQVgpCiYjNDM7CQkJbmV0aWZfc3RvcF9xdWV1ZShtY3RwX3VzYi0mZ3Q7bmV0ZGV2KTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDttY3RwX3VzYi0mZ3Q7dHhfcW1lbV9sb2NrLCBmbGFncyk7CiAJfQogCi0JcmV0dXJuIE5FVERFVl9UWF9PSzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB0eF9vcHMgPSB7CiYjNDM7CS5zZW5kID0gbWN0cF91c2JfdHhfc2VuZCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CWJvb2wgbW9yZSA9IG5ldGRldl94bWl0X21vcmUoKTsKJiM0MzsKJiM0MzsJbWN0cF91c2JsaWJfdHhfcHVzaChkZXYsICZhbXA7bWN0cF91c2ItJmd0O3R4LCBza2IsIG1vcmUpOwogCi1lcnJfZHJvcDoKLQlkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTsKLQlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC0xMjUsMjQgJiM0MzsxNDUsMjMgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgUlhfUkVUUllfREVMQVkgPSBIWiAvIDQ7CiBzdGF0aWMgaW50IG1jdHBfdXNiX3J4X3F1ZXVlKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGdmcF90IGdmcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXNpemVfdCBsZW47CiYjNDM7CXZvaWQgKmJ1ZjsKIAlpbnQgcmM7CiAKLQlza2IgPSBfX25ldGRldl9hbGxvY19za2IobWN0cF91c2ItJmd0O25ldGRldiwgTUNUUF9VU0JfWEZFUl9TSVpFLCBnZnApOwotCWlmICghc2tiKSB7Ci0JCXJjID0gLUVOT01FTTsKJiM0MzsJcmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKG1jdHBfdXNiLSZndDtuZXRkZXYsICZhbXA7bWN0cF91c2ItJmd0O3J4LAomIzQzOwkJCQkgICAgJmFtcDtidWYsICZhbXA7bGVuLCBnZnApOwomIzQzOwlpZiAocmMpCiAJCWdvdG8gZXJyX3JldHJ5OwotCX0KIAogCXVzYl9maWxsX2J1bGtfdXJiKG1jdHBfdXNiLSZndDtyeF91cmIsIG1jdHBfdXNiLSZndDt1c2JkZXYsCiAJCQkgIHVzYl9yY3ZidWxrcGlwZShtY3RwX3VzYi0mZ3Q7dXNiZGV2LCBtY3RwX3VzYi0mZ3Q7ZXBfaW4pLAotCQkJICBza2ItJmd0O2RhdGEsIE1DVFBfVVNCX1hGRVJfU0laRSwKLQkJCSAgbWN0cF91c2JfaW5fY29tcGxldGUsIHNrYik7CiYjNDM7CQkJICBidWYsIGxlbiwgbWN0cF91c2JfaW5fY29tcGxldGUsIG1jdHBfdXNiKTsKIAogCXJjID0gdXNiX3N1Ym1pdF91cmIobWN0cF91c2ItJmd0O3J4X3VyYiwgZ2ZwKTsKIAlpZiAocmMpIHsKIAkJbmV0ZGV2X2RiZyhtY3RwX3VzYi0mZ3Q7bmV0ZGV2LCAmIzM0O3J4IHVyYiBzdWJtaXQgZmFpbHVyZTogJWRcbiYjMzQ7LCByYyk7Ci0JCWtmcmVlX3NrYihza2IpOwomIzQzOwkJbWN0cF91c2JsaWJfcnhfY2FuY2VsKCZhbXA7bWN0cF91c2ItJmd0O3J4KTsKIAkJaWYgKHJjID09IC1FTk9NRU0pCiAJCQlnb3RvIGVycl9yZXRyeTsKIAl9CkBAIC0xNTcsMTMgJiM0MzsxNzYsMTMgQEAgc3RhdGljIGludCBtY3RwX3VzYl9yeF9xdWV1ZShzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiLCBnZnBfdCBnZnApCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJ4X2Vycl9tYXggPSAxMDsKJiM0MzsKIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2luX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLSZndDtjb250ZXh0OwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBza2ItJmd0O2RldjsKLQlzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgbWN0cF9za2JfY2IgKmNiOwotCXVuc2lnbmVkIGludCBsZW47CiYjNDM7CXN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSB1cmItJmd0O2NvbnRleHQ7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBtY3RwX3VzYi0mZ3Q7bmV0ZGV2OwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzdGF0dXM7CiAKIAlzdGF0dXMgPSB1cmItJmd0O3N0YXR1czsKQEAgLTE3Miw4MCAmIzQzOzE5MSw1NCBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9pbl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCiAJY2FzZSAtRU5PRU5UOgogCWNhc2UgLUVDT05OUkVTRVQ6CiAJY2FzZSAtRVNIVVRET1dOOgotCWNhc2UgLUVQUk9UTzoKLQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQkvKiBkZXZpY2Ugc2h1dGRvd24sIGRvbiYjMzk7dCByZXN1Ym1pdCAqLwomIzQzOwkJbWN0cF91c2JsaWJfcnhfY2FuY2VsKCZhbXA7bWN0cF91c2ItJmd0O3J4KTsKIAkJcmV0dXJuOwotCWNhc2UgMDoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbmV0ZGV2X2RiZyhuZXRkZXYsICYjMzQ7dW5leHBlY3RlZCByeCB1cmIgc3RhdHVzOiAlZFxuJiMzNDssIHN0YXR1cyk7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQotCi0JbGVuID0gdXJiLSZndDthY3R1YWxfbGVuZ3RoOwotCV9fc2tiX3B1dChza2IsIGxlbik7Ci0KLQl3aGlsZSAoc2tiKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IyID0gTlVMTDsKLQkJc3RydWN0IG1jdHBfdXNiX2hkciAqaGRyOwotCQl1OCBwa3RfbGVuOyAvKiBsZW5ndGggb2YgTUNUUCBwYWNrZXQsIG5vIFVTQiBoZWFkZXIgKi8KIAotCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCQloZHIgPSBza2JfcHVsbF9kYXRhKHNrYiwgc2l6ZW9mKCpoZHIpKTsKLQkJaWYgKCFoZHIpCi0JCQlicmVhazsKLQotCQlpZiAoYmUxNl90b19jcHUoaGRyLSZndDtpZCkgIT0gTUNUUF9VU0JfRE1URl9JRCkgewotCQkJbmV0ZGV2X2RiZyhuZXRkZXYsICYjMzQ7cng6IGludmFsaWQgaWQgJTA0eFxuJiMzNDssCi0JCQkJICAgYmUxNl90b19jcHUoaGRyLSZndDtpZCkpOwotCQkJYnJlYWs7Ci0JCX0KJiM0MzsJY2FzZSAtRVBJUEU6CiYjNDM7CQkvKiBlbmRwb2ludCBzdGFsbDogY2xlYXIgaGFsdCwgd2hpY2ggd2lsbCBjYXVzZSBhIHJlc3VibWl0ICovCiAKLQkJaWYgKGhkci0mZ3Q7bGVuICZsdDsKLQkJICAgIHNpemVvZihzdHJ1Y3QgbWN0cF9oZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSkgewotCQkJbmV0ZGV2X2RiZyhuZXRkZXYsICYjMzQ7cng6IHNob3J0IHBhY2tldCAoaGRyKSAlZFxuJiMzNDssCi0JCQkJICAgaGRyLSZndDtsZW4pOwotCQkJYnJlYWs7CiYjNDM7CQlpZiAoIW1jdHBfdXNiLSZndDtpbl9lcnJfY291bnQmIzQzOyYjNDM7KQomIzQzOwkJCW1jdHBfdXNiLSZndDtpbl9lcnJfb3JpZyA9IHN0YXR1czsKJiM0MzsJCWlmIChtY3RwX3VzYi0mZ3Q7aW5fZXJyX2NvdW50ICZndDs9IHJ4X2Vycl9tYXgpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtleGNlc3NpdmUgc3RhbGxzIGZyb20gSU4gRVBcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm47CiAJCX0KIAotCQkvKiB3ZSBrbm93IHdlIGhhdmUgYXQgbGVhc3Qgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpIGhlcmUgKi8KLQkJcGt0X2xlbiA9IGhkci0mZ3Q7bGVuIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpOwotCQlpZiAocGt0X2xlbiAmZ3Q7IHNrYi0mZ3Q7bGVuKSB7Ci0JCQluZXRkZXZfZGJnKG5ldGRldiwKLQkJCQkgICAmIzM0O3J4OiBzaG9ydCBwYWNrZXQgKHhmZXIpICVkLCBhY3R1YWwgJWRcbiYjMzQ7LAotCQkJCSAgIGhkci0mZ3Q7bGVuLCBza2ItJmd0O2xlbik7Ci0JCQlicmVhazsKLQkJfQomIzQzOwkJbWN0cF91c2ItJmd0O2NsZWFyX2hhbHQgPSB0cnVlOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttY3RwX3VzYi0mZ3Q7cnhfbG9jaywgZmxhZ3MpOwomIzQzOwkJaWYgKCFtY3RwX3VzYi0mZ3Q7cnhfc3RvcHBlZCkKJiM0MzsJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDttY3RwX3VzYi0mZ3Q7cnhfcmV0cnlfd29yaywKJiM0MzsJCQkJCSAgICAgIFJYX1JFVFJZX0RFTEFZKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDttY3RwX3VzYi0mZ3Q7cnhfbG9jaywgZmxhZ3MpOwomIzQzOwkJbWN0cF91c2JsaWJfcnhfY2FuY2VsKCZhbXA7bWN0cF91c2ItJmd0O3J4KTsKJiM0MzsJCXJldHVybjsKIAotCQlpZiAocGt0X2xlbiAmbHQ7IHNrYi0mZ3Q7bGVuKSB7Ci0JCQkvKiBtb3JlIHBhY2tldHMgbWF5IGZvbGxvdyAtIGNsb25lIHRvIGEgbmV3Ci0JCQkgKiBza2IgdG8gdXNlIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbgotCQkJICovCi0JCQlza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoc2tiMikgewotCQkJCWlmICghc2tiX3B1bGwoc2tiMiwgcGt0X2xlbikpIHsKLQkJCQkJa2ZyZWVfc2tiKHNrYjIpOwotCQkJCQlza2IyID0gTlVMTDsKLQkJCQl9Ci0JCQl9Ci0JCQlza2JfdHJpbShza2IsIHBrdF9sZW4pOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJbmV0ZGV2X2RiZyhuZXRkZXYsICYjMzQ7dW5leHBlY3RlZCByeCB1cmIgc3RhdHVzOiAlZFxuJiMzNDssIHN0YXR1cyk7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSAtRVRJTUU6CiYjNDM7CWNhc2UgLUVQUk9UTzoKJiM0MzsJY2FzZSAtRUlMU0VROgomIzQzOwljYXNlIC1FT1ZFUkZMT1c6CiYjNDM7CQkvKiBwb3NzaWJseSB0cmFuc2llbnQ7IHJlY29yZCBmaXJzdCBmYWlsdXJlLCByZXN1Ym1pdCAqLwomIzQzOwkJbWN0cF91c2JsaWJfcnhfY2FuY2VsKCZhbXA7bWN0cF91c2ItJmd0O3J4KTsKJiM0MzsJCWlmICghbWN0cF91c2ItJmd0O2luX2Vycl9jb3VudCYjNDM7JiM0MzspCiYjNDM7CQkJbWN0cF91c2ItJmd0O2luX2Vycl9vcmlnID0gc3RhdHVzOwomIzQzOwkJaWYgKG1jdHBfdXNiLSZndDtpbl9lcnJfY291bnQgJmd0Oz0gcnhfZXJyX21heCkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O2V4Y2Vzc2l2ZSBlcnJvcnMgZnJvbSBJTiBFUCwgZmlyc3Q6ICVkXG4mIzM0OywKJiM0MzsJCQkJICAgbWN0cF91c2ItJmd0O2luX2Vycl9vcmlnKTsKJiM0MzsJCQlyZXR1cm47CiAJCX0KJiM0MzsJCWJyZWFrOwogCi0JCWRldl9kc3RhdHNfcnhfYWRkKG5ldGRldiwgc2tiLSZndDtsZW4pOwotCi0JCXNrYi0mZ3Q7cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9NQ1RQKTsKLQkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7Ci0JCWNiID0gX19tY3RwX2NiKHNrYik7Ci0JCWNiLSZndDtoYWxlbiA9IDA7Ci0JCW5ldGlmX3J4KHNrYik7Ci0KLQkJc2tiID0gc2tiMjsKJiM0MzsJY2FzZSAwOgomIzQzOwkJbWN0cF91c2JsaWJfcnhfY29tcGxldGUobmV0ZGV2LCAmYW1wO21jdHBfdXNiLSZndDtyeCwgdXJiLSZndDthY3R1YWxfbGVuZ3RoKTsKJiM0MzsJCW1jdHBfdXNiLSZndDtpbl9lcnJfY291bnQgPSAwOwomIzQzOwkJYnJlYWs7CiAJfQogCi0JaWYgKHNrYikKLQkJa2ZyZWVfc2tiKHNrYik7Ci0KIAltY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0FUT01JQyk7CiB9CiAKQEAgLTI1Myw2ICYjNDM7MjQ2LDIwIEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX3J4X3JldHJ5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1jdHBfdXNiLAogCQkJCQkJIHJ4X3JldHJ5X3dvcmsud29yayk7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogV2UgYXJlIG9ubHkgY2FsbGVkIHdoZW4gcnggY29tcGxldGlvbnMgYXJlIHN1c3BlbmRlZCAqLwomIzQzOwlpZiAobWN0cF91c2ItJmd0O2NsZWFyX2hhbHQpIHsKJiM0MzsJCWludCBwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKG1jdHBfdXNiLSZndDt1c2JkZXYsIG1jdHBfdXNiLSZndDtlcF9pbik7CiYjNDM7CiYjNDM7CQlyYyA9IHVzYl9jbGVhcl9oYWx0KG1jdHBfdXNiLSZndDt1c2JkZXYsIHBpcGUpOwomIzQzOwkJaWYgKHJjKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihtY3RwX3VzYi0mZ3Q7bmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O2NhbiYjMzk7dCBjbGVhciBJTiBFUCBoYWx0OiAlZFxuJiMzNDssIHJjKTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQltY3RwX3VzYi0mZ3Q7Y2xlYXJfaGFsdCA9IGZhbHNlOwomIzQzOwl9CiAKIAltY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0tFUk5FTCk7CiB9CkBAIC0yNjIsNiAmIzQzOzI2OSw4IEBAIHN0YXRpYyBpbnQgbWN0cF91c2Jfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJV1JJVEVfT05DRShtY3RwX3VzYi0mZ3Q7cnhfc3RvcHBlZCwgZmFsc2UpOwomIzQzOwltY3RwX3VzYi0mZ3Q7Y2xlYXJfaGFsdCA9IGZhbHNlOwomIzQzOwltY3RwX3VzYi0mZ3Q7aW5fZXJyX2NvdW50ID0gMDsKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKQEAgLTI4NCw3ICYjNDM7MjkzLDEwIEBAIHN0YXRpYyBpbnQgbWN0cF91c2Jfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO21jdHBfdXNiLSZndDtyeF9yZXRyeV93b3JrKTsKIAogCXVzYl9raWxsX3VyYihtY3RwX3VzYi0mZ3Q7cnhfdXJiKTsKLQl1c2Jfa2lsbF91cmIobWN0cF91c2ItJmd0O3R4X3VyYik7CiYjNDM7CiYjNDM7CXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmFtcDttY3RwX3VzYi0mZ3Q7dHhfYW5jaG9yKTsKJiM0MzsKJiM0MzsJbWN0cF91c2JsaWJfdHhfY2FuY2VsKCZhbXA7bWN0cF91c2ItJmd0O3R4LCBkZXYsIFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDEsNyAmIzQzOzMxMyw3IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCiAJZGV2LSZndDttdHUgPSBNQ1RQX1VTQl9NVFVfTUlOOwogCWRldi0mZ3Q7bWluX210dSA9IE1DVFBfVVNCX01UVV9NSU47Ci0JZGV2LSZndDttYXhfbXR1ID0gTUNUUF9VU0JfTVRVX01BWDsKJiM0MzsJZGV2LSZndDttYXhfbXR1ID0gTUNUUF9VU0JfMV8wX01UVV9NQVg7CiAKIAlkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTsKIAlkZXYtJmd0O3R4X3F1ZXVlX2xlbiA9IERFRkFVTFRfVFhfUVVFVUVfTEVOOwpAQCAtMzE3LDYgJiM0MzszMjksNyBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgbWN0cF91c2IgKmRldjsKJiM0MzsJYm9vbCBzcGFuOwogCWludCByYzsKIAogCS8qIG9ubHkgb25lIGFsdGVybmF0ZSAqLwpAQCAtMzI4LDYgJiM0MzszNDEsOCBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQlyZXR1cm4gcmM7CiAJfQogCiYjNDM7CXNwYW4gPSBpZmFjZV9kZXNjLSZndDtkZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBNQ1RQX1VTQl9TVUJDTEFTU19TUEFOOwomIzQzOwogCW5ldGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksICYjMzQ7bWN0cHVzYiVkJiMzNDssIE5FVF9OQU1FX0VOVU0sCiAJCQkgICAgICBtY3RwX3VzYl9uZXRkZXZfc2V0dXApOwogCWlmICghbmV0ZGV2KQpAQCAtMzM1LDMzICYjNDM7MzUwLDQzIEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZhbXA7aW50Zi0mZ3Q7ZGV2KTsKIAlkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlkZXYtJmd0O3NwYW4gPSBzcGFuOwogCWRldi0mZ3Q7bmV0ZGV2ID0gbmV0ZGV2OwogCWRldi0mZ3Q7dXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlkZXYtJmd0O2ludGYgPSBpbnRmOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZGV2LSZndDtyeF9sb2NrKTsKJiM0MzsJaWYgKGRldi0mZ3Q7c3BhbikKJiM0MzsJCW5ldGRldi0mZ3Q7bWF4X210dSA9IE1DVFBfVVNCXzFfMV9NVFVfTUFYOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO2Rldi0mZ3Q7dHhfcW1lbV9sb2NrKTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRldik7CiAKJiM0MzsJbWN0cF91c2JsaWJfcnhfaW5pdCgmYW1wO2Rldi0mZ3Q7cngsIGxlMTZfdG9fY3B1KGVwX2luLSZndDt3TWF4UGFja2V0U2l6ZSksCiYjNDM7CQkJICAgIGRldi0mZ3Q7c3Bhbik7CiYjNDM7CW1jdHBfdXNibGliX3R4X2luaXQoJmFtcDtkZXYtJmd0O3R4LCAmYW1wO3R4X29wcywgZGV2LCBkZXYtJmd0O3NwYW4pOwomIzQzOwlpbml0X3VzYl9hbmNob3IoJmFtcDtkZXYtJmd0O3R4X2FuY2hvcik7CiYjNDM7CiAJZGV2LSZndDtlcF9pbiA9IGVwX2luLSZndDtiRW5kcG9pbnRBZGRyZXNzOwogCWRldi0mZ3Q7ZXBfb3V0ID0gZXBfb3V0LSZndDtiRW5kcG9pbnRBZGRyZXNzOwogCi0JZGV2LSZndDt0eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCWRldi0mZ3Q7cnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRldi0mZ3Q7dHhfdXJiIHx8ICFkZXYtJmd0O3J4X3VyYikgewomIzQzOwlpZiAoIWRldi0mZ3Q7cnhfdXJiKSB7CiAJCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnJfZnJlZV91cmJzOwomIzQzOwkJZ290byBlcnJfZmluaV9yeHR4OwogCX0KIAogCUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7ZGV2LSZndDtyeF9yZXRyeV93b3JrLCBtY3RwX3VzYl9yeF9yZXRyeV93b3JrKTsKIAogCXJjID0gbWN0cF9yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2LCBOVUxMLCBNQ1RQX1BIWVNfQklORElOR19VU0IpOwogCWlmIChyYykKLQkJZ290byBlcnJfZnJlZV91cmJzOwomIzQzOwkJZ290byBlcnJfZnJlZV91cmI7CiAKIAlyZXR1cm4gMDsKIAotZXJyX2ZyZWVfdXJiczoKLQl1c2JfZnJlZV91cmIoZGV2LSZndDt0eF91cmIpOwomIzQzO2Vycl9mcmVlX3VyYjoKIAl1c2JfZnJlZV91cmIoZGV2LSZndDtyeF91cmIpOwomIzQzO2Vycl9maW5pX3J4dHg6CiYjNDM7CW1jdHBfdXNibGliX3R4X2ZpbmkoJmFtcDtkZXYtJmd0O3R4KTsKJiM0MzsJbWN0cF91c2JsaWJfcnhfZmluaSgmYW1wO2Rldi0mZ3Q7cngpOwogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiAJcmV0dXJuIHJjOwogfQpAQCAtMzcxLDEzICYjNDM7Mzk2LDE1IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiAJc3RydWN0IG1jdHBfdXNiICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCiAJbWN0cF91bnJlZ2lzdGVyX25ldGRldihkZXYtJmd0O25ldGRldik7Ci0JdXNiX2ZyZWVfdXJiKGRldi0mZ3Q7dHhfdXJiKTsKJiM0MzsJbWN0cF91c2JsaWJfcnhfZmluaSgmYW1wO2Rldi0mZ3Q7cngpOwomIzQzOwltY3RwX3VzYmxpYl90eF9maW5pKCZhbXA7ZGV2LSZndDt0eCk7CiAJdXNiX2ZyZWVfdXJiKGRldi0mZ3Q7cnhfdXJiKTsKIAlmcmVlX25ldGRldihkZXYtJmd0O25ldGRldik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtY3RwX3VzYl9kZXZpY2VzW10gPSB7Ci0JeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01DVFAsIDB4MCwgMHgxKSB9LAomIzQzOwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgTUNUUF9VU0JfU1VCQ0xBU1NfQkFTRSwgMHgxKSB9LAomIzQzOwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgTUNUUF9VU0JfU1VCQ0xBU1NfU1BBTiwgMHgxKSB9LAogCXsgMCB9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMmEyMmJlOTk5ZmEwYTEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYwpAQCAtMCwwICYjNDM7MSw0MTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogbWN0cC11c2JsaWItdGVzdC5jIC0gTUNUUC1vdmVyLVVTQiAoRE1URiBEU1AwMjgzKSB0cmFuc3BvcnQgaGVscGVyIGxpYnJhcnksCiYjNDM7ICogdW5pdCB0ZXN0IGRlZmluaXRpb25zLgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGQKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2t1bml0L3Rlc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfYXJwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9tY3RwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9tY3RwZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3VzYi9tY3RwLXVzYi5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiB7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwomIzQzOwlzdHJ1Y3QgbWN0cF9kZXYgKm1kZXY7CiYjNDM7CXN0cnVjdCBza19idWZmX2hlYWQgcnhfcGt0czsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCB7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2OwomIzQzOwlzdHJ1Y3QgbWN0cF9yb3V0ZSBydDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYmxpYl9kZXZfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwkvKiB3ZSBkb24mIzM5O3QgdHJhY2sgYW55IFRYZWQgcGFja2V0cyBhdCBwcmVzZW50ICovCiYjNDM7CWtmcmVlX3NrYihza2IpOwomIzQzOwlyZXR1cm4gTkVUREVWX1RYX09LOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1jdHBfdGVzdF9uZXRkZXZfb3BzID0gewomIzQzOwkubmRvX3N0YXJ0X3htaXQgPSBtY3RwX3VzYmxpYl9kZXZfdHgsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgdTE2IGVwX21heHBhY2tldCA9IDUxMjsKJiM0MztzdGF0aWMgY29uc3QgbWN0cF9laWRfdCBsb2NhbF9laWQgPSA4OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CW5kZXYtJmd0O3R5cGUgPSBBUlBIUkRfTUNUUDsKJiM0MzsJbmRldi0mZ3Q7bXR1ID0gODE5MjsKJiM0MzsJbmRldi0mZ3Q7ZmxhZ3MgPSBJRkZfTk9BUlA7CiYjNDM7CW5kZXYtJmd0O25ldGRldl9vcHMgPSAmYW1wO21jdHBfdGVzdF9uZXRkZXZfb3BzOwomIzQzOwluZGV2LSZndDtuZWVkc19mcmVlX25ldGRldiA9IHRydWU7CiYjNDM7CW5kZXYtJmd0O3BjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9EU1RBVFM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZGV2X2FjdGlvbih2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXYgPSBkYXRhOwomIzQzOwomIzQzOwlza2JfcXVldWVfcHVyZ2UoJmFtcDtkZXYtJmd0O3J4X3BrdHMpOwomIzQzOwlpZiAoZGV2LSZndDttZGV2KQomIzQzOwkJbWN0cF9kZXZfcHV0KGRldi0mZ3Q7bWRldik7CiYjNDM7CXVucmVnaXN0ZXJfbmV0ZGV2KGRldi0mZ3Q7bmRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKgomIzQzO21jdHBfdXNibGliX3Rlc3RfY3JlYXRlX2RldihzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJbmRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksICYjMzQ7bWN0cHRlc3QlZCYjMzQ7LCBORVRfTkFNRV9FTlVNLAomIzQzOwkJCSAgICBtY3RwX3VzYmxpYl9kZXZfc2V0dXApOwomIzQzOwlpZiAoIW5kZXYpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CWRldi0mZ3Q7bmRldiA9IG5kZXY7CiYjNDM7CXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtkZXYtJmd0O3J4X3BrdHMpOwomIzQzOwomIzQzOwlyYyA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQlmcmVlX25ldGRldihuZGV2KTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBtY3RwX3VzYmxpYl90ZXN0X2Rldl9hY3Rpb24sIGRldik7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWRldi0mZ3Q7bWRldiA9IF9fbWN0cF9kZXZfZ2V0KG5kZXYpOwomIzQzOwlpZiAoZGV2LSZndDttZGV2KQomIzQzOwkJZGV2LSZndDttZGV2LSZndDtuZXQgPSBtY3RwX2RlZmF1bHRfbmV0KGRldl9uZXQobmRldikpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O21kZXYpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CXJjID0gZGV2X29wZW4obmRldiwgTlVMTCk7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gZGV2OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3Rlc3RfZHN0X291dHB1dChzdHJ1Y3QgbWN0cF9kc3QgKmRzdCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJc2tiX3F1ZXVlX3RhaWwoJmFtcDtkZXYtJmd0O3J4X3BrdHMsIHNrYik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eCA9IGRhdGE7CiYjNDM7CiYjNDM7CS8qIFRoZSBkZXZpY2Ugd2lsbCBoYXZlIGJlZW4gZGVzdHJveWVkLCBzbyAtJmd0O3J0IHdpbGwgYmUgdW5saW5rZWQuCiYjNDM7CSAqIEp1c3QgZW5zdXJlIHRoYXQgdGhlIHJlZmNvdW50IGlzIGFzIGV4cGVjdGVkLgomIzQzOwkgKi8KJiM0MzsJS1VOSVRfQVNTRVJUX1RSVUUoY3VycmVudC0mZ3Q7a3VuaXRfdGVzdCwKJiM0MzsJCQkgIHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2N0eC0mZ3Q7cnQucmVmcykpOwomIzQzOwomIzQzOwlrZnJlZShjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICptY3RwX3VzYmxpYl90ZXN0X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBtY3RwX3JvdXRlICpydDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwljdHggPSBremFsbG9jX29iaigqY3R4KTsKJiM0MzsJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGN0eCk7CiYjNDM7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7Y3R4LSZndDtydC5saXN0KTsKJiM0MzsJcnQgPSAmYW1wO2N0eC0mZ3Q7cnQ7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO3J0LSZndDtyZWZzLCAxKTsKJiM0MzsKJiM0MzsJcmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIG1jdHBfdXNibGliX3Rlc3RfZmluaV9hY3Rpb24sIGN0eCk7CiYjNDM7CUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7ZGV2ID0gbWN0cF91c2JsaWJfdGVzdF9jcmVhdGVfZGV2KHRlc3QpOwomIzQzOwlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgY3R4LSZndDtkZXYpOwomIzQzOwomIzQzOwlydC0mZ3Q7bWluID0gbG9jYWxfZWlkOwomIzQzOwlydC0mZ3Q7bWF4ID0gbG9jYWxfZWlkOwomIzQzOwlydC0mZ3Q7ZHN0X3R5cGUgPSBNQ1RQX1JPVVRFX0RJUkVDVDsKJiM0MzsJcnQtJmd0O3R5cGUgPSBSVE5fTE9DQUw7CiYjNDM7CXJ0LSZndDtkZXYgPSBjdHgtJmd0O2Rldi0mZ3Q7bWRldjsKJiM0MzsJcnQtJmd0O291dHB1dCA9IG1jdHBfdXNibGliX3Rlc3RfZHN0X291dHB1dDsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CWxpc3RfYWRkX3JjdSgmYW1wO2N0eC0mZ3Q7cnQubGlzdCwgJmFtcDtpbml0X25ldC5tY3RwLnJvdXRlcyk7CiYjNDM7CXJlZmNvdW50X2luYygmYW1wO3J0LSZndDtyZWZzKTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGN0eDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogSW5pdCBhIE1DVFAtb3Zlci1VU0IgcGFja2V0IHdpdGhpbiBhIGJ1ZmZlci4gQGxlbiBpcyB0aGUgbGVuZ3RoIG9mIHRoZQomIzQzOyAqIGJ1ZmZlciB0byB3cml0ZSwgQHBheWxvYWRfbGVuIGlzIHRoZSByZXBvcnRlZCBzaXplIG9mIHRoZSBNQ1RQLW92ZXItVVNCCiYjNDM7ICogcGFja2V0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3Qodm9pZCAqZGF0YSwgc2l6ZV90IGxlbiwKJiM0MzsJCQkJICAgICAgc2l6ZV90IHBheWxvYWRfbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXN0cnVjdCBtY3RwX3VzYl9oZHIgdXNiOwomIzQzOwkJc3RydWN0IG1jdHBfaGRyIG1jdHA7CiYjNDM7CX0gaGRyOwomIzQzOwomIzQzOwloZHIudXNiLmlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7CiYjNDM7CWhkci51c2IubGVuID0gY3B1X3RvX2JlMTYocGF5bG9hZF9sZW4pOwomIzQzOwloZHIubWN0cC52ZXIgPSAxOwomIzQzOwloZHIubWN0cC5kZXN0ID0gbG9jYWxfZWlkOwomIzQzOwloZHIubWN0cC5zcmMgPSAwOwomIzQzOwloZHIubWN0cC5mbGFnc19zZXFfdGFnID0gMDsKJiM0MzsKJiM0MzsJbWVtY3B5KGRhdGEsICZhbXA7aGRyLCBtaW4obGVuLCBzaXplb2YoaGRyKSkpOwomIzQzOwlpZiAobGVuICZndDsgc2l6ZW9mKGhkcikpCiYjNDM7CQltZW1zZXQoZGF0YSAmIzQzOyBzaXplb2YoaGRyKSwgMCwgbGVuIC0gc2l6ZW9mKGhkcikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhY3Rpb25fcnhfZmluaSh2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCA9IGRhdGE7CiYjNDM7CiYjNDM7CW1jdHBfdXNibGliX3J4X2ZpbmkocngpOwomIzQzOwlrZnJlZShyeCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKgomIzQzO21jdHBfdXNibGliX3Rlc3RfcnhfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QsIGJvb2wgc3BhbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJcnggPSBremFsbG9jX29iaigqcngpOwomIzQzOwlpZiAocngpIHsKJiM0MzsJCXJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBhY3Rpb25fcnhfZmluaSwgcngpOwomIzQzOwkJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsJfQomIzQzOwlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcngpOwomIzQzOwltY3RwX3VzYmxpYl9yeF9pbml0KHJ4LCBlcF9tYXhwYWNrZXQsIHNwYW4pOwomIzQzOwomIzQzOwlyZXR1cm4gcng7CiYjNDM7fQomIzQzOwomIzQzOy8qIFdyYXBwZXJzIGZvciB1c2JsaWImIzM5O3MgcnhfY29tcGxldGUgY2FsbGJhY2ssIHdoaWNoIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZAomIzQzOyAqIGZyb20gYXRvbWljIGNvbnRleHQKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3Rlc3RfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJCXN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJcmMgPSBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShuZXRkZXYsIHJ4LCBsZW4pOwomIzQzOwlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTaW5nbGUgcGFja2V0LCBzdGFydGluZyBvbiBhIHRyYW5zZmVyIGJvdW5kYXJ5LCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluCiYjNDM7ICogdGhlIHRyYW5zZmVyCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUoc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4OwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwlzaXplX3QgbGVuOwomIzQzOwl2b2lkICpidWY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJY3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpOwomIzQzOwlkZXYgPSBjdHgtJmd0O2RldjsKJiM0MzsKJiM0MzsJcnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7CiYjNDM7CiYjNDM7CXJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtJmd0O25kZXYsIHJ4LAomIzQzOwkJCQkgICAgJmFtcDtidWYsICZhbXA7bGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsKJiM0MzsJLyogd2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgbWF4cGFja2V0IG9mIHRyYW5zZmVyIGF2YWlsYWJsZSAqLwomIzQzOwlLVU5JVF9BU1NFUlRfR0UodGVzdCwgbGVuLCBlcF9tYXhwYWNrZXQpOwomIzQzOwomIzQzOwltY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KGJ1ZiwgOCwgOCk7CiYjNDM7CiYjNDM7CXJjID0gbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShkZXYtJmd0O25kZXYsIHJ4LCA4KTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsKJiM0MzsJc2tiID0gX19za2JfZGVxdWV1ZSgmYW1wO2Rldi0mZ3Q7cnhfcGt0cyk7CiYjNDM7CUtVTklUX0VYUEVDVF9OT1RfTlVMTCh0ZXN0LCBza2IpOwomIzQzOwlpZiAoc2tiKQomIzQzOwkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNrYi0mZ3Q7bGVuLCA0KTsKJiM0MzsJa2ZyZWVfc2tiKHNrYik7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuIHsKJiM0MzsJY29uc3QgY2hhciAqbmFtZTsKJiM0MzsJc2l6ZV90IG5fcGt0czsKJiM0MzsJc2l6ZV90IHBrdHNbNl07CiYjNDM7CXNpemVfdCBuX3hmZXJzOwomIzQzOwlzaXplX3QgeGZlcnNbNl07CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZAomIzQzO21jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdG9fZGVzYyhjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiAqdCwKJiM0MzsJCQkJICBjaGFyICpkZXNjKQomIzQzO3sKJiM0MzsJc3Ryc2NweShkZXNjLCB0LSZndDtuYW1lLCBLVU5JVF9QQVJBTV9ERVNDX1NJWkUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZAomIzQzO21jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdmFsaWRhdGUoc3RydWN0IGt1bml0ICp0ZXN0LAomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiAqc3BhbiwKJiM0MzsJCQkJICAgc2l6ZV90ICpsZW4pCiYjNDM7ewomIzQzOwlzaXplX3QgcGt0X2xlbiA9IDAsIHhmZXJfbGVuID0gMDsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBzcGFuLSZndDtuX3BrdHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlLVU5JVF9BU1NFUlRfR0VfTVNHKHRlc3QsIHNwYW4tJmd0O3BrdHNbaV0sIDgsCiYjNDM7CQkJCSAgICAmIzM0O3BrdFslZF0gbGVuIHRvbyBzbWFsbCAoJXpkKSBmb3IgJXMmIzM0OywKJiM0MzsJCQkJICAgIGksIHNwYW4tJmd0O3BrdHNbaV0sIHNwYW4tJmd0O25hbWUpOwomIzQzOwkJcGt0X2xlbiAmIzQzOz0gc3Bhbi0mZ3Q7cGt0c1tpXTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgc3Bhbi0mZ3Q7bl94ZmVyczsgaSYjNDM7JiM0MzspCiYjNDM7CQl4ZmVyX2xlbiAmIzQzOz0gc3Bhbi0mZ3Q7eGZlcnNbaV07CiYjNDM7CiYjNDM7CUtVTklUX0FTU0VSVF9FUV9NU0codGVzdCwgcGt0X2xlbiwgeGZlcl9sZW4sCiYjNDM7CQkJICAgICYjMzQ7aW52YWxpZCBwa3RfbGVuICglemQpICE9IHhmZXJfbGVuICglemQpIGZvciAlcyYjMzQ7LAomIzQzOwkJCSAgICBwa3RfbGVuLCB4ZmVyX2xlbiwgc3Bhbi0mZ3Q7bmFtZSk7CiYjNDM7CiYjNDM7CSpsZW4gPSBwa3RfbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICpwa3Rfc3BhbiA9IHRlc3QtJmd0O3BhcmFtX3ZhbHVlOwomIzQzOwlzaXplX3QgbGVuLCB4ZmVyX2xlbiwgb2ZmLCB4ZmVyX29mZjsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4OwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsJdTggKnBrdGJ1ZjsKJiM0MzsJdm9pZCAqYnVmOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CW1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdmFsaWRhdGUodGVzdCwgcGt0X3NwYW4sICZhbXA7bGVuKTsKJiM0MzsJcGt0YnVmID0ga3VuaXRfa21hbGxvY19hcnJheSh0ZXN0LCAxLCBsZW4sIEdGUF9LRVJORUwpOwomIzQzOwlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcGt0YnVmKTsKJiM0MzsKJiM0MzsJLyogbGF5IG91dCBwYWNrZXRzICovCiYjNDM7CWZvciAob2ZmID0gMCwgaSA9IDA7IGkgJmx0OyBwa3Rfc3Bhbi0mZ3Q7bl9wa3RzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJbGVuID0gcGt0X3NwYW4tJmd0O3BrdHNbaV07CiYjNDM7CQltY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiAmIzQzOyBvZmYsIGxlbiwgbGVuKTsKJiM0MzsJCW9mZiAmIzQzOz0gbGVuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTsKJiM0MzsJZGV2ID0gY3R4LSZndDtkZXY7CiYjNDM7CiYjNDM7CXJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpOwomIzQzOwomIzQzOwkvKiBmZWVkIHRyYW5zZmVycyAqLwomIzQzOwlmb3IgKG9mZiA9IDAsIHhmZXJfb2ZmID0gMCwgaSA9IDA7IGkgJmx0OyBwa3Rfc3Bhbi0mZ3Q7bl94ZmVyczspIHsKJiM0MzsJCXhmZXJfbGVuID0gcGt0X3NwYW4tJmd0O3hmZXJzW2ldIC0geGZlcl9vZmY7CiYjNDM7CQlyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LSZndDtuZGV2LCByeCwKJiM0MzsJCQkJCSAgICAmYW1wO2J1ZiwgJmFtcDtsZW4sIEdGUF9LRVJORUwpOwomIzQzOwkJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsKJiM0MzsJCUtVTklUX0FTU0VSVF9HRSh0ZXN0LCBsZW4sIGVwX21heHBhY2tldCk7CiYjNDM7CiYjNDM7CQlsZW4gPSBtaW4obGVuLCB4ZmVyX2xlbik7CiYjNDM7CQltZW1jcHkoYnVmLCBwa3RidWYgJiM0Mzsgb2ZmLCBsZW4pOwomIzQzOwomIzQzOwkJaWYgKGxlbiA9PSB4ZmVyX2xlbikgewomIzQzOwkJCS8qIHdob2xlL2VuZCB4ZmVyLCBwcm9jZWVkIHRvIG5leHQgKi8KJiM0MzsJCQl4ZmVyX29mZiA9IDA7CiYjNDM7CQkJaSYjNDM7JiM0Mzs7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCS8qIHBhcnRpYWwgKi8KJiM0MzsJCQl4ZmVyX29mZiAmIzQzOz0gbGVuOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi0mZ3Q7bmRldiwgcngsIGxlbik7CiYjNDM7CQlLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApOwomIzQzOwkJb2ZmICYjNDM7PSBsZW47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogY2hlY2sgcmVjZWl2ZWQgcGFja2V0cyAqLwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LSZndDtyeF9wa3RzLnFsZW4sIHBrdF9zcGFuLSZndDtuX3BrdHMpOwomIzQzOwlmb3IgKGkgPSAwOyA7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZSgmYW1wO2Rldi0mZ3Q7cnhfcGt0cyk7CiYjNDM7CiYjNDM7CQlpZiAoIXNrYikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmIChpICZsdDsgcGt0X3NwYW4tJmd0O25fcGt0cykKJiM0MzsJCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2tiLSZndDtsZW4sIHBrdF9zcGFuLSZndDtwa3RzW2ldIC0gNCk7CiYjNDM7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnNbXSA9IHsKJiM0MzsJLyogT25lIHBhY2tldCBjb21wbGV0ZWx5IHdpdGhpbiBhIHRyYW5zZmVyICovCiYjNDM7CXsgJiMzNDsxcDF4LWNvbXBsZXRlJiMzNDssIDEsIHsgOCB9LCAxLCB7IDggfSB9LAomIzQzOwkvKiBUd28gc21hbGwgcGFja2V0cyBjb21iaW5lZCB3aXRoaW4gb25lIHRyYW5zZmVyICovCiYjNDM7CXsgJiMzNDsycDF4LWNvbWJpbmVkJiMzNDssIDIsIHsgOCwgOCB9LCAxLCB7IDE2IH0gfSwKJiM0MzsJLyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgTUNUUCBwYXlsb2FkICovCiYjNDM7CXsgJiMzNDsxcDJ4LXNwbGl0LXBheWxvYWQmIzM0OywgMSwgeyAxNiB9LCAyLCB7IDgsIDggfSB9LAomIzQzOwkvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBVU0IgdHJhbnNwb3J0IGhlYWRlciAqLwomIzQzOwl7ICYjMzQ7MXAyeC1zcGxpdC11c2JoZHImIzM0OywgMSwgeyAxNiB9LCAyLCB7IDIsIDE0IH0gfSwKJiM0MzsJLyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgTUNUUCBoZWFkZXIgKi8KJiM0MzsJeyAmIzM0OzFwMngtc3BsaXQtbWN0cGhkciYjMzQ7LCAxLCB7IDE2IH0sIDIsIHsgNiwgMTAgfSB9LAomIzQzOwkvKiBTaW5nbGUgcGFja2V0IHNwbGl0IG92ZXIgMyB0cmFuc2ZlcnMsIG1pZGRsZSBlbnRpcmVseSBjb250aW51YXRpb24gKi8KJiM0MzsJeyAmIzM0OzFwM3gtc3BsaXQmIzM0OywgMSwgeyAxMiB9LCAzLCB7IDQsIDQsIDQgfSB9LAomIzQzOwkvKiBNYXgtc2l6ZWQgc2luZ2xlIHRyYW5zZmVyICovCiYjNDM7CXsgJiMzNDsxcDF4LWxhcmdlJiMzNDssIDEsIHsgODE5MSB9LCAxLCB7IDgxOTEgfSB9LAomIzQzOwkvKiBUd28gbGFyZ2UgcGFja2V0cywgc3BsaXQgYXQgdGhlIHdvcnN0LWNhc2UgZm9yIGFsbG9jYXRpb24sIHdpdGggYQomIzQzOwkgKiBzaW5nbGUgYnl0ZSBjb250aW51aW5nIHRoZSBzcGFuCiYjNDM7CSAqLwomIzQzOwl7ICYjMzQ7MnAyeC1sYXJnZS1zcGxpdCYjMzQ7LCAyLCB7IDgxOTAsIDgxOTAgfSwgMiwgeyA4MTkxLCA4MTg5IH0gfSwKJiM0Mzt9OwomIzQzOwomIzQzO0tVTklUX0FSUkFZX1BBUkFNKG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4sIG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5zLAomIzQzOwkJICBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3RvX2Rlc2MpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzW10gPSB7CiYjNDM7CUtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUpLAomIzQzOwlLVU5JVF9DQVNFX1BBUkFNKG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4sCiYjNDM7CQkJIG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW5fZ2VuX3BhcmFtcyksCiYjNDM7CXt9CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGt1bml0X3N1aXRlIG1jdHBfdXNibGliX3Rlc3Rfc3VpdGUgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDttY3RwLXVzYmxpYiYjMzQ7LAomIzQzOwkudGVzdF9jYXNlcyA9IG1jdHBfdXNibGliX3Rlc3RfY2FzZXMsCiYjNDM7fTsKJiM0MzsKJiM0MztrdW5pdF90ZXN0X3N1aXRlKG1jdHBfdXNibGliX3Rlc3Rfc3VpdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mYzAyODIxNTJlNmVmYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYwpAQCAtMCwwICYjNDM7MSw2MTYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogbWN0cC11c2JsaWIuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGhlbHBlciBsaWJyYXJ5CiYjNDM7ICoKJiM0MzsgKiBEU1AwMjgzIGlzIGF2YWlsYWJsZSBhdDoKJiM0MzsgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGYKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGQKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdXNiL21jdHAtdXNiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9tY3RwLmgmZ3Q7CiYjNDM7CiYjNDM7dm9pZCBtY3RwX3VzYmxpYl9yeF9pbml0KHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHUxNiBlcF9wa3RsZW4sIGJvb2wgc3BhbikKJiM0Mzt7CiYjNDM7CW1lbXNldChyeCwgMCwgc2l6ZW9mKCpyeCkpOwomIzQzOwlyeC0mZ3Q7c3BhbiA9IHNwYW47CiYjNDM7CXJ4LSZndDtlcF9wa3RsZW4gPSBlcF9wa3RsZW47CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2luaXQpOwomIzQzOwomIzQzO3ZvaWQgbWN0cF91c2JsaWJfcnhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KQomIzQzO3sKJiM0MzsJa2ZyZWVfc2tiKHJ4LSZndDtza2IpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9maW5pKTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFByZXBhcmUgYSB0cmFuc2ZlciBidWZmZXIgZm9yIGZ1dHVyZSBjb21wbGV0aW9uOyAqYnVmcCBhbmQgKmxlbnAgd2lsbAomIzQzOyAqIGJlIHBvcHVsYXRlZCBvbiBzdWNjZXNzLgomIzQzOyAqLwomIzQzO2ludCBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwKJiM0MzsJCQkgICB2b2lkICoqYnVmcCwgc2l6ZV90ICpsZW5wLCBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtJmd0O3NrYjsKJiM0MzsJdW5zaWduZWQgaW50IGxlbiA9IDA7CiYjNDM7CiYjNDM7CWlmIChza2IgJmFtcDsmYW1wOyBza2ItJmd0O2xlbiAmZ3Q7PSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCkgewomIzQzOwkJLyogc29tZXRoaW5nIG11c3QgaGF2ZSBnb25lIHRlcnJpYmx5IHdyb25nLiBjbGVhciBhbmQgcmVzdGFydCAqLwomIzQzOwkJbWN0cF91c2JsaWJfcnhfY2FuY2VsKHJ4KTsKJiM0MzsJCXNrYiA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGVuID0gcngtJmd0O3NwYW4gPyBBTElHTihNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCwgcngtJmd0O2VwX3BrdGxlbikKJiM0MzsJCTogTUNUUF9VU0JfMV8wX1hGRVJfU0laRTsKJiM0MzsKJiM0MzsJaWYgKCFza2IpIHsKJiM0MzsJCXNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIGxlbiwgZ2ZwKTsKJiM0MzsJCWlmICghc2tiKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwl9IGVsc2UgaWYgKHNrYi0mZ3Q7Y2xvbmVkIHx8IHNrYl90YWlscm9vbShza2IpICZsdDsgcngtJmd0O2VwX3BrdGxlbikgewomIzQzOwkJLyogV2UgYWx3YXlzIG5lZWQgdG8gcmVhbGxvYyBpZiAtJmd0O2Nsb25lZCwgYXMgd2UgY2Fubm90CiYjNDM7CQkgKiByZXN1Ym1pdCB0aGUgKG5vdy1zaGFyZWQpIHNrYiBidWZmZXIgZm9yIHBvc3NpYmxlIERNQS4KJiM0MzsJCSAqCiYjNDM7CQkgKiBPdGhlcndpc2UgKGlmIHdlIGhhdmUgYW4gdW4tY2xvbmVkIFNLQik6IGp1c3QgZW5zdXJlIHdlCiYjNDM7CQkgKiBoYXZlIHN1ZmZpY2llbnQgc3BhY2UgdG8gcHJldmVudCBiYWJibGUuIFNpbmNlIHdlIGFsbG9jYXRlZAomIzQzOwkJICogZm9yIG1heCBzaXplIGluIHRoZSBsYXN0IHByZXBhcmUgKGFuZCBoYXZlIG5vdCBjb25zdW1lZCBhbnkKJiM0MzsJCSAqIG9mIHRoYXQgc3BhY2UgZm9yIGEgcHJpb3IgTUNUUCBwYWNrZXQsIGJlY2F1c2UgIWNsb25lZCksIHdlCiYjNDM7CQkgKiBoYXZlIHN1ZmZpY2llbnQgZGF0YSB0byBmaW5pc2ggdGhlIGN1cnJlbnQgTUNUUCBwYWNrZXQuCiYjNDM7CQkgKi8KJiM0MzsJCXN0cnVjdCBza19idWZmICpza2IyOwomIzQzOwomIzQzOwkJc2tiMiA9IHNrYl9jb3B5X2V4cGFuZChza2IsIDAsIGxlbiwgZ2ZwKTsKJiM0MzsJCWlmICghc2tiMikKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiYjNDM7CQlza2IgPSBza2IyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJ4LSZndDtza2IgPSBza2I7CiYjNDM7CiYjNDM7CS8qIFNwYW5uaW5nIG1vZGUgYWxsb3dzIFpMUHMsIHNvIHdlIGRvbiYjMzk7dCByZXF1aXJlIGV4YWN0bHkgb25lCiYjNDM7CSAqIHRyYW5zZmVyIHBhY2tldC4gSWYgd2UgaGF2ZSBleHRyYSB0YWlscm9vbSwgbWF5IGFzIHdlbGwgdXNlIGl0LAomIzQzOwkgKiBhbmQgd2UgaGF2ZSBlbnN1cmVkIHRoYXQgdGhlIHRhaWxyb29tICZndDs9IGVwX3BrdGxlbi4KJiM0MzsJICovCiYjNDM7CWlmIChyeC0mZ3Q7c3BhbikKJiM0MzsJCWxlbiA9IEFMSUdOX0RPV04oc2tiX3RhaWxyb29tKHNrYiksIHJ4LSZndDtlcF9wa3RsZW4pOwomIzQzOwomIzQzOwkqYnVmcCA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTsKJiM0MzsJKmxlbnAgPSBsZW47CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSB0aGlzX2NwdV9wdHIobmV0ZGV2LSZndDtkc3RhdHMpOwomIzQzOwlzdHJ1Y3QgbWN0cF9za2JfY2IgKmNiOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwomIzQzOwlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSk7CiYjNDM7CiYjNDM7CS8qIHdlJiMzOTtyZSBjYWxsZWQgZnJvbSBhbiBVUkIgY29tcGxldGlvbiBoYW5kbGVyLCBhbmQgY2Fubm90IGFzc3VtZSBsb2NhbAomIzQzOwkgKiBpcnFzIGFyZSBhbHdheXMgZGlzYWJsZWQKJiM0MzsJICovCiYjNDM7CWZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKCZhbXA7ZHN0YXRzLSZndDtzeW5jcCk7CiYjNDM7CXU2NF9zdGF0c19pbmMoJmFtcDtkc3RhdHMtJmd0O3J4X3BhY2tldHMpOwomIzQzOwl1NjRfc3RhdHNfYWRkKCZhbXA7ZHN0YXRzLSZndDtyeF9ieXRlcywgc2tiLSZndDtsZW4pOwomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7ZHN0YXRzLSZndDtzeW5jcCwgZmxhZ3MpOwomIzQzOwomIzQzOwlza2ItJmd0O3Byb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7CiYjNDM7CXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwomIzQzOwljYiA9IF9fbWN0cF9jYihza2IpOwomIzQzOwljYi0mZ3Q7aGFsZW4gPSAwOwomIzQzOwluZXRpZl9yeChza2IpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSB0aGlzX2NwdV9wdHIoZGV2LSZndDtkc3RhdHMpOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZSgmYW1wO2RzdGF0cy0mZ3Q7c3luY3ApOwomIzQzOwl1NjRfc3RhdHNfaW5jKCZhbXA7ZHN0YXRzLSZndDtyeF9kcm9wcyk7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoJmFtcDtkc3RhdHMtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVjZWl2ZSBhIFVTQiBjb21wbGV0aW9uIG9mIEBsZW4gYnl0ZXMgb2YgaW5jb21pbmcgZGF0YS4gV2Ugd2lsbCB0aGVuIHNwbGl0CiYjNDM7ICogdGhpcyBpbnRvIHBhY2tldHMgYW5kIG5ldGlmX3J4KCkgZWFjaC4gSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGluIGF0b21pYwomIzQzOyAqIGNvbnRleHRzIC0gaWUuLCBVUkIgY29tcGxldGlvbi4KJiM0MzsgKgomIzQzOyAqIEFzc3VtZXMgQG5ldGRldiB1c2VzIGRzdGF0cy4KJiM0MzsgKi8KJiM0MztpbnQgbWN0cF91c2JsaWJfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2IgPSByeC0mZ3Q7c2tiOwomIzQzOwlpbnQgcmMgPSAwOwomIzQzOwomIzQzOwlfX3NrYl9wdXQoc2tiLCBsZW4pOwomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7CiYjNDM7CQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKJiM0MzsJCS8qIGxlbmd0aCBvZiBNQ1RQIHBhY2tldCwgaW5jbHVkaW5nIFVTQiBoZWFkZXIgKi8KJiM0MzsJCXUxNiBwa3RfbGVuOwomIzQzOwomIzQzOwkJLyogbm8gaGVhZGVyIHlldCwgcmVzdWJtaXQgZm9yIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgKi8KJiM0MzsJCWlmIChza2ItJmd0O2xlbiAmbHQ7IHNpemVvZigqaGRyKSkgewomIzQzOwkJCWlmICghcngtJmd0O3NwYW4pIHsKJiM0MzsJCQkJbmV0ZGV2X2RiZyhuZXRkZXYsCiYjNDM7CQkJCQkgICAmIzM0O3J4OiB0aW55IHhmZXIgKCVkKSBpbiBub24tc3BhbiBtb2RlJiMzNDssCiYjNDM7CQkJCQkgICBza2ItJmd0O2xlbik7CiYjNDM7CQkJCXJjID0gLUVOT01TRzsKJiM0MzsJCQkJZ290byBlcnJfcmVzZXQ7CiYjNDM7CQkJfQomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaGRyID0gKHN0cnVjdCBtY3RwX3VzYl9oZHIgKilza2ItJmd0O2RhdGE7CiYjNDM7CiYjNDM7CQlpZiAoYmUxNl90b19jcHUoaGRyLSZndDtpZCkgIT0gTUNUUF9VU0JfRE1URl9JRCkgewomIzQzOwkJCS8qIEJ5IHJlc2V0dGluZyBoZXJlLCB3aWxsIHN0YXJ0IHRoZSBuZXh0IElOIHRyYW5zZmVyCiYjNDM7CQkJICogYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IHNrYi4gVGhpcyB3aWxsIG1lYW4KJiM0MzsJCQkgKiB3ZSByZS1zeW5jIHdoZW4gd2UgbmV4dCBzZWUgYSBzcGFubmVkIHBhY2tldCBhbGlnbmVkCiYjNDM7CQkJICogd2l0aCB0aGUgc3RhcnQgb2YgYSB0cmFuc2Zlci4KJiM0MzsJCQkgKgomIzQzOwkJCSAqIEluIG5vbi1zcGFubmluZyBtb2RlLCB0aGlzIGp1c3QgbWVhbnMgd2UmIzM5O2xsIGRyb3AKJiM0MzsJCQkgKiB0aGUgY3VycmVudCB0cmFuc2ZlciBvbmx5CiYjNDM7CQkJICovCiYjNDM7CQkJbmV0ZGV2X2RiZyhuZXRkZXYsICYjMzQ7cng6IGludmFsaWQgaWQgJTA0eFxuJiMzNDssCiYjNDM7CQkJCSAgIGJlMTZfdG9fY3B1KGhkci0mZ3Q7aWQpKTsKJiM0MzsJCQlyYyA9IC1FUFJPVE87CiYjNDM7CQkJZ290byBlcnJfcmVzZXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwa3RfbGVuID0gYmUxNl90b19jcHUoaGRyLSZndDtsZW4pOwomIzQzOwkJLyogdjEuMSwgd2l0aCBzcGFuIGVuYWJsZWQsIGhhcyBhIDEzLWJpdCBsZW5ndGggKi8KJiM0MzsJCXBrdF9sZW4gJmFtcDs9IHJ4LSZndDtzcGFuID8KJiM0MzsJCQlNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYOwomIzQzOwkJaWYgKHBrdF9sZW4gJmx0OyBzaXplb2YoKmhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtY3RwX2hkcikpIHsKJiM0MzsJCQluZXRkZXZfZGJnKG5ldGRldiwgJiMzNDtyeDogaW52YWxpZCBsZW4gJWRcbiYjMzQ7LCBwa3RfbGVuKTsKJiM0MzsJCQlyYyA9IC1FUFJPVE87CiYjNDM7CQkJZ290byBlcnJfcmVzZXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBzcGFuIGNvbnRpbnVlcyB0byB0aGUgbmV4dCB0cmFuc2ZlciwgcmVzdWJtaXQgKi8KJiM0MzsJCWlmIChwa3RfbGVuICZndDsgc2tiLSZndDtsZW4pIHsKJiM0MzsJCQlpZiAoIXJ4LSZndDtzcGFuKSB7CiYjNDM7CQkJCW5ldGRldl9kYmcobmV0ZGV2LAomIzQzOwkJCQkJICAgJiMzNDtyeDogc2hvcnQgeGZlciAoJWQgdnMgJWQpIGluIG5vbi1zcGFuIG1vZGUmIzM0OywKJiM0MzsJCQkJCSAgIHBrdF9sZW4sIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJCQkJcmMgPSAtRU5PTVNHOwomIzQzOwkJCQlnb3RvIGVycl9yZXNldDsKJiM0MzsJCQl9CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiB3ZSBoYXZlIChleGFjdGx5KSBhIGNvbXBsZXRlIHBhY2tldCwgUlggaXQgZGlyZWN0bHkgKi8KJiM0MzsJCWlmIChwa3RfbGVuID09IHNrYi0mZ3Q7bGVuKSB7CiYjNDM7CQkJbWN0cF91c2JsaWJfcngobmV0ZGV2LCBza2IpOwomIzQzOwkJCXJ4LSZndDtza2IgPSBOVUxMOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogbW9yZSBwYWNrZXRzIGZvbGxvdyAtIFJYIGEgY2xvbmUgc28gdGhhdCB3ZSBjYW4gY29udGludWUKJiM0MzsJCSAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgU0tCLCB3aGljaCBtYXkgYmUgdGhlIHN0YXJ0IG9mIGEKJiM0MzsJCSAqIHNwYW4uCiYjNDM7CQkgKi8KJiM0MzsJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKJiM0MzsJCWlmIChza2IyKSB7CiYjNDM7CQkJc2tiX3RyaW0oc2tiMiwgcGt0X2xlbik7CiYjNDM7CQkJbWN0cF91c2JsaWJfcngobmV0ZGV2LCBza2IyKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbWN0cF91c2JsaWJfcnhfc3RhdHNfc2luZ2xlX2Ryb3AobmV0ZGV2KTsKJiM0MzsJCX0KJiM0MzsJCXNrYl9wdWxsKHNrYiwgcGt0X2xlbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3Jlc2V0OgomIzQzOwlkZXZfa2ZyZWVfc2tiX2FueShyeC0mZ3Q7c2tiKTsKJiM0MzsJcngtJmd0O3NrYiA9IE5VTEw7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfY29tcGxldGUpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogQ2FuY2VsIGEgcnggY29udGV4dDsgc3Vic2VxdWVudCBwcmVwYXJlL2NvbXBsZXRlIGNhbGxzIHdpbGwgbm90IGJlIGEKJiM0MzsgKiBjb250aW51YXRpb24gb2YgYW55IGRhdGEgYWxyZWFkeSByZWNlaXZlZC4KJiM0MzsgKi8KJiM0Mzt2b2lkIG1jdHBfdXNibGliX3J4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KQomIzQzO3sKJiM0MzsJZGV2X2tmcmVlX3NrYl9hbnkocngtJmd0O3NrYik7CiYjNDM7CXJ4LSZndDtza2IgPSBOVUxMOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9jYW5jZWwpOwomIzQzOwomIzQzOy8qIHRyYW5zbWl0IGNvbnRleHQ6IGVuY2Fwc3VsYXRlcyBvbmUgdHJhbnNmZXIgKi8KJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4IHsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDsKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZCBza2JzOwomIzQzOwl1bnNpZ25lZCBpbnQgYnVmX2xlbiwgbGVuOwomIzQzOwllbnVtIG1jdHBfdXNibGliX3R4X2J1Zl90eXBlIHsKJiM0MzsJCVRYX1NJTkdMRSwKJiM0MzsJCVRYX0ZMQVQsCiYjNDM7CX0gYnVmX3R5cGU7CiYjNDM7CXU4IGJ1ZltdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LAomIzQzOwkJCSBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzICpvcHMsCiYjNDM7CQkJIHZvaWQgKnByaXYsIGJvb2wgc3BhbikKJiM0Mzt7CiYjNDM7CW1lbXNldCh0eCwgMCwgc2l6ZW9mKCp0eCkpOwomIzQzOwl0eC0mZ3Q7b3BzID0gKm9wczsKJiM0MzsJdHgtJmd0O3ByaXYgPSBwcml2OwomIzQzOwl0eC0mZ3Q7c3BhbiA9IHNwYW47CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7dHgtJmd0O2xvY2spOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9pbml0KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X2F2YWlsKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjdHgtJmd0O2J1Zl90eXBlID09IFRYX1NJTkdMRSA/IDAgOiBjdHgtJmd0O2J1Zl9sZW4gLSBjdHgtJmd0O2xlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJLyogVXNlIHRoZSBiYXNlbGluZSBsZW5ndGggKGllLCBCVFUpIGFzIGFuIGFwcHJveGltYXRlCiYjNDM7CSAqICYjMzQ7cmVhc29uYWJseS1zaXplZCYjMzQ7IHBhY2tldCB3ZSBjb3VsZCBleHBlY3QuIElmIHRoZXJlIGlzCiYjNDM7CSAqIGluc3VmZmljaWVudCBjYXBhY2l0eSBmb3IgdGhhdCwgdGhlbiBzZW5kLgomIzQzOwkgKi8KJiM0MzsJY29uc3Qgc2l6ZV90IHBrdF9sZW4gPSBNQ1RQX1VTQl9CVFUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpOwomIzQzOwomIzQzOwlyZXR1cm4gbWN0cF91c2JsaWJfdHhfYXZhaWwoY3R4KSAmbHQ7IHBrdF9sZW47CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUgLSBpbmRpY2F0aW5nIHRoYXQgdGhlIG5ldyBza2IKJiM0MzsgKiBjb3VsZCBub3QgYmUgYXBwZW5kZWQuIFNvLCBlcnJvcnMgcmVwb3J0ZWQgaGVyZSB0byB0aGUgVFggcGF0aCB3aWxsIHJlc3VsdAomIzQzOyAqIGluIHRoZSBUWCBiZWluZyB0cmFuc21pdHRlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X2FwcGVuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsCiYjNDM7CQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJaWYgKGN0eC0mZ3Q7YnVmX3R5cGUgPT0gVFhfU0lOR0xFKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChtY3RwX3VzYmxpYl90eF9hdmFpbChjdHgpICZsdDsgc2tiLSZndDtsZW4pCiYjNDM7CQlyZXR1cm4gLUVOT0JVRlM7CiYjNDM7CiYjNDM7CV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDtjdHgtJmd0O3NrYnMsIHNrYik7CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7bGVuICYjNDM7PSBza2ItJmd0O2xlbjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwl2b2lkICpidWY7CiYjNDM7CiYjNDM7CS8qIElmIHdlIGhhdmUgYSBxbGVuIG9mIDEsIHdlIG9ubHkgZW5kZWQgdXAgcGFja2luZyBhIHNpbmdsZSBza2IsCiYjNDM7CSAqIGRlc3BpdGUgYWxsb2NhdGluZyBmb3IgbXVsdGlwbGUuIFNraXAgdGhlIGNvcHkgYW5kIHNlbmQgZGlyZWN0bHkKJiM0MzsJICogZnJvbSB0aGUgc2tiIGRhdGEuCiYjNDM7CSAqLwomIzQzOwlpZiAoY3R4LSZndDtidWZfdHlwZSA9PSBUWF9TSU5HTEUgfHwgY3R4LSZndDtza2JzLnFsZW4gPT0gMSkgewomIzQzOwkJYnVmID0gY3R4LSZndDtza2JzLm5leHQtJmd0O2RhdGE7CiYjNDM7CiYjNDM7CX0gZWxzZSBpZiAoY3R4LSZndDtidWZfdHlwZSA9PSBUWF9GTEFUKSB7CiYjNDM7CQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwkJc2l6ZV90IHBvcyA9IDA7CiYjNDM7CiYjNDM7CQlza2JfcXVldWVfd2FsaygmYW1wO2N0eC0mZ3Q7c2ticywgc2tiKSB7CiYjNDM7CQkJc2tiX2NvcHlfYml0cyhza2IsIDAsIGN0eC0mZ3Q7YnVmICYjNDM7IHBvcywgc2tiLSZndDtsZW4pOwomIzQzOwkJCXBvcyAmIzQzOz0gc2tiLSZndDtsZW47CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlidWYgPSBjdHgtJmd0O2J1ZjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBjdHgtJmd0O3R4LSZndDtvcHMuc2VuZChjdHgsIGJ1ZiwgY3R4LSZndDtsZW4pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsCiYjNDM7CQkJCSAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwlpZiAoIWN0eCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7Y3R4LSZndDtza2JzKSkgIT0gTlVMTCkKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55X3JlYXNvbihza2IsIHJlYXNvbik7CiYjNDM7CWtmcmVlKGN0eCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiB0eF9jdHgtJmd0O3R4LSZndDtwcml2OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jdHhfcHJpdik7CiYjNDM7CiYjNDM7LyogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSB0eCAmYW1wOyBjb21wbGV0aW9uIHBhdGggaXMgcXVpZXNjZWQgKi8KJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCkKJiM0Mzt7CiYjNDM7CW1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHR4LSZndDtjdXJfY3R4LCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2ZpbmkpOwomIzQzOwomIzQzOy8qIE1heCBzaXplIG9mIGEgc3Bhbm5lZCBUWC4gU2luY2Ugd2UgYWxsb2NhdGUgYSBzZXBhcmF0ZSBzcGFuIGJ1ZmZlciwgbGltaXQKJiM0MzsgKiB0aGUgdHgtdGltZSBhbGxvY2F0aW9ucyB0byA0ay4gTGFyZ2VyIHBhY2tldHMgd2lsbCBiZSBzZW50IGFzIHNpbmdsZQomIzQzOyAqIHRyYW5zZmVycy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFRYX1NQQU5fTUFYID0gNDA5NiAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4KTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqCiYjNDM7bWN0cF91c2JsaWJfdHhfY3R4X2NyZWF0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCSAgYm9vbCBzaW5nbGUpCiYjNDM7ewomIzQzOwllbnVtIG1jdHBfdXNibGliX3R4X2J1Zl90eXBlIHR5cGU7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eDsKJiM0MzsJc2l6ZV90IHN6ID0gMDsKJiM0MzsKJiM0MzsJaWYgKHNpbmdsZSB8fCBza2ItJmd0O2xlbiAmZ3Q7IFRYX1NQQU5fTUFYKSB7CiYjNDM7CQl0eXBlID0gVFhfU0lOR0xFOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdHlwZSA9IFRYX0ZMQVQ7CiYjNDM7CQlzeiA9IHR4LSZndDtzcGFuID8gVFhfU1BBTl9NQVggOiBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0eCA9IGt6YWxsb2NfZmxleCgqY3R4LCBidWYsIHN6LCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCFjdHgpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJY3R4LSZndDt0eCA9IHR4OwomIzQzOwljdHgtJmd0O2J1Zl90eXBlID0gdHlwZTsKJiM0MzsJY3R4LSZndDtidWZfbGVuID0gc3o7CiYjNDM7CWN0eC0mZ3Q7bGVuID0gc2tiLSZndDtsZW47CiYjNDM7CXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtjdHgtJmd0O3NrYnMpOwomIzQzOwlfX3NrYl9xdWV1ZV90YWlsKCZhbXA7Y3R4LSZndDtza2JzLCBza2IpOwomIzQzOwomIzQzOwlyZXR1cm4gY3R4OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LAomIzQzOwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCWJvb2wgb2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IGdldF9jcHVfcHRyKGRldi0mZ3Q7ZHN0YXRzKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtkc3RhdHMtJmd0O3N5bmNwKTsKJiM0MzsJaWYgKG9rKSB7CiYjNDM7CQkvKiBPbmx5IGluY2x1ZGUgdGhlIG5ldHdvcmstbGF5ZXIgZGF0YSBpbiB0eCBzdGF0czsgd2Uga25vdwomIzQzOwkJICogdGhhdCB0aGVyZSBpcyBhIDQtYnl0ZSBoZWFkZXIgcHVzaGVkIHRvIGFsbCBza2JzIGluCiYjNDM7CQkgKiB0eF9za2JfcHJlcGFyZSgpCiYjNDM7CQkgKi8KJiM0MzsJCXU2NCBuID0gY3R4LSZndDtza2JzLnFsZW47CiYjNDM7CQlzNjQgbGVuID0gY3R4LSZndDtsZW4gLSAobiAqIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSk7CiYjNDM7CiYjNDM7CQl1NjRfc3RhdHNfYWRkKCZhbXA7ZHN0YXRzLSZndDt0eF9wYWNrZXRzLCBuKTsKJiM0MzsJCXU2NF9zdGF0c19hZGQoJmFtcDtkc3RhdHMtJmd0O3R4X2J5dGVzLCBsZW4pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdTY0X3N0YXRzX2FkZCgmYW1wO2RzdGF0cy0mZ3Q7dHhfZHJvcHMsIGN0eC0mZ3Q7c2ticy5xbGVuKTsKJiM0MzsJfQomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7ZHN0YXRzLSZndDtzeW5jcCwgZmxhZ3MpOwomIzQzOwlwdXRfY3B1X3B0cihkZXYtJmd0O2RzdGF0cyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IGdldF9jcHVfcHRyKGRldi0mZ3Q7ZHN0YXRzKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtkc3RhdHMtJmd0O3N5bmNwKTsKJiM0MzsJdTY0X3N0YXRzX2luYygmYW1wO2RzdGF0cy0mZ3Q7dHhfZHJvcHMpOwomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7ZHN0YXRzLSZndDtzeW5jcCwgZmxhZ3MpOwomIzQzOwlwdXRfY3B1X3B0cihkZXYtJmd0O2RzdGF0cyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQ29tcGxldGlvbiBmb3IgdGhlIC0mZ3Q7c2VuZCgpIG9wLiBUaGlzIHdpbGwgdXBkYXRlIG5ldGRldiBzdGF0cyBhbmQKJiM0MzsgKiBmcmVlIHRoZSB0eCBjb250ZXh0LgomIzQzOyAqCiYjNDM7ICogTGlrZWx5IGNhbGxlZCBmcm9tIChhdG9taWMpIFVSQiBjb21wbGV0aW9uIGNvbnRleHQuCiYjNDM7ICovCiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCwKJiM0MzsJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG9rKQomIzQzO3sKJiM0MzsJZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0KJiM0MzsJCW9rID8gU0tCX0NPTlNVTUVEIDogU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7CiYjNDM7CiYjNDM7CW1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZSh0eF9jdHgsIGRldiwgb2spOwomIzQzOwltY3RwX3VzYmxpYl90eF9jdHhfZnJlZSh0eF9jdHgsIHJlYXNvbik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUpOwomIzQzOwomIzQzOy8qIFByZXBhcmUgYSBza2IgZm9yIHB1c2goKQomIzQzOyAqCiYjNDM7ICogT24gZXJyb3IsIHBvcHVsYXRlcyBAcmVhc29uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2tiX3ByZXBhcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzcGFuLAomIzQzOwkJCQkgICAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiAqcmVhc29uKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBwbGVuLCBtYXhfbGVuOwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJbWF4X2xlbiA9IHNwYW4gPyBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYOwomIzQzOwomIzQzOwlwbGVuID0gc2tiLSZndDtsZW47CiYjNDM7CWlmIChwbGVuICYjNDM7IHNpemVvZigqaGRyKSAmZ3Q7IG1heF9sZW4pIHsKJiM0MzsJCSpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUEtUX1RPT19CSUc7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKCpoZHIpKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQkqcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PTUVNOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiYjNDM7CWhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTsKJiM0MzsJaWYgKCFoZHIpIHsKJiM0MzsJCSpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9NRU07CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwloZHItJmd0O2lkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7CiYjNDM7CWhkci0mZ3Q7bGVuID0gY3B1X3RvX2JlMTYocGxlbiAmIzQzOyBzaXplb2YoKmhkcikpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQdXNoIGEgbmV3IHNrYiB0byB0aGUgdHJhbnNmZXIuIE1heSByZXN1bHQgaW4gemVybyBvciBtb3JlIGNhbGxzIHRvCiYjNDM7ICogb3BzLSZndDtzZW5kKCkuCiYjNDM7ICoKJiM0MzsgKiBUYWtlcyBvd25lcnNoaXAgb2YgQHNrYiwgaW5jbHVkaW5nIG9uIGVycm9yLgomIzQzOyAqLwomIzQzO2ludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwKJiM0MzsJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsICpzZW5kX2N0eCA9IE5VTEw7CiYjNDM7CWVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjsKJiM0MzsJY29uc3QgaW50IG1heF90cmllcyA9IDM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCB0cnkgPSAxLCByYzsKJiM0MzsKJiM0MzsJcmMgPSBtY3RwX3VzYmxpYl90eF9za2JfcHJlcGFyZShza2IsIHR4LSZndDtzcGFuLCAmYW1wO3JlYXNvbik7CiYjNDM7CWlmIChyYykgewomIzQzOwkJbWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3AoZGV2KTsKJiM0MzsJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pOwomIzQzOwkJLyogd2UgbWF5IHN0aWxsIG5lZWQgdG8gcHJvY2VlZCwgaW4gY2FzZSBhbiBleGlzdGluZyBjdHgKJiM0MzsJCSAqIGlzIG5vdyBzZW5kYWJsZSAoaWUuOiAhbW9yZSkuCiYjNDM7CQkgKi8KJiM0MzsJCXNrYiA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7CiYjNDM7cmV0cnk6CiYjNDM7CS8qIFRyeSBhbmQgcXVldWUgdG8gdGhlIGN1cnJlbnQgY29udGV4dC4gV2UgZXhpdCB0aGlzIGNyaXRpY2FsIHNlY3Rpb24KJiM0MzsJICogd2l0aCBhIGZldyBiaXRzIG9mIHN0YXRlOgomIzQzOwkgKiAgLSBzZW5kX2N0eDogaW5kaWNhdGluZyBhIHByaW9yIGNvbnRleHQgdGhhdCBuZWVkcyB0byBiZSBzZW50CiYjNDM7CSAqICAtIHNrYjogaW5kaWNhdGluZyB0aGF0IGEgc2tiIHN0aWxsIG5lZWRzIHRvIGJlIHF1ZXVlZC9zZW50CiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWN0eCA9IHR4LSZndDtjdXJfY3R4OwomIzQzOwlpZiAoY3R4KSB7CiYjNDM7CQlpZiAoc2tiKSB7CiYjNDM7CQkJcmMgPSBtY3RwX3VzYmxpYl90eF9hcHBlbmQoY3R4LCBza2IpOwomIzQzOwkJCWlmIChyYykgewomIzQzOwkJCQkvKiBjYW4mIzM5O3QgYXBwZW5kIHRvIHRoZSBwZW5kaW5nIHR4IC0gZGV0YWNoIGZvcgomIzQzOwkJCQkgKiBzZW5kaW5nLCBhbmQgd2UmIzM5O2xsIGNyZWF0ZSBhIG5ldyB0eCBiZWxvdy4KJiM0MzsJCQkJICovCiYjNDM7CQkJCXN3YXAodHgtJmd0O2N1cl9jdHgsIHNlbmRfY3R4KTsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQkvKiB3ZSBoYXZlIHF1ZXVlZCAqLwomIzQzOwkJCQlza2IgPSBOVUxMOwomIzQzOwkJCQlpZiAoIW1vcmUgfHwgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoY3R4KSkKJiM0MzsJCQkJCXN3YXAodHgtJmd0O2N1cl9jdHgsIHNlbmRfY3R4KTsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgaWYgKCFtb3JlKSB7CiYjNDM7CQkJc3dhcCh0eC0mZ3Q7Y3VyX2N0eCwgc2VuZF9jdHgpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoc2VuZF9jdHgpIHsKJiM0MzsJCXJjID0gbWN0cF91c2JsaWJfdHhfc2VuZChzZW5kX2N0eCk7CiYjNDM7CQlpZiAocmMpIHsKJiM0MzsJCQltY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoc2VuZF9jdHgsIGRldiwgZmFsc2UpOwomIzQzOwkJCW1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHNlbmRfY3R4LCByZWFzb24pOwomIzQzOwkJfQomIzQzOwkJc2VuZF9jdHggPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHdlIGhhdmUgZWl0aGVyIHF1ZXVlZCwgb3IgdGhlIHByZXBhcmUgZmFpbGVkOyBub3RoaW5nIG1vcmUgdG8gZG8gKi8KJiM0MzsJaWYgKCFza2IpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJY3R4ID0gbWN0cF91c2JsaWJfdHhfY3R4X2NyZWF0ZSh0eCwgc2tiLCAhbW9yZSk7CiYjNDM7CWlmICghY3R4KSB7CiYjNDM7CQluZXRkZXZfZGJnKGRldiwgJiMzNDtUWCBjb250ZXh0IGNyZWF0ZSBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJCW1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGlmIHdlJiMzOTtyZSByZWFkeSB0byBzZW5kIG5vdywgbm8gbmVlZCB0byBlbnF1ZXVlICovCiYjNDM7CWlmICghbW9yZSB8fCBtY3RwX3VzYmxpYl90eF9zaG91bGRfc2VuZChjdHgpKSB7CiYjNDM7CQlyYyA9IG1jdHBfdXNibGliX3R4X3NlbmQoY3R4KTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCW1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShjdHgsIGRldiwgZmFsc2UpOwomIzQzOwkJCW1jdHBfdXNibGliX3R4X2N0eF9mcmVlKGN0eCwgcmVhc29uKTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKCF0eC0mZ3Q7Y3VyX2N0eCkgewomIzQzOwkJdHgtJmd0O2N1cl9jdHggPSBjdHg7CiYjNDM7CQljdHggPSBOVUxMOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwkvKiB3ZSBtYXkgaGF2ZSBsb3N0IHRoZSByYWNlIHdpdGggYSBjb25jdXJyZW50IHR4OyBzaG91bGRuJiMzOTt0IGhhcHBlbiwgYXMKJiM0MzsJICogbmRvX3N0YXJ0X3htaXQgc2hvdWxkIGJlIHNlcmlhbGlzZWQgb3ZlciBvbmUgcXVldWUsIGJ1dCB0cnkgYWdhaW4KJiM0MzsJICogZnJvbSB0aGUgdG9wLCBhcyB3ZSBtYXkgYmUgYWJsZSB0byBxdWV1ZSB0aGUgc2tiIHRvIHRoYXQgY29udGV4dC4KJiM0MzsJICovCiYjNDM7CWlmIChjdHgpIHsKJiM0MzsJCS8qIHVubGluayB0aGUgbmV3IChzb2xlKSBza2IsIHdlIGRvbiYjMzk7dCB3YW50IGl0IGZyZWVkIHdpdGggY3R4ICovCiYjNDM7CQlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtjdHgtJmd0O3NrYnMpOwomIzQzOwkJbWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pOwomIzQzOwkJaWYgKCYjNDM7JiM0Mzt0cnkgJmd0OyBtYXhfdHJpZXMpIHsKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQltY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChkZXYpOwomIzQzOwkJCXJldHVybiAtRUJVU1k7CiYjNDM7CQl9CiYjNDM7CQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9wdXNoKTsKJiM0MzsKJiM0MzsvKiBDYW5jZWwgYSB0eDogYW55IHVuLXNlbnQgY29udGV4dCBpcyByZWxlYXNlZC4gKi8KJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCSAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCA9IE5VTEw7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJc3dhcCh0eC0mZ3Q7Y3VyX2N0eCwgY3R4KTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmICghY3R4KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoY3R4LCBkZXYsIGZhbHNlKTsKJiM0MzsJbWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jYW5jZWwpOwomIzQzOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKZXJlbXkgS2VyciAmbHQ7amtAY29kZWNvbnN0cnVjdC5jb20uYXUmZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O01DVFAgVVNCIHRyYW5zcG9ydCBsaWJyYXJ5JiMzNDspOwomIzQzOwomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVCkKJiM0MzsjaW5jbHVkZSAmIzM0O21jdHAtdXNibGliLXRlc3QuYyYjMzQ7CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9tY3RwLXVzYi5oIGIvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaAppbmRleCBhMmY2ZjFlMDRlZmJkMC4uMzVjYzJjYzE1ZjlhMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaApAQCAtMiw3ICYjNDM7Miw3IEBACiAvKgogICogbWN0cC11c2IuaCAtIE1DVFAgVVNCIHRyYW5zcG9ydCBiaW5kaW5nOiBjb21tb24gZGVmaW5pdGlvbnMsCiAgKiBiYXNlZCBvbiBETVRGMDI4MyBzcGVjaWZpY2F0aW9uOgotICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4wLjEucGRmCiYjNDM7ICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4xLjAucGRmCiAgKgogICogVGhlc2UgYXJlIHByb3RvY29sLWxldmVsIGRlZmluaXRpb25zLCB0aGF0IG1heSBiZSBzaGFyZWQgYmV0d2VlbiBob3N0CiAgKiBhbmQgZ2FkZ2V0IGRyaXZlcnMuCkBAIC0xMywxOCAmIzQzOzEzLDk2IEBACiAjaWZuZGVmIF9fTElOVVhfVVNCX01DVFBfVVNCX0gKICNkZWZpbmUgX19MSU5VWF9VU0JfTUNUUF9VU0JfSAogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCiYjNDM7LyoKJiM0MzsgKiBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydCBoZWFkZXIuIERTUDAyODMgdjEuMCBoYXMgYW4gOC1iaXQgbGVuZ3RoIGZpZWxkCiYjNDM7ICogKHByZWNlZGVkIGJ5IDggcmVzZXJ2ZWQgYml0cyksIHYxLjEgaGFzIGEgMTMtYml0IGxlbmd0aCBmaWVsZCAocHJlY2VkZWQgYnkKJiM0MzsgKiAzIHJlc2VydmVkIGJpdHMpLiBXZSB1c2UgYSBiZTE2IGZvciBvdXIgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgbGFyZ2VyIHYxLjEKJiM0MzsgKiByZXByZXNlbnRhdGlvbiwgYW5kIG1hc2sgYXMgYXBwcm9wcmlhdGUuCiYjNDM7ICovCiBzdHJ1Y3QgbWN0cF91c2JfaGRyIHsKIAlfX2JlMTYJaWQ7Ci0JdTgJcnN2ZDsKLQl1OAlsZW47CiYjNDM7CV9fYmUxNglsZW47CiB9IF9fcGFja2VkOwogCi0jZGVmaW5lIE1DVFBfVVNCX1hGRVJfU0laRQk1MTIKJiM0MzsvKiBtYXggdHJhbnNmZXIgc2l6ZSBmb3IgRFNQMDI4MyB2MS4wICovCiYjNDM7I2RlZmluZSBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFCTUxMgogI2RlZmluZSBNQ1RQX1VTQl9CVFUJCTY4CiAjZGVmaW5lIE1DVFBfVVNCX01UVV9NSU4JTUNUUF9VU0JfQlRVCi0jZGVmaW5lIE1DVFBfVVNCX01UVV9NQVgJKFU4X01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSkKJiM0MzsjZGVmaW5lIE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYCVU4X01BWAomIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8wX01UVV9NQVgJKE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKQomIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgJR0VOTUFTSygxMiwgMCkKJiM0MzsjZGVmaW5lIE1DVFBfVVNCXzFfMV9NVFVfTUFYCShNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSkKICNkZWZpbmUgTUNUUF9VU0JfRE1URl9JRAkweDFhYjQKIAomIzQzOy8qIG1jdHAtdXNibGliICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSWCBoYW5kbGU6IGRyaXZlcnMgd2lsbCB0eXBpY2FsbHkgY3JlYXRlIG9uZSBvbiBpbml0LCB3aGljaCBwZXJzaXN0cyBmb3IKJiM0MzsgKiB0aGUgbGlmZSBvZiB0aGUgZHJpdmVyLiBUaGUgc2FtZSBoYW5kbGUgaXMgdXNlZCBmb3IgcHJvZ3Jlc3NpdmUKJiM0MzsgKiBwcmVwYXJlIC0mZ3Q7IGNvbXBsZXRlIG9wZXJhdGlvbnMgKGZvciBlYWNoIGluY29taW5nIFVTQiB0cmFuc2ZlciksIHdoaWNoCiYjNDM7ICogcmVzdWx0IGluIG5ldGlmX3J4KCktaW5nIHRoZSBNQ1RQIHBhY2tldHMgcmVjZWl2ZWQKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfcnggewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwl1MTYgZXBfcGt0bGVuOwomIzQzOwlib29sIHNwYW47CiYjNDM7fTsKJiM0MzsKJiM0Mzt2b2lkIG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKTsKJiM0Mzt2b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCk7CiYjNDM7CiYjNDM7aW50IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LAomIzQzOwkJCSAgIHZvaWQgKipidWZwLCBzaXplX3QgKmxlbnAsIGdmcF90IGdmcCk7CiYjNDM7CiYjNDM7aW50IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJICAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pOwomIzQzOwomIzQzO3ZvaWQgbWN0cF91c2JsaWJfcnhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogVFggaGFuZGxlOiBjcmVhdGVkIGJ5IG1jdHBfdXNibGliX3R4X3B1c2goKSBkdXJpbmcgdGhlIHR4IHBhdGgsIGFuZAomIzQzOyAqIG1heSBwZXJzaXN0IGFjcm9zcyBtdWx0aXBsZSBwYWNrZXQgdHJhbnNtaXRzLgomIzQzOyAqLwomIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHg7CiYjNDM7CiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB7CiYjNDM7CS8qIFN0YXJ0IGEgVVNCIFRYIGZvciBAZGF0YS4gT24gcmV0dXJuaW5nIHN1Y2Nlc3MsIHRoZSBpbXBsZW1lbnRhdGlvbgomIzQzOwkgKiBtdXN0IGFycmFuZ2UgZm9yIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUoKSB0byBiZSBjYWxsZWQgYXQgc29tZQomIzQzOwkgKiBsYXRlciBwb2ludCAoZWcuLCBvbiB1cmIgY29tcGxldGlvbikuCiYjNDM7CSAqLwomIzQzOwlpbnQgKCpzZW5kKShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3R4IHsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7CiYjNDM7CXZvaWQgKnByaXY7CiYjNDM7CWJvb2wgc3BhbjsKJiM0MzsJLyogcHJvdGVjdHMgYWNjZXNzIHRvIGN1cl9jdHggKi8KJiM0MzsJc3BpbmxvY2tfdCBsb2NrOwomIzQzOwkvKiBjb250ZXh0IHRvIHdoaWNoIHdlIGFyZSBhZGRpbmcgcGFja2V0cywgY2xlYXJlZCBvbiBzZW5kICovCiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN1cl9jdHg7CiYjNDM7fTsKJiM0MzsKJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwKJiM0MzsJCQkgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLCB2b2lkICpwcml2LAomIzQzOwkJCSBib29sIHNwYW4pOwomIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KTsKJiM0MzsKJiM0Mzt2b2lkICptY3RwX3VzYmxpYl90eF9jdHhfcHJpdihzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgpOwomIzQzOwomIzQzO2ludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwKJiM0MzsJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpOwomIzQzOwomIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsCiYjNDM7CQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBvayk7CiYjNDM7CiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pOwomIzQzOwogI2VuZGlmIC8qICBfX0xJTlVYX1VTQl9NQ1RQX1VTQl9IICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTY3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUNUUC1vdmVyLVVTQiBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCBsb29rcyBsaWtlIGl0JiMzOTtzIG1ha2luZyBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIE1DVFAgVVNCIHRyYW5zcG9ydCBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdXBkYXRpbmcgYGRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY2AgYW5kIGludHJvZHVjaW5nIGEgbmV3IGNvbW1vbiBsaWJyYXJ5IGZvciBNQ1RQLW92ZXItVVNCLCB3aGljaCBpcyBgZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jYC4gIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgc29tZSBLVW5pdCB0ZXN0cyBpbiBgZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNgIOKAkyBhbHdheXMgYSBnb29kIHNpZ24uIEFuZCBvZiBjb3Vyc2UsIHRoZXJlIGFyZSBuZXcgS2NvbmZpZyBvcHRpb25zLCBgTUNUUF9UUkFOU1BPUlRfVVNCTElCYCBhbmQgYE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUYC4KCk15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7Q2FuIHRoaXMgdGhpbmcgZXZlbiAqYmUqIGZ1enplZCBlZmZlY3RpdmVseT8mIzM0OyAgTGV0JiMzOTtzIHNlZS4gVGhpcyBgbWN0cC11c2IuY2AgZHJpdmVyIGlzIGEgVVNCIGRldmljZSBkcml2ZXIsIHJpZ2h0PyBBbmQgaXQgYmluZHMgdG8gVVNCIGludGVyZmFjZXMgd2l0aCBgVVNCX0NMQVNTX01DVFBgLiBPa2F5LCBnb29kLiBJbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSwgd2UgY2FuIGVtdWxhdGUgVVNCIGRldmljZXMgdXNpbmcgYHVzYi1kdW1teWAgb3IgYHVzYi1nYWRnZXRgLiAgQW5kIHRoZSByZWFsbHkgaW1wb3J0YW50IGJpdC4uLiBzeXprYWxsZXIsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBsaWtlbHkgdXNlLCAqZG9lcyogc3VwcG9ydCBmdXp6aW5nIFVTQiBkcml2ZXJzIHZpYSBgcmF3LWdhZGdldGAuICBTbywgeWVzLCBpdCBzZWVtcyB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCB0aGUgZWZmb3J0LiAgRXhjZWxsZW50LgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMuICBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyByZWZhY3RvcmluZyBgbWN0cC11c2IuY2AgdG8gbGV2ZXJhZ2UgdGhlIG5ldyBmdW5jdGlvbnMgaW4gYG1jdHAtdXNibGliLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBqdWljeSBiaXRzIGFyZS4gVGhlIG5ldyBmdW5jdGlvbnMgYXJlOiBgbWN0cF91c2JsaWJfcnhfaW5pdGAsIGBtY3RwX3VzYmxpYl9yeF9maW5pYCwgYG1jdHBfdXNibGliX3J4X3ByZXBhcmVgLCBgbWN0cF91c2JsaWJfcnhfY29tcGxldGVgLCBgbWN0cF91c2JsaWJfcnhfY2FuY2VsYCwgYG1jdHBfdXNibGliX3R4X2luaXRgLCBgbWN0cF91c2JsaWJfdHhfZmluaWAsIGBtY3RwX3VzYmxpYl90eF9jdHhfcHJpdmAsIGBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlYCwgYG1jdHBfdXNibGliX3R4X3B1c2hgLCBhbmQgYG1jdHBfdXNibGliX3R4X2NhbmNlbGAuIFRoZXNlIGxvb2sgbGlrZSBjb3JlIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgdGhlIFJYL1RYIHNpZGUgb2YgdGhlIE1DVFAtb3Zlci1VU0IgY29tbXVuaWNhdGlvbi4gIFRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLgoKSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggYWxzbyBoYXMgdXBkYXRlZCBzb21lIGV4aXN0aW5nIGBtY3RwLXVzYi5jYCBmdW5jdGlvbnMgdG8gYWxpZ24gd2l0aCB0aGUgbmV3IGxpYnJhcnk6IGBtY3RwX3VzYl9vdXRfY29tcGxldGVgLCBgbWN0cF91c2JfdHhfc2VuZGAsIGBtY3RwX3VzYl9zdGFydF94bWl0YCwgYG1jdHBfdXNiX3J4X3F1ZXVlYCwgYG1jdHBfdXNiX2luX2NvbXBsZXRlYCwgYG1jdHBfdXNiX3J4X3JldHJ5X3dvcmtgLCBgbWN0cF91c2Jfb3BlbmAsIGBtY3RwX3VzYl9zdG9wYCwgYG1jdHBfdXNiX25ldGRldl9zZXR1cGAsIGBtY3RwX3VzYl9wcm9iZWAsIGFuZCBgbWN0cF91c2JfZGlzY29ubmVjdGAuIFRoZXkgYXJlIGNoYW5naW5nIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBVU0Igc3RhY2ssIHdoaWNoIG1lYW5zIHRoaXMgY291bGQgZXhwb3NlIG5ldyBhdHRhY2sgc3VyZmFjZXMuCgpSZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgdG8gcHJvcGVybHkgZW5hYmxlIHRoaXMgZm9yIGZ1enppbmcsIEkmIzM5O2xsIG5lZWQgYE1DVFBfVFJBTlNQT1JUX1VTQmAgYW5kLCBzaW5jZSBpdCBsb29rcyBsaWtlIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJgIGlzIHNlbGVjdGVkIGJ5IGBNQ1RQX1RSQU5TUE9SVF9VU0JgLCBJIGNhbiBleHBlY3QgdGhlbSB0byBiZSBlbmFibGVkIHRvZ2V0aGVyLiBPZiBjb3Vyc2UsIGBVU0JgIGl0c2VsZiB3aWxsIGhhdmUgdG8gYmUgZW5hYmxlZC4gSSBzaG91bGQgcXVpY2tseSBjaGVjayBgZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnYCB0byBjb25maXJtIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgYnVpbGQgcmVxdWlyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTQxPWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0Ncbi0tXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNDktXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NTA6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQlxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTUxLVx0dHJpc3RhdGUgXCYjMzQ7TUNUUCBvdmVyIFVTQiBjb21tb24gbGlicmFyeVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy01OS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo2MDpjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1RcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02MS0gICAgICAgIGJvb2wgXCYjMzQ7TUNUUCB1c2JsaWIgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02NC1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo2NTpjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjYtXHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIFVTQiB0cmFuc3BvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM0NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgdGhlIE1DVFBfVFJBTlNQT1JUX1VTQiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYE1DVFBfVFJBTlNQT1JUX1VTQmAgZGVwZW5kZW5jeSBzaXR1YXRpb24uIExldCYjMzk7cyBzdGFydCBieSBtYXBwaW5nIG91dCBleGFjdGx5IHdoYXQgaXQgcmVsaWVzIHVwb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdHJhbnNwb3J0IGxheWVyIGluc2lkZSBhbmQgb3V0LCBlc3BlY2lhbGx5IGFueSBleHRlcm5hbCBsaWJyYXJpZXMgb3Iga2VybmVsIG1vZHVsZXMgaXQgbWlnaHQgYmUgdGllZCB0by4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBkcml2ZXIgaW50ZXJmYWNlcywgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzIChIQUxzKSwgcG90ZW50aWFsbHkgc3BlY2lmaWMgVVNCIGhvc3QgY29udHJvbGxlciBkZXBlbmRlbmNpZXMsIG1heWJlIGV2ZW4gZmlybXdhcmUgaW50ZXJhY3Rpb25zLCBpZiBhcHBsaWNhYmxlLiBBIGNvbXByZWhlbnNpdmUgZGVwZW5kZW5jeSB0cmVlIGlzIGNydWNpYWwgaGVyZS4gSSBuZWVkIHRvIGNvbnNpZGVyIG5vdCBqdXN0IGRpcmVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhbHNvIHRyYW5zaXRpdmUgb25lcy4gQW55IHJpcHBsZSBlZmZlY3RzIGZyb20gdXBkYXRpbmcgb3IgbW9kaWZ5aW5nIHRoaXMgY29tcG9uZW50IGRvd24gdGhlIGxpbmUgYXJlIGEgbWFqb3IgY29uY2Vybi4gQW55IGtub3duIGlzc3VlcyBvciBjb25mbGljdHMgd2l0aGluIHRoZSBleGlzdGluZyBzeXN0ZW0gYWxzbyBuZWVkIHRvIGJlIG5vdGVkLiBJIHdhbnQgdG8gYnVpbGQgYSB0cnVseSByb2J1c3QgZGVwZW5kZW5jeSBtb2RlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz02PWNvbmZpZyBNQ1RQX1NFUklBTFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIHNlcmlhbCB0cmFuc3BvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBUVFlcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy05LVx0c2VsZWN0IENSQ19DQ0lUVFxuLS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz0yND1jb25maWcgTUNUUF9TRVJJQUxfVEVTVFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTI1LSAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIHNlcmlhbCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6MjY6ICAgICAgICBkZXBlbmRzIG9uIE1DVFBfU0VSSUFMPXkgXHUwMDI2XHUwMDI2IEtVTklUPXlcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy0yNy0gICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTI5PWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JMkNcbi0tXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMzEtXHQjIGkyYy1tdXggaXMgb3B0aW9uYWwsIGJ1dCB3ZSBtdXN0IGJ1aWxkIGFzIGEgbW9kdWxlIGlmIGkyYy1tdXggaXMgYSBtb2R1bGVcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzozMjpcdGRlcGVuZHMgb24gSTJDX01VWCB8fCAhSTJDX01VWFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjMzOlx0ZGVwZW5kcyBvbiBJMkNcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzozNDpcdGRlcGVuZHMgb24gSTJDX1NMQVZFXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMzUtXHRzZWxlY3QgTUNUUF9GTE9XU1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz00MT1jb25maWcgTUNUUF9UUkFOU1BPUlRfSTNDXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIEkzQyB0cmFuc3BvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo0MzpcdGRlcGVuZHMgb24gSTNDXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNDQtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTUwPWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy01MS1cdHRyaXN0YXRlIFwmIzM0O01DVFAgb3ZlciBVU0IgY29tbW9uIGxpYnJhcnlcJiMzNDtcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo1MjpcdGRlcGVuZHMgb24gVVNCXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNTMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTYwPWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTYxLSAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIHVzYmxpYiB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NjI6ICAgICAgICBkZXBlbmRzIG9uIE1DVFBfVFJBTlNQT1JUX1VTQkxJQj15IFx1MDAyNlx1MDAyNiBLVU5JVD15XG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjMtICAgICAgICBkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz02NT1jb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjYtXHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIFVTQiB0cmFuc3BvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo2NzpcdGRlcGVuZHMgb24gVVNCXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjgtXHRzZWxlY3QgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNDEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYE1DVFBfVFJBTlNQT1JUX1VTQmAgcmVsaWVzIG9uIGBVU0JgLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gTm93LCB0aGUgYmlnZ2VyIHF1ZXN0aW9uIGlzLCB3aGF0JiMzOTtzIHRoZSBkZXBlbmRlbmN5IG9uIGBNQ1RQYCBpdHNlbGY/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIExldCYjMzk7cyBkaWcgaW50byBgbmV0L21jdHAvS2NvbmZpZ2AuIEkmIzM5O2xsIG9wZW4gdXAgdGhhdCBLY29uZmlnIGZpbGUgYW5kIHNlZSB3aGF0IGtpbmQgb2YgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkIGZvciB0aGUgd2hvbGUgYE1DVFBgIHN0YWNrIGFuZCBob3cgYE1DVFBfVFJBTlNQT1JUX1VTQmAgaXMgdGllZCB0byBpdC4gR290dGEgZW5zdXJlIEkmIzM5O20gZ2V0dGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhlIGdvYWwgaXMgYSBjbGVhciB2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoZSBNQ1RQIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUNUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tY3RwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21jdHAvS2NvbmZpZy0xLVxubmV0L21jdHAvS2NvbmZpZzoyOm1lbnVjb25maWcgTUNUUFxubmV0L21jdHAvS2NvbmZpZy0zLVx0ZGVwZW5kcyBvbiBORVRcbi0tXG5uZXQvbWN0cC9LY29uZmlnLTE0LVxubmV0L21jdHAvS2NvbmZpZzoxNTpjb25maWcgTUNUUF9URVNUXG5uZXQvbWN0cC9LY29uZmlnLTE2LSAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIGNvcmUgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm5ldC9tY3RwL0tjb25maWctMjAtXG5uZXQvbWN0cC9LY29uZmlnOjIxOmNvbmZpZyBNQ1RQX0ZMT1dTXG5uZXQvbWN0cC9LY29uZmlnLTIyLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzQ5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXM6IE1DVFAgb3ZlciBVU0IqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGVuc3VyZSBgTUNUUGAgYW5kIGBNQ1RQX1RSQU5TUE9SVF9VU0JgIGFyZSBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIHdlIG5lZWQuIE5vdywgdGhlIGtleSBpcyB0byBwaW5wb2ludCB0aGUgbW9zdCBmcnVpdGZ1bCBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hlcmUgdG8gdGFyZ2V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgpMZXQmIzM5O3MgYmVnaW4gYnkgZXhhbWluaW5nIGBtY3RwLXVzYmxpYi5jYC4gVGhlIG9idmlvdXMgY2FuZGlkYXRlcyBmb3IgY2xvc2UgYXR0ZW50aW9uIGhlcmUgYXJlOiBgbWN0cF91c2JsaWJfcnhfcHJlcGFyZWAsIGBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZWAsIGBtY3RwX3VzYmxpYl90eF9wdXNoYCwgYW5kIGBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGVudHJ5IGFuZCBleGl0IHBvaW50cyBmb3IgZGF0YSB0cmFuc2ZlciBhbmQgcHJvY2Vzc2luZyB3aXRoaW4gdGhlIHVzYmxpYiBjb21wb25lbnQuCgpOZXh0LCB3ZSYjMzk7bGwgc2hpZnQgb3VyIGZvY3VzIHRvIGBtY3RwLXVzYi5jYC4gSGVyZSwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2FycmFudCBhIGRlZXAgZGl2ZTogYG1jdHBfdXNiX2luX2NvbXBsZXRlYCwgYG1jdHBfdXNiX291dF9jb21wbGV0ZWAsIGBtY3RwX3VzYl90eF9zZW5kYCwgYG1jdHBfdXNiX3N0YXJ0X3htaXRgLCBhbmQgYG1jdHBfdXNiX3J4X3F1ZXVlYC4gVGhlc2UgYWxsIGhhbmRsZSBkYXRhIGZsb3cgYW5kIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgVVNCIGhhcmR3YXJlLiBUaGV5IGFyZSBvZiBoaWdoIGludGVyZXN0LgoKV2FpdC4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gTGV0IG1lIHNlZSBpZiBgbWN0cF91c2JsaWJfcnhgIGlzIGEgZnVuY3Rpb24uIEFoLCBubywgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gaW5zaWRlIGBtY3RwLXVzYmxpYi5jYCwgd2hpY2ggbWFrZXMgaXQgYSBzbGlnaHRseSBkaWZmZXJlbnQgdGFyZ2V0LiBJdCYjMzk7cyBsaWtlbHkgaW1wb3J0YW50IGluIHRoZSBvdmVyYWxsIGZsb3csIGJ1dCB3ZSBjYW4mIzM5O3QgZGlyZWN0bHkgdGFyZ2V0IGl0LiBMZXQmIzM5O3Mgc3RpbGwgbWFrZSBzdXJlIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBgbWN0cF91c2JsaWJfcnhgIG5vdywgc3BlY2lmaWNhbGx5IGluIGBtY3RwLXVzYmxpYi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWN0cF91c2JsaWJfcngmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTE2LVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjE3OnZvaWQgbWN0cF91c2JsaWJfcnhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCB1MTYgZXBfcGt0bGVuLCBib29sIHNwYW4pXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMTgte1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMi19XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjM6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfaW5pdCk7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjQtXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjU6dm9pZCBtY3RwX3VzYmxpYl9yeF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjYte1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yOC19XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6Mjk6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfZmluaSk7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMzAtXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTM0LSAqL1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjM1OmludCBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MzY6XHRcdFx0ICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0zNy1cdFx0XHQgICB2b2lkICoqYnVmcCwgc2l6ZV90ICpsZW5wLCBnZnBfdCBnZnApXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTQzLVx0XHQvKiBzb21ldGhpbmcgbXVzdCBoYXZlIGdvbmUgdGVycmlibHkgd3JvbmcuIGNsZWFyIGFuZCByZXN0YXJ0ICovXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6NDQ6XHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChyeCk7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNDUtXHRcdHNrYiA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTg4LX1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzo4OTpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy05MC1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzo5MTpzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTkyLXtcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMTE0LVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjExNTpzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTExNi17XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTEzMS0gKi9cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoxMzI6aW50IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MTMzOlx0XHRcdCAgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCBzaXplX3QgbGVuKVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTEzNC17XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTE5OC1cdFx0aWYgKHBrdF9sZW4gPT0gc2tiLVx1MDAzZWxlbikge1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjE5OTpcdFx0XHRtY3RwX3VzYmxpYl9yeChuZXRkZXYsIHNrYik7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjAwLVx0XHRcdHJ4LVx1MDAzZXNrYiA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIxMC1cdFx0XHRza2JfdHJpbShza2IyLCBwa3RfbGVuKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoyMTE6XHRcdFx0bWN0cF91c2JsaWJfcngobmV0ZGV2LCBza2IyKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMTItXHRcdH0gZWxzZSB7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjEzOlx0XHRcdG1jdHBfdXNibGliX3J4X3N0YXRzX3NpbmdsZV9kcm9wKG5ldGRldik7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjE0LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIyNC19XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjI1OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMjYtXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIzMC0gKi9cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoyMzE6dm9pZCBtY3RwX3VzYmxpYl9yeF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMzIte1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMzUtfVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjIzNjpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9jYW5jZWwpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIzNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwMTkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gVVNCIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgdGhlIFVTQiBpbnRlcmZhY2UgaW4gdGhpcyBNQ1RQIGltcGxlbWVudGF0aW9uLiBNeSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IGNlbnRlcnMgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHRoZSBsaW5jaHBpbnMgb2YgdGhlIGRhdGEgZmxvdzogYG1jdHBfdXNibGliX3J4X3ByZXBhcmVgLCBgbWN0cF91c2JsaWJfcnhfY29tcGxldGVgLCBgbWN0cF91c2JsaWJfdHhfcHVzaGAsIGBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlYCwgYG1jdHBfdXNiX2luX2NvbXBsZXRlYCwgYG1jdHBfdXNiX291dF9jb21wbGV0ZWAsIGBtY3RwX3VzYl90eF9zZW5kYCwgYG1jdHBfdXNiX3N0YXJ0X3htaXRgLCBhbmQgYG1jdHBfdXNiX3J4X3F1ZXVlYC4gSSBuZWVkIHRvIGVuc3VyZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBob3cgZGF0YSBpcyByZWNlaXZlZCwgdHJhbnNtaXR0ZWQsIGFuZCBtYW5hZ2VkIHRocm91Z2hvdXQgdGhlIFVTQiBjb21tdW5pY2F0aW9uIGxpZmVjeWNsZS4gQSB0aG9yb3VnaCBleGFtaW5hdGlvbiBvZiB0aGVzZSBlbGVtZW50cyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0uIEkgd2lsbCBzdGFydCBieSBkaWdnaW5nIGludG8gYG1jdHBfdXNiX2luX2NvbXBsZXRlYCB3aXRoaW4gdGhlIGBtY3RwLXVzYi5jYCBmaWxlLiBUaGlzIGZ1bmN0aW9uIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBhbmFseXplIHRoZSBSWCBkYXRhIHByb2Nlc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21jdHBfdXNiX2luX2NvbXBsZXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz0xMjY9c3RhdGljIG5ldGRldl90eF90IG1jdHBfdXNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTM2LVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjEzNzpzdGF0aWMgdm9pZCBtY3RwX3VzYl9pbl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTEzOC1cbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MTQ1PXN0YXRpYyBpbnQgbWN0cF91c2JfcnhfcXVldWUoc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiwgZ2ZwX3QgZ2ZwKVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0xNTgtXHRcdFx0ICB1c2JfcmN2YnVsa3BpcGUobWN0cF91c2ItXHUwMDNldXNiZGV2LCBtY3RwX3VzYi1cdTAwM2VlcF9pbiksXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MTU5Olx0XHRcdCAgYnVmLCBsZW4sIG1jdHBfdXNiX2luX2NvbXBsZXRlLCBtY3RwX3VzYik7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTYwLVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz0xNzk9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByeF9lcnJfbWF4ID0gMTA7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTgwLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjE4MTpzdGF0aWMgdm9pZCBtY3RwX3VzYl9pbl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTgyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4ODgKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgbWN0cF91c2Jfb3V0X2NvbXBsZXRlIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhlIG91dHB1dCBjb21wbGV0aW9uIGhhbmRsaW5nIGluIHRoZSBNQ1RQLW92ZXItVVNCIGRyaXZlci4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgbWN0cF91c2Jfb3V0X2NvbXBsZXRlYCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyBpbiBgbWN0cC11c2IuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgZnVuY3Rpb24uIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhhdCBjb2RlIGFuZCBzZWVpbmcgd2hhdCBpdCYjMzk7cyBkb2luZy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdHMgcm9sZSBpbiB0aGUgZGF0YSB0cmFuc2ZlciBwcm9jZXNzIGZyb20gdGhlIHN5c3RlbSB0byB0aGUgVVNCIGRldmljZSwgcGFydGljdWxhcmx5IHdoZW4gYSB0cmFuc2ZlciBpcyBjb25zaWRlcmVkIGNvbXBsZXRlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlOiB3aGF0IGhhcHBlbnMgdG8gdGhlIGRhdGEsIGlzIHRoZXJlIGFueSBlcnJvciBoYW5kbGluZywgYW5kIGhvdyBkb2VzIGl0IHNpZ25hbCB0aGUgY29tcGxldGlvbiB0byB0aGUgaGlnaGVyIGxheWVycz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWN0cF91c2Jfb3V0X2NvbXBsZXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz02ND1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFRYX1FNRU1fTUFYID0gMTYzODQ7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtNjUtXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6NjY6c3RhdGljIHZvaWQgbWN0cF91c2Jfb3V0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy02Ny17XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jPTg1PXN0YXRpYyBpbnQgbWN0cF91c2JfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTk4LVx0XHRcdCAgdXNiX3NuZGJ1bGtwaXBlKG1jdHBfdXNiLVx1MDAzZXVzYmRldiwgbWN0cF91c2ItXHUwMDNlZXBfb3V0KSxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYzo5OTpcdFx0XHQgIGRhdGEsIGxlbiwgbWN0cF91c2Jfb3V0X2NvbXBsZXRlLCB0eF9jdHgpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTEwMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MjMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTUNUUC1VU0IgVFggU2VuZCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBtY3RwX3VzYl90eF9zZW5kYCB3aXRoaW4gYG1jdHAtdXNiLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IHB1c2hlcyBvdXIgTUNUUCBkYXRhIG91dCBvdmVyIFVTQi4gSSB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgaW50cmljYWNpZXMgb2YgdGhlIFVTQiB0cmFuc3BvcnQgbGF5ZXIsIGVzcGVjaWFsbHkgZXJyb3IgY2hlY2tpbmcgYW5kIGJ1ZmZlcmluZy4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGRhdGEgdHJhbnNmZXIsIHBhcnRpY3VsYXJseSB3aGF0IGhhcHBlbnMgaWYgdGhlcmUmIzM5O3MgY29udGVudGlvbiBvbiB0aGUgVVNCIGJ1cyBvciBpZiBhbiBlbmRwb2ludCBpcyBidXN5LiBBcmUgdGhleSB1c2luZyBETUEgZWZmZWN0aXZlbHk/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGluIHRoaXMgc2VuZCBmdW5jdGlvbiB0aGF0IG1pZ2h0IGltcGFjdCBvdmVyYWxsIE1DVFAgcGVyZm9ybWFuY2U/IEFueSBsb2NrIGNvbnRlbnRpb24gaXNzdWVzIEkgc2hvdWxkIGtub3c/IEFyZSB0aGV5IHVzaW5nIGFueSB0cmlja3Mgd2l0aCB0aGUgVVNCIHRyYW5zZmVyIGRlc2NyaXB0b3JzIHRvIG9wdGltaXplIHRoZSBwcm9jZXNzLCBtYXliZSBoYW5kbGluZyB0aGUgcGFja2V0aXphdGlvbiBvZiBNQ1RQIGRhdGE/IFRpbWUgdG8gZ2V0IHRoZSBkZWJ1Z2dlciBvdXQgYW5kIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21jdHBfdXNiX3R4X3NlbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jPTY2PXN0YXRpYyB2b2lkIG1jdHBfdXNiX291dF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTg0LVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjg1OnN0YXRpYyBpbnQgbWN0cF91c2JfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtODYtXHRcdFx0ICAgIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jPTEyMj1zdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB0eF9vcHMgPSB7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MTIzOlx0LnNlbmQgPSBtY3RwX3VzYl90eF9zZW5kLFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTEyNC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk1MAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1jdHBfdXNiX3N0YXJ0X3htaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbWN0cF91c2Jfc3RhcnRfeG1pdGAsIHNwZWNpZmljYWxseSBpbiBgbWN0cC11c2IuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhlIFVTQiB0cmFuc3BvcnQgaW5pdGlhdGVzIHRyYW5zbWlzc2lvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBNQ1RQIG1lc3NhZ2VzIGFyZSBtYXJzaGFsZWQsIHdoZXJlIHRoZSBETUEgaXMgc2V0IHVwIChpZiBhcHBsaWNhYmxlKSwgYW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgcG90ZW50aWFsIGJ1cyBjb250ZW50aW9uIG9yIGVycm9ycy4gSSYjMzk7bSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiB0aGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgZW1wbG95ZWQgdG8gZW5zdXJlIGF0b21pYyBvcGVyYXRpb25zLCBiZWNhdXNlIHRoYXQmIzM5O3MgYWx3YXlzIGEgcG9pbnQgb2Ygc3VidGxlIGJ1Z3MgaW4gbXVsdGktdGhyZWFkZWQgY29udGV4dHMuIExldCYjMzk7cyBzZWUgaG93IHRoZSBwYWNrZXQgZGVzY3JpcHRvciBpcyB1c2VkLCBhbmQgaG93IHRoZSBidWZmZXIgcG9vbCBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGludGVycnVwdCBoYW5kbGluZyBzZXR1cCB0b287IEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgaG93IHRoZSBUWCBjb21wbGV0aW9uIGludGVycnVwdCBpcyBoYW5kbGVkIGFuZCBpZiB3ZSYjMzk7cmUgdXNpbmcgcG9sbGluZy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3VlcyBhcm91bmQgc2hhcmVkIHJlc291cmNlcywgZXNwZWNpYWxseSBhcm91bmQgdGhlIHJpbmcgYnVmZmVyIGlmIGl0JiMzOTtzIHRoZXJlLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhpcyBwYXJ0IG9mIHRoZSBkcml2ZXIgaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgdG8gdGhlIGV4aXN0aW5nIE1DVFAgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIGJ1ZmZlciBtYW5hZ2VtZW50IHRvIGF2b2lkIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWN0cF91c2Jfc3RhcnRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIHR4X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTI1LVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjEyNjpzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTEyNy1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz0zMDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtY3RwX3VzYl9uZXRkZXZfb3BzID0ge1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjMwNTpcdC5uZG9fc3RhcnRfeG1pdCA9IG1jdHBfdXNiX3N0YXJ0X3htaXQsXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMzA2LVx0Lm5kb19vcGVuID0gbWN0cF91c2Jfb3BlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1NzQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBtY3RwX3VzYl9yeF9xdWV1ZWAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgbWN0cF91c2JfcnhfcXVldWVgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYG1jdHAtdXNiLmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGluY29taW5nIFVTQiBkYXRhIHJlY2VwdGlvbiBpcyBoYW5kbGVkLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHF1ZXVlIG9wZXJhdGVzLCBob3cgaXQmIzM5O3MgbWFuYWdlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBjb21wb25lbnRzIGluIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBidWZmZXIgbWFuYWdlbWVudCwgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGUuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBwdWxsaW5nIGluY29taW5nIHBhY2tldHMgb2ZmIHRoZSBVU0IgaW50ZXJmYWNlLCB2YWxpZGF0aW5nIHRoZW0sIGFuZCB0aGVuIHBlcmhhcHMgZW5xdWV1aW5nIHRoZW0gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4gSSBleHBlY3QgdG8gc2VlIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIGJ1ZmZlcmluZywgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgcGVyaGFwcyBzb21lIGZvcm0gb2YgbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24gdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGltcGxlbWVudGF0aW9uIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21jdHBfdXNiX3J4X3F1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz0xNDM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgUlhfUkVUUllfREVMQVkgPSBIWiAvIDQ7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTQ0LVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjE0NTpzdGF0aWMgaW50IG1jdHBfdXNiX3J4X3F1ZXVlKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGdmcF90IGdmcClcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0xNDYte1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz0xODE9c3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0yNDEtXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MjQyOlx0bWN0cF91c2JfcnhfcXVldWUobWN0cF91c2IsIEdGUF9BVE9NSUMpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTI0My19XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jPTI0NT1zdGF0aWMgdm9pZCBtY3RwX3VzYl9yeF9yZXRyeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMjYzLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjI2NDpcdG1jdHBfdXNiX3J4X3F1ZXVlKG1jdHBfdXNiLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0yNjUtfVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz0yNjc9c3RhdGljIGludCBtY3RwX3VzYl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTI3Ni1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYzoyNzc6XHRyZXR1cm4gbWN0cF91c2JfcnhfcXVldWUobWN0cF91c2IsIEdGUF9LRVJORUwpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTI3OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzg2CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbWN0cF91c2JsaWJfdHhfcHVzaGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGUgdHJhbnNtaXQgc2lkZSBvZiB0aGUgVVNCIGxpYnJhcnkgaW1wbGVtZW50YXRpb24uIFRoZSBmaXJzdCBwbGFjZSB0byBjaGVjaywgbmF0dXJhbGx5LCBpcyBgbWN0cF91c2JsaWJfdHhfcHVzaGAgd2l0aGluIGBtY3RwLXVzYmxpYi5jYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGNvcmUgb2YgcHVzaGluZyBkYXRhIG9udG8gdGhlIFVTQiB0cmFuc21pdCBxdWV1ZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IGl0IGhhbmRsZXMgdGhpbmdzIGxpa2UgYnVmZmVyIGFsbG9jYXRpb24sIGludGVycnVwdCBwcm90ZWN0aW9uIChwcm9iYWJseSBtdXRleGVzIG9yIHNwaW5sb2NrcyksIGFueSBwb3RlbnRpYWwgZmxvdyBjb250cm9sIG1lY2hhbmlzbXMsIGFuZCBvZiBjb3Vyc2UsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgVVNCIGNvbnRyb2xsZXIgaGFyZHdhcmUgcmVnaXN0ZXJzIG9yIGRyaXZlciBmdW5jdGlvbnMgdG8gYWN0dWFsbHkgaW5pdGlhdGUgdGhlIHRyYW5zbWlzc2lvbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGRlYWxzIHdpdGggcGFydGlhbCBwYWNrZXRzIG9yIGlmIGl0IGhhcyBhbnkgc21hcnQgYnVmZmVyaW5nIHNjaGVtZXMgZm9yIGRpZmZlcmVudCBtZXNzYWdlIHNpemVzLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGl0IHJldHVybnMgYW55IGVycm9yIGNvZGVzIHRoYXQgd291bGQgdGVsbCBtZSBob3cgdGhlIGZ1bmN0aW9uIGRlYWxzIHdpdGggYSBmdWxsIHF1ZXVlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZWQgdGhlIERNQSBjb25maWd1cmF0aW9uIHRvby4gR290IHRvIGJlIHN1cmUgdGhleSYjMzk7cmUgbm90IGJsb2NraW5nIHVubmVjZXNzYXJpbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21jdHBfdXNibGliX3R4X3B1c2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTQ0NT1zdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X3NrYl9wcmVwYXJlKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgc3Bhbixcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNDgzLSAqL1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjQ4NDppbnQgbWN0cF91c2JsaWJfdHhfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTQ4NS1cdFx0XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy01ODgtfVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjU4OTpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9wdXNoKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy01OTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTUzCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgbWN0cC11c2JsaWIuYyBUcmFuc2FjdGlvbiBDb21wbGV0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhlIGNvbXBsZXRpb24gb2YgYSB0cmFuc21pc3Npb24uIFRpbWUgdG8gemVybyBpbiBvbiBgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZWAgd2l0aGluIGBtY3RwLXVzYmxpYi5jYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgcHJvcGVyIHRyYW5zYWN0aW9uIGhhbmRsaW5nIGFuZCBlcnJvciBtYW5hZ2VtZW50IGF0IHRoZSBVU0IgbGF5ZXIgb2YgdGhlIE1DVFAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgY29tcGxldGlvbiBjYWxsYmFjayB0aWVzIGludG8gdGhlIG92ZXJhbGwgc3RhdGUgbWFjaGluZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgVVNCIGRyaXZlciBhcyB3ZWxsIGFzIHRoZSBNQ1RQIGNvcmUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB2YXJpYWJsZXMgYXJlIGJlaW5nIHNldCBvciBjbGVhcmVkLCBhbnkgaW50ZXJydXB0cyBiZWluZyB0cmlnZ2VyZWQsIGFuZCBlcnJvciBjb2RlcyBiZWluZyBoYW5kbGVkIG9uIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBidWZmZXIgbWFuYWdlbWVudC4gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSByZWxldmFudCBpbnRlcnJ1cHQgaGFuZGxlcnMgYW5kIGVycm9yIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz00MTM9c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNDI5LSAqL1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjQzMDp2b2lkIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTQzMS1cdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBvaylcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNDM4LX1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzo0Mzk6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSk7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNDQwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjUyMQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhhdCBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBNQ1RQIFVTQiBMaWJyYXJ5KioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdHJhbnNtaXNzaW9uIGNhbmNlbGxhdGlvbiB3b3JrcyB3aXRoaW4gdGhlIE1DVFAgVVNCIGxpYnJhcnkuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBtY3RwX3VzYmxpYl90eF9jYW5jZWxgIGluIGBtY3RwLXVzYmxpYi5jYC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjZXNzYXRpb24gb2YgZGF0YSB0cmFuc21pc3Npb24uIElzIGl0IGEgZ3JhY2VmdWwgc2h1dGRvd24gb2YgdGhlIFVTQiBlbmRwb2ludCwgYSBxdWV1aW5nIGlzc3VlLCBvciBqdXN0IGNsZWFyaW5nIGEgZmxhZz8gQW5kLCB3aGF0IHN0YXRlIGRvZXMgdGhlIGRldmljZSBvciBjb250cm9sbGVyIGVudGVyIHVwb24gdGhlIGNhbmNlbGxhdGlvbj8gSSYjMzk7bGwgcHJvYmFibHkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIFVTQiBkcml2ZXIgYW5kIHRoZSBNQ1RQIHByb3RvY29sIGxheWVycy4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBjb25kaXRpb25hbCBsb2dpYyByZWdhcmRpbmcgZGlmZmVyZW50IHRyYW5zbWlzc2lvbiBzdGF0ZXMgb3IgZXJyb3IgY29uZGl0aW9ucywgc28gdGhhdCB3aWxsIGJlIHRoZSBmb2NhbCBwb2ludCBvZiBteSBzY3J1dGlueS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWN0cF91c2JsaWJfdHhfY2FuY2VsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz01ODk9RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfcHVzaCk7XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTU5MS0vKiBDYW5jZWwgYSB0eDogYW55IHVuLXNlbnQgY29udGV4dCBpcyByZWxlYXNlZC4gKi9cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzo1OTI6dm9pZCBtY3RwX3VzYmxpYl90eF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy01OTMtXHRcdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy02MDctfVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjYwODpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jYW5jZWwpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYwOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwNDEKCQkJCQkJCW91dHB1dDogMjM4CgkJCQkJCQl0aG91Z2h0czogNTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgTUNUUC1vdmVyLVVTQiB3aXRoIHRoZSBOZXcgTGlicmFyeSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGtleSBoZXJlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBuZXcgY29tbW9uIGxpYnJhcnksIGBtY3RwLXVzYmxpYmAsIGFuZCBpdHMgaW50ZWdyYXRpb24gd2l0aCB0aGUgZXhpc3RpbmcgYG1jdHAtdXNiYCB0cmFuc3BvcnQgZHJpdmVyLgoKTXkgbWFpbiBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGVzZSBmdW5jdGlvbnMsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhleSBhcmUgaW5jbHVkZWQgaW4gdGhlIGZ1enppbmcgY29uZmlndXJhdGlvbjogYG1jdHBfdXNibGliX3J4X3ByZXBhcmVgLCBgbWN0cF91c2JsaWJfcnhfY29tcGxldGVgLCBgbWN0cF91c2JsaWJfdHhfcHVzaGAsIGBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlYCwgYG1jdHBfdXNiX2luX2NvbXBsZXRlYCwgYG1jdHBfdXNiX291dF9jb21wbGV0ZWAsIGBtY3RwX3VzYl90eF9zZW5kYCwgYG1jdHBfdXNiX3N0YXJ0X3htaXRgLCBhbmQgYG1jdHBfdXNiX3J4X3F1ZXVlYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBhbmQgY29tcGxldGlvbiByb3V0aW5lcywgc28gdGhvc2UgYXJlIHdoYXQgSSYjMzk7bGwgc3RhcnQgd2l0aC4KClRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGZ1bmN0aW9uYWwuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIFVTQiBnYWRnZXQgZW11bGF0aW9uLCB3aGljaCBpcyB3aGF0IEkmIzM5O2QgZXhwZWN0LiBUbyBlbnN1cmUgdGhpcyBpcyBzZXR1cCBwcm9wZXJseSwgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYSBmZXcgY29uZmlndXJhdGlvbnM6IEZpcnN0LCB0aGUgYmFzaWMgYE1DVFBgIHN1cHBvcnQuIFRoZW4sIG9mIGNvdXJzZSwgdGhlIGBNQ1RQX1RSQU5TUE9SVF9VU0JgIG9wdGlvbiwgYW5kIGZpbmFsbHksIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJgLiBJIG5vdGVkIHRoYXQgYE1DVFBfVFJBTlNQT1JUX1VTQkxJQmAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBieSBgTUNUUF9UUkFOU1BPUlRfVVNCYCwgYnV0IEkmIzM5O20gZ29pbmcgdG8gbGlzdCBpdCBleHBsaWNpdGx5IGZvciBjbGFyaXR5LgoKSSYjMzk7bSBza2lwcGluZyB0aGUgYE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUYCBjb25maWcsIHNpbmNlIHRoYXQmIzM5O3MgYSBLVW5pdCB0ZXN0LCBhbmQgZnV6emluZyBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgcmVxdWlyZSB0aG9zZS4gSXQmIzM5O3MgbW9yZSBhYm91dCBjb2RlIGNvdmVyYWdlIHRoYW4gcnVubmluZyB1bml0IHRlc3RzLgoKU28sIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTtsbCBzZXQgdXAgZm9yIHRoZSBmdXp6aW5nIHJ1bjoKCioqV29ydGhGdXp6aW5nOiB0cnVlKioKCioqRm9jdXNTeW1ib2xzOioqCi0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZQotIG1jdHBfdXNibGliX3J4X2NvbXBsZXRlCi0gbWN0cF91c2JsaWJfdHhfcHVzaAotIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUKLSBtY3RwX3VzYl9pbl9jb21wbGV0ZQotIG1jdHBfdXNiX291dF9jb21wbGV0ZQotIG1jdHBfdXNiX3R4X3NlbmQKLSBtY3RwX3VzYl9zdGFydF94bWl0Ci0gbWN0cF91c2JfcnhfcXVldWUKCioqRW5hYmxlQ29uZmlnczoqKgotIE1DVFAKLSBNQ1RQX1RSQU5TUE9SVF9VU0IKLSBNQ1RQX1RSQU5TUE9SVF9VU0JMSUIKClRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29tbW9uIGxpYnJhcnkgZm9yIE1DVFAtb3Zlci1VU0IgYW5kIG1vZGlmaWVzIHRoZSBNQ1RQIFVTQiB0cmFuc3BvcnQgZHJpdmVyIHRvIHVzZSBpdC4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24uIEl0JiMzOTtzIHByaW1lIHRlcnJpdG9yeSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7TUNUUF9UUkFOU1BPUlRfVVNCJiMzNDssCiAgICAmIzM0O01DVFBfVFJBTlNQT1JUX1VTQkxJQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21jdHBfdXNibGliX3J4X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfcnhfY29tcGxldGUmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfcHVzaCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O21jdHBfdXNiX2luX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O21jdHBfdXNiX291dF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYl90eF9zZW5kJiMzNDssCiAgICAmIzM0O21jdHBfdXNiX3N0YXJ0X3htaXQmIzM0OywKICAgICYjMzQ7bWN0cF91c2JfcnhfcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiAoYG1jdHAtdXNibGliYCkgYW5kIG1vZGlmaWVzIHRoZSBNQ1RQIFVTQiB0cmFuc3BvcnQgZHJpdmVyIChgbWN0cC11c2JgKSB0byB1c2UgaXQuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIFVTQiBnYWRnZXQgZW11bGF0aW9uIChlLmcuLCByYXctZ2FkZ2V0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUNUUCYjMzQ7LAogICAgJiMzNDtNQ1RQX1RSQU5TUE9SVF9VU0ImIzM0OywKICAgICYjMzQ7TUNUUF9UUkFOU1BPUlRfVVNCTElCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWN0cF91c2JsaWJfcnhfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9wdXNoJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUmIzM0OywKICAgICYjMzQ7bWN0cF91c2JfaW5fY29tcGxldGUmIzM0OywKICAgICYjMzQ7bWN0cF91c2Jfb3V0X2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O21jdHBfdXNiX3R4X3NlbmQmIzM0OywKICAgICYjMzQ7bWN0cF91c2Jfc3RhcnRfeG1pdCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYl9yeF9xdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBsaWJyYXJ5IGZvciBNQ1RQLW92ZXItVVNCIChgbWN0cC11c2JsaWJgKSBhbmQgbW9kaWZpZXMgdGhlIE1DVFAgVVNCIHRyYW5zcG9ydCBkcml2ZXIgKGBtY3RwLXVzYmApIHRvIHVzZSBpdC4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24gKGUuZy4sIHJhdy1nYWRnZXQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6Mjk6NDguNTIxNzc3MTk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzNzM1ODgwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUNUUFwiLFxuICAgIFwiTUNUUF9UUkFOU1BPUlRfVVNCXCIsXG4gICAgXCJNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9wcmVwYXJlXCIsXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfcHVzaFwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2JfaW5fY29tcGxldGVcIixcbiAgICBcIm1jdHBfdXNiX291dF9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2JfdHhfc2VuZFwiLFxuICAgIFwibWN0cF91c2Jfc3RhcnRfeG1pdFwiLFxuICAgIFwibWN0cF91c2JfcnhfcXVldWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBsaWJyYXJ5IGZvciBNQ1RQLW92ZXItVVNCIChgbWN0cC11c2JsaWJgKSBhbmQgbW9kaWZpZXMgdGhlIE1DVFAgVVNCIHRyYW5zcG9ydCBkcml2ZXIgKGBtY3RwLXVzYmApIHRvIHVzZSBpdC4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24gKGUuZy4sIHJhdy1nYWRnZXQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzoyOTo0OC41MjE3ODIzMTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNTQyMjMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ2ZGE3NzQ0ZjI1OWEyMzYyYmE0MTM0NDlkNjZlMTYxMDEzNThlODFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgOCAyMzoyOTo0NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL0tjb25maWcgYi9kcml2ZXJzL25ldC9tY3RwL0tjb25maWdcXG5pbmRleCBjZjMyNWFiMGIxZWY1NS4uYzQwYWM5YzY2NWI3NTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXFxuQEAgLTQ3LDkgKzQ3LDI1IEBAIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0NcXG4gXFx0ICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCBmb3IgZWFjaCBJM0MgYnVzXFxuIFxcdCAgaGF2aW5nIGEgXFxcIm1jdHAtY29udHJvbGxlclxcXCIgZGV2aWNldHJlZSBwcm9wZXJ0eS5cXG4gXFxuK2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcXG4rXFx0dHJpc3RhdGUgXFxcIk1DVFAgb3ZlciBVU0IgY29tbW9uIGxpYnJhcnlcXFwiXFxuK1xcdGRlcGVuZHMgb24gVVNCXFxuK1xcdGhlbHBcXG4rXFx0ICBDb21tb24gcHJvdG9jb2wgaGFuZGxpbmcgZnVuY3Rpb25zIGZvciBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydFxcbitcXHQgIGltcGxlbWVudGF0aW9ucywgc3VpdGFibGUgZm9yIHVzZSBpbiBlaXRoZXIgaG9zdC0gb3IgZ2FkZ2V0LXNpZGVcXG4rXFx0ICB0cmFuc3BvcnQgZHJpdmVyXFxuK1xcbitcXHQgIFRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYnkgdGhlIHRyYW5zcG9ydCBkcml2ZXIuXFxuK1xcbitjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1RcXG4rICAgICAgICBib29sIFxcXCJNQ1RQIHVzYmxpYiB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbisgICAgICAgIGRlcGVuZHMgb24gTUNUUF9UUkFOU1BPUlRfVVNCTElCPXkgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbisgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuK1xcbiBjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCXFxuIFxcdHRyaXN0YXRlIFxcXCJNQ1RQIFVTQiB0cmFuc3BvcnRcXFwiXFxuIFxcdGRlcGVuZHMgb24gVVNCXFxuK1xcdHNlbGVjdCBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcXG4gXFx0aGVscFxcbiBcXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBVU0IgdHJhbnNwb3J0LFxcbiBcXHQgIGRlZmluZWQgYnkgRE1URiBzcGVjaWZpY2F0aW9uIERTUDAyODMuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXFxuaW5kZXggYzM2MDA2ODQ5YTFlN2QuLmM4NzBiNjJkM2YxYzk1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXFxuQEAgLTIsMyArMiw0IEBAIG9iai0kKENPTkZJR19NQ1RQX1NFUklBTCkgKz0gbWN0cC1zZXJpYWwub1xcbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTJDKSArPSBtY3RwLWkyYy5vXFxuIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JM0MpICs9IG1jdHAtaTNjLm9cXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQikgKz0gbWN0cC11c2Iub1xcbitvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCTElCKSArPSBtY3RwLXVzYmxpYi5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1xcbmluZGV4IGZhZGU2NWYyZjI2OTk1Li4yZDMxMDc1Mzc0YjQ1YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNcXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNcXG5AQCAtMyw5ICszLDkgQEBcXG4gICogbWN0cC11c2IuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGJpbmRpbmcgZHJpdmVyLlxcbiAgKlxcbiAgKiBEU1AwMjgzIGlzIGF2YWlsYWJsZSBhdDpcXG4tICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4wLjEucGRmXFxuKyAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMS4wLnBkZlxcbiAgKlxcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNSBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuQEAgLTIyLDk1ICsyMiwxMTUgQEBcXG4gc3RydWN0IG1jdHBfdXNiIHtcXG4gXFx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjtcXG4gXFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7XFxuK1xcdGJvb2wgc3BhbjtcXG4gXFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuIFxcbiBcXHR1OCBlcF9pbjtcXG4gXFx0dTggZXBfb3V0O1xcbiBcXG4tXFx0c3RydWN0IHVyYiAqdHhfdXJiO1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggcng7XFxuIFxcdHN0cnVjdCB1cmIgKnJ4X3VyYjtcXG4rXFx0aW50IGluX2Vycl9jb3VudDtcXG4rXFx0aW50IGluX2Vycl9vcmlnO1xcbitcXHRib29sIGNsZWFyX2hhbHQ7XFxuIFxcbiBcXHQvKiBlbmZvcmNlcyBhdG9taWMgYWNjZXNzIHRvIHJ4X3N0b3BwZWQgYW5kIHJlcXVldWluZyB0aGUgcmV0cnkgd29yayAqL1xcbiBcXHRzcGlubG9ja190IHJ4X2xvY2s7XFxuIFxcdGJvb2wgcnhfc3RvcHBlZDtcXG4gXFx0c3RydWN0IGRlbGF5ZWRfd29yayByeF9yZXRyeV93b3JrO1xcbitcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4IHR4O1xcbitcXHRzdHJ1Y3QgdXNiX2FuY2hvciB0eF9hbmNob3I7XFxuK1xcdC8qIHNlcmlhbGlzZXMgdHhfcW1lbSB1cGRhdGVzIHRvIG5ldGRldiBxdWV1ZSBzdGF0ZXMgKi9cXG4rXFx0c3BpbmxvY2tfdCB0eF9xbWVtX2xvY2s7XFxuK1xcdGludCB0eF9xbWVtO1xcbit9O1xcbitcXG4rZW51bSB7XFxuK1xcdE1DVFBfVVNCX1NVQkNMQVNTX0JBU0UgPSAweDAwLFxcbitcXHRNQ1RQX1VTQl9TVUJDTEFTU19TUEFOID0gMHgwMixcXG4gfTtcXG4gXFxuKy8qIFdlIHVzZSBhIHRvdGFsLXNpemUgbGltaXQgZm9yIG91dHN0YW5kaW5nIFVSQnMsIGFzIHRoZSB0cmFuc2ZlciBjb3VudHNcXG4rICogbWF5IHZhcnkgYSBsb3QgYmV0d2VlbiBzcGFubmluZy0gYW5kIG5vbi1zcGFubmluZyBtb2Rlcy4gSW4gc3Bhbm5pbmcgbW9kZSxcXG4rICogdGhpcyB3aWxsIGFsbG93IGZvciBhIGNvdXBsZSBvZiBtYXgtc2l6ZWQgdHJhbnNmZXJzIHRvIGJlIGluIGZsaWdodC4gSW5cXG4rICogbm9uLXNwYW5uaW5nIG1vZGUsIDMyLlxcbisgKlxcbisgKiBXZSB3YW50IHRvIGF2b2lkIGRpc2FibGluZyB0aGUgdHggcXVldWUgaWYgcG9zc2libGU7IGRvaW5nIHNvIHdpbGwgZW5kIHVwXFxuKyAqIHJlcXVldWVpbmcgdG8gZ3NvX3NrYiwgYW5kIHdlIG9ubHkgZGVxdWV1ZSBmcm9tIHRoYXQgb25lIHNrYiBhdCBhIHRpbWUsXFxuKyAqIHNvIGNhbiBubyBsb25nZXIgcGVyZm9ybSB0cmFuc2ZlciBwYWNraW5nLlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUWF9RTUVNX01BWCA9IDE2Mzg0O1xcbitcXG4gc3RhdGljIHZvaWQgbWN0cF91c2Jfb3V0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4ge1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLVxcdTAwM2Vjb250ZXh0O1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuLVxcdGludCBzdGF0dXM7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCA9IHVyYi1cXHUwMDNlY29udGV4dDtcXG4rXFx0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7XFxuK1xcdHVuc2lnbmVkIGludCBsZW4gPSB1cmItXFx1MDAzZXRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBtY3RwX3VzYi1cXHUwMDNlbmV0ZGV2O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4tXFx0c3RhdHVzID0gdXJiLVxcdTAwM2VzdGF0dXM7XFxuK1xcdG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUodHhfY3R4LCBuZXRkZXYsIHVyYi1cXHUwMDNlc3RhdHVzID09IDApO1xcbiBcXG4tXFx0c3dpdGNoIChzdGF0dXMpIHtcXG4tXFx0Y2FzZSAtRU5PRU5UOlxcbi1cXHRjYXNlIC1FQ09OTlJFU0VUOlxcbi1cXHRjYXNlIC1FU0hVVERPV046XFxuLVxcdGNhc2UgLUVQUk9UTzpcXG4tXFx0XFx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKG5ldGRldik7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIDA6XFxuLVxcdFxcdGRldl9kc3RhdHNfdHhfYWRkKG5ldGRldiwgc2tiLVxcdTAwM2VsZW4pO1xcbi1cXHRcXHRuZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7XFxuLVxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFxcXCJ1bmV4cGVjdGVkIHR4IHVyYiBzdGF0dXM6ICVkXFxcXG5cXFwiLCBzdGF0dXMpO1xcbi1cXHRcXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQobmV0ZGV2KTtcXG4tXFx0fVxcbitcXHR1c2JfZnJlZV91cmIodXJiKTtcXG4gXFxuLVxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xcbitcXHRtY3RwX3VzYi1cXHUwMDNldHhfcW1lbSAtPSBsZW47XFxuK1xcdGlmIChtY3RwX3VzYi1cXHUwMDNldHhfcW1lbSBcXHUwMDNjIFRYX1FNRU1fTUFYIFxcdTAwMjZcXHUwMDI2IG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcXG4rXFx0XFx0bmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNldHhfcW1lbV9sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbitzdGF0aWMgaW50IG1jdHBfdXNiX3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxcbitcXHRcXHRcXHQgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcXG4ge1xcbi1cXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4tXFx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xcbi1cXHR1bnNpZ25lZCBpbnQgcGxlbjtcXG4rXFx0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHN0cnVjdCB1cmIgKnVyYjtcXG4gXFx0aW50IHJjO1xcbiBcXG4tXFx0cGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbi1cXG4tXFx0aWYgKHBsZW4gKyBzaXplb2YoKmhkcikgXFx1MDAzZSBNQ1RQX1VTQl9YRkVSX1NJWkUpXFxuLVxcdFxcdGdvdG8gZXJyX2Ryb3A7XFxuLVxcbi1cXHRyYyA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqaGRyKSk7XFxuLVxcdGlmIChyYylcXG4tXFx0XFx0Z290byBlcnJfZHJvcDtcXG4tXFxuLVxcdGhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTtcXG4tXFx0aWYgKCFoZHIpXFxuLVxcdFxcdGdvdG8gZXJyX2Ryb3A7XFxuLVxcbi1cXHRoZHItXFx1MDAzZWlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7XFxuLVxcdGhkci1cXHUwMDNlcnN2ZCA9IDA7XFxuLVxcdGhkci1cXHUwMDNlbGVuID0gcGxlbiArIHNpemVvZigqaGRyKTtcXG4tXFxuLVxcdHVyYiA9IG1jdHBfdXNiLVxcdTAwM2V0eF91cmI7XFxuK1xcdHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7XFxuK1xcdGlmICghdXJiKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgbWN0cF91c2ItXFx1MDAzZXVzYmRldixcXG4gXFx0XFx0XFx0ICB1c2Jfc25kYnVsa3BpcGUobWN0cF91c2ItXFx1MDAzZXVzYmRldiwgbWN0cF91c2ItXFx1MDAzZWVwX291dCksXFxuLVxcdFxcdFxcdCAgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbixcXG4tXFx0XFx0XFx0ICBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHNrYik7XFxuK1xcdFxcdFxcdCAgZGF0YSwgbGVuLCBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHR4X2N0eCk7XFxuK1xcbitcXHRpZiAobWN0cF91c2ItXFx1MDAzZXNwYW4pXFxuK1xcdFxcdHVyYi1cXHUwMDNldHJhbnNmZXJfZmxhZ3MgfD0gVVJCX1pFUk9fUEFDS0VUO1xcbitcXG4rXFx0dXNiX2FuY2hvcl91cmIodXJiLCBcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXR4X2FuY2hvcik7XFxuIFxcbi1cXHQvKiBTdG9wcyBUWCBxdWV1ZSBmaXJzdCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uIHdpdGggVVJCIGNvbXBsZXRlICovXFxuLVxcdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcXG4gXFx0cmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpO1xcbiBcXHRpZiAocmMpIHtcXG4tXFx0XFx0bmV0aWZfd2FrZV9xdWV1ZShkZXYpO1xcbi1cXHRcXHRnb3RvIGVycl9kcm9wO1xcbitcXHRcXHRuZXRkZXZfZGJnKG1jdHBfdXNiLVxcdTAwM2VuZXRkZXYsIFxcXCJUWCB1cmIgc3VibWl0IGZhaWxlZCwgJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0dXNiX3VuYW5jaG9yX3VyYih1cmIpO1xcbitcXHRcXHR1c2JfZnJlZV91cmIodXJiKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2V0eF9xbWVtX2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0bWN0cF91c2ItXFx1MDAzZXR4X3FtZW0gKz0gbGVuO1xcbitcXHRcXHRpZiAobWN0cF91c2ItXFx1MDAzZXR4X3FtZW0gXFx1MDAzZT0gVFhfUU1FTV9NQVgpXFxuK1xcdFxcdFxcdG5ldGlmX3N0b3BfcXVldWUobWN0cF91c2ItXFx1MDAzZW5ldGRldik7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2V0eF9xbWVtX2xvY2ssIGZsYWdzKTtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB0eF9vcHMgPSB7XFxuK1xcdC5zZW5kID0gbWN0cF91c2JfdHhfc2VuZCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRib29sIG1vcmUgPSBuZXRkZXZfeG1pdF9tb3JlKCk7XFxuK1xcbitcXHRtY3RwX3VzYmxpYl90eF9wdXNoKGRldiwgXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2V0eCwgc2tiLCBtb3JlKTtcXG4gXFxuLWVycl9kcm9wOlxcbi1cXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTtcXG4tXFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIH1cXG4gXFxuQEAgLTEyNSwyNCArMTQ1LDIzIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIFJYX1JFVFJZX0RFTEFZID0gSFogLyA0O1xcbiBzdGF0aWMgaW50IG1jdHBfdXNiX3J4X3F1ZXVlKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGdmcF90IGdmcClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRzaXplX3QgbGVuO1xcbitcXHR2b2lkICpidWY7XFxuIFxcdGludCByYztcXG4gXFxuLVxcdHNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihtY3RwX3VzYi1cXHUwMDNlbmV0ZGV2LCBNQ1RQX1VTQl9YRkVSX1NJWkUsIGdmcCk7XFxuLVxcdGlmICghc2tiKSB7XFxuLVxcdFxcdHJjID0gLUVOT01FTTtcXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKG1jdHBfdXNiLVxcdTAwM2VuZXRkZXYsIFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcngsXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2YnVmLCBcXHUwMDI2bGVuLCBnZnApO1xcbitcXHRpZiAocmMpXFxuIFxcdFxcdGdvdG8gZXJyX3JldHJ5O1xcbi1cXHR9XFxuIFxcbiBcXHR1c2JfZmlsbF9idWxrX3VyYihtY3RwX3VzYi1cXHUwMDNlcnhfdXJiLCBtY3RwX3VzYi1cXHUwMDNldXNiZGV2LFxcbiBcXHRcXHRcXHQgIHVzYl9yY3ZidWxrcGlwZShtY3RwX3VzYi1cXHUwMDNldXNiZGV2LCBtY3RwX3VzYi1cXHUwMDNlZXBfaW4pLFxcbi1cXHRcXHRcXHQgIHNrYi1cXHUwMDNlZGF0YSwgTUNUUF9VU0JfWEZFUl9TSVpFLFxcbi1cXHRcXHRcXHQgIG1jdHBfdXNiX2luX2NvbXBsZXRlLCBza2IpO1xcbitcXHRcXHRcXHQgIGJ1ZiwgbGVuLCBtY3RwX3VzYl9pbl9jb21wbGV0ZSwgbWN0cF91c2IpO1xcbiBcXG4gXFx0cmMgPSB1c2Jfc3VibWl0X3VyYihtY3RwX3VzYi1cXHUwMDNlcnhfdXJiLCBnZnApO1xcbiBcXHRpZiAocmMpIHtcXG4gXFx0XFx0bmV0ZGV2X2RiZyhtY3RwX3VzYi1cXHUwMDNlbmV0ZGV2LCBcXFwicnggdXJiIHN1Ym1pdCBmYWlsdXJlOiAlZFxcXFxuXFxcIiwgcmMpO1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcngpO1xcbiBcXHRcXHRpZiAocmMgPT0gLUVOT01FTSlcXG4gXFx0XFx0XFx0Z290byBlcnJfcmV0cnk7XFxuIFxcdH1cXG5AQCAtMTU3LDEzICsxNzYsMTMgQEAgc3RhdGljIGludCBtY3RwX3VzYl9yeF9xdWV1ZShzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiLCBnZnBfdCBnZnApXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJ4X2Vycl9tYXggPSAxMDtcXG4rXFxuIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2luX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4ge1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLVxcdTAwM2Vjb250ZXh0O1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuLVxcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbi1cXHRzdHJ1Y3QgbWN0cF9za2JfY2IgKmNiO1xcbi1cXHR1bnNpZ25lZCBpbnQgbGVuO1xcbitcXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gdXJiLVxcdTAwM2Vjb250ZXh0O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbWN0cF91c2ItXFx1MDAzZW5ldGRldjtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IHN0YXR1cztcXG4gXFxuIFxcdHN0YXR1cyA9IHVyYi1cXHUwMDNlc3RhdHVzO1xcbkBAIC0xNzIsODAgKzE5MSw1NCBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9pbl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXFxuIFxcdGNhc2UgLUVOT0VOVDpcXG4gXFx0Y2FzZSAtRUNPTk5SRVNFVDpcXG4gXFx0Y2FzZSAtRVNIVVRET1dOOlxcbi1cXHRjYXNlIC1FUFJPVE86XFxuLVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHQvKiBkZXZpY2Ugc2h1dGRvd24sIGRvbid0IHJlc3VibWl0ICovXFxuK1xcdFxcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXJ4KTtcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHRjYXNlIDA6XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcInVuZXhwZWN0ZWQgcnggdXJiIHN0YXR1czogJWRcXFxcblxcXCIsIHN0YXR1cyk7XFxuLVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4tXFxuLVxcdGxlbiA9IHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aDtcXG4tXFx0X19za2JfcHV0KHNrYiwgbGVuKTtcXG4tXFxuLVxcdHdoaWxlIChza2IpIHtcXG4tXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBOVUxMO1xcbi1cXHRcXHRzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7XFxuLVxcdFxcdHU4IHBrdF9sZW47IC8qIGxlbmd0aCBvZiBNQ1RQIHBhY2tldCwgbm8gVVNCIGhlYWRlciAqL1xcbiBcXG4tXFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4tXFx0XFx0aGRyID0gc2tiX3B1bGxfZGF0YShza2IsIHNpemVvZigqaGRyKSk7XFxuLVxcdFxcdGlmICghaGRyKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdGlmIChiZTE2X3RvX2NwdShoZHItXFx1MDAzZWlkKSAhPSBNQ1RQX1VTQl9ETVRGX0lEKSB7XFxuLVxcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LCBcXFwicng6IGludmFsaWQgaWQgJTA0eFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgYmUxNl90b19jcHUoaGRyLVxcdTAwM2VpZCkpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbitcXHRjYXNlIC1FUElQRTpcXG4rXFx0XFx0LyogZW5kcG9pbnQgc3RhbGw6IGNsZWFyIGhhbHQsIHdoaWNoIHdpbGwgY2F1c2UgYSByZXN1Ym1pdCAqL1xcbiBcXG4tXFx0XFx0aWYgKGhkci1cXHUwMDNlbGVuIFxcdTAwM2NcXG4tXFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgbWN0cF9oZHIpICsgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKSB7XFxuLVxcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LCBcXFwicng6IHNob3J0IHBhY2tldCAoaGRyKSAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgaGRyLVxcdTAwM2VsZW4pO1xcbi1cXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0aWYgKCFtY3RwX3VzYi1cXHUwMDNlaW5fZXJyX2NvdW50KyspXFxuK1xcdFxcdFxcdG1jdHBfdXNiLVxcdTAwM2Vpbl9lcnJfb3JpZyA9IHN0YXR1cztcXG4rXFx0XFx0aWYgKG1jdHBfdXNiLVxcdTAwM2Vpbl9lcnJfY291bnQgXFx1MDAzZT0gcnhfZXJyX21heCkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcImV4Y2Vzc2l2ZSBzdGFsbHMgZnJvbSBJTiBFUFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0Lyogd2Uga25vdyB3ZSBoYXZlIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSBoZXJlICovXFxuLVxcdFxcdHBrdF9sZW4gPSBoZHItXFx1MDAzZWxlbiAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTtcXG4tXFx0XFx0aWYgKHBrdF9sZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbikge1xcbi1cXHRcXHRcXHRuZXRkZXZfZGJnKG5ldGRldixcXG4tXFx0XFx0XFx0XFx0ICAgXFxcInJ4OiBzaG9ydCBwYWNrZXQgKHhmZXIpICVkLCBhY3R1YWwgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgIGhkci1cXHUwMDNlbGVuLCBza2ItXFx1MDAzZWxlbik7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuK1xcdFxcdG1jdHBfdXNiLVxcdTAwM2VjbGVhcl9oYWx0ID0gdHJ1ZTtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2VyeF9sb2NrLCBmbGFncyk7XFxuK1xcdFxcdGlmICghbWN0cF91c2ItXFx1MDAzZXJ4X3N0b3BwZWQpXFxuK1xcdFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXJ4X3JldHJ5X3dvcmssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFJYX1JFVFJZX0RFTEFZKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXJ4X2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcngpO1xcbitcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRcXHRpZiAocGt0X2xlbiBcXHUwMDNjIHNrYi1cXHUwMDNlbGVuKSB7XFxuLVxcdFxcdFxcdC8qIG1vcmUgcGFja2V0cyBtYXkgZm9sbG93IC0gY2xvbmUgdG8gYSBuZXdcXG4tXFx0XFx0XFx0ICogc2tiIHRvIHVzZSBvbiB0aGUgbmV4dCBpdGVyYXRpb25cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG4tXFx0XFx0XFx0aWYgKHNrYjIpIHtcXG4tXFx0XFx0XFx0XFx0aWYgKCFza2JfcHVsbChza2IyLCBwa3RfbGVuKSkge1xcbi1cXHRcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiMik7XFxuLVxcdFxcdFxcdFxcdFxcdHNrYjIgPSBOVUxMO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0c2tiX3RyaW0oc2tiLCBwa3RfbGVuKTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFxcXCJ1bmV4cGVjdGVkIHJ4IHVyYiBzdGF0dXM6ICVkXFxcXG5cXFwiLCBzdGF0dXMpO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSAtRVRJTUU6XFxuK1xcdGNhc2UgLUVQUk9UTzpcXG4rXFx0Y2FzZSAtRUlMU0VROlxcbitcXHRjYXNlIC1FT1ZFUkZMT1c6XFxuK1xcdFxcdC8qIHBvc3NpYmx5IHRyYW5zaWVudDsgcmVjb3JkIGZpcnN0IGZhaWx1cmUsIHJlc3VibWl0ICovXFxuK1xcdFxcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXJ4KTtcXG4rXFx0XFx0aWYgKCFtY3RwX3VzYi1cXHUwMDNlaW5fZXJyX2NvdW50KyspXFxuK1xcdFxcdFxcdG1jdHBfdXNiLVxcdTAwM2Vpbl9lcnJfb3JpZyA9IHN0YXR1cztcXG4rXFx0XFx0aWYgKG1jdHBfdXNiLVxcdTAwM2Vpbl9lcnJfY291bnQgXFx1MDAzZT0gcnhfZXJyX21heCkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcImV4Y2Vzc2l2ZSBlcnJvcnMgZnJvbSBJTiBFUCwgZmlyc3Q6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtY3RwX3VzYi1cXHUwMDNlaW5fZXJyX29yaWcpO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4rXFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRkZXZfZHN0YXRzX3J4X2FkZChuZXRkZXYsIHNrYi1cXHUwMDNlbGVuKTtcXG4tXFxuLVxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9NQ1RQKTtcXG4tXFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuLVxcdFxcdGNiID0gX19tY3RwX2NiKHNrYik7XFxuLVxcdFxcdGNiLVxcdTAwM2VoYWxlbiA9IDA7XFxuLVxcdFxcdG5ldGlmX3J4KHNrYik7XFxuLVxcbi1cXHRcXHRza2IgPSBza2IyO1xcbitcXHRjYXNlIDA6XFxuK1xcdFxcdG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKG5ldGRldiwgXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2VyeCwgdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoKTtcXG4rXFx0XFx0bWN0cF91c2ItXFx1MDAzZWluX2Vycl9jb3VudCA9IDA7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc2tiKVxcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tXFxuIFxcdG1jdHBfdXNiX3J4X3F1ZXVlKG1jdHBfdXNiLCBHRlBfQVRPTUlDKTtcXG4gfVxcbiBcXG5AQCAtMjUzLDYgKzI0NiwyMCBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9yeF9yZXRyeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtY3RwX3VzYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHJ4X3JldHJ5X3dvcmsud29yayk7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdC8qIFdlIGFyZSBvbmx5IGNhbGxlZCB3aGVuIHJ4IGNvbXBsZXRpb25zIGFyZSBzdXNwZW5kZWQgKi9cXG4rXFx0aWYgKG1jdHBfdXNiLVxcdTAwM2VjbGVhcl9oYWx0KSB7XFxuK1xcdFxcdGludCBwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKG1jdHBfdXNiLVxcdTAwM2V1c2JkZXYsIG1jdHBfdXNiLVxcdTAwM2VlcF9pbik7XFxuK1xcbitcXHRcXHRyYyA9IHVzYl9jbGVhcl9oYWx0KG1jdHBfdXNiLVxcdTAwM2V1c2JkZXYsIHBpcGUpO1xcbitcXHRcXHRpZiAocmMpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihtY3RwX3VzYi1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwiY2FuJ3QgY2xlYXIgSU4gRVAgaGFsdDogJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1jdHBfdXNiLVxcdTAwM2VjbGVhcl9oYWx0ID0gZmFsc2U7XFxuK1xcdH1cXG4gXFxuIFxcdG1jdHBfdXNiX3J4X3F1ZXVlKG1jdHBfdXNiLCBHRlBfS0VSTkVMKTtcXG4gfVxcbkBAIC0yNjIsNiArMjY5LDggQEAgc3RhdGljIGludCBtY3RwX3VzYl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXG4gXFx0V1JJVEVfT05DRShtY3RwX3VzYi1cXHUwMDNlcnhfc3RvcHBlZCwgZmFsc2UpO1xcbitcXHRtY3RwX3VzYi1cXHUwMDNlY2xlYXJfaGFsdCA9IGZhbHNlO1xcbitcXHRtY3RwX3VzYi1cXHUwMDNlaW5fZXJyX2NvdW50ID0gMDtcXG4gXFxuIFxcdG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7XFxuIFxcbkBAIC0yODQsNyArMjkzLDEwIEBAIHN0YXRpYyBpbnQgbWN0cF91c2Jfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2VyeF9yZXRyeV93b3JrKTtcXG4gXFxuIFxcdHVzYl9raWxsX3VyYihtY3RwX3VzYi1cXHUwMDNlcnhfdXJiKTtcXG4tXFx0dXNiX2tpbGxfdXJiKG1jdHBfdXNiLVxcdTAwM2V0eF91cmIpO1xcbitcXG4rXFx0dXNiX2tpbGxfYW5jaG9yZWRfdXJicyhcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXR4X2FuY2hvcik7XFxuK1xcbitcXHRtY3RwX3VzYmxpYl90eF9jYW5jZWwoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2V0eCwgZGV2LCBTS0JfRFJPUF9SRUFTT05fREVWX1JFQURZKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTMwMSw3ICszMTMsNyBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9uZXRkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdGRldi1cXHUwMDNlbXR1ID0gTUNUUF9VU0JfTVRVX01JTjtcXG4gXFx0ZGV2LVxcdTAwM2VtaW5fbXR1ID0gTUNUUF9VU0JfTVRVX01JTjtcXG4tXFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gTUNUUF9VU0JfTVRVX01BWDtcXG4rXFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gTUNUUF9VU0JfMV8wX01UVV9NQVg7XFxuIFxcbiBcXHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTtcXG4gXFx0ZGV2LVxcdTAwM2V0eF9xdWV1ZV9sZW4gPSBERUZBVUxUX1RYX1FVRVVFX0xFTjtcXG5AQCAtMzE3LDYgKzMyOSw3IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIFxcdHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuIFxcdHN0cnVjdCBtY3RwX3VzYiAqZGV2O1xcbitcXHRib29sIHNwYW47XFxuIFxcdGludCByYztcXG4gXFxuIFxcdC8qIG9ubHkgb25lIGFsdGVybmF0ZSAqL1xcbkBAIC0zMjgsNiArMzQxLDggQEAgc3RhdGljIGludCBtY3RwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXHR9XFxuIFxcbitcXHRzcGFuID0gaWZhY2VfZGVzYy1cXHUwMDNlZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gTUNUUF9VU0JfU1VCQ0xBU1NfU1BBTjtcXG4rXFxuIFxcdG5ldGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksIFxcXCJtY3RwdXNiJWRcXFwiLCBORVRfTkFNRV9FTlVNLFxcbiBcXHRcXHRcXHQgICAgICBtY3RwX3VzYl9uZXRkZXZfc2V0dXApO1xcbiBcXHRpZiAoIW5ldGRldilcXG5AQCAtMzM1LDMzICszNTAsNDMgQEAgc3RhdGljIGludCBtY3RwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4gXFxuIFxcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgXFx1MDAyNmludGYtXFx1MDAzZWRldik7XFxuIFxcdGRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdGRldi1cXHUwMDNlc3BhbiA9IHNwYW47XFxuIFxcdGRldi1cXHUwMDNlbmV0ZGV2ID0gbmV0ZGV2O1xcbiBcXHRkZXYtXFx1MDAzZXVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XFxuIFxcdGRldi1cXHUwMDNlaW50ZiA9IGludGY7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXJ4X2xvY2spO1xcbitcXHRpZiAoZGV2LVxcdTAwM2VzcGFuKVxcbitcXHRcXHRuZXRkZXYtXFx1MDAzZW1heF9tdHUgPSBNQ1RQX1VTQl8xXzFfTVRVX01BWDtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmRldi1cXHUwMDNldHhfcW1lbV9sb2NrKTtcXG4gXFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpO1xcbiBcXG4rXFx0bWN0cF91c2JsaWJfcnhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VyeCwgbGUxNl90b19jcHUoZXBfaW4tXFx1MDAzZXdNYXhQYWNrZXRTaXplKSxcXG4rXFx0XFx0XFx0ICAgIGRldi1cXHUwMDNlc3Bhbik7XFxuK1xcdG1jdHBfdXNibGliX3R4X2luaXQoXFx1MDAyNmRldi1cXHUwMDNldHgsIFxcdTAwMjZ0eF9vcHMsIGRldiwgZGV2LVxcdTAwM2VzcGFuKTtcXG4rXFx0aW5pdF91c2JfYW5jaG9yKFxcdTAwMjZkZXYtXFx1MDAzZXR4X2FuY2hvcik7XFxuK1xcbiBcXHRkZXYtXFx1MDAzZWVwX2luID0gZXBfaW4tXFx1MDAzZWJFbmRwb2ludEFkZHJlc3M7XFxuIFxcdGRldi1cXHUwMDNlZXBfb3V0ID0gZXBfb3V0LVxcdTAwM2ViRW5kcG9pbnRBZGRyZXNzO1xcbiBcXG4tXFx0ZGV2LVxcdTAwM2V0eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpO1xcbiBcXHRkZXYtXFx1MDAzZXJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmICghZGV2LVxcdTAwM2V0eF91cmIgfHwgIWRldi1cXHUwMDNlcnhfdXJiKSB7XFxuK1xcdGlmICghZGV2LVxcdTAwM2VyeF91cmIpIHtcXG4gXFx0XFx0cmMgPSAtRU5PTUVNO1xcbi1cXHRcXHRnb3RvIGVycl9mcmVlX3VyYnM7XFxuK1xcdFxcdGdvdG8gZXJyX2Zpbmlfcnh0eDtcXG4gXFx0fVxcbiBcXG4gXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNmRldi1cXHUwMDNlcnhfcmV0cnlfd29yaywgbWN0cF91c2JfcnhfcmV0cnlfd29yayk7XFxuIFxcbiBcXHRyYyA9IG1jdHBfcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldiwgTlVMTCwgTUNUUF9QSFlTX0JJTkRJTkdfVVNCKTtcXG4gXFx0aWYgKHJjKVxcbi1cXHRcXHRnb3RvIGVycl9mcmVlX3VyYnM7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfdXJiO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1lcnJfZnJlZV91cmJzOlxcbi1cXHR1c2JfZnJlZV91cmIoZGV2LVxcdTAwM2V0eF91cmIpO1xcbitlcnJfZnJlZV91cmI6XFxuIFxcdHVzYl9mcmVlX3VyYihkZXYtXFx1MDAzZXJ4X3VyYik7XFxuK2Vycl9maW5pX3J4dHg6XFxuK1xcdG1jdHBfdXNibGliX3R4X2ZpbmkoXFx1MDAyNmRldi1cXHUwMDNldHgpO1xcbitcXHRtY3RwX3VzYmxpYl9yeF9maW5pKFxcdTAwMjZkZXYtXFx1MDAzZXJ4KTtcXG4gXFx0ZnJlZV9uZXRkZXYobmV0ZGV2KTtcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuQEAgLTM3MSwxMyArMzk2LDE1IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIFxcdHN0cnVjdCBtY3RwX3VzYiAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcXG4gXFxuIFxcdG1jdHBfdW5yZWdpc3Rlcl9uZXRkZXYoZGV2LVxcdTAwM2VuZXRkZXYpO1xcbi1cXHR1c2JfZnJlZV91cmIoZGV2LVxcdTAwM2V0eF91cmIpO1xcbitcXHRtY3RwX3VzYmxpYl9yeF9maW5pKFxcdTAwMjZkZXYtXFx1MDAzZXJ4KTtcXG4rXFx0bWN0cF91c2JsaWJfdHhfZmluaShcXHUwMDI2ZGV2LVxcdTAwM2V0eCk7XFxuIFxcdHVzYl9mcmVlX3VyYihkZXYtXFx1MDAzZXJ4X3VyYik7XFxuIFxcdGZyZWVfbmV0ZGV2KGRldi1cXHUwMDNlbmV0ZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1jdHBfdXNiX2RldmljZXNbXSA9IHtcXG4tXFx0eyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01DVFAsIDB4MCwgMHgxKSB9LFxcbitcXHR7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgTUNUUF9VU0JfU1VCQ0xBU1NfQkFTRSwgMHgxKSB9LFxcbitcXHR7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgTUNUUF9VU0JfU1VCQ0xBU1NfU1BBTiwgMHgxKSB9LFxcbiBcXHR7IDAgfSxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yYTIyYmU5OTlmYTBhMVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuY1xcbkBAIC0wLDAgKzEsNDEwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIG1jdHAtdXNibGliLXRlc3QuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGhlbHBlciBsaWJyYXJ5LFxcbisgKiB1bml0IHRlc3QgZGVmaW5pdGlvbnMuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2t1bml0L3Rlc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2FycC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L21jdHAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9tY3RwZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2IvbWN0cC11c2IuaFxcdTAwM2VcXG4rXFxuK3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiB7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xcbitcXHRzdHJ1Y3QgbWN0cF9kZXYgKm1kZXY7XFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWQgcnhfcGt0cztcXG4rfTtcXG4rXFxuK3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCB7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xcbitcXHRzdHJ1Y3QgbWN0cF9yb3V0ZSBydDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYmxpYl9kZXZfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0Lyogd2UgZG9uJ3QgdHJhY2sgYW55IFRYZWQgcGFja2V0cyBhdCBwcmVzZW50ICovXFxuK1xcdGtmcmVlX3NrYihza2IpO1xcbitcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1jdHBfdGVzdF9uZXRkZXZfb3BzID0ge1xcbitcXHQubmRvX3N0YXJ0X3htaXQgPSBtY3RwX3VzYmxpYl9kZXZfdHgsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3QgdTE2IGVwX21heHBhY2tldCA9IDUxMjtcXG4rc3RhdGljIGNvbnN0IG1jdHBfZWlkX3QgbG9jYWxfZWlkID0gODtcXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRuZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX01DVFA7XFxuK1xcdG5kZXYtXFx1MDAzZW10dSA9IDgxOTI7XFxuK1xcdG5kZXYtXFx1MDAzZWZsYWdzID0gSUZGX05PQVJQO1xcbitcXHRuZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNm1jdHBfdGVzdF9uZXRkZXZfb3BzO1xcbitcXHRuZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XFxuK1xcdG5kZXYtXFx1MDAzZXBjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9EU1RBVFM7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZGV2X2FjdGlvbih2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2ID0gZGF0YTtcXG4rXFxuK1xcdHNrYl9xdWV1ZV9wdXJnZShcXHUwMDI2ZGV2LVxcdTAwM2VyeF9wa3RzKTtcXG4rXFx0aWYgKGRldi1cXHUwMDNlbWRldilcXG4rXFx0XFx0bWN0cF9kZXZfcHV0KGRldi1cXHUwMDNlbWRldik7XFxuK1xcdHVucmVnaXN0ZXJfbmV0ZGV2KGRldi1cXHUwMDNlbmRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKlxcbittY3RwX3VzYmxpYl90ZXN0X2NyZWF0ZV9kZXYoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0bmRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksIFxcXCJtY3RwdGVzdCVkXFxcIiwgTkVUX05BTUVfRU5VTSxcXG4rXFx0XFx0XFx0ICAgIG1jdHBfdXNibGliX2Rldl9zZXR1cCk7XFxuK1xcdGlmICghbmRldilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0ZGV2LVxcdTAwM2VuZGV2ID0gbmRldjtcXG4rXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VyeF9wa3RzKTtcXG4rXFxuK1xcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0ZnJlZV9uZXRkZXYobmRldik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgbWN0cF91c2JsaWJfdGVzdF9kZXZfYWN0aW9uLCBkZXYpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRkZXYtXFx1MDAzZW1kZXYgPSBfX21jdHBfZGV2X2dldChuZGV2KTtcXG4rXFx0aWYgKGRldi1cXHUwMDNlbWRldilcXG4rXFx0XFx0ZGV2LVxcdTAwM2VtZGV2LVxcdTAwM2VuZXQgPSBtY3RwX2RlZmF1bHRfbmV0KGRldl9uZXQobmRldikpO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VtZGV2KVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRyYyA9IGRldl9vcGVuKG5kZXYsIE5VTEwpO1xcbitcXHRydG5sX3VubG9jaygpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIGRldjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X2RzdF9vdXRwdXQoc3RydWN0IG1jdHBfZHN0ICpkc3QsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYoc2tiLVxcdTAwM2VkZXYpO1xcbitcXG4rXFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmRldi1cXHUwMDNlcnhfcGt0cywgc2tiKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHggPSBkYXRhO1xcbitcXG4rXFx0LyogVGhlIGRldmljZSB3aWxsIGhhdmUgYmVlbiBkZXN0cm95ZWQsIHNvIC1cXHUwMDNlcnQgd2lsbCBiZSB1bmxpbmtlZC5cXG4rXFx0ICogSnVzdCBlbnN1cmUgdGhhdCB0aGUgcmVmY291bnQgaXMgYXMgZXhwZWN0ZWQuXFxuK1xcdCAqL1xcbitcXHRLVU5JVF9BU1NFUlRfVFJVRShjdXJyZW50LVxcdTAwM2VrdW5pdF90ZXN0LFxcbitcXHRcXHRcXHQgIHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2Y3R4LVxcdTAwM2VydC5yZWZzKSk7XFxuK1xcbitcXHRrZnJlZShjdHgpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICptY3RwX3VzYmxpYl90ZXN0X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xcbitcXHRzdHJ1Y3QgbWN0cF9yb3V0ZSAqcnQ7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xcbitcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgY3R4KTtcXG4rXFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjdHgtXFx1MDAzZXJ0Lmxpc3QpO1xcbitcXHRydCA9IFxcdTAwMjZjdHgtXFx1MDAzZXJ0O1xcbitcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnJ0LVxcdTAwM2VyZWZzLCAxKTtcXG4rXFxuK1xcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uLCBjdHgpO1xcbitcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VkZXYgPSBtY3RwX3VzYmxpYl90ZXN0X2NyZWF0ZV9kZXYodGVzdCk7XFxuK1xcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBjdHgtXFx1MDAzZWRldik7XFxuK1xcbitcXHRydC1cXHUwMDNlbWluID0gbG9jYWxfZWlkO1xcbitcXHRydC1cXHUwMDNlbWF4ID0gbG9jYWxfZWlkO1xcbitcXHRydC1cXHUwMDNlZHN0X3R5cGUgPSBNQ1RQX1JPVVRFX0RJUkVDVDtcXG4rXFx0cnQtXFx1MDAzZXR5cGUgPSBSVE5fTE9DQUw7XFxuK1xcdHJ0LVxcdTAwM2VkZXYgPSBjdHgtXFx1MDAzZWRldi1cXHUwMDNlbWRldjtcXG4rXFx0cnQtXFx1MDAzZW91dHB1dCA9IG1jdHBfdXNibGliX3Rlc3RfZHN0X291dHB1dDtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRsaXN0X2FkZF9yY3UoXFx1MDAyNmN0eC1cXHUwMDNlcnQubGlzdCwgXFx1MDAyNmluaXRfbmV0Lm1jdHAucm91dGVzKTtcXG4rXFx0cmVmY291bnRfaW5jKFxcdTAwMjZydC1cXHUwMDNlcmVmcyk7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gY3R4O1xcbit9XFxuK1xcbisvKiBJbml0IGEgTUNUUC1vdmVyLVVTQiBwYWNrZXQgd2l0aGluIGEgYnVmZmVyLiBAbGVuIGlzIHRoZSBsZW5ndGggb2YgdGhlXFxuKyAqIGJ1ZmZlciB0byB3cml0ZSwgQHBheWxvYWRfbGVuIGlzIHRoZSByZXBvcnRlZCBzaXplIG9mIHRoZSBNQ1RQLW92ZXItVVNCXFxuKyAqIHBhY2tldC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3Qodm9pZCAqZGF0YSwgc2l6ZV90IGxlbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IHBheWxvYWRfbGVuKVxcbit7XFxuK1xcdHN0cnVjdCB7XFxuK1xcdFxcdHN0cnVjdCBtY3RwX3VzYl9oZHIgdXNiO1xcbitcXHRcXHRzdHJ1Y3QgbWN0cF9oZHIgbWN0cDtcXG4rXFx0fSBoZHI7XFxuK1xcbitcXHRoZHIudXNiLmlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7XFxuK1xcdGhkci51c2IubGVuID0gY3B1X3RvX2JlMTYocGF5bG9hZF9sZW4pO1xcbitcXHRoZHIubWN0cC52ZXIgPSAxO1xcbitcXHRoZHIubWN0cC5kZXN0ID0gbG9jYWxfZWlkO1xcbitcXHRoZHIubWN0cC5zcmMgPSAwO1xcbitcXHRoZHIubWN0cC5mbGFnc19zZXFfdGFnID0gMDtcXG4rXFxuK1xcdG1lbWNweShkYXRhLCBcXHUwMDI2aGRyLCBtaW4obGVuLCBzaXplb2YoaGRyKSkpO1xcbitcXHRpZiAobGVuIFxcdTAwM2Ugc2l6ZW9mKGhkcikpXFxuK1xcdFxcdG1lbXNldChkYXRhICsgc2l6ZW9mKGhkciksIDAsIGxlbiAtIHNpemVvZihoZHIpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWN0aW9uX3J4X2Zpbmkodm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4ID0gZGF0YTtcXG4rXFxuK1xcdG1jdHBfdXNibGliX3J4X2ZpbmkocngpO1xcbitcXHRrZnJlZShyeCk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKlxcbittY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0LCBib29sIHNwYW4pXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cnggPSBremFsbG9jX29iaigqcngpO1xcbitcXHRpZiAocngpIHtcXG4rXFx0XFx0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIGFjdGlvbl9yeF9maW5pLCByeCk7XFxuK1xcdFxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XFxuK1xcdH1cXG4rXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJ4KTtcXG4rXFx0bWN0cF91c2JsaWJfcnhfaW5pdChyeCwgZXBfbWF4cGFja2V0LCBzcGFuKTtcXG4rXFxuK1xcdHJldHVybiByeDtcXG4rfVxcbitcXG4rLyogV3JhcHBlcnMgZm9yIHVzYmxpYidzIHJ4X2NvbXBsZXRlIGNhbGxiYWNrLCB3aGljaCBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWRcXG4rICogZnJvbSBhdG9taWMgY29udGV4dFxcbisgKi9cXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKG5ldGRldiwgcngsIGxlbik7XFxuK1xcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbisvKiBTaW5nbGUgcGFja2V0LCBzdGFydGluZyBvbiBhIHRyYW5zZmVyIGJvdW5kYXJ5LCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluXFxuKyAqIHRoZSB0cmFuc2ZlclxcbisgKi9cXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0c2l6ZV90IGxlbjtcXG4rXFx0dm9pZCAqYnVmO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XFxuK1xcdGRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbitcXG4rXFx0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XFxuK1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVxcdTAwM2VuZGV2LCByeCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZidWYsIFxcdTAwMjZsZW4sIEdGUF9LRVJORUwpO1xcbitcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xcbitcXG4rXFx0Lyogd2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgbWF4cGFja2V0IG9mIHRyYW5zZmVyIGF2YWlsYWJsZSAqL1xcbitcXHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgbGVuLCBlcF9tYXhwYWNrZXQpO1xcbitcXG4rXFx0bWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChidWYsIDgsIDgpO1xcbitcXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cXHUwMDNlbmRldiwgcngsIDgpO1xcbitcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xcbitcXG4rXFx0c2tiID0gX19za2JfZGVxdWV1ZShcXHUwMDI2ZGV2LVxcdTAwM2VyeF9wa3RzKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05PVF9OVUxMKHRlc3QsIHNrYik7XFxuK1xcdGlmIChza2IpXFxuK1xcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXFx1MDAzZWxlbiwgNCk7XFxuK1xcdGtmcmVlX3NrYihza2IpO1xcbit9XFxuK1xcbitzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiB7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdHNpemVfdCBuX3BrdHM7XFxuK1xcdHNpemVfdCBwa3RzWzZdO1xcbitcXHRzaXplX3Qgbl94ZmVycztcXG4rXFx0c2l6ZV90IHhmZXJzWzZdO1xcbit9O1xcbitcXG4rc3RhdGljIHZvaWRcXG4rbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl90b19kZXNjKGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICp0LFxcbitcXHRcXHRcXHRcXHQgIGNoYXIgKmRlc2MpXFxuK3tcXG4rXFx0c3Ryc2NweShkZXNjLCB0LVxcdTAwM2VuYW1lLCBLVU5JVF9QQVJBTV9ERVNDX1NJWkUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZFxcbittY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3ZhbGlkYXRlKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnNwYW4sXFxuK1xcdFxcdFxcdFxcdCAgIHNpemVfdCAqbGVuKVxcbit7XFxuK1xcdHNpemVfdCBwa3RfbGVuID0gMCwgeGZlcl9sZW4gPSAwO1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzcGFuLVxcdTAwM2VuX3BrdHM7IGkrKykge1xcbitcXHRcXHRLVU5JVF9BU1NFUlRfR0VfTVNHKHRlc3QsIHNwYW4tXFx1MDAzZXBrdHNbaV0sIDgsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwicGt0WyVkXSBsZW4gdG9vIHNtYWxsICglemQpIGZvciAlc1xcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBpLCBzcGFuLVxcdTAwM2Vwa3RzW2ldLCBzcGFuLVxcdTAwM2VuYW1lKTtcXG4rXFx0XFx0cGt0X2xlbiArPSBzcGFuLVxcdTAwM2Vwa3RzW2ldO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3Bhbi1cXHUwMDNlbl94ZmVyczsgaSsrKVxcbitcXHRcXHR4ZmVyX2xlbiArPSBzcGFuLVxcdTAwM2V4ZmVyc1tpXTtcXG4rXFxuK1xcdEtVTklUX0FTU0VSVF9FUV9NU0codGVzdCwgcGt0X2xlbiwgeGZlcl9sZW4sXFxuK1xcdFxcdFxcdCAgICBcXFwiaW52YWxpZCBwa3RfbGVuICglemQpICE9IHhmZXJfbGVuICglemQpIGZvciAlc1xcXCIsXFxuK1xcdFxcdFxcdCAgICBwa3RfbGVuLCB4ZmVyX2xlbiwgc3Bhbi1cXHUwMDNlbmFtZSk7XFxuK1xcbitcXHQqbGVuID0gcGt0X2xlbjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3BhbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnBrdF9zcGFuID0gdGVzdC1cXHUwMDNlcGFyYW1fdmFsdWU7XFxuK1xcdHNpemVfdCBsZW4sIHhmZXJfbGVuLCBvZmYsIHhmZXJfb2ZmO1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXHR1OCAqcGt0YnVmO1xcbitcXHR2b2lkICpidWY7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdmFsaWRhdGUodGVzdCwgcGt0X3NwYW4sIFxcdTAwMjZsZW4pO1xcbitcXHRwa3RidWYgPSBrdW5pdF9rbWFsbG9jX2FycmF5KHRlc3QsIDEsIGxlbiwgR0ZQX0tFUk5FTCk7XFxuK1xcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBwa3RidWYpO1xcbitcXG4rXFx0LyogbGF5IG91dCBwYWNrZXRzICovXFxuK1xcdGZvciAob2ZmID0gMCwgaSA9IDA7IGkgXFx1MDAzYyBwa3Rfc3Bhbi1cXHUwMDNlbl9wa3RzOyBpKyspIHtcXG4rXFx0XFx0bGVuID0gcGt0X3NwYW4tXFx1MDAzZXBrdHNbaV07XFxuK1xcdFxcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QocGt0YnVmICsgb2ZmLCBsZW4sIGxlbik7XFxuK1xcdFxcdG9mZiArPSBsZW47XFxuK1xcdH1cXG4rXFxuK1xcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcXG4rXFx0ZGV2ID0gY3R4LVxcdTAwM2VkZXY7XFxuK1xcbitcXHRyeCA9IG1jdHBfdXNibGliX3Rlc3RfcnhfaW5pdCh0ZXN0LCB0cnVlKTtcXG4rXFxuK1xcdC8qIGZlZWQgdHJhbnNmZXJzICovXFxuK1xcdGZvciAob2ZmID0gMCwgeGZlcl9vZmYgPSAwLCBpID0gMDsgaSBcXHUwMDNjIHBrdF9zcGFuLVxcdTAwM2VuX3hmZXJzOykge1xcbitcXHRcXHR4ZmVyX2xlbiA9IHBrdF9zcGFuLVxcdTAwM2V4ZmVyc1tpXSAtIHhmZXJfb2ZmO1xcbitcXHRcXHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVxcdTAwM2VuZGV2LCByeCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZidWYsIFxcdTAwMjZsZW4sIEdGUF9LRVJORUwpO1xcbitcXHRcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xcbitcXG4rXFx0XFx0S1VOSVRfQVNTRVJUX0dFKHRlc3QsIGxlbiwgZXBfbWF4cGFja2V0KTtcXG4rXFxuK1xcdFxcdGxlbiA9IG1pbihsZW4sIHhmZXJfbGVuKTtcXG4rXFx0XFx0bWVtY3B5KGJ1ZiwgcGt0YnVmICsgb2ZmLCBsZW4pO1xcbitcXG4rXFx0XFx0aWYgKGxlbiA9PSB4ZmVyX2xlbikge1xcbitcXHRcXHRcXHQvKiB3aG9sZS9lbmQgeGZlciwgcHJvY2VlZCB0byBuZXh0ICovXFxuK1xcdFxcdFxcdHhmZXJfb2ZmID0gMDtcXG4rXFx0XFx0XFx0aSsrO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHQvKiBwYXJ0aWFsICovXFxuK1xcdFxcdFxcdHhmZXJfb2ZmICs9IGxlbjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cXHUwMDNlbmRldiwgcngsIGxlbik7XFxuK1xcdFxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XFxuK1xcdFxcdG9mZiArPSBsZW47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIGNoZWNrIHJlY2VpdmVkIHBhY2tldHMgKi9cXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRldi1cXHUwMDNlcnhfcGt0cy5xbGVuLCBwa3Rfc3Bhbi1cXHUwMDNlbl9wa3RzKTtcXG4rXFx0Zm9yIChpID0gMDsgOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNmRldi1cXHUwMDNlcnhfcGt0cyk7XFxuK1xcbitcXHRcXHRpZiAoIXNrYilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRpZiAoaSBcXHUwMDNjIHBrdF9zcGFuLVxcdTAwM2VuX3BrdHMpXFxuK1xcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXFx1MDAzZWxlbiwgcGt0X3NwYW4tXFx1MDAzZXBrdHNbaV0gLSA0KTtcXG4rXFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuc1tdID0ge1xcbitcXHQvKiBPbmUgcGFja2V0IGNvbXBsZXRlbHkgd2l0aGluIGEgdHJhbnNmZXIgKi9cXG4rXFx0eyBcXFwiMXAxeC1jb21wbGV0ZVxcXCIsIDEsIHsgOCB9LCAxLCB7IDggfSB9LFxcbitcXHQvKiBUd28gc21hbGwgcGFja2V0cyBjb21iaW5lZCB3aXRoaW4gb25lIHRyYW5zZmVyICovXFxuK1xcdHsgXFxcIjJwMXgtY29tYmluZWRcXFwiLCAyLCB7IDgsIDggfSwgMSwgeyAxNiB9IH0sXFxuK1xcdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIE1DVFAgcGF5bG9hZCAqL1xcbitcXHR7IFxcXCIxcDJ4LXNwbGl0LXBheWxvYWRcXFwiLCAxLCB7IDE2IH0sIDIsIHsgOCwgOCB9IH0sXFxuK1xcdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIFVTQiB0cmFuc3BvcnQgaGVhZGVyICovXFxuK1xcdHsgXFxcIjFwMngtc3BsaXQtdXNiaGRyXFxcIiwgMSwgeyAxNiB9LCAyLCB7IDIsIDE0IH0gfSxcXG4rXFx0LyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgTUNUUCBoZWFkZXIgKi9cXG4rXFx0eyBcXFwiMXAyeC1zcGxpdC1tY3RwaGRyXFxcIiwgMSwgeyAxNiB9LCAyLCB7IDYsIDEwIH0gfSxcXG4rXFx0LyogU2luZ2xlIHBhY2tldCBzcGxpdCBvdmVyIDMgdHJhbnNmZXJzLCBtaWRkbGUgZW50aXJlbHkgY29udGludWF0aW9uICovXFxuK1xcdHsgXFxcIjFwM3gtc3BsaXRcXFwiLCAxLCB7IDEyIH0sIDMsIHsgNCwgNCwgNCB9IH0sXFxuK1xcdC8qIE1heC1zaXplZCBzaW5nbGUgdHJhbnNmZXIgKi9cXG4rXFx0eyBcXFwiMXAxeC1sYXJnZVxcXCIsIDEsIHsgODE5MSB9LCAxLCB7IDgxOTEgfSB9LFxcbitcXHQvKiBUd28gbGFyZ2UgcGFja2V0cywgc3BsaXQgYXQgdGhlIHdvcnN0LWNhc2UgZm9yIGFsbG9jYXRpb24sIHdpdGggYVxcbitcXHQgKiBzaW5nbGUgYnl0ZSBjb250aW51aW5nIHRoZSBzcGFuXFxuK1xcdCAqL1xcbitcXHR7IFxcXCIycDJ4LWxhcmdlLXNwbGl0XFxcIiwgMiwgeyA4MTkwLCA4MTkwIH0sIDIsIHsgODE5MSwgODE4OSB9IH0sXFxuK307XFxuK1xcbitLVU5JVF9BUlJBWV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFucyxcXG4rXFx0XFx0ICBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3RvX2Rlc2MpO1xcbitcXG4rc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIG1jdHBfdXNibGliX3Rlc3RfY2FzZXNbXSA9IHtcXG4rXFx0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X3NpbmdsZSksXFxuK1xcdEtVTklUX0NBU0VfUEFSQU0obWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3BhbixcXG4rXFx0XFx0XFx0IG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW5fZ2VuX3BhcmFtcyksXFxuK1xcdHt9XFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IGt1bml0X3N1aXRlIG1jdHBfdXNibGliX3Rlc3Rfc3VpdGUgPSB7XFxuK1xcdC5uYW1lID0gXFxcIm1jdHAtdXNibGliXFxcIixcXG4rXFx0LnRlc3RfY2FzZXMgPSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzLFxcbit9O1xcbitcXG4ra3VuaXRfdGVzdF9zdWl0ZShtY3RwX3VzYmxpYl90ZXN0X3N1aXRlKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZmMwMjgyMTUyZTZlZmJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jXFxuQEAgLTAsMCArMSw2MTYgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogbWN0cC11c2JsaWIuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGhlbHBlciBsaWJyYXJ5XFxuKyAqXFxuKyAqIERTUDAyODMgaXMgYXZhaWxhYmxlIGF0OlxcbisgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGZcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjYgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZFxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2IvbWN0cC11c2IuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9tY3RwLmhcXHUwMDNlXFxuK1xcbit2b2lkIG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKVxcbit7XFxuK1xcdG1lbXNldChyeCwgMCwgc2l6ZW9mKCpyeCkpO1xcbitcXHRyeC1cXHUwMDNlc3BhbiA9IHNwYW47XFxuK1xcdHJ4LVxcdTAwM2VlcF9wa3RsZW4gPSBlcF9wa3RsZW47XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfaW5pdCk7XFxuK1xcbit2b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcXG4re1xcbitcXHRrZnJlZV9za2IocngtXFx1MDAzZXNrYik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfZmluaSk7XFxuK1xcbisvKlxcbisgKiBQcmVwYXJlIGEgdHJhbnNmZXIgYnVmZmVyIGZvciBmdXR1cmUgY29tcGxldGlvbjsgKmJ1ZnAgYW5kICpsZW5wIHdpbGxcXG4rICogYmUgcG9wdWxhdGVkIG9uIHN1Y2Nlc3MuXFxuKyAqL1xcbitpbnQgbWN0cF91c2JsaWJfcnhfcHJlcGFyZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LFxcbitcXHRcXHRcXHQgICB2b2lkICoqYnVmcCwgc2l6ZV90ICpsZW5wLCBnZnBfdCBnZnApXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LVxcdTAwM2Vza2I7XFxuK1xcdHVuc2lnbmVkIGludCBsZW4gPSAwO1xcbitcXG4rXFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiBza2ItXFx1MDAzZWxlbiBcXHUwMDNlPSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCkge1xcbitcXHRcXHQvKiBzb21ldGhpbmcgbXVzdCBoYXZlIGdvbmUgdGVycmlibHkgd3JvbmcuIGNsZWFyIGFuZCByZXN0YXJ0ICovXFxuK1xcdFxcdG1jdHBfdXNibGliX3J4X2NhbmNlbChyeCk7XFxuK1xcdFxcdHNrYiA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGxlbiA9IHJ4LVxcdTAwM2VzcGFuID8gQUxJR04oTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgsIHJ4LVxcdTAwM2VlcF9wa3RsZW4pXFxuK1xcdFxcdDogTUNUUF9VU0JfMV8wX1hGRVJfU0laRTtcXG4rXFxuK1xcdGlmICghc2tiKSB7XFxuK1xcdFxcdHNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIGxlbiwgZ2ZwKTtcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0fSBlbHNlIGlmIChza2ItXFx1MDAzZWNsb25lZCB8fCBza2JfdGFpbHJvb20oc2tiKSBcXHUwMDNjIHJ4LVxcdTAwM2VlcF9wa3RsZW4pIHtcXG4rXFx0XFx0LyogV2UgYWx3YXlzIG5lZWQgdG8gcmVhbGxvYyBpZiAtXFx1MDAzZWNsb25lZCwgYXMgd2UgY2Fubm90XFxuK1xcdFxcdCAqIHJlc3VibWl0IHRoZSAobm93LXNoYXJlZCkgc2tiIGJ1ZmZlciBmb3IgcG9zc2libGUgRE1BLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBPdGhlcndpc2UgKGlmIHdlIGhhdmUgYW4gdW4tY2xvbmVkIFNLQik6IGp1c3QgZW5zdXJlIHdlXFxuK1xcdFxcdCAqIGhhdmUgc3VmZmljaWVudCBzcGFjZSB0byBwcmV2ZW50IGJhYmJsZS4gU2luY2Ugd2UgYWxsb2NhdGVkXFxuK1xcdFxcdCAqIGZvciBtYXggc2l6ZSBpbiB0aGUgbGFzdCBwcmVwYXJlIChhbmQgaGF2ZSBub3QgY29uc3VtZWQgYW55XFxuK1xcdFxcdCAqIG9mIHRoYXQgc3BhY2UgZm9yIGEgcHJpb3IgTUNUUCBwYWNrZXQsIGJlY2F1c2UgIWNsb25lZCksIHdlXFxuK1xcdFxcdCAqIGhhdmUgc3VmZmljaWVudCBkYXRhIHRvIGZpbmlzaCB0aGUgY3VycmVudCBNQ1RQIHBhY2tldC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHN0cnVjdCBza19idWZmICpza2IyO1xcbitcXG4rXFx0XFx0c2tiMiA9IHNrYl9jb3B5X2V4cGFuZChza2IsIDAsIGxlbiwgZ2ZwKTtcXG4rXFx0XFx0aWYgKCFza2IyKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4rXFx0XFx0c2tiID0gc2tiMjtcXG4rXFx0fVxcbitcXG4rXFx0cngtXFx1MDAzZXNrYiA9IHNrYjtcXG4rXFxuK1xcdC8qIFNwYW5uaW5nIG1vZGUgYWxsb3dzIFpMUHMsIHNvIHdlIGRvbid0IHJlcXVpcmUgZXhhY3RseSBvbmVcXG4rXFx0ICogdHJhbnNmZXIgcGFja2V0LiBJZiB3ZSBoYXZlIGV4dHJhIHRhaWxyb29tLCBtYXkgYXMgd2VsbCB1c2UgaXQsXFxuK1xcdCAqIGFuZCB3ZSBoYXZlIGVuc3VyZWQgdGhhdCB0aGUgdGFpbHJvb20gXFx1MDAzZT0gZXBfcGt0bGVuLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJ4LVxcdTAwM2VzcGFuKVxcbitcXHRcXHRsZW4gPSBBTElHTl9ET1dOKHNrYl90YWlscm9vbShza2IpLCByeC1cXHUwMDNlZXBfcGt0bGVuKTtcXG4rXFxuK1xcdCpidWZwID0gc2tiX3RhaWxfcG9pbnRlcihza2IpO1xcbitcXHQqbGVucCA9IGxlbjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X3ByZXBhcmUpO1xcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IHRoaXNfY3B1X3B0cihuZXRkZXYtXFx1MDAzZWRzdGF0cyk7XFxuK1xcdHN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbitcXHRza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSk7XFxuK1xcbitcXHQvKiB3ZSdyZSBjYWxsZWQgZnJvbSBhbiBVUkIgY29tcGxldGlvbiBoYW5kbGVyLCBhbmQgY2Fubm90IGFzc3VtZSBsb2NhbFxcbitcXHQgKiBpcnFzIGFyZSBhbHdheXMgZGlzYWJsZWRcXG4rXFx0ICovXFxuK1xcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4rXFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2ZHN0YXRzLVxcdTAwM2VyeF9wYWNrZXRzKTtcXG4rXFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2ZHN0YXRzLVxcdTAwM2VyeF9ieXRlcywgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXN5bmNwLCBmbGFncyk7XFxuK1xcbitcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7XFxuK1xcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbitcXHRjYiA9IF9fbWN0cF9jYihza2IpO1xcbitcXHRjYi1cXHUwMDNlaGFsZW4gPSAwO1xcbitcXHRuZXRpZl9yeChza2IpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gdGhpc19jcHVfcHRyKGRldi1cXHUwMDNlZHN0YXRzKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4rXFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2ZHN0YXRzLVxcdTAwM2VyeF9kcm9wcyk7XFxuK1xcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNmRzdGF0cy1cXHUwMDNlc3luY3AsIGZsYWdzKTtcXG4rfVxcbitcXG4rLypcXG4rICogUmVjZWl2ZSBhIFVTQiBjb21wbGV0aW9uIG9mIEBsZW4gYnl0ZXMgb2YgaW5jb21pbmcgZGF0YS4gV2Ugd2lsbCB0aGVuIHNwbGl0XFxuKyAqIHRoaXMgaW50byBwYWNrZXRzIGFuZCBuZXRpZl9yeCgpIGVhY2guIEludGVuZGVkIHRvIGJlIGNhbGxlZCBpbiBhdG9taWNcXG4rICogY29udGV4dHMgLSBpZS4sIFVSQiBjb21wbGV0aW9uLlxcbisgKlxcbisgKiBBc3N1bWVzIEBuZXRkZXYgdXNlcyBkc3RhdHMuXFxuKyAqL1xcbitpbnQgbWN0cF91c2JsaWJfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LVxcdTAwM2Vza2I7XFxuK1xcdGludCByYyA9IDA7XFxuK1xcbitcXHRfX3NrYl9wdXQoc2tiLCBsZW4pO1xcbitcXG4rXFx0Zm9yICg7Oykge1xcbitcXHRcXHRzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7XFxuK1xcdFxcdHN0cnVjdCBza19idWZmICpza2IyO1xcbitcXHRcXHQvKiBsZW5ndGggb2YgTUNUUCBwYWNrZXQsIGluY2x1ZGluZyBVU0IgaGVhZGVyICovXFxuK1xcdFxcdHUxNiBwa3RfbGVuO1xcbitcXG4rXFx0XFx0Lyogbm8gaGVhZGVyIHlldCwgcmVzdWJtaXQgZm9yIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgKi9cXG4rXFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2Mgc2l6ZW9mKCpoZHIpKSB7XFxuK1xcdFxcdFxcdGlmICghcngtXFx1MDAzZXNwYW4pIHtcXG4rXFx0XFx0XFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJyeDogdGlueSB4ZmVyICglZCkgaW4gbm9uLXNwYW4gbW9kZVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0XFx0XFx0cmMgPSAtRU5PTVNHO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXNldDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aGRyID0gKHN0cnVjdCBtY3RwX3VzYl9oZHIgKilza2ItXFx1MDAzZWRhdGE7XFxuK1xcbitcXHRcXHRpZiAoYmUxNl90b19jcHUoaGRyLVxcdTAwM2VpZCkgIT0gTUNUUF9VU0JfRE1URl9JRCkge1xcbitcXHRcXHRcXHQvKiBCeSByZXNldHRpbmcgaGVyZSwgd2lsbCBzdGFydCB0aGUgbmV4dCBJTiB0cmFuc2ZlclxcbitcXHRcXHRcXHQgKiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgc2tiLiBUaGlzIHdpbGwgbWVhblxcbitcXHRcXHRcXHQgKiB3ZSByZS1zeW5jIHdoZW4gd2UgbmV4dCBzZWUgYSBzcGFubmVkIHBhY2tldCBhbGlnbmVkXFxuK1xcdFxcdFxcdCAqIHdpdGggdGhlIHN0YXJ0IG9mIGEgdHJhbnNmZXIuXFxuK1xcdFxcdFxcdCAqXFxuK1xcdFxcdFxcdCAqIEluIG5vbi1zcGFubmluZyBtb2RlLCB0aGlzIGp1c3QgbWVhbnMgd2UnbGwgZHJvcFxcbitcXHRcXHRcXHQgKiB0aGUgY3VycmVudCB0cmFuc2ZlciBvbmx5XFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcInJ4OiBpbnZhbGlkIGlkICUwNHhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIGJlMTZfdG9fY3B1KGhkci1cXHUwMDNlaWQpKTtcXG4rXFx0XFx0XFx0cmMgPSAtRVBST1RPO1xcbitcXHRcXHRcXHRnb3RvIGVycl9yZXNldDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cGt0X2xlbiA9IGJlMTZfdG9fY3B1KGhkci1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0LyogdjEuMSwgd2l0aCBzcGFuIGVuYWJsZWQsIGhhcyBhIDEzLWJpdCBsZW5ndGggKi9cXG4rXFx0XFx0cGt0X2xlbiBcXHUwMDI2PSByeC1cXHUwMDNlc3BhbiA/XFxuK1xcdFxcdFxcdE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYIDogTUNUUF9VU0JfMV8wX1BLVExFTl9NQVg7XFxuK1xcdFxcdGlmIChwa3RfbGVuIFxcdTAwM2Mgc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKHN0cnVjdCBtY3RwX2hkcikpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFxcXCJyeDogaW52YWxpZCBsZW4gJWRcXFxcblxcXCIsIHBrdF9sZW4pO1xcbitcXHRcXHRcXHRyYyA9IC1FUFJPVE87XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc2V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBzcGFuIGNvbnRpbnVlcyB0byB0aGUgbmV4dCB0cmFuc2ZlciwgcmVzdWJtaXQgKi9cXG4rXFx0XFx0aWYgKHBrdF9sZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbikge1xcbitcXHRcXHRcXHRpZiAoIXJ4LVxcdTAwM2VzcGFuKSB7XFxuK1xcdFxcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwicng6IHNob3J0IHhmZXIgKCVkIHZzICVkKSBpbiBub24tc3BhbiBtb2RlXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgcGt0X2xlbiwgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHRcXHRcXHRcXHRyYyA9IC1FTk9NU0c7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc2V0O1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiB3ZSBoYXZlIChleGFjdGx5KSBhIGNvbXBsZXRlIHBhY2tldCwgUlggaXQgZGlyZWN0bHkgKi9cXG4rXFx0XFx0aWYgKHBrdF9sZW4gPT0gc2tiLVxcdTAwM2VsZW4pIHtcXG4rXFx0XFx0XFx0bWN0cF91c2JsaWJfcngobmV0ZGV2LCBza2IpO1xcbitcXHRcXHRcXHRyeC1cXHUwMDNlc2tiID0gTlVMTDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIG1vcmUgcGFja2V0cyBmb2xsb3cgLSBSWCBhIGNsb25lIHNvIHRoYXQgd2UgY2FuIGNvbnRpbnVlXFxuK1xcdFxcdCAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgU0tCLCB3aGljaCBtYXkgYmUgdGhlIHN0YXJ0IG9mIGFcXG4rXFx0XFx0ICogc3Bhbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0aWYgKHNrYjIpIHtcXG4rXFx0XFx0XFx0c2tiX3RyaW0oc2tiMiwgcGt0X2xlbik7XFxuK1xcdFxcdFxcdG1jdHBfdXNibGliX3J4KG5ldGRldiwgc2tiMik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdG1jdHBfdXNibGliX3J4X3N0YXRzX3NpbmdsZV9kcm9wKG5ldGRldik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c2tiX3B1bGwoc2tiLCBwa3RfbGVuKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcmVzZXQ6XFxuK1xcdGRldl9rZnJlZV9za2JfYW55KHJ4LVxcdTAwM2Vza2IpO1xcbitcXHRyeC1cXHUwMDNlc2tiID0gTlVMTDtcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKTtcXG4rXFxuKy8qXFxuKyAqIENhbmNlbCBhIHJ4IGNvbnRleHQ7IHN1YnNlcXVlbnQgcHJlcGFyZS9jb21wbGV0ZSBjYWxscyB3aWxsIG5vdCBiZSBhXFxuKyAqIGNvbnRpbnVhdGlvbiBvZiBhbnkgZGF0YSBhbHJlYWR5IHJlY2VpdmVkLlxcbisgKi9cXG4rdm9pZCBtY3RwX3VzYmxpYl9yeF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcXG4re1xcbitcXHRkZXZfa2ZyZWVfc2tiX2FueShyeC1cXHUwMDNlc2tiKTtcXG4rXFx0cngtXFx1MDAzZXNrYiA9IE5VTEw7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfY2FuY2VsKTtcXG4rXFxuKy8qIHRyYW5zbWl0IGNvbnRleHQ6IGVuY2Fwc3VsYXRlcyBvbmUgdHJhbnNmZXIgKi9cXG4rc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCB7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHg7XFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWQgc2ticztcXG4rXFx0dW5zaWduZWQgaW50IGJ1Zl9sZW4sIGxlbjtcXG4rXFx0ZW51bSBtY3RwX3VzYmxpYl90eF9idWZfdHlwZSB7XFxuK1xcdFxcdFRYX1NJTkdMRSxcXG4rXFx0XFx0VFhfRkxBVCxcXG4rXFx0fSBidWZfdHlwZTtcXG4rXFx0dTggYnVmW10gX19fX2NhY2hlbGluZV9hbGlnbmVkO1xcbit9O1xcbitcXG4rdm9pZCBtY3RwX3VzYmxpYl90eF9pbml0KHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsXFxuK1xcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzICpvcHMsXFxuK1xcdFxcdFxcdCB2b2lkICpwcml2LCBib29sIHNwYW4pXFxuK3tcXG4rXFx0bWVtc2V0KHR4LCAwLCBzaXplb2YoKnR4KSk7XFxuK1xcdHR4LVxcdTAwM2VvcHMgPSAqb3BzO1xcbitcXHR0eC1cXHUwMDNlcHJpdiA9IHByaXY7XFxuK1xcdHR4LVxcdTAwM2VzcGFuID0gc3BhbjtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnR4LVxcdTAwM2Vsb2NrKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9pbml0KTtcXG4rXFxuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfYXZhaWwoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBjdHgtXFx1MDAzZWJ1Zl90eXBlID09IFRYX1NJTkdMRSA/IDAgOiBjdHgtXFx1MDAzZWJ1Zl9sZW4gLSBjdHgtXFx1MDAzZWxlbjtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KVxcbit7XFxuK1xcdC8qIFVzZSB0aGUgYmFzZWxpbmUgbGVuZ3RoIChpZSwgQlRVKSBhcyBhbiBhcHByb3hpbWF0ZVxcbitcXHQgKiBcXFwicmVhc29uYWJseS1zaXplZFxcXCIgcGFja2V0IHdlIGNvdWxkIGV4cGVjdC4gSWYgdGhlcmUgaXNcXG4rXFx0ICogaW5zdWZmaWNpZW50IGNhcGFjaXR5IGZvciB0aGF0LCB0aGVuIHNlbmQuXFxuK1xcdCAqL1xcbitcXHRjb25zdCBzaXplX3QgcGt0X2xlbiA9IE1DVFBfVVNCX0JUVSArIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTtcXG4rXFxuK1xcdHJldHVybiBtY3RwX3VzYmxpYl90eF9hdmFpbChjdHgpIFxcdTAwM2MgcGt0X2xlbjtcXG4rfVxcbitcXG4rLypcXG4rICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUgLSBpbmRpY2F0aW5nIHRoYXQgdGhlIG5ldyBza2JcXG4rICogY291bGQgbm90IGJlIGFwcGVuZGVkLiBTbywgZXJyb3JzIHJlcG9ydGVkIGhlcmUgdG8gdGhlIFRYIHBhdGggd2lsbCByZXN1bHRcXG4rICogaW4gdGhlIFRYIGJlaW5nIHRyYW5zbWl0dGVkLlxcbisgKi9cXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90eF9hcHBlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRpZiAoY3R4LVxcdTAwM2VidWZfdHlwZSA9PSBUWF9TSU5HTEUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKG1jdHBfdXNibGliX3R4X2F2YWlsKGN0eCkgXFx1MDAzYyBza2ItXFx1MDAzZWxlbilcXG4rXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbitcXG4rXFx0X19za2JfcXVldWVfdGFpbChcXHUwMDI2Y3R4LVxcdTAwM2Vza2JzLCBza2IpO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VsZW4gKz0gc2tiLVxcdTAwM2VsZW47XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90eF9zZW5kKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eClcXG4re1xcbitcXHR2b2lkICpidWY7XFxuK1xcbitcXHQvKiBJZiB3ZSBoYXZlIGEgcWxlbiBvZiAxLCB3ZSBvbmx5IGVuZGVkIHVwIHBhY2tpbmcgYSBzaW5nbGUgc2tiLFxcbitcXHQgKiBkZXNwaXRlIGFsbG9jYXRpbmcgZm9yIG11bHRpcGxlLiBTa2lwIHRoZSBjb3B5IGFuZCBzZW5kIGRpcmVjdGx5XFxuK1xcdCAqIGZyb20gdGhlIHNrYiBkYXRhLlxcbitcXHQgKi9cXG4rXFx0aWYgKGN0eC1cXHUwMDNlYnVmX3R5cGUgPT0gVFhfU0lOR0xFIHx8IGN0eC1cXHUwMDNlc2ticy5xbGVuID09IDEpIHtcXG4rXFx0XFx0YnVmID0gY3R4LVxcdTAwM2Vza2JzLm5leHQtXFx1MDAzZWRhdGE7XFxuK1xcbitcXHR9IGVsc2UgaWYgKGN0eC1cXHUwMDNlYnVmX3R5cGUgPT0gVFhfRkxBVCkge1xcbitcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRcXHRzaXplX3QgcG9zID0gMDtcXG4rXFxuK1xcdFxcdHNrYl9xdWV1ZV93YWxrKFxcdTAwMjZjdHgtXFx1MDAzZXNrYnMsIHNrYikge1xcbitcXHRcXHRcXHRza2JfY29weV9iaXRzKHNrYiwgMCwgY3R4LVxcdTAwM2VidWYgKyBwb3MsIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0XFx0cG9zICs9IHNrYi1cXHUwMDNlbGVuO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRidWYgPSBjdHgtXFx1MDAzZWJ1ZjtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBjdHgtXFx1MDAzZXR4LVxcdTAwM2VvcHMuc2VuZChjdHgsIGJ1ZiwgY3R4LVxcdTAwM2VsZW4pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsXFxuK1xcdFxcdFxcdFxcdCAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFxuK1xcdGlmICghY3R4KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNmN0eC1cXHUwMDNlc2ticykpICE9IE5VTEwpXFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55X3JlYXNvbihza2IsIHJlYXNvbik7XFxuK1xcdGtmcmVlKGN0eCk7XFxuK31cXG4rXFxuK3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eClcXG4re1xcbitcXHRyZXR1cm4gdHhfY3R4LVxcdTAwM2V0eC1cXHUwMDNlcHJpdjtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jdHhfcHJpdik7XFxuK1xcbisvKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIHR4IFxcdTAwMjYgY29tcGxldGlvbiBwYXRoIGlzIHF1aWVzY2VkICovXFxuK3ZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KVxcbit7XFxuK1xcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHR4LVxcdTAwM2VjdXJfY3R4LCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfZmluaSk7XFxuK1xcbisvKiBNYXggc2l6ZSBvZiBhIHNwYW5uZWQgVFguIFNpbmNlIHdlIGFsbG9jYXRlIGEgc2VwYXJhdGUgc3BhbiBidWZmZXIsIGxpbWl0XFxuKyAqIHRoZSB0eC10aW1lIGFsbG9jYXRpb25zIHRvIDRrLiBMYXJnZXIgcGFja2V0cyB3aWxsIGJlIHNlbnQgYXMgc2luZ2xlXFxuKyAqIHRyYW5zZmVycy5cXG4rICovXFxuK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgVFhfU1BBTl9NQVggPSA0MDk2IC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHgpO1xcbitcXG4rc3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKlxcbittY3RwX3VzYmxpYl90eF9jdHhfY3JlYXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdCAgYm9vbCBzaW5nbGUpXFxuK3tcXG4rXFx0ZW51bSBtY3RwX3VzYmxpYl90eF9idWZfdHlwZSB0eXBlO1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHg7XFxuK1xcdHNpemVfdCBzeiA9IDA7XFxuK1xcbitcXHRpZiAoc2luZ2xlIHx8IHNrYi1cXHUwMDNlbGVuIFxcdTAwM2UgVFhfU1BBTl9NQVgpIHtcXG4rXFx0XFx0dHlwZSA9IFRYX1NJTkdMRTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0dHlwZSA9IFRYX0ZMQVQ7XFxuK1xcdFxcdHN6ID0gdHgtXFx1MDAzZXNwYW4gPyBUWF9TUEFOX01BWCA6IE1DVFBfVVNCXzFfMF9YRkVSX1NJWkU7XFxuK1xcdH1cXG4rXFxuK1xcdGN0eCA9IGt6YWxsb2NfZmxleCgqY3R4LCBidWYsIHN6LCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKCFjdHgpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2V0eCA9IHR4O1xcbitcXHRjdHgtXFx1MDAzZWJ1Zl90eXBlID0gdHlwZTtcXG4rXFx0Y3R4LVxcdTAwM2VidWZfbGVuID0gc3o7XFxuK1xcdGN0eC1cXHUwMDNlbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuK1xcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmN0eC1cXHUwMDNlc2ticyk7XFxuK1xcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmN0eC1cXHUwMDNlc2ticywgc2tiKTtcXG4rXFxuK1xcdHJldHVybiBjdHg7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdGJvb2wgb2spXFxuK3tcXG4rXFx0c3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSBnZXRfY3B1X3B0cihkZXYtXFx1MDAzZWRzdGF0cyk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2ZHN0YXRzLVxcdTAwM2VzeW5jcCk7XFxuK1xcdGlmIChvaykge1xcbitcXHRcXHQvKiBPbmx5IGluY2x1ZGUgdGhlIG5ldHdvcmstbGF5ZXIgZGF0YSBpbiB0eCBzdGF0czsgd2Uga25vd1xcbitcXHRcXHQgKiB0aGF0IHRoZXJlIGlzIGEgNC1ieXRlIGhlYWRlciBwdXNoZWQgdG8gYWxsIHNrYnMgaW5cXG4rXFx0XFx0ICogdHhfc2tiX3ByZXBhcmUoKVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dTY0IG4gPSBjdHgtXFx1MDAzZXNrYnMucWxlbjtcXG4rXFx0XFx0czY0IGxlbiA9IGN0eC1cXHUwMDNlbGVuIC0gKG4gKiBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpO1xcbitcXG4rXFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2ZHN0YXRzLVxcdTAwM2V0eF9wYWNrZXRzLCBuKTtcXG4rXFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2ZHN0YXRzLVxcdTAwM2V0eF9ieXRlcywgbGVuKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2ZHN0YXRzLVxcdTAwM2V0eF9kcm9wcywgY3R4LVxcdTAwM2Vza2JzLnFsZW4pO1xcbitcXHR9XFxuK1xcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNmRzdGF0cy1cXHUwMDNlc3luY3AsIGZsYWdzKTtcXG4rXFx0cHV0X2NwdV9wdHIoZGV2LVxcdTAwM2Vkc3RhdHMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gZ2V0X2NwdV9wdHIoZGV2LVxcdTAwM2Vkc3RhdHMpO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXFx1MDAyNmRzdGF0cy1cXHUwMDNlc3luY3ApO1xcbitcXHR1NjRfc3RhdHNfaW5jKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXR4X2Ryb3BzKTtcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcXHUwMDI2ZHN0YXRzLVxcdTAwM2VzeW5jcCwgZmxhZ3MpO1xcbitcXHRwdXRfY3B1X3B0cihkZXYtXFx1MDAzZWRzdGF0cyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENvbXBsZXRpb24gZm9yIHRoZSAtXFx1MDAzZXNlbmQoKSBvcC4gVGhpcyB3aWxsIHVwZGF0ZSBuZXRkZXYgc3RhdHMgYW5kXFxuKyAqIGZyZWUgdGhlIHR4IGNvbnRleHQuXFxuKyAqXFxuKyAqIExpa2VseSBjYWxsZWQgZnJvbSAoYXRvbWljKSBVUkIgY29tcGxldGlvbiBjb250ZXh0LlxcbisgKi9cXG4rdm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG9rKVxcbit7XFxuK1xcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9XFxuK1xcdFxcdG9rID8gU0tCX0NPTlNVTUVEIDogU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XFxuK1xcbitcXHRtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUodHhfY3R4LCBkZXYsIG9rKTtcXG4rXFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUodHhfY3R4LCByZWFzb24pO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUpO1xcbitcXG4rLyogUHJlcGFyZSBhIHNrYiBmb3IgcHVzaCgpXFxuKyAqXFxuKyAqIE9uIGVycm9yLCBwb3B1bGF0ZXMgQHJlYXNvbi5cXG4rICovXFxuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2tiX3ByZXBhcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzcGFuLFxcbitcXHRcXHRcXHRcXHQgICAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiAqcmVhc29uKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcGxlbiwgbWF4X2xlbjtcXG4rXFx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRtYXhfbGVuID0gc3BhbiA/IE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYIDogTUNUUF9VU0JfMV8wX1BLVExFTl9NQVg7XFxuK1xcbitcXHRwbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuK1xcdGlmIChwbGVuICsgc2l6ZW9mKCpoZHIpIFxcdTAwM2UgbWF4X2xlbikge1xcbitcXHRcXHQqcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1BLVF9UT09fQklHO1xcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXHR9XFxuK1xcbitcXHRyYyA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqaGRyKSk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHQqcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PTUVNO1xcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4rXFxuK1xcdGhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTtcXG4rXFx0aWYgKCFoZHIpIHtcXG4rXFx0XFx0KnJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT01FTTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdGhkci1cXHUwMDNlaWQgPSBjcHVfdG9fYmUxNihNQ1RQX1VTQl9ETVRGX0lEKTtcXG4rXFx0aGRyLVxcdTAwM2VsZW4gPSBjcHVfdG9fYmUxNihwbGVuICsgc2l6ZW9mKCpoZHIpKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBQdXNoIGEgbmV3IHNrYiB0byB0aGUgdHJhbnNmZXIuIE1heSByZXN1bHQgaW4gemVybyBvciBtb3JlIGNhbGxzIHRvXFxuKyAqIG9wcy1cXHUwMDNlc2VuZCgpLlxcbisgKlxcbisgKiBUYWtlcyBvd25lcnNoaXAgb2YgQHNrYiwgaW5jbHVkaW5nIG9uIGVycm9yLlxcbisgKi9cXG4raW50IG1jdHBfdXNibGliX3R4X3B1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcXG4rXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBtb3JlKVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCwgKnNlbmRfY3R4ID0gTlVMTDtcXG4rXFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uO1xcbitcXHRjb25zdCBpbnQgbWF4X3RyaWVzID0gMztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0aW50IHRyeSA9IDEsIHJjO1xcbitcXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl90eF9za2JfcHJlcGFyZShza2IsIHR4LVxcdTAwM2VzcGFuLCBcXHUwMDI2cmVhc29uKTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7XFxuK1xcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xcbitcXHRcXHQvKiB3ZSBtYXkgc3RpbGwgbmVlZCB0byBwcm9jZWVkLCBpbiBjYXNlIGFuIGV4aXN0aW5nIGN0eFxcbitcXHRcXHQgKiBpcyBub3cgc2VuZGFibGUgKGllLjogIW1vcmUpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2tiID0gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XFxuK3JldHJ5OlxcbitcXHQvKiBUcnkgYW5kIHF1ZXVlIHRvIHRoZSBjdXJyZW50IGNvbnRleHQuIFdlIGV4aXQgdGhpcyBjcml0aWNhbCBzZWN0aW9uXFxuK1xcdCAqIHdpdGggYSBmZXcgYml0cyBvZiBzdGF0ZTpcXG4rXFx0ICogIC0gc2VuZF9jdHg6IGluZGljYXRpbmcgYSBwcmlvciBjb250ZXh0IHRoYXQgbmVlZHMgdG8gYmUgc2VudFxcbitcXHQgKiAgLSBza2I6IGluZGljYXRpbmcgdGhhdCBhIHNrYiBzdGlsbCBuZWVkcyB0byBiZSBxdWV1ZWQvc2VudFxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnR4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdGN0eCA9IHR4LVxcdTAwM2VjdXJfY3R4O1xcbitcXHRpZiAoY3R4KSB7XFxuK1xcdFxcdGlmIChza2IpIHtcXG4rXFx0XFx0XFx0cmMgPSBtY3RwX3VzYmxpYl90eF9hcHBlbmQoY3R4LCBza2IpO1xcbitcXHRcXHRcXHRpZiAocmMpIHtcXG4rXFx0XFx0XFx0XFx0LyogY2FuJ3QgYXBwZW5kIHRvIHRoZSBwZW5kaW5nIHR4IC0gZGV0YWNoIGZvclxcbitcXHRcXHRcXHRcXHQgKiBzZW5kaW5nLCBhbmQgd2UnbGwgY3JlYXRlIGEgbmV3IHR4IGJlbG93LlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0c3dhcCh0eC1cXHUwMDNlY3VyX2N0eCwgc2VuZF9jdHgpO1xcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHQvKiB3ZSBoYXZlIHF1ZXVlZCAqL1xcbitcXHRcXHRcXHRcXHRza2IgPSBOVUxMO1xcbitcXHRcXHRcXHRcXHRpZiAoIW1vcmUgfHwgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoY3R4KSlcXG4rXFx0XFx0XFx0XFx0XFx0c3dhcCh0eC1cXHUwMDNlY3VyX2N0eCwgc2VuZF9jdHgpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSBpZiAoIW1vcmUpIHtcXG4rXFx0XFx0XFx0c3dhcCh0eC1cXHUwMDNlY3VyX2N0eCwgc2VuZF9jdHgpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdGlmIChzZW5kX2N0eCkge1xcbitcXHRcXHRyYyA9IG1jdHBfdXNibGliX3R4X3NlbmQoc2VuZF9jdHgpO1xcbitcXHRcXHRpZiAocmMpIHtcXG4rXFx0XFx0XFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKHNlbmRfY3R4LCBkZXYsIGZhbHNlKTtcXG4rXFx0XFx0XFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoc2VuZF9jdHgsIHJlYXNvbik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c2VuZF9jdHggPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHQvKiB3ZSBoYXZlIGVpdGhlciBxdWV1ZWQsIG9yIHRoZSBwcmVwYXJlIGZhaWxlZDsgbm90aGluZyBtb3JlIHRvIGRvICovXFxuK1xcdGlmICghc2tiKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGN0eCA9IG1jdHBfdXNibGliX3R4X2N0eF9jcmVhdGUodHgsIHNrYiwgIW1vcmUpO1xcbitcXHRpZiAoIWN0eCkge1xcbitcXHRcXHRuZXRkZXZfZGJnKGRldiwgXFxcIlRYIGNvbnRleHQgY3JlYXRlIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0LyogaWYgd2UncmUgcmVhZHkgdG8gc2VuZCBub3csIG5vIG5lZWQgdG8gZW5xdWV1ZSAqL1xcbitcXHRpZiAoIW1vcmUgfHwgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoY3R4KSkge1xcbitcXHRcXHRyYyA9IG1jdHBfdXNibGliX3R4X3NlbmQoY3R4KTtcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShjdHgsIGRldiwgZmFsc2UpO1xcbitcXHRcXHRcXHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShjdHgsIHJlYXNvbik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRpZiAoIXR4LVxcdTAwM2VjdXJfY3R4KSB7XFxuK1xcdFxcdHR4LVxcdTAwM2VjdXJfY3R4ID0gY3R4O1xcbitcXHRcXHRjdHggPSBOVUxMO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnR4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHQvKiB3ZSBtYXkgaGF2ZSBsb3N0IHRoZSByYWNlIHdpdGggYSBjb25jdXJyZW50IHR4OyBzaG91bGRuJ3QgaGFwcGVuLCBhc1xcbitcXHQgKiBuZG9fc3RhcnRfeG1pdCBzaG91bGQgYmUgc2VyaWFsaXNlZCBvdmVyIG9uZSBxdWV1ZSwgYnV0IHRyeSBhZ2FpblxcbitcXHQgKiBmcm9tIHRoZSB0b3AsIGFzIHdlIG1heSBiZSBhYmxlIHRvIHF1ZXVlIHRoZSBza2IgdG8gdGhhdCBjb250ZXh0LlxcbitcXHQgKi9cXG4rXFx0aWYgKGN0eCkge1xcbitcXHRcXHQvKiB1bmxpbmsgdGhlIG5ldyAoc29sZSkgc2tiLCB3ZSBkb24ndCB3YW50IGl0IGZyZWVkIHdpdGggY3R4ICovXFxuK1xcdFxcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2Vza2JzKTtcXG4rXFx0XFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pO1xcbitcXHRcXHRpZiAoKyt0cnkgXFx1MDAzZSBtYXhfdHJpZXMpIHtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfcHVzaCk7XFxuK1xcbisvKiBDYW5jZWwgYSB0eDogYW55IHVuLXNlbnQgY29udGV4dCBpcyByZWxlYXNlZC4gKi9cXG4rdm9pZCBtY3RwX3VzYmxpYl90eF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCA9IE5VTEw7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0c3dhcCh0eC1cXHUwMDNlY3VyX2N0eCwgY3R4KTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdGlmICghY3R4KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoY3R4LCBkZXYsIGZhbHNlKTtcXG4rXFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2NhbmNlbCk7XFxuK1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkplcmVteSBLZXJyIFxcdTAwM2Nqa0Bjb2RlY29uc3RydWN0LmNvbS5hdVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNQ1RQIFVTQiB0cmFuc3BvcnQgbGlicmFyeVxcXCIpO1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUKVxcbisjaW5jbHVkZSBcXFwibWN0cC11c2JsaWItdGVzdC5jXFxcIlxcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcXG5pbmRleCBhMmY2ZjFlMDRlZmJkMC4uMzVjYzJjYzE1ZjlhMDQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcXG5AQCAtMiw3ICsyLDcgQEBcXG4gLypcXG4gICogbWN0cC11c2IuaCAtIE1DVFAgVVNCIHRyYW5zcG9ydCBiaW5kaW5nOiBjb21tb24gZGVmaW5pdGlvbnMsXFxuICAqIGJhc2VkIG9uIERNVEYwMjgzIHNwZWNpZmljYXRpb246XFxuLSAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMC4xLnBkZlxcbisgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGZcXG4gICpcXG4gICogVGhlc2UgYXJlIHByb3RvY29sLWxldmVsIGRlZmluaXRpb25zLCB0aGF0IG1heSBiZSBzaGFyZWQgYmV0d2VlbiBob3N0XFxuICAqIGFuZCBnYWRnZXQgZHJpdmVycy5cXG5AQCAtMTMsMTggKzEzLDk2IEBAXFxuICNpZm5kZWYgX19MSU5VWF9VU0JfTUNUUF9VU0JfSFxcbiAjZGVmaW5lIF9fTElOVVhfVVNCX01DVFBfVVNCX0hcXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuKy8qXFxuKyAqIE1DVFAtb3Zlci1VU0IgdHJhbnNwb3J0IGhlYWRlci4gRFNQMDI4MyB2MS4wIGhhcyBhbiA4LWJpdCBsZW5ndGggZmllbGRcXG4rICogKHByZWNlZGVkIGJ5IDggcmVzZXJ2ZWQgYml0cyksIHYxLjEgaGFzIGEgMTMtYml0IGxlbmd0aCBmaWVsZCAocHJlY2VkZWQgYnlcXG4rICogMyByZXNlcnZlZCBiaXRzKS4gV2UgdXNlIGEgYmUxNiBmb3Igb3VyIGxlbmd0aCB0byBoYW5kbGUgdGhlIGxhcmdlciB2MS4xXFxuKyAqIHJlcHJlc2VudGF0aW9uLCBhbmQgbWFzayBhcyBhcHByb3ByaWF0ZS5cXG4rICovXFxuIHN0cnVjdCBtY3RwX3VzYl9oZHIge1xcbiBcXHRfX2JlMTZcXHRpZDtcXG4tXFx0dThcXHRyc3ZkO1xcbi1cXHR1OFxcdGxlbjtcXG4rXFx0X19iZTE2XFx0bGVuO1xcbiB9IF9fcGFja2VkO1xcbiBcXG4tI2RlZmluZSBNQ1RQX1VTQl9YRkVSX1NJWkVcXHQ1MTJcXG4rLyogbWF4IHRyYW5zZmVyIHNpemUgZm9yIERTUDAyODMgdjEuMCAqL1xcbisjZGVmaW5lIE1DVFBfVVNCXzFfMF9YRkVSX1NJWkVcXHQ1MTJcXG4gI2RlZmluZSBNQ1RQX1VTQl9CVFVcXHRcXHQ2OFxcbiAjZGVmaW5lIE1DVFBfVVNCX01UVV9NSU5cXHRNQ1RQX1VTQl9CVFVcXG4tI2RlZmluZSBNQ1RQX1VTQl9NVFVfTUFYXFx0KFU4X01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSlcXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzBfUEtUTEVOX01BWFxcdFU4X01BWFxcbisjZGVmaW5lIE1DVFBfVVNCXzFfMF9NVFVfTUFYXFx0KE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKVxcbisjZGVmaW5lIE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYXFx0R0VOTUFTSygxMiwgMClcXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzFfTVRVX01BWFxcdChNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSlcXG4gI2RlZmluZSBNQ1RQX1VTQl9ETVRGX0lEXFx0MHgxYWI0XFxuIFxcbisvKiBtY3RwLXVzYmxpYiAqL1xcbitcXG4rLypcXG4rICogUlggaGFuZGxlOiBkcml2ZXJzIHdpbGwgdHlwaWNhbGx5IGNyZWF0ZSBvbmUgb24gaW5pdCwgd2hpY2ggcGVyc2lzdHMgZm9yXFxuKyAqIHRoZSBsaWZlIG9mIHRoZSBkcml2ZXIuIFRoZSBzYW1lIGhhbmRsZSBpcyB1c2VkIGZvciBwcm9ncmVzc2l2ZVxcbisgKiBwcmVwYXJlIC1cXHUwMDNlIGNvbXBsZXRlIG9wZXJhdGlvbnMgKGZvciBlYWNoIGluY29taW5nIFVTQiB0cmFuc2ZlciksIHdoaWNoXFxuKyAqIHJlc3VsdCBpbiBuZXRpZl9yeCgpLWluZyB0aGUgTUNUUCBwYWNrZXRzIHJlY2VpdmVkXFxuKyAqL1xcbitzdHJ1Y3QgbWN0cF91c2JsaWJfcngge1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHR1MTYgZXBfcGt0bGVuO1xcbitcXHRib29sIHNwYW47XFxuK307XFxuK1xcbit2b2lkIG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKTtcXG4rdm9pZCBtY3RwX3VzYmxpYl9yeF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpO1xcbitcXG4raW50IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCxcXG4rXFx0XFx0XFx0ICAgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqbGVucCwgZ2ZwX3QgZ2ZwKTtcXG4rXFxuK2ludCBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbik7XFxuK1xcbit2b2lkIG1jdHBfdXNibGliX3J4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KTtcXG4rXFxuKy8qXFxuKyAqIFRYIGhhbmRsZTogY3JlYXRlZCBieSBtY3RwX3VzYmxpYl90eF9wdXNoKCkgZHVyaW5nIHRoZSB0eCBwYXRoLCBhbmRcXG4rICogbWF5IHBlcnNpc3QgYWNyb3NzIG11bHRpcGxlIHBhY2tldCB0cmFuc21pdHMuXFxuKyAqL1xcbitzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4O1xcbitcXG4rc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB7XFxuK1xcdC8qIFN0YXJ0IGEgVVNCIFRYIGZvciBAZGF0YS4gT24gcmV0dXJuaW5nIHN1Y2Nlc3MsIHRoZSBpbXBsZW1lbnRhdGlvblxcbitcXHQgKiBtdXN0IGFycmFuZ2UgZm9yIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUoKSB0byBiZSBjYWxsZWQgYXQgc29tZVxcbitcXHQgKiBsYXRlciBwb2ludCAoZWcuLCBvbiB1cmIgY29tcGxldGlvbikuXFxuK1xcdCAqL1xcbitcXHRpbnQgKCpzZW5kKShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pO1xcbit9O1xcbitcXG4rc3RydWN0IG1jdHBfdXNibGliX3R4IHtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7XFxuK1xcdHZvaWQgKnByaXY7XFxuK1xcdGJvb2wgc3BhbjtcXG4rXFx0LyogcHJvdGVjdHMgYWNjZXNzIHRvIGN1cl9jdHggKi9cXG4rXFx0c3BpbmxvY2tfdCBsb2NrO1xcbitcXHQvKiBjb250ZXh0IHRvIHdoaWNoIHdlIGFyZSBhZGRpbmcgcGFja2V0cywgY2xlYXJlZCBvbiBzZW5kICovXFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN1cl9jdHg7XFxuK307XFxuK1xcbit2b2lkIG1jdHBfdXNibGliX3R4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcXG4rXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgKm9wcywgdm9pZCAqcHJpdixcXG4rXFx0XFx0XFx0IGJvb2wgc3Bhbik7XFxuK3ZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KTtcXG4rXFxuK3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCk7XFxuK1xcbitpbnQgbWN0cF91c2JsaWJfdHhfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxcbitcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpO1xcbitcXG4rdm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG9rKTtcXG4rXFxuK3ZvaWQgbWN0cF91c2JsaWJfdHhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbik7XFxuK1xcbiAjZW5kaWYgLyogIF9fTElOVVhfVVNCX01DVFBfVVNCX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6Mjk6NDguOTI3NzY1NDU1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk2NzU4OTQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQ1RQXCIsXG4gICAgXCJNQ1RQX1RSQU5TUE9SVF9VU0JcIixcbiAgICBcIk1DVFBfVFJBTlNQT1JUX1VTQkxJQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1jdHBfdXNibGliX3J4X3ByZXBhcmVcIixcbiAgICBcIm1jdHBfdXNibGliX3J4X2NvbXBsZXRlXCIsXG4gICAgXCJtY3RwX3VzYmxpYl90eF9wdXNoXCIsXG4gICAgXCJtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlXCIsXG4gICAgXCJtY3RwX3VzYl9pbl9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2Jfb3V0X2NvbXBsZXRlXCIsXG4gICAgXCJtY3RwX3VzYl90eF9zZW5kXCIsXG4gICAgXCJtY3RwX3VzYl9zdGFydF94bWl0XCIsXG4gICAgXCJtY3RwX3VzYl9yeF9xdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29tbW9uIGxpYnJhcnkgZm9yIE1DVFAtb3Zlci1VU0IgKGBtY3RwLXVzYmxpYmApIGFuZCBtb2RpZmllcyB0aGUgTUNUUCBVU0IgdHJhbnNwb3J0IGRyaXZlciAoYG1jdHAtdXNiYCkgdG8gdXNlIGl0LiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiAoZS5nLiwgcmF3LWdhZGdldCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDZkYTc3NDRmMjU5YTIzNjJiYTQxMzQ0OWQ2NmUxNjEwMTM1OGU4MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMjM6Mjk6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL0tjb25maWcgYi9kcml2ZXJzL25ldC9tY3RwL0tjb25maWdcbmluZGV4IGNmMzI1YWIwYjFlZjU1Li5jNDBhYzljNjY1Yjc1OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXG5AQCAtNDcsOSArNDcsMjUgQEAgY29uZmlnIE1DVFBfVFJBTlNQT1JUX0kzQ1xuIFx0ICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCBmb3IgZWFjaCBJM0MgYnVzXG4gXHQgIGhhdmluZyBhIFwibWN0cC1jb250cm9sbGVyXCIgZGV2aWNldHJlZSBwcm9wZXJ0eS5cbiBcbitjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4rXHR0cmlzdGF0ZSBcIk1DVFAgb3ZlciBVU0IgY29tbW9uIGxpYnJhcnlcIlxuK1x0ZGVwZW5kcyBvbiBVU0JcbitcdGhlbHBcbitcdCAgQ29tbW9uIHByb3RvY29sIGhhbmRsaW5nIGZ1bmN0aW9ucyBmb3IgTUNUUC1vdmVyLVVTQiB0cmFuc3BvcnRcbitcdCAgaW1wbGVtZW50YXRpb25zLCBzdWl0YWJsZSBmb3IgdXNlIGluIGVpdGhlciBob3N0LSBvciBnYWRnZXQtc2lkZVxuK1x0ICB0cmFuc3BvcnQgZHJpdmVyXG4rXG4rXHQgIFRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYnkgdGhlIHRyYW5zcG9ydCBkcml2ZXIuXG4rXG4rY29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUXG4rICAgICAgICBib29sIFwiTUNUUCB1c2JsaWIgdGVzdHNcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXG4rICAgICAgICBkZXBlbmRzIG9uIE1DVFBfVFJBTlNQT1JUX1VTQkxJQj15IFx1MDAyNlx1MDAyNiBLVU5JVD15XG4rICAgICAgICBkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuK1xuIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JcbiBcdHRyaXN0YXRlIFwiTUNUUCBVU0IgdHJhbnNwb3J0XCJcbiBcdGRlcGVuZHMgb24gVVNCXG4rXHRzZWxlY3QgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4gXHRoZWxwXG4gXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBVU0IgdHJhbnNwb3J0LFxuIFx0ICBkZWZpbmVkIGJ5IERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjgzLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG5pbmRleCBjMzYwMDY4NDlhMWU3ZC4uYzg3MGI2MmQzZjFjOTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG5AQCAtMiwzICsyLDQgQEAgb2JqLSQoQ09ORklHX01DVFBfU0VSSUFMKSArPSBtY3RwLXNlcmlhbC5vXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX0kyQykgKz0gbWN0cC1pMmMub1xuIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JM0MpICs9IG1jdHAtaTNjLm9cbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCKSArPSBtY3RwLXVzYi5vXG4rb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQkxJQikgKz0gbWN0cC11c2JsaWIub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1xuaW5kZXggZmFkZTY1ZjJmMjY5OTUuLjJkMzEwNzUzNzRiNDViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNcbkBAIC0zLDkgKzMsOSBAQFxuICAqIG1jdHAtdXNiLmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBiaW5kaW5nIGRyaXZlci5cbiAgKlxuICAqIERTUDAyODMgaXMgYXZhaWxhYmxlIGF0OlxuLSAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMC4xLnBkZlxuKyAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMS4wLnBkZlxuICAqXG4tICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjUgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZFxuKyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuQEAgLTIyLDk1ICsyMiwxMTUgQEBcbiBzdHJ1Y3QgbWN0cF91c2Ige1xuIFx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjtcbiBcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmO1xuK1x0Ym9vbCBzcGFuO1xuIFxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcbiBcdHU4IGVwX2luO1xuIFx0dTggZXBfb3V0O1xuIFxuLVx0c3RydWN0IHVyYiAqdHhfdXJiO1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3J4IHJ4O1xuIFx0c3RydWN0IHVyYiAqcnhfdXJiO1xuK1x0aW50IGluX2Vycl9jb3VudDtcbitcdGludCBpbl9lcnJfb3JpZztcbitcdGJvb2wgY2xlYXJfaGFsdDtcbiBcbiBcdC8qIGVuZm9yY2VzIGF0b21pYyBhY2Nlc3MgdG8gcnhfc3RvcHBlZCBhbmQgcmVxdWV1aW5nIHRoZSByZXRyeSB3b3JrICovXG4gXHRzcGlubG9ja190IHJ4X2xvY2s7XG4gXHRib29sIHJ4X3N0b3BwZWQ7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHJ4X3JldHJ5X3dvcms7XG4rXG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggdHg7XG4rXHRzdHJ1Y3QgdXNiX2FuY2hvciB0eF9hbmNob3I7XG4rXHQvKiBzZXJpYWxpc2VzIHR4X3FtZW0gdXBkYXRlcyB0byBuZXRkZXYgcXVldWUgc3RhdGVzICovXG4rXHRzcGlubG9ja190IHR4X3FtZW1fbG9jaztcbitcdGludCB0eF9xbWVtO1xuK307XG4rXG4rZW51bSB7XG4rXHRNQ1RQX1VTQl9TVUJDTEFTU19CQVNFID0gMHgwMCxcbitcdE1DVFBfVVNCX1NVQkNMQVNTX1NQQU4gPSAweDAyLFxuIH07XG4gXG4rLyogV2UgdXNlIGEgdG90YWwtc2l6ZSBsaW1pdCBmb3Igb3V0c3RhbmRpbmcgVVJCcywgYXMgdGhlIHRyYW5zZmVyIGNvdW50c1xuKyAqIG1heSB2YXJ5IGEgbG90IGJldHdlZW4gc3Bhbm5pbmctIGFuZCBub24tc3Bhbm5pbmcgbW9kZXMuIEluIHNwYW5uaW5nIG1vZGUsXG4rICogdGhpcyB3aWxsIGFsbG93IGZvciBhIGNvdXBsZSBvZiBtYXgtc2l6ZWQgdHJhbnNmZXJzIHRvIGJlIGluIGZsaWdodC4gSW5cbisgKiBub24tc3Bhbm5pbmcgbW9kZSwgMzIuXG4rICpcbisgKiBXZSB3YW50IHRvIGF2b2lkIGRpc2FibGluZyB0aGUgdHggcXVldWUgaWYgcG9zc2libGU7IGRvaW5nIHNvIHdpbGwgZW5kIHVwXG4rICogcmVxdWV1ZWluZyB0byBnc29fc2tiLCBhbmQgd2Ugb25seSBkZXF1ZXVlIGZyb20gdGhhdCBvbmUgc2tiIGF0IGEgdGltZSxcbisgKiBzbyBjYW4gbm8gbG9uZ2VyIHBlcmZvcm0gdHJhbnNmZXIgcGFja2luZy5cbisgKi9cbitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFRYX1FNRU1fTUFYID0gMTYzODQ7XG4rXG4gc3RhdGljIHZvaWQgbWN0cF91c2Jfb3V0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiB7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLVx1MDAzZWRldjtcbi1cdGludCBzdGF0dXM7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHggPSB1cmItXHUwMDNlY29udGV4dDtcbitcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBtY3RwX3VzYmxpYl90eF9jdHhfcHJpdih0eF9jdHgpO1xuK1x0dW5zaWduZWQgaW50IGxlbiA9IHVyYi1cdTAwM2V0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG1jdHBfdXNiLVx1MDAzZW5ldGRldjtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tXHRzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuK1x0bWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSh0eF9jdHgsIG5ldGRldiwgdXJiLVx1MDAzZXN0YXR1cyA9PSAwKTtcbiBcbi1cdHN3aXRjaCAoc3RhdHVzKSB7XG4tXHRjYXNlIC1FTk9FTlQ6XG4tXHRjYXNlIC1FQ09OTlJFU0VUOlxuLVx0Y2FzZSAtRVNIVVRET1dOOlxuLVx0Y2FzZSAtRVBST1RPOlxuLVx0XHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQobmV0ZGV2KTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIDA6XG4tXHRcdGRldl9kc3RhdHNfdHhfYWRkKG5ldGRldiwgc2tiLVx1MDAzZWxlbik7XG4tXHRcdG5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTtcbi1cdFx0Y29uc3VtZV9za2Ioc2tiKTtcbi1cdFx0cmV0dXJuO1xuLVx0ZGVmYXVsdDpcbi1cdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwidW5leHBlY3RlZCB0eCB1cmIgc3RhdHVzOiAlZFxcblwiLCBzdGF0dXMpO1xuLVx0XHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQobmV0ZGV2KTtcbi1cdH1cbitcdHVzYl9mcmVlX3VyYih1cmIpO1xuIFxuLVx0a2ZyZWVfc2tiKHNrYik7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtY3RwX3VzYi1cdTAwM2V0eF9xbWVtX2xvY2ssIGZsYWdzKTtcbitcdG1jdHBfdXNiLVx1MDAzZXR4X3FtZW0gLT0gbGVuO1xuK1x0aWYgKG1jdHBfdXNiLVx1MDAzZXR4X3FtZW0gXHUwMDNjIFRYX1FNRU1fTUFYIFx1MDAyNlx1MDAyNiBuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRcdG5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfcW1lbV9sb2NrLCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbitzdGF0aWMgaW50IG1jdHBfdXNiX3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxuK1x0XHRcdCAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuKVxuIHtcbi1cdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xuLVx0dW5zaWduZWQgaW50IHBsZW47XG4rXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYodHhfY3R4KTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzdHJ1Y3QgdXJiICp1cmI7XG4gXHRpbnQgcmM7XG4gXG4tXHRwbGVuID0gc2tiLVx1MDAzZWxlbjtcbi1cbi1cdGlmIChwbGVuICsgc2l6ZW9mKCpoZHIpIFx1MDAzZSBNQ1RQX1VTQl9YRkVSX1NJWkUpXG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4tXG4tXHRyYyA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqaGRyKSk7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4tXG4tXHRoZHIgPSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7XG4tXHRpZiAoIWhkcilcbi1cdFx0Z290byBlcnJfZHJvcDtcbi1cbi1cdGhkci1cdTAwM2VpZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xuLVx0aGRyLVx1MDAzZXJzdmQgPSAwO1xuLVx0aGRyLVx1MDAzZWxlbiA9IHBsZW4gKyBzaXplb2YoKmhkcik7XG4tXG4tXHR1cmIgPSBtY3RwX3VzYi1cdTAwM2V0eF91cmI7XG4rXHR1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpO1xuK1x0aWYgKCF1cmIpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0dXNiX2ZpbGxfYnVsa191cmIodXJiLCBtY3RwX3VzYi1cdTAwM2V1c2JkZXYsXG4gXHRcdFx0ICB1c2Jfc25kYnVsa3BpcGUobWN0cF91c2ItXHUwMDNldXNiZGV2LCBtY3RwX3VzYi1cdTAwM2VlcF9vdXQpLFxuLVx0XHRcdCAgc2tiLVx1MDAzZWRhdGEsIHNrYi1cdTAwM2VsZW4sXG4tXHRcdFx0ICBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHNrYik7XG4rXHRcdFx0ICBkYXRhLCBsZW4sIG1jdHBfdXNiX291dF9jb21wbGV0ZSwgdHhfY3R4KTtcbitcbitcdGlmIChtY3RwX3VzYi1cdTAwM2VzcGFuKVxuK1x0XHR1cmItXHUwMDNldHJhbnNmZXJfZmxhZ3MgfD0gVVJCX1pFUk9fUEFDS0VUO1xuK1xuK1x0dXNiX2FuY2hvcl91cmIodXJiLCBcdTAwMjZtY3RwX3VzYi1cdTAwM2V0eF9hbmNob3IpO1xuIFxuLVx0LyogU3RvcHMgVFggcXVldWUgZmlyc3QgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbiB3aXRoIFVSQiBjb21wbGV0ZSAqL1xuLVx0bmV0aWZfc3RvcF9xdWV1ZShkZXYpO1xuIFx0cmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpO1xuIFx0aWYgKHJjKSB7XG4tXHRcdG5ldGlmX3dha2VfcXVldWUoZGV2KTtcbi1cdFx0Z290byBlcnJfZHJvcDtcbitcdFx0bmV0ZGV2X2RiZyhtY3RwX3VzYi1cdTAwM2VuZXRkZXYsIFwiVFggdXJiIHN1Ym1pdCBmYWlsZWQsICVkXFxuXCIsIHJjKTtcbitcdFx0dXNiX3VuYW5jaG9yX3VyYih1cmIpO1xuK1x0XHR1c2JfZnJlZV91cmIodXJiKTtcbitcdH0gZWxzZSB7XG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xuK1x0XHRtY3RwX3VzYi1cdTAwM2V0eF9xbWVtICs9IGxlbjtcbitcdFx0aWYgKG1jdHBfdXNiLVx1MDAzZXR4X3FtZW0gXHUwMDNlPSBUWF9RTUVNX01BWClcbitcdFx0XHRuZXRpZl9zdG9wX3F1ZXVlKG1jdHBfdXNiLVx1MDAzZW5ldGRldik7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfcW1lbV9sb2NrLCBmbGFncyk7XG4gXHR9XG4gXG4tXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB0eF9vcHMgPSB7XG4rXHQuc2VuZCA9IG1jdHBfdXNiX3R4X3NlbmQsXG4rfTtcbitcbitzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG5ldGRldl9wcml2KGRldik7XG4rXHRib29sIG1vcmUgPSBuZXRkZXZfeG1pdF9tb3JlKCk7XG4rXG4rXHRtY3RwX3VzYmxpYl90eF9wdXNoKGRldiwgXHUwMDI2bWN0cF91c2ItXHUwMDNldHgsIHNrYiwgbW9yZSk7XG4gXG4tZXJyX2Ryb3A6XG4tXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTtcbi1cdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG4gXG5AQCAtMTI1LDI0ICsxNDUsMjMgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgUlhfUkVUUllfREVMQVkgPSBIWiAvIDQ7XG4gc3RhdGljIGludCBtY3RwX3VzYl9yeF9xdWV1ZShzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiLCBnZnBfdCBnZnApXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4rXHRzaXplX3QgbGVuO1xuK1x0dm9pZCAqYnVmO1xuIFx0aW50IHJjO1xuIFxuLVx0c2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgTUNUUF9VU0JfWEZFUl9TSVpFLCBnZnApO1xuLVx0aWYgKCFza2IpIHtcbi1cdFx0cmMgPSAtRU5PTUVNO1xuK1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgXHUwMDI2bWN0cF91c2ItXHUwMDNlcngsXG4rXHRcdFx0XHQgICAgXHUwMDI2YnVmLCBcdTAwMjZsZW4sIGdmcCk7XG4rXHRpZiAocmMpXG4gXHRcdGdvdG8gZXJyX3JldHJ5O1xuLVx0fVxuIFxuIFx0dXNiX2ZpbGxfYnVsa191cmIobWN0cF91c2ItXHUwMDNlcnhfdXJiLCBtY3RwX3VzYi1cdTAwM2V1c2JkZXYsXG4gXHRcdFx0ICB1c2JfcmN2YnVsa3BpcGUobWN0cF91c2ItXHUwMDNldXNiZGV2LCBtY3RwX3VzYi1cdTAwM2VlcF9pbiksXG4tXHRcdFx0ICBza2ItXHUwMDNlZGF0YSwgTUNUUF9VU0JfWEZFUl9TSVpFLFxuLVx0XHRcdCAgbWN0cF91c2JfaW5fY29tcGxldGUsIHNrYik7XG4rXHRcdFx0ICBidWYsIGxlbiwgbWN0cF91c2JfaW5fY29tcGxldGUsIG1jdHBfdXNiKTtcbiBcbiBcdHJjID0gdXNiX3N1Ym1pdF91cmIobWN0cF91c2ItXHUwMDNlcnhfdXJiLCBnZnApO1xuIFx0aWYgKHJjKSB7XG4gXHRcdG5ldGRldl9kYmcobWN0cF91c2ItXHUwMDNlbmV0ZGV2LCBcInJ4IHVyYiBzdWJtaXQgZmFpbHVyZTogJWRcXG5cIiwgcmMpO1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4KTtcbiBcdFx0aWYgKHJjID09IC1FTk9NRU0pXG4gXHRcdFx0Z290byBlcnJfcmV0cnk7XG4gXHR9XG5AQCAtMTU3LDEzICsxNzYsMTMgQEAgc3RhdGljIGludCBtY3RwX3VzYl9yeF9xdWV1ZShzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiLCBnZnBfdCBnZnApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByeF9lcnJfbWF4ID0gMTA7XG4rXG4gc3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuIHtcbi1cdHN0cnVjdCBza19idWZmICpza2IgPSB1cmItXHUwMDNlY29udGV4dDtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBza2ItXHUwMDNlZGV2O1xuLVx0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4tXHRzdHJ1Y3QgbWN0cF9za2JfY2IgKmNiO1xuLVx0dW5zaWduZWQgaW50IGxlbjtcbitcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSB1cmItXHUwMDNlY29udGV4dDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBtY3RwX3VzYi1cdTAwM2VuZXRkZXY7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHN0YXR1cztcbiBcbiBcdHN0YXR1cyA9IHVyYi1cdTAwM2VzdGF0dXM7XG5AQCAtMTcyLDgwICsxOTEsNTQgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuIFx0Y2FzZSAtRU5PRU5UOlxuIFx0Y2FzZSAtRUNPTk5SRVNFVDpcbiBcdGNhc2UgLUVTSFVURE9XTjpcbi1cdGNhc2UgLUVQUk9UTzpcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdC8qIGRldmljZSBzaHV0ZG93biwgZG9uJ3QgcmVzdWJtaXQgKi9cbitcdFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4KTtcbiBcdFx0cmV0dXJuO1xuLVx0Y2FzZSAwOlxuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcInVuZXhwZWN0ZWQgcnggdXJiIHN0YXR1czogJWRcXG5cIiwgc3RhdHVzKTtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdGxlbiA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoO1xuLVx0X19za2JfcHV0KHNrYiwgbGVuKTtcbi1cbi1cdHdoaWxlIChza2IpIHtcbi1cdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBOVUxMO1xuLVx0XHRzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7XG4tXHRcdHU4IHBrdF9sZW47IC8qIGxlbmd0aCBvZiBNQ1RQIHBhY2tldCwgbm8gVVNCIGhlYWRlciAqL1xuIFxuLVx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuLVx0XHRoZHIgPSBza2JfcHVsbF9kYXRhKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbi1cdFx0aWYgKCFoZHIpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdGlmIChiZTE2X3RvX2NwdShoZHItXHUwMDNlaWQpICE9IE1DVFBfVVNCX0RNVEZfSUQpIHtcbi1cdFx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCJyeDogaW52YWxpZCBpZCAlMDR4XFxuXCIsXG4tXHRcdFx0XHQgICBiZTE2X3RvX2NwdShoZHItXHUwMDNlaWQpKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuK1x0Y2FzZSAtRVBJUEU6XG4rXHRcdC8qIGVuZHBvaW50IHN0YWxsOiBjbGVhciBoYWx0LCB3aGljaCB3aWxsIGNhdXNlIGEgcmVzdWJtaXQgKi9cbiBcbi1cdFx0aWYgKGhkci1cdTAwM2VsZW4gXHUwMDNjXG4tXHRcdCAgICBzaXplb2Yoc3RydWN0IG1jdHBfaGRyKSArIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSkge1xuLVx0XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcInJ4OiBzaG9ydCBwYWNrZXQgKGhkcikgJWRcXG5cIixcbi1cdFx0XHRcdCAgIGhkci1cdTAwM2VsZW4pO1xuLVx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoIW1jdHBfdXNiLVx1MDAzZWluX2Vycl9jb3VudCsrKVxuK1x0XHRcdG1jdHBfdXNiLVx1MDAzZWluX2Vycl9vcmlnID0gc3RhdHVzO1xuK1x0XHRpZiAobWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50IFx1MDAzZT0gcnhfZXJyX21heCkge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcImV4Y2Vzc2l2ZSBzdGFsbHMgZnJvbSBJTiBFUFxcblwiKTtcbitcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcbi1cdFx0Lyogd2Uga25vdyB3ZSBoYXZlIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSBoZXJlICovXG4tXHRcdHBrdF9sZW4gPSBoZHItXHUwMDNlbGVuIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpO1xuLVx0XHRpZiAocGt0X2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbikge1xuLVx0XHRcdG5ldGRldl9kYmcobmV0ZGV2LFxuLVx0XHRcdFx0ICAgXCJyeDogc2hvcnQgcGFja2V0ICh4ZmVyKSAlZCwgYWN0dWFsICVkXFxuXCIsXG4tXHRcdFx0XHQgICBoZHItXHUwMDNlbGVuLCBza2ItXHUwMDNlbGVuKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuK1x0XHRtY3RwX3VzYi1cdTAwM2VjbGVhcl9oYWx0ID0gdHJ1ZTtcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWN0cF91c2ItXHUwMDNlcnhfbG9jaywgZmxhZ3MpO1xuK1x0XHRpZiAoIW1jdHBfdXNiLVx1MDAzZXJ4X3N0b3BwZWQpXG4rXHRcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X3JldHJ5X3dvcmssXG4rXHRcdFx0XHRcdCAgICAgIFJYX1JFVFJZX0RFTEFZKTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeF9sb2NrLCBmbGFncyk7XG4rXHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeCk7XG4rXHRcdHJldHVybjtcbiBcbi1cdFx0aWYgKHBrdF9sZW4gXHUwMDNjIHNrYi1cdTAwM2VsZW4pIHtcbi1cdFx0XHQvKiBtb3JlIHBhY2tldHMgbWF5IGZvbGxvdyAtIGNsb25lIHRvIGEgbmV3XG4tXHRcdFx0ICogc2tiIHRvIHVzZSBvbiB0aGUgbmV4dCBpdGVyYXRpb25cbi1cdFx0XHQgKi9cbi1cdFx0XHRza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG4tXHRcdFx0aWYgKHNrYjIpIHtcbi1cdFx0XHRcdGlmICghc2tiX3B1bGwoc2tiMiwgcGt0X2xlbikpIHtcbi1cdFx0XHRcdFx0a2ZyZWVfc2tiKHNrYjIpO1xuLVx0XHRcdFx0XHRza2IyID0gTlVMTDtcbi1cdFx0XHRcdH1cbi1cdFx0XHR9XG4tXHRcdFx0c2tiX3RyaW0oc2tiLCBwa3RfbGVuKTtcbitcdGRlZmF1bHQ6XG4rXHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcInVuZXhwZWN0ZWQgcnggdXJiIHN0YXR1czogJWRcXG5cIiwgc3RhdHVzKTtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIC1FVElNRTpcbitcdGNhc2UgLUVQUk9UTzpcbitcdGNhc2UgLUVJTFNFUTpcbitcdGNhc2UgLUVPVkVSRkxPVzpcbitcdFx0LyogcG9zc2libHkgdHJhbnNpZW50OyByZWNvcmQgZmlyc3QgZmFpbHVyZSwgcmVzdWJtaXQgKi9cbitcdFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4KTtcbitcdFx0aWYgKCFtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfY291bnQrKylcbitcdFx0XHRtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfb3JpZyA9IHN0YXR1cztcbitcdFx0aWYgKG1jdHBfdXNiLVx1MDAzZWluX2Vycl9jb3VudCBcdTAwM2U9IHJ4X2Vycl9tYXgpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwiZXhjZXNzaXZlIGVycm9ycyBmcm9tIElOIEVQLCBmaXJzdDogJWRcXG5cIixcbitcdFx0XHRcdCAgIG1jdHBfdXNiLVx1MDAzZWluX2Vycl9vcmlnKTtcbitcdFx0XHRyZXR1cm47XG4gXHRcdH1cbitcdFx0YnJlYWs7XG4gXG4tXHRcdGRldl9kc3RhdHNfcnhfYWRkKG5ldGRldiwgc2tiLVx1MDAzZWxlbik7XG4tXG4tXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX01DVFApO1xuLVx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbi1cdFx0Y2IgPSBfX21jdHBfY2Ioc2tiKTtcbi1cdFx0Y2ItXHUwMDNlaGFsZW4gPSAwO1xuLVx0XHRuZXRpZl9yeChza2IpO1xuLVxuLVx0XHRza2IgPSBza2IyO1xuK1x0Y2FzZSAwOlxuK1x0XHRtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShuZXRkZXYsIFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4LCB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aCk7XG4rXHRcdG1jdHBfdXNiLVx1MDAzZWluX2Vycl9jb3VudCA9IDA7XG4rXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0aWYgKHNrYilcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXG4gXHRtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0FUT01JQyk7XG4gfVxuIFxuQEAgLTI1Myw2ICsyNDYsMjAgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfcnhfcmV0cnlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWN0cF91c2IsXG4gXHRcdFx0XHRcdFx0IHJ4X3JldHJ5X3dvcmsud29yayk7XG4rXHRpbnQgcmM7XG4rXG4rXHQvKiBXZSBhcmUgb25seSBjYWxsZWQgd2hlbiByeCBjb21wbGV0aW9ucyBhcmUgc3VzcGVuZGVkICovXG4rXHRpZiAobWN0cF91c2ItXHUwMDNlY2xlYXJfaGFsdCkge1xuK1x0XHRpbnQgcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShtY3RwX3VzYi1cdTAwM2V1c2JkZXYsIG1jdHBfdXNiLVx1MDAzZWVwX2luKTtcbitcbitcdFx0cmMgPSB1c2JfY2xlYXJfaGFsdChtY3RwX3VzYi1cdTAwM2V1c2JkZXYsIHBpcGUpO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG1jdHBfdXNiLVx1MDAzZW5ldGRldixcbitcdFx0XHRcdCAgIFwiY2FuJ3QgY2xlYXIgSU4gRVAgaGFsdDogJWRcXG5cIiwgcmMpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRtY3RwX3VzYi1cdTAwM2VjbGVhcl9oYWx0ID0gZmFsc2U7XG4rXHR9XG4gXG4gXHRtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0tFUk5FTCk7XG4gfVxuQEAgLTI2Miw2ICsyNjksOCBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuIFx0V1JJVEVfT05DRShtY3RwX3VzYi1cdTAwM2VyeF9zdG9wcGVkLCBmYWxzZSk7XG4rXHRtY3RwX3VzYi1cdTAwM2VjbGVhcl9oYWx0ID0gZmFsc2U7XG4rXHRtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfY291bnQgPSAwO1xuIFxuIFx0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbiBcbkBAIC0yODQsNyArMjkzLDEwIEBAIHN0YXRpYyBpbnQgbWN0cF91c2Jfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X3JldHJ5X3dvcmspO1xuIFxuIFx0dXNiX2tpbGxfdXJiKG1jdHBfdXNiLVx1MDAzZXJ4X3VyYik7XG4tXHR1c2Jfa2lsbF91cmIobWN0cF91c2ItXHUwMDNldHhfdXJiKTtcbitcbitcdHVzYl9raWxsX2FuY2hvcmVkX3VyYnMoXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfYW5jaG9yKTtcbitcbitcdG1jdHBfdXNibGliX3R4X2NhbmNlbChcdTAwMjZtY3RwX3VzYi1cdTAwM2V0eCwgZGV2LCBTS0JfRFJPUF9SRUFTT05fREVWX1JFQURZKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMDEsNyArMzEzLDcgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRkZXYtXHUwMDNlbXR1ID0gTUNUUF9VU0JfTVRVX01JTjtcbiBcdGRldi1cdTAwM2VtaW5fbXR1ID0gTUNUUF9VU0JfTVRVX01JTjtcbi1cdGRldi1cdTAwM2VtYXhfbXR1ID0gTUNUUF9VU0JfTVRVX01BWDtcbitcdGRldi1cdTAwM2VtYXhfbXR1ID0gTUNUUF9VU0JfMV8wX01UVV9NQVg7XG4gXG4gXHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpO1xuIFx0ZGV2LVx1MDAzZXR4X3F1ZXVlX2xlbiA9IERFRkFVTFRfVFhfUVVFVUVfTEVOO1xuQEAgLTMxNyw2ICszMjksNyBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFx0c3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYztcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXHRzdHJ1Y3QgbWN0cF91c2IgKmRldjtcbitcdGJvb2wgc3BhbjtcbiBcdGludCByYztcbiBcbiBcdC8qIG9ubHkgb25lIGFsdGVybmF0ZSAqL1xuQEAgLTMyOCw2ICszNDEsOCBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFx0XHRyZXR1cm4gcmM7XG4gXHR9XG4gXG4rXHRzcGFuID0gaWZhY2VfZGVzYy1cdTAwM2VkZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBNQ1RQX1VTQl9TVUJDTEFTU19TUEFOO1xuK1xuIFx0bmV0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqZGV2KSwgXCJtY3RwdXNiJWRcIiwgTkVUX05BTUVfRU5VTSxcbiBcdFx0XHQgICAgICBtY3RwX3VzYl9uZXRkZXZfc2V0dXApO1xuIFx0aWYgKCFuZXRkZXYpXG5AQCAtMzM1LDMzICszNTAsNDMgQEAgc3RhdGljIGludCBtY3RwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcbiBcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgXHUwMDI2aW50Zi1cdTAwM2VkZXYpO1xuIFx0ZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdGRldi1cdTAwM2VzcGFuID0gc3BhbjtcbiBcdGRldi1cdTAwM2VuZXRkZXYgPSBuZXRkZXY7XG4gXHRkZXYtXHUwMDNldXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcbiBcdGRldi1cdTAwM2VpbnRmID0gaW50ZjtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRldi1cdTAwM2VyeF9sb2NrKTtcbitcdGlmIChkZXYtXHUwMDNlc3BhbilcbitcdFx0bmV0ZGV2LVx1MDAzZW1heF9tdHUgPSBNQ1RQX1VTQl8xXzFfTVRVX01BWDtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRldi1cdTAwM2V0eF9xbWVtX2xvY2spO1xuIFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpO1xuIFxuK1x0bWN0cF91c2JsaWJfcnhfaW5pdChcdTAwMjZkZXYtXHUwMDNlcngsIGxlMTZfdG9fY3B1KGVwX2luLVx1MDAzZXdNYXhQYWNrZXRTaXplKSxcbitcdFx0XHQgICAgZGV2LVx1MDAzZXNwYW4pO1xuK1x0bWN0cF91c2JsaWJfdHhfaW5pdChcdTAwMjZkZXYtXHUwMDNldHgsIFx1MDAyNnR4X29wcywgZGV2LCBkZXYtXHUwMDNlc3Bhbik7XG4rXHRpbml0X3VzYl9hbmNob3IoXHUwMDI2ZGV2LVx1MDAzZXR4X2FuY2hvcik7XG4rXG4gXHRkZXYtXHUwMDNlZXBfaW4gPSBlcF9pbi1cdTAwM2ViRW5kcG9pbnRBZGRyZXNzO1xuIFx0ZGV2LVx1MDAzZWVwX291dCA9IGVwX291dC1cdTAwM2ViRW5kcG9pbnRBZGRyZXNzO1xuIFxuLVx0ZGV2LVx1MDAzZXR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7XG4gXHRkZXYtXHUwMDNlcnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghZGV2LVx1MDAzZXR4X3VyYiB8fCAhZGV2LVx1MDAzZXJ4X3VyYikge1xuK1x0aWYgKCFkZXYtXHUwMDNlcnhfdXJiKSB7XG4gXHRcdHJjID0gLUVOT01FTTtcbi1cdFx0Z290byBlcnJfZnJlZV91cmJzO1xuK1x0XHRnb3RvIGVycl9maW5pX3J4dHg7XG4gXHR9XG4gXG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZkZXYtXHUwMDNlcnhfcmV0cnlfd29yaywgbWN0cF91c2JfcnhfcmV0cnlfd29yayk7XG4gXG4gXHRyYyA9IG1jdHBfcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldiwgTlVMTCwgTUNUUF9QSFlTX0JJTkRJTkdfVVNCKTtcbiBcdGlmIChyYylcbi1cdFx0Z290byBlcnJfZnJlZV91cmJzO1xuK1x0XHRnb3RvIGVycl9mcmVlX3VyYjtcbiBcbiBcdHJldHVybiAwO1xuIFxuLWVycl9mcmVlX3VyYnM6XG4tXHR1c2JfZnJlZV91cmIoZGV2LVx1MDAzZXR4X3VyYik7XG4rZXJyX2ZyZWVfdXJiOlxuIFx0dXNiX2ZyZWVfdXJiKGRldi1cdTAwM2VyeF91cmIpO1xuK2Vycl9maW5pX3J4dHg6XG4rXHRtY3RwX3VzYmxpYl90eF9maW5pKFx1MDAyNmRldi1cdTAwM2V0eCk7XG4rXHRtY3RwX3VzYmxpYl9yeF9maW5pKFx1MDAyNmRldi1cdTAwM2VyeCk7XG4gXHRmcmVlX25ldGRldihuZXRkZXYpO1xuIFx0cmV0dXJuIHJjO1xuIH1cbkBAIC0zNzEsMTMgKzM5NiwxNSBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFx0c3RydWN0IG1jdHBfdXNiICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuIFxuIFx0bWN0cF91bnJlZ2lzdGVyX25ldGRldihkZXYtXHUwMDNlbmV0ZGV2KTtcbi1cdHVzYl9mcmVlX3VyYihkZXYtXHUwMDNldHhfdXJiKTtcbitcdG1jdHBfdXNibGliX3J4X2ZpbmkoXHUwMDI2ZGV2LVx1MDAzZXJ4KTtcbitcdG1jdHBfdXNibGliX3R4X2ZpbmkoXHUwMDI2ZGV2LVx1MDAzZXR4KTtcbiBcdHVzYl9mcmVlX3VyYihkZXYtXHUwMDNlcnhfdXJiKTtcbiBcdGZyZWVfbmV0ZGV2KGRldi1cdTAwM2VuZXRkZXYpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgbWN0cF91c2JfZGV2aWNlc1tdID0ge1xuLVx0eyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01DVFAsIDB4MCwgMHgxKSB9LFxuK1x0eyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01DVFAsIE1DVFBfVVNCX1NVQkNMQVNTX0JBU0UsIDB4MSkgfSxcbitcdHsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQ1RQLCBNQ1RQX1VTQl9TVUJDTEFTU19TUEFOLCAweDEpIH0sXG4gXHR7IDAgfSxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmEyMmJlOTk5ZmEwYTFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jXG5AQCAtMCwwICsxLDQxMCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBtY3RwLXVzYmxpYi10ZXN0LmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBoZWxwZXIgbGlicmFyeSxcbisgKiB1bml0IHRlc3QgZGVmaW5pdGlvbnMuXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZFxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2t1bml0L3Rlc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L21jdHAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9tY3RwZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IvbWN0cC11c2IuaFx1MDAzZVxuK1xuK3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiB7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbitcdHN0cnVjdCBtY3RwX2RldiAqbWRldjtcbitcdHN0cnVjdCBza19idWZmX2hlYWQgcnhfcGt0cztcbit9O1xuK1xuK3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCB7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcbitcdHN0cnVjdCBtY3RwX3JvdXRlIHJ0O1xuK307XG4rXG4rc3RhdGljIG5ldGRldl90eF90IG1jdHBfdXNibGliX2Rldl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0Lyogd2UgZG9uJ3QgdHJhY2sgYW55IFRYZWQgcGFja2V0cyBhdCBwcmVzZW50ICovXG4rXHRrZnJlZV9za2Ioc2tiKTtcbitcdHJldHVybiBORVRERVZfVFhfT0s7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWN0cF90ZXN0X25ldGRldl9vcHMgPSB7XG4rXHQubmRvX3N0YXJ0X3htaXQgPSBtY3RwX3VzYmxpYl9kZXZfdHgsXG4rfTtcbitcbitzdGF0aWMgY29uc3QgdTE2IGVwX21heHBhY2tldCA9IDUxMjtcbitzdGF0aWMgY29uc3QgbWN0cF9laWRfdCBsb2NhbF9laWQgPSA4O1xuK1xuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRuZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfTUNUUDtcbitcdG5kZXYtXHUwMDNlbXR1ID0gODE5MjtcbitcdG5kZXYtXHUwMDNlZmxhZ3MgPSBJRkZfTk9BUlA7XG4rXHRuZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZtY3RwX3Rlc3RfbmV0ZGV2X29wcztcbitcdG5kZXYtXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO1xuK1x0bmRldi1cdTAwM2VwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfRFNUQVRTO1xuK31cbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2Rldl9hY3Rpb24odm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldiA9IGRhdGE7XG4rXG4rXHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2ZGV2LVx1MDAzZXJ4X3BrdHMpO1xuK1x0aWYgKGRldi1cdTAwM2VtZGV2KVxuK1x0XHRtY3RwX2Rldl9wdXQoZGV2LVx1MDAzZW1kZXYpO1xuK1x0dW5yZWdpc3Rlcl9uZXRkZXYoZGV2LVx1MDAzZW5kZXYpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpcbittY3RwX3VzYmxpYl90ZXN0X2NyZWF0ZV9kZXYoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4rXHRpbnQgcmM7XG4rXG4rXHRuZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqZGV2KSwgXCJtY3RwdGVzdCVkXCIsIE5FVF9OQU1FX0VOVU0sXG4rXHRcdFx0ICAgIG1jdHBfdXNibGliX2Rldl9zZXR1cCk7XG4rXHRpZiAoIW5kZXYpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0ZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRkZXYtXHUwMDNlbmRldiA9IG5kZXY7XG4rXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmRldi1cdTAwM2VyeF9wa3RzKTtcbitcbitcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBtY3RwX3VzYmxpYl90ZXN0X2Rldl9hY3Rpb24sIGRldik7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZGV2LVx1MDAzZW1kZXYgPSBfX21jdHBfZGV2X2dldChuZGV2KTtcbitcdGlmIChkZXYtXHUwMDNlbWRldilcbitcdFx0ZGV2LVx1MDAzZW1kZXYtXHUwMDNlbmV0ID0gbWN0cF9kZWZhdWx0X25ldChkZXZfbmV0KG5kZXYpKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlbWRldilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdHJjID0gZGV2X29wZW4obmRldiwgTlVMTCk7XG4rXHRydG5sX3VubG9jaygpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiBkZXY7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0KHN0cnVjdCBtY3RwX2RzdCAqZHN0LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihza2ItXHUwMDNlZGV2KTtcbitcbitcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmRldi1cdTAwM2VyeF9wa3RzLCBza2IpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZmluaV9hY3Rpb24odm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eCA9IGRhdGE7XG4rXG4rXHQvKiBUaGUgZGV2aWNlIHdpbGwgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gLVx1MDAzZXJ0IHdpbGwgYmUgdW5saW5rZWQuXG4rXHQgKiBKdXN0IGVuc3VyZSB0aGF0IHRoZSByZWZjb3VudCBpcyBhcyBleHBlY3RlZC5cbitcdCAqL1xuK1x0S1VOSVRfQVNTRVJUX1RSVUUoY3VycmVudC1cdTAwM2VrdW5pdF90ZXN0LFxuK1x0XHRcdCAgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2VydC5yZWZzKSk7XG4rXG4rXHRrZnJlZShjdHgpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICptY3RwX3VzYmxpYl90ZXN0X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xuK1x0c3RydWN0IG1jdHBfcm91dGUgKnJ0O1xuK1x0aW50IHJjO1xuK1xuK1x0Y3R4ID0ga3phbGxvY19vYmooKmN0eCk7XG4rXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgY3R4KTtcbitcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmN0eC1cdTAwM2VydC5saXN0KTtcbitcdHJ0ID0gXHUwMDI2Y3R4LVx1MDAzZXJ0O1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNnJ0LVx1MDAzZXJlZnMsIDEpO1xuK1xuK1x0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIG1jdHBfdXNibGliX3Rlc3RfZmluaV9hY3Rpb24sIGN0eCk7XG4rXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuK1xuK1x0Y3R4LVx1MDAzZWRldiA9IG1jdHBfdXNibGliX3Rlc3RfY3JlYXRlX2Rldih0ZXN0KTtcbitcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBjdHgtXHUwMDNlZGV2KTtcbitcbitcdHJ0LVx1MDAzZW1pbiA9IGxvY2FsX2VpZDtcbitcdHJ0LVx1MDAzZW1heCA9IGxvY2FsX2VpZDtcbitcdHJ0LVx1MDAzZWRzdF90eXBlID0gTUNUUF9ST1VURV9ESVJFQ1Q7XG4rXHRydC1cdTAwM2V0eXBlID0gUlROX0xPQ0FMO1xuK1x0cnQtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldi1cdTAwM2VtZGV2O1xuK1x0cnQtXHUwMDNlb3V0cHV0ID0gbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0O1xuK1xuK1x0cnRubF9sb2NrKCk7XG4rXHRsaXN0X2FkZF9yY3UoXHUwMDI2Y3R4LVx1MDAzZXJ0Lmxpc3QsIFx1MDAyNmluaXRfbmV0Lm1jdHAucm91dGVzKTtcbitcdHJlZmNvdW50X2luYyhcdTAwMjZydC1cdTAwM2VyZWZzKTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gY3R4O1xuK31cbitcbisvKiBJbml0IGEgTUNUUC1vdmVyLVVTQiBwYWNrZXQgd2l0aGluIGEgYnVmZmVyLiBAbGVuIGlzIHRoZSBsZW5ndGggb2YgdGhlXG4rICogYnVmZmVyIHRvIHdyaXRlLCBAcGF5bG9hZF9sZW4gaXMgdGhlIHJlcG9ydGVkIHNpemUgb2YgdGhlIE1DVFAtb3Zlci1VU0JcbisgKiBwYWNrZXQuXG4rICovXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdCh2b2lkICpkYXRhLCBzaXplX3QgbGVuLFxuK1x0XHRcdFx0ICAgICAgc2l6ZV90IHBheWxvYWRfbGVuKVxuK3tcbitcdHN0cnVjdCB7XG4rXHRcdHN0cnVjdCBtY3RwX3VzYl9oZHIgdXNiO1xuK1x0XHRzdHJ1Y3QgbWN0cF9oZHIgbWN0cDtcbitcdH0gaGRyO1xuK1xuK1x0aGRyLnVzYi5pZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xuK1x0aGRyLnVzYi5sZW4gPSBjcHVfdG9fYmUxNihwYXlsb2FkX2xlbik7XG4rXHRoZHIubWN0cC52ZXIgPSAxO1xuK1x0aGRyLm1jdHAuZGVzdCA9IGxvY2FsX2VpZDtcbitcdGhkci5tY3RwLnNyYyA9IDA7XG4rXHRoZHIubWN0cC5mbGFnc19zZXFfdGFnID0gMDtcbitcbitcdG1lbWNweShkYXRhLCBcdTAwMjZoZHIsIG1pbihsZW4sIHNpemVvZihoZHIpKSk7XG4rXHRpZiAobGVuIFx1MDAzZSBzaXplb2YoaGRyKSlcbitcdFx0bWVtc2V0KGRhdGEgKyBzaXplb2YoaGRyKSwgMCwgbGVuIC0gc2l6ZW9mKGhkcikpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhY3Rpb25fcnhfZmluaSh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcnggPSBkYXRhO1xuK1xuK1x0bWN0cF91c2JsaWJfcnhfZmluaShyeCk7XG4rXHRrZnJlZShyeCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKlxuK21jdHBfdXNibGliX3Rlc3RfcnhfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QsIGJvb2wgc3Bhbilcbit7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xuK1x0aW50IHJjO1xuK1xuK1x0cnggPSBremFsbG9jX29iaigqcngpO1xuK1x0aWYgKHJ4KSB7XG4rXHRcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBhY3Rpb25fcnhfZmluaSwgcngpO1xuK1x0XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuK1x0fVxuK1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJ4KTtcbitcdG1jdHBfdXNibGliX3J4X2luaXQocngsIGVwX21heHBhY2tldCwgc3Bhbik7XG4rXG4rXHRyZXR1cm4gcng7XG4rfVxuK1xuKy8qIFdyYXBwZXJzIGZvciB1c2JsaWIncyByeF9jb21wbGV0ZSBjYWxsYmFjaywgd2hpY2ggaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkXG4rICogZnJvbSBhdG9taWMgY29udGV4dFxuKyAqL1xuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCBzaXplX3QgbGVuKVxuK3tcbitcdGludCByYztcbitcbitcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdHJjID0gbWN0cF91c2JsaWJfcnhfY29tcGxldGUobmV0ZGV2LCByeCwgbGVuKTtcbitcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbisvKiBTaW5nbGUgcGFja2V0LCBzdGFydGluZyBvbiBhIHRyYW5zZmVyIGJvdW5kYXJ5LCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluXG4rICogdGhlIHRyYW5zZmVyXG4rICovXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHNpemVfdCBsZW47XG4rXHR2b2lkICpidWY7XG4rXHRpbnQgcmM7XG4rXG4rXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XG4rXHRkZXYgPSBjdHgtXHUwMDNlZGV2O1xuK1xuK1x0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XG4rXG4rXHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVx1MDAzZW5kZXYsIHJ4LFxuK1x0XHRcdFx0ICAgIFx1MDAyNmJ1ZiwgXHUwMDI2bGVuLCBHRlBfS0VSTkVMKTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXG4rXHQvKiB3ZSBzaG91bGQgYWx3YXlzIGhhdmUgYSBtYXhwYWNrZXQgb2YgdHJhbnNmZXIgYXZhaWxhYmxlICovXG4rXHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgbGVuLCBlcF9tYXhwYWNrZXQpO1xuK1xuK1x0bWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChidWYsIDgsIDgpO1xuK1xuK1x0cmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgOCk7XG4rXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuK1xuK1x0c2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4rXHRLVU5JVF9FWFBFQ1RfTk9UX05VTEwodGVzdCwgc2tiKTtcbitcdGlmIChza2IpXG4rXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXHUwMDNlbGVuLCA0KTtcbitcdGtmcmVlX3NrYihza2IpO1xuK31cbitcbitzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiB7XG4rXHRjb25zdCBjaGFyICpuYW1lO1xuK1x0c2l6ZV90IG5fcGt0cztcbitcdHNpemVfdCBwa3RzWzZdO1xuK1x0c2l6ZV90IG5feGZlcnM7XG4rXHRzaXplX3QgeGZlcnNbNl07XG4rfTtcbitcbitzdGF0aWMgdm9pZFxuK21jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdG9fZGVzYyhjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiAqdCxcbitcdFx0XHRcdCAgY2hhciAqZGVzYylcbit7XG4rXHRzdHJzY3B5KGRlc2MsIHQtXHUwMDNlbmFtZSwgS1VOSVRfUEFSQU1fREVTQ19TSVpFKTtcbit9XG4rXG4rc3RhdGljIHZvaWRcbittY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3ZhbGlkYXRlKHN0cnVjdCBrdW5pdCAqdGVzdCxcbitcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICpzcGFuLFxuK1x0XHRcdFx0ICAgc2l6ZV90ICpsZW4pXG4re1xuK1x0c2l6ZV90IHBrdF9sZW4gPSAwLCB4ZmVyX2xlbiA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwYW4tXHUwMDNlbl9wa3RzOyBpKyspIHtcbitcdFx0S1VOSVRfQVNTRVJUX0dFX01TRyh0ZXN0LCBzcGFuLVx1MDAzZXBrdHNbaV0sIDgsXG4rXHRcdFx0XHQgICAgXCJwa3RbJWRdIGxlbiB0b28gc21hbGwgKCV6ZCkgZm9yICVzXCIsXG4rXHRcdFx0XHQgICAgaSwgc3Bhbi1cdTAwM2Vwa3RzW2ldLCBzcGFuLVx1MDAzZW5hbWUpO1xuK1x0XHRwa3RfbGVuICs9IHNwYW4tXHUwMDNlcGt0c1tpXTtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwYW4tXHUwMDNlbl94ZmVyczsgaSsrKVxuK1x0XHR4ZmVyX2xlbiArPSBzcGFuLVx1MDAzZXhmZXJzW2ldO1xuK1xuK1x0S1VOSVRfQVNTRVJUX0VRX01TRyh0ZXN0LCBwa3RfbGVuLCB4ZmVyX2xlbixcbitcdFx0XHQgICAgXCJpbnZhbGlkIHBrdF9sZW4gKCV6ZCkgIT0geGZlcl9sZW4gKCV6ZCkgZm9yICVzXCIsXG4rXHRcdFx0ICAgIHBrdF9sZW4sIHhmZXJfbGVuLCBzcGFuLVx1MDAzZW5hbWUpO1xuK1xuK1x0KmxlbiA9IHBrdF9sZW47XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4oc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICpwa3Rfc3BhbiA9IHRlc3QtXHUwMDNlcGFyYW1fdmFsdWU7XG4rXHRzaXplX3QgbGVuLCB4ZmVyX2xlbiwgb2ZmLCB4ZmVyX29mZjtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXHR1OCAqcGt0YnVmO1xuK1x0dm9pZCAqYnVmO1xuK1x0aW50IHJjO1xuK1xuK1x0bWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl92YWxpZGF0ZSh0ZXN0LCBwa3Rfc3BhbiwgXHUwMDI2bGVuKTtcbitcdHBrdGJ1ZiA9IGt1bml0X2ttYWxsb2NfYXJyYXkodGVzdCwgMSwgbGVuLCBHRlBfS0VSTkVMKTtcbitcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBwa3RidWYpO1xuK1xuK1x0LyogbGF5IG91dCBwYWNrZXRzICovXG4rXHRmb3IgKG9mZiA9IDAsIGkgPSAwOyBpIFx1MDAzYyBwa3Rfc3Bhbi1cdTAwM2VuX3BrdHM7IGkrKykge1xuK1x0XHRsZW4gPSBwa3Rfc3Bhbi1cdTAwM2Vwa3RzW2ldO1xuK1x0XHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiArIG9mZiwgbGVuLCBsZW4pO1xuK1x0XHRvZmYgKz0gbGVuO1xuK1x0fVxuK1xuK1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuK1x0ZGV2ID0gY3R4LVx1MDAzZWRldjtcbitcbitcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xuK1xuK1x0LyogZmVlZCB0cmFuc2ZlcnMgKi9cbitcdGZvciAob2ZmID0gMCwgeGZlcl9vZmYgPSAwLCBpID0gMDsgaSBcdTAwM2MgcGt0X3NwYW4tXHUwMDNlbl94ZmVyczspIHtcbitcdFx0eGZlcl9sZW4gPSBwa3Rfc3Bhbi1cdTAwM2V4ZmVyc1tpXSAtIHhmZXJfb2ZmO1xuK1x0XHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVx1MDAzZW5kZXYsIHJ4LFxuK1x0XHRcdFx0XHQgICAgXHUwMDI2YnVmLCBcdTAwMjZsZW4sIEdGUF9LRVJORUwpO1xuK1x0XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuK1xuK1x0XHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgbGVuLCBlcF9tYXhwYWNrZXQpO1xuK1xuK1x0XHRsZW4gPSBtaW4obGVuLCB4ZmVyX2xlbik7XG4rXHRcdG1lbWNweShidWYsIHBrdGJ1ZiArIG9mZiwgbGVuKTtcbitcbitcdFx0aWYgKGxlbiA9PSB4ZmVyX2xlbikge1xuK1x0XHRcdC8qIHdob2xlL2VuZCB4ZmVyLCBwcm9jZWVkIHRvIG5leHQgKi9cbitcdFx0XHR4ZmVyX29mZiA9IDA7XG4rXHRcdFx0aSsrO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdC8qIHBhcnRpYWwgKi9cbitcdFx0XHR4ZmVyX29mZiArPSBsZW47XG4rXHRcdH1cbitcbitcdFx0cmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgbGVuKTtcbitcdFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbitcdFx0b2ZmICs9IGxlbjtcbitcdH1cbitcbitcdC8qIGNoZWNrIHJlY2VpdmVkIHBhY2tldHMgKi9cbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtXHUwMDNlcnhfcGt0cy5xbGVuLCBwa3Rfc3Bhbi1cdTAwM2VuX3BrdHMpO1xuK1x0Zm9yIChpID0gMDsgOyBpKyspIHtcbitcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2ZGV2LVx1MDAzZXJ4X3BrdHMpO1xuK1xuK1x0XHRpZiAoIXNrYilcbitcdFx0XHRicmVhaztcbitcbitcdFx0aWYgKGkgXHUwMDNjIHBrdF9zcGFuLVx1MDAzZW5fcGt0cylcbitcdFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2tiLVx1MDAzZWxlbiwgcGt0X3NwYW4tXHUwMDNlcGt0c1tpXSAtIDQpO1xuK1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuIG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5zW10gPSB7XG4rXHQvKiBPbmUgcGFja2V0IGNvbXBsZXRlbHkgd2l0aGluIGEgdHJhbnNmZXIgKi9cbitcdHsgXCIxcDF4LWNvbXBsZXRlXCIsIDEsIHsgOCB9LCAxLCB7IDggfSB9LFxuK1x0LyogVHdvIHNtYWxsIHBhY2tldHMgY29tYmluZWQgd2l0aGluIG9uZSB0cmFuc2ZlciAqL1xuK1x0eyBcIjJwMXgtY29tYmluZWRcIiwgMiwgeyA4LCA4IH0sIDEsIHsgMTYgfSB9LFxuK1x0LyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgTUNUUCBwYXlsb2FkICovXG4rXHR7IFwiMXAyeC1zcGxpdC1wYXlsb2FkXCIsIDEsIHsgMTYgfSwgMiwgeyA4LCA4IH0gfSxcbitcdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIFVTQiB0cmFuc3BvcnQgaGVhZGVyICovXG4rXHR7IFwiMXAyeC1zcGxpdC11c2JoZHJcIiwgMSwgeyAxNiB9LCAyLCB7IDIsIDE0IH0gfSxcbitcdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIE1DVFAgaGVhZGVyICovXG4rXHR7IFwiMXAyeC1zcGxpdC1tY3RwaGRyXCIsIDEsIHsgMTYgfSwgMiwgeyA2LCAxMCB9IH0sXG4rXHQvKiBTaW5nbGUgcGFja2V0IHNwbGl0IG92ZXIgMyB0cmFuc2ZlcnMsIG1pZGRsZSBlbnRpcmVseSBjb250aW51YXRpb24gKi9cbitcdHsgXCIxcDN4LXNwbGl0XCIsIDEsIHsgMTIgfSwgMywgeyA0LCA0LCA0IH0gfSxcbitcdC8qIE1heC1zaXplZCBzaW5nbGUgdHJhbnNmZXIgKi9cbitcdHsgXCIxcDF4LWxhcmdlXCIsIDEsIHsgODE5MSB9LCAxLCB7IDgxOTEgfSB9LFxuK1x0LyogVHdvIGxhcmdlIHBhY2tldHMsIHNwbGl0IGF0IHRoZSB3b3JzdC1jYXNlIGZvciBhbGxvY2F0aW9uLCB3aXRoIGFcbitcdCAqIHNpbmdsZSBieXRlIGNvbnRpbnVpbmcgdGhlIHNwYW5cbitcdCAqL1xuK1x0eyBcIjJwMngtbGFyZ2Utc3BsaXRcIiwgMiwgeyA4MTkwLCA4MTkwIH0sIDIsIHsgODE5MSwgODE4OSB9IH0sXG4rfTtcbitcbitLVU5JVF9BUlJBWV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFucyxcbitcdFx0ICBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3RvX2Rlc2MpO1xuK1xuK3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzW10gPSB7XG4rXHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3Rfcnhfc2luZ2xlKSxcbitcdEtVTklUX0NBU0VfUEFSQU0obWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3BhbixcbitcdFx0XHQgbWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3Bhbl9nZW5fcGFyYW1zKSxcbitcdHt9XG4rfTtcbitcbitzdGF0aWMgc3RydWN0IGt1bml0X3N1aXRlIG1jdHBfdXNibGliX3Rlc3Rfc3VpdGUgPSB7XG4rXHQubmFtZSA9IFwibWN0cC11c2JsaWJcIixcbitcdC50ZXN0X2Nhc2VzID0gbWN0cF91c2JsaWJfdGVzdF9jYXNlcyxcbit9O1xuK1xuK2t1bml0X3Rlc3Rfc3VpdGUobWN0cF91c2JsaWJfdGVzdF9zdWl0ZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZjMDI4MjE1MmU2ZWZiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmNcbkBAIC0wLDAgKzEsNjE2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIG1jdHAtdXNibGliLmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBoZWxwZXIgbGlicmFyeVxuKyAqXG4rICogRFNQMDI4MyBpcyBhdmFpbGFibGUgYXQ6XG4rICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4xLjAucGRmXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL21jdHAtdXNiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvbWN0cC5oXHUwMDNlXG4rXG4rdm9pZCBtY3RwX3VzYmxpYl9yeF9pbml0KHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHUxNiBlcF9wa3RsZW4sIGJvb2wgc3Bhbilcbit7XG4rXHRtZW1zZXQocngsIDAsIHNpemVvZigqcngpKTtcbitcdHJ4LVx1MDAzZXNwYW4gPSBzcGFuO1xuK1x0cngtXHUwMDNlZXBfcGt0bGVuID0gZXBfcGt0bGVuO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9pbml0KTtcbitcbit2b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcbit7XG4rXHRrZnJlZV9za2IocngtXHUwMDNlc2tiKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfZmluaSk7XG4rXG4rLypcbisgKiBQcmVwYXJlIGEgdHJhbnNmZXIgYnVmZmVyIGZvciBmdXR1cmUgY29tcGxldGlvbjsgKmJ1ZnAgYW5kICpsZW5wIHdpbGxcbisgKiBiZSBwb3B1bGF0ZWQgb24gc3VjY2Vzcy5cbisgKi9cbitpbnQgbWN0cF91c2JsaWJfcnhfcHJlcGFyZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdCAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsXG4rXHRcdFx0ICAgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqbGVucCwgZ2ZwX3QgZ2ZwKVxuK3tcbitcdHN0cnVjdCBza19idWZmICpza2IgPSByeC1cdTAwM2Vza2I7XG4rXHR1bnNpZ25lZCBpbnQgbGVuID0gMDtcbitcbitcdGlmIChza2IgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VsZW4gXHUwMDNlPSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCkge1xuK1x0XHQvKiBzb21ldGhpbmcgbXVzdCBoYXZlIGdvbmUgdGVycmlibHkgd3JvbmcuIGNsZWFyIGFuZCByZXN0YXJ0ICovXG4rXHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChyeCk7XG4rXHRcdHNrYiA9IE5VTEw7XG4rXHR9XG4rXG4rXHRsZW4gPSByeC1cdTAwM2VzcGFuID8gQUxJR04oTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgsIHJ4LVx1MDAzZWVwX3BrdGxlbilcbitcdFx0OiBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFO1xuK1xuK1x0aWYgKCFza2IpIHtcbitcdFx0c2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwgbGVuLCBnZnApO1xuK1x0XHRpZiAoIXNrYilcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdH0gZWxzZSBpZiAoc2tiLVx1MDAzZWNsb25lZCB8fCBza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgcngtXHUwMDNlZXBfcGt0bGVuKSB7XG4rXHRcdC8qIFdlIGFsd2F5cyBuZWVkIHRvIHJlYWxsb2MgaWYgLVx1MDAzZWNsb25lZCwgYXMgd2UgY2Fubm90XG4rXHRcdCAqIHJlc3VibWl0IHRoZSAobm93LXNoYXJlZCkgc2tiIGJ1ZmZlciBmb3IgcG9zc2libGUgRE1BLlxuK1x0XHQgKlxuK1x0XHQgKiBPdGhlcndpc2UgKGlmIHdlIGhhdmUgYW4gdW4tY2xvbmVkIFNLQik6IGp1c3QgZW5zdXJlIHdlXG4rXHRcdCAqIGhhdmUgc3VmZmljaWVudCBzcGFjZSB0byBwcmV2ZW50IGJhYmJsZS4gU2luY2Ugd2UgYWxsb2NhdGVkXG4rXHRcdCAqIGZvciBtYXggc2l6ZSBpbiB0aGUgbGFzdCBwcmVwYXJlIChhbmQgaGF2ZSBub3QgY29uc3VtZWQgYW55XG4rXHRcdCAqIG9mIHRoYXQgc3BhY2UgZm9yIGEgcHJpb3IgTUNUUCBwYWNrZXQsIGJlY2F1c2UgIWNsb25lZCksIHdlXG4rXHRcdCAqIGhhdmUgc3VmZmljaWVudCBkYXRhIHRvIGZpbmlzaCB0aGUgY3VycmVudCBNQ1RQIHBhY2tldC5cbitcdFx0ICovXG4rXHRcdHN0cnVjdCBza19idWZmICpza2IyO1xuK1xuK1x0XHRza2IyID0gc2tiX2NvcHlfZXhwYW5kKHNrYiwgMCwgbGVuLCBnZnApO1xuK1x0XHRpZiAoIXNrYjIpXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4rXHRcdHNrYiA9IHNrYjI7XG4rXHR9XG4rXG4rXHRyeC1cdTAwM2Vza2IgPSBza2I7XG4rXG4rXHQvKiBTcGFubmluZyBtb2RlIGFsbG93cyBaTFBzLCBzbyB3ZSBkb24ndCByZXF1aXJlIGV4YWN0bHkgb25lXG4rXHQgKiB0cmFuc2ZlciBwYWNrZXQuIElmIHdlIGhhdmUgZXh0cmEgdGFpbHJvb20sIG1heSBhcyB3ZWxsIHVzZSBpdCxcbitcdCAqIGFuZCB3ZSBoYXZlIGVuc3VyZWQgdGhhdCB0aGUgdGFpbHJvb20gXHUwMDNlPSBlcF9wa3RsZW4uXG4rXHQgKi9cbitcdGlmIChyeC1cdTAwM2VzcGFuKVxuK1x0XHRsZW4gPSBBTElHTl9ET1dOKHNrYl90YWlscm9vbShza2IpLCByeC1cdTAwM2VlcF9wa3RsZW4pO1xuK1xuK1x0KmJ1ZnAgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7XG4rXHQqbGVucCA9IGxlbjtcbitcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKTtcbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gdGhpc19jcHVfcHRyKG5ldGRldi1cdTAwM2Vkc3RhdHMpO1xuK1x0c3RydWN0IG1jdHBfc2tiX2NiICpjYjtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuK1x0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpO1xuK1xuK1x0Lyogd2UncmUgY2FsbGVkIGZyb20gYW4gVVJCIGNvbXBsZXRpb24gaGFuZGxlciwgYW5kIGNhbm5vdCBhc3N1bWUgbG9jYWxcbitcdCAqIGlycXMgYXJlIGFsd2F5cyBkaXNhYmxlZFxuK1x0ICovXG4rXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuK1x0dTY0X3N0YXRzX2luYyhcdTAwMjZkc3RhdHMtXHUwMDNlcnhfcGFja2V0cyk7XG4rXHR1NjRfc3RhdHNfYWRkKFx1MDAyNmRzdGF0cy1cdTAwM2VyeF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuK1xuK1x0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7XG4rXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbitcdGNiID0gX19tY3RwX2NiKHNrYik7XG4rXHRjYi1cdTAwM2VoYWxlbiA9IDA7XG4rXHRuZXRpZl9yeChza2IpO1xuK31cbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2Vkc3RhdHMpO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCk7XG4rXHR1NjRfc3RhdHNfaW5jKFx1MDAyNmRzdGF0cy1cdTAwM2VyeF9kcm9wcyk7XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuK31cbitcbisvKlxuKyAqIFJlY2VpdmUgYSBVU0IgY29tcGxldGlvbiBvZiBAbGVuIGJ5dGVzIG9mIGluY29taW5nIGRhdGEuIFdlIHdpbGwgdGhlbiBzcGxpdFxuKyAqIHRoaXMgaW50byBwYWNrZXRzIGFuZCBuZXRpZl9yeCgpIGVhY2guIEludGVuZGVkIHRvIGJlIGNhbGxlZCBpbiBhdG9taWNcbisgKiBjb250ZXh0cyAtIGllLiwgVVJCIGNvbXBsZXRpb24uXG4rICpcbisgKiBBc3N1bWVzIEBuZXRkZXYgdXNlcyBkc3RhdHMuXG4rICovXG4raW50IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LVx1MDAzZXNrYjtcbitcdGludCByYyA9IDA7XG4rXG4rXHRfX3NrYl9wdXQoc2tiLCBsZW4pO1xuK1xuK1x0Zm9yICg7Oykge1xuK1x0XHRzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7XG4rXHRcdHN0cnVjdCBza19idWZmICpza2IyO1xuK1x0XHQvKiBsZW5ndGggb2YgTUNUUCBwYWNrZXQsIGluY2x1ZGluZyBVU0IgaGVhZGVyICovXG4rXHRcdHUxNiBwa3RfbGVuO1xuK1xuK1x0XHQvKiBubyBoZWFkZXIgeWV0LCByZXN1Ym1pdCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHBhY2tldCAqL1xuK1x0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKCpoZHIpKSB7XG4rXHRcdFx0aWYgKCFyeC1cdTAwM2VzcGFuKSB7XG4rXHRcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbitcdFx0XHRcdFx0ICAgXCJyeDogdGlueSB4ZmVyICglZCkgaW4gbm9uLXNwYW4gbW9kZVwiLFxuK1x0XHRcdFx0XHQgICBza2ItXHUwMDNlbGVuKTtcbitcdFx0XHRcdHJjID0gLUVOT01TRztcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc2V0O1xuK1x0XHRcdH1cbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHRoZHIgPSAoc3RydWN0IG1jdHBfdXNiX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuK1xuK1x0XHRpZiAoYmUxNl90b19jcHUoaGRyLVx1MDAzZWlkKSAhPSBNQ1RQX1VTQl9ETVRGX0lEKSB7XG4rXHRcdFx0LyogQnkgcmVzZXR0aW5nIGhlcmUsIHdpbGwgc3RhcnQgdGhlIG5leHQgSU4gdHJhbnNmZXJcbitcdFx0XHQgKiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgc2tiLiBUaGlzIHdpbGwgbWVhblxuK1x0XHRcdCAqIHdlIHJlLXN5bmMgd2hlbiB3ZSBuZXh0IHNlZSBhIHNwYW5uZWQgcGFja2V0IGFsaWduZWRcbitcdFx0XHQgKiB3aXRoIHRoZSBzdGFydCBvZiBhIHRyYW5zZmVyLlxuK1x0XHRcdCAqXG4rXHRcdFx0ICogSW4gbm9uLXNwYW5uaW5nIG1vZGUsIHRoaXMganVzdCBtZWFucyB3ZSdsbCBkcm9wXG4rXHRcdFx0ICogdGhlIGN1cnJlbnQgdHJhbnNmZXIgb25seVxuK1x0XHRcdCAqL1xuK1x0XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcInJ4OiBpbnZhbGlkIGlkICUwNHhcXG5cIixcbitcdFx0XHRcdCAgIGJlMTZfdG9fY3B1KGhkci1cdTAwM2VpZCkpO1xuK1x0XHRcdHJjID0gLUVQUk9UTztcbitcdFx0XHRnb3RvIGVycl9yZXNldDtcbitcdFx0fVxuK1xuK1x0XHRwa3RfbGVuID0gYmUxNl90b19jcHUoaGRyLVx1MDAzZWxlbik7XG4rXHRcdC8qIHYxLjEsIHdpdGggc3BhbiBlbmFibGVkLCBoYXMgYSAxMy1iaXQgbGVuZ3RoICovXG4rXHRcdHBrdF9sZW4gXHUwMDI2PSByeC1cdTAwM2VzcGFuID9cbitcdFx0XHRNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYO1xuK1x0XHRpZiAocGt0X2xlbiBcdTAwM2Mgc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKHN0cnVjdCBtY3RwX2hkcikpIHtcbitcdFx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCJyeDogaW52YWxpZCBsZW4gJWRcXG5cIiwgcGt0X2xlbik7XG4rXHRcdFx0cmMgPSAtRVBST1RPO1xuK1x0XHRcdGdvdG8gZXJyX3Jlc2V0O1xuK1x0XHR9XG4rXG4rXHRcdC8qIHNwYW4gY29udGludWVzIHRvIHRoZSBuZXh0IHRyYW5zZmVyLCByZXN1Ym1pdCAqL1xuK1x0XHRpZiAocGt0X2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbikge1xuK1x0XHRcdGlmICghcngtXHUwMDNlc3Bhbikge1xuK1x0XHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4rXHRcdFx0XHRcdCAgIFwicng6IHNob3J0IHhmZXIgKCVkIHZzICVkKSBpbiBub24tc3BhbiBtb2RlXCIsXG4rXHRcdFx0XHRcdCAgIHBrdF9sZW4sIHNrYi1cdTAwM2VsZW4pO1xuK1x0XHRcdFx0cmMgPSAtRU5PTVNHO1xuK1x0XHRcdFx0Z290byBlcnJfcmVzZXQ7XG4rXHRcdFx0fVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdC8qIHdlIGhhdmUgKGV4YWN0bHkpIGEgY29tcGxldGUgcGFja2V0LCBSWCBpdCBkaXJlY3RseSAqL1xuK1x0XHRpZiAocGt0X2xlbiA9PSBza2ItXHUwMDNlbGVuKSB7XG4rXHRcdFx0bWN0cF91c2JsaWJfcngobmV0ZGV2LCBza2IpO1xuK1x0XHRcdHJ4LVx1MDAzZXNrYiA9IE5VTEw7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0LyogbW9yZSBwYWNrZXRzIGZvbGxvdyAtIFJYIGEgY2xvbmUgc28gdGhhdCB3ZSBjYW4gY29udGludWVcbitcdFx0ICogcHJvY2Vzc2luZyB0aGUgY3VycmVudCBTS0IsIHdoaWNoIG1heSBiZSB0aGUgc3RhcnQgb2YgYVxuK1x0XHQgKiBzcGFuLlxuK1x0XHQgKi9cbitcdFx0c2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuK1x0XHRpZiAoc2tiMikge1xuK1x0XHRcdHNrYl90cmltKHNrYjIsIHBrdF9sZW4pO1xuK1x0XHRcdG1jdHBfdXNibGliX3J4KG5ldGRldiwgc2tiMik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0bWN0cF91c2JsaWJfcnhfc3RhdHNfc2luZ2xlX2Ryb3AobmV0ZGV2KTtcbitcdFx0fVxuK1x0XHRza2JfcHVsbChza2IsIHBrdF9sZW4pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3Jlc2V0OlxuK1x0ZGV2X2tmcmVlX3NrYl9hbnkocngtXHUwMDNlc2tiKTtcbitcdHJ4LVx1MDAzZXNrYiA9IE5VTEw7XG4rXHRyZXR1cm4gcmM7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKTtcbitcbisvKlxuKyAqIENhbmNlbCBhIHJ4IGNvbnRleHQ7IHN1YnNlcXVlbnQgcHJlcGFyZS9jb21wbGV0ZSBjYWxscyB3aWxsIG5vdCBiZSBhXG4rICogY29udGludWF0aW9uIG9mIGFueSBkYXRhIGFscmVhZHkgcmVjZWl2ZWQuXG4rICovXG4rdm9pZCBtY3RwX3VzYmxpYl9yeF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcbit7XG4rXHRkZXZfa2ZyZWVfc2tiX2FueShyeC1cdTAwM2Vza2IpO1xuK1x0cngtXHUwMDNlc2tiID0gTlVMTDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfY2FuY2VsKTtcbitcbisvKiB0cmFuc21pdCBjb250ZXh0OiBlbmNhcHN1bGF0ZXMgb25lIHRyYW5zZmVyICovXG4rc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCB7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4O1xuK1x0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2JzO1xuK1x0dW5zaWduZWQgaW50IGJ1Zl9sZW4sIGxlbjtcbitcdGVudW0gbWN0cF91c2JsaWJfdHhfYnVmX3R5cGUge1xuK1x0XHRUWF9TSU5HTEUsXG4rXHRcdFRYX0ZMQVQsXG4rXHR9IGJ1Zl90eXBlO1xuK1x0dTggYnVmW10gX19fX2NhY2hlbGluZV9hbGlnbmVkO1xuK307XG4rXG4rdm9pZCBtY3RwX3VzYmxpYl90eF9pbml0KHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsXG4rXHRcdFx0IGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgKm9wcyxcbitcdFx0XHQgdm9pZCAqcHJpdiwgYm9vbCBzcGFuKVxuK3tcbitcdG1lbXNldCh0eCwgMCwgc2l6ZW9mKCp0eCkpO1xuK1x0dHgtXHUwMDNlb3BzID0gKm9wcztcbitcdHR4LVx1MDAzZXByaXYgPSBwcml2O1xuK1x0dHgtXHUwMDNlc3BhbiA9IHNwYW47XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0eC1cdTAwM2Vsb2NrKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfaW5pdCk7XG4rXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90eF9hdmFpbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgpXG4re1xuK1x0cmV0dXJuIGN0eC1cdTAwM2VidWZfdHlwZSA9PSBUWF9TSU5HTEUgPyAwIDogY3R4LVx1MDAzZWJ1Zl9sZW4gLSBjdHgtXHUwMDNlbGVuO1xuK31cbitcbitzdGF0aWMgYm9vbCBtY3RwX3VzYmxpYl90eF9zaG91bGRfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgpXG4re1xuK1x0LyogVXNlIHRoZSBiYXNlbGluZSBsZW5ndGggKGllLCBCVFUpIGFzIGFuIGFwcHJveGltYXRlXG4rXHQgKiBcInJlYXNvbmFibHktc2l6ZWRcIiBwYWNrZXQgd2UgY291bGQgZXhwZWN0LiBJZiB0aGVyZSBpc1xuK1x0ICogaW5zdWZmaWNpZW50IGNhcGFjaXR5IGZvciB0aGF0LCB0aGVuIHNlbmQuXG4rXHQgKi9cbitcdGNvbnN0IHNpemVfdCBwa3RfbGVuID0gTUNUUF9VU0JfQlRVICsgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpO1xuK1xuK1x0cmV0dXJuIG1jdHBfdXNibGliX3R4X2F2YWlsKGN0eCkgXHUwMDNjIHBrdF9sZW47XG4rfVxuK1xuKy8qXG4rICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUgLSBpbmRpY2F0aW5nIHRoYXQgdGhlIG5ldyBza2JcbisgKiBjb3VsZCBub3QgYmUgYXBwZW5kZWQuIFNvLCBlcnJvcnMgcmVwb3J0ZWQgaGVyZSB0byB0aGUgVFggcGF0aCB3aWxsIHJlc3VsdFxuKyAqIGluIHRoZSBUWCBiZWluZyB0cmFuc21pdHRlZC5cbisgKi9cbitzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X2FwcGVuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsXG4rXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRpZiAoY3R4LVx1MDAzZWJ1Zl90eXBlID09IFRYX1NJTkdMRSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAobWN0cF91c2JsaWJfdHhfYXZhaWwoY3R4KSBcdTAwM2Mgc2tiLVx1MDAzZWxlbilcbitcdFx0cmV0dXJuIC1FTk9CVUZTO1xuK1xuK1x0X19za2JfcXVldWVfdGFpbChcdTAwMjZjdHgtXHUwMDNlc2ticywgc2tiKTtcbitcbitcdGN0eC1cdTAwM2VsZW4gKz0gc2tiLVx1MDAzZWxlbjtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KVxuK3tcbitcdHZvaWQgKmJ1ZjtcbitcbitcdC8qIElmIHdlIGhhdmUgYSBxbGVuIG9mIDEsIHdlIG9ubHkgZW5kZWQgdXAgcGFja2luZyBhIHNpbmdsZSBza2IsXG4rXHQgKiBkZXNwaXRlIGFsbG9jYXRpbmcgZm9yIG11bHRpcGxlLiBTa2lwIHRoZSBjb3B5IGFuZCBzZW5kIGRpcmVjdGx5XG4rXHQgKiBmcm9tIHRoZSBza2IgZGF0YS5cbitcdCAqL1xuK1x0aWYgKGN0eC1cdTAwM2VidWZfdHlwZSA9PSBUWF9TSU5HTEUgfHwgY3R4LVx1MDAzZXNrYnMucWxlbiA9PSAxKSB7XG4rXHRcdGJ1ZiA9IGN0eC1cdTAwM2Vza2JzLm5leHQtXHUwMDNlZGF0YTtcbitcbitcdH0gZWxzZSBpZiAoY3R4LVx1MDAzZWJ1Zl90eXBlID09IFRYX0ZMQVQpIHtcbitcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdFx0c2l6ZV90IHBvcyA9IDA7XG4rXG4rXHRcdHNrYl9xdWV1ZV93YWxrKFx1MDAyNmN0eC1cdTAwM2Vza2JzLCBza2IpIHtcbitcdFx0XHRza2JfY29weV9iaXRzKHNrYiwgMCwgY3R4LVx1MDAzZWJ1ZiArIHBvcywgc2tiLVx1MDAzZWxlbik7XG4rXHRcdFx0cG9zICs9IHNrYi1cdTAwM2VsZW47XG4rXHRcdH1cbitcbitcdFx0YnVmID0gY3R4LVx1MDAzZWJ1ZjtcbitcdH0gZWxzZSB7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGN0eC1cdTAwM2V0eC1cdTAwM2VvcHMuc2VuZChjdHgsIGJ1ZiwgY3R4LVx1MDAzZWxlbik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCxcbitcdFx0XHRcdCAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcbitcdGlmICghY3R4KVxuK1x0XHRyZXR1cm47XG4rXG4rXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2Y3R4LVx1MDAzZXNrYnMpKSAhPSBOVUxMKVxuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueV9yZWFzb24oc2tiLCByZWFzb24pO1xuK1x0a2ZyZWUoY3R4KTtcbit9XG4rXG4rdm9pZCAqbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4KVxuK3tcbitcdHJldHVybiB0eF9jdHgtXHUwMDNldHgtXHUwMDNlcHJpdjtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfY3R4X3ByaXYpO1xuK1xuKy8qIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgdHggXHUwMDI2IGNvbXBsZXRpb24gcGF0aCBpcyBxdWllc2NlZCAqL1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KVxuK3tcbitcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHR4LVx1MDAzZWN1cl9jdHgsIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfZmluaSk7XG4rXG4rLyogTWF4IHNpemUgb2YgYSBzcGFubmVkIFRYLiBTaW5jZSB3ZSBhbGxvY2F0ZSBhIHNlcGFyYXRlIHNwYW4gYnVmZmVyLCBsaW1pdFxuKyAqIHRoZSB0eC10aW1lIGFsbG9jYXRpb25zIHRvIDRrLiBMYXJnZXIgcGFja2V0cyB3aWxsIGJlIHNlbnQgYXMgc2luZ2xlXG4rICogdHJhbnNmZXJzLlxuKyAqL1xuK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgVFhfU1BBTl9NQVggPSA0MDk2IC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHgpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpcbittY3RwX3VzYmxpYl90eF9jdHhfY3JlYXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0ICBib29sIHNpbmdsZSlcbit7XG4rXHRlbnVtIG1jdHBfdXNibGliX3R4X2J1Zl90eXBlIHR5cGU7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHg7XG4rXHRzaXplX3Qgc3ogPSAwO1xuK1xuK1x0aWYgKHNpbmdsZSB8fCBza2ItXHUwMDNlbGVuIFx1MDAzZSBUWF9TUEFOX01BWCkge1xuK1x0XHR0eXBlID0gVFhfU0lOR0xFO1xuK1x0fSBlbHNlIHtcbitcdFx0dHlwZSA9IFRYX0ZMQVQ7XG4rXHRcdHN6ID0gdHgtXHUwMDNlc3BhbiA/IFRYX1NQQU5fTUFYIDogTUNUUF9VU0JfMV8wX1hGRVJfU0laRTtcbitcdH1cbitcbitcdGN0eCA9IGt6YWxsb2NfZmxleCgqY3R4LCBidWYsIHN6LCBHRlBfQVRPTUlDKTtcbitcdGlmICghY3R4KVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGN0eC1cdTAwM2V0eCA9IHR4O1xuK1x0Y3R4LVx1MDAzZWJ1Zl90eXBlID0gdHlwZTtcbitcdGN0eC1cdTAwM2VidWZfbGVuID0gc3o7XG4rXHRjdHgtXHUwMDNlbGVuID0gc2tiLVx1MDAzZWxlbjtcbitcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2Y3R4LVx1MDAzZXNrYnMpO1xuK1x0X19za2JfcXVldWVfdGFpbChcdTAwMjZjdHgtXHUwMDNlc2ticywgc2tiKTtcbitcbitcdHJldHVybiBjdHg7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsXG4rXHRcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdGJvb2wgb2spXG4re1xuK1x0c3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSBnZXRfY3B1X3B0cihkZXYtXHUwMDNlZHN0YXRzKTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuK1x0aWYgKG9rKSB7XG4rXHRcdC8qIE9ubHkgaW5jbHVkZSB0aGUgbmV0d29yay1sYXllciBkYXRhIGluIHR4IHN0YXRzOyB3ZSBrbm93XG4rXHRcdCAqIHRoYXQgdGhlcmUgaXMgYSA0LWJ5dGUgaGVhZGVyIHB1c2hlZCB0byBhbGwgc2ticyBpblxuK1x0XHQgKiB0eF9za2JfcHJlcGFyZSgpXG4rXHRcdCAqL1xuK1x0XHR1NjQgbiA9IGN0eC1cdTAwM2Vza2JzLnFsZW47XG4rXHRcdHM2NCBsZW4gPSBjdHgtXHUwMDNlbGVuIC0gKG4gKiBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpO1xuK1xuK1x0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNmRzdGF0cy1cdTAwM2V0eF9wYWNrZXRzLCBuKTtcbitcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZkc3RhdHMtXHUwMDNldHhfYnl0ZXMsIGxlbik7XG4rXHR9IGVsc2Uge1xuK1x0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNmRzdGF0cy1cdTAwM2V0eF9kcm9wcywgY3R4LVx1MDAzZXNrYnMucWxlbik7XG4rXHR9XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuK1x0cHV0X2NwdV9wdHIoZGV2LVx1MDAzZWRzdGF0cyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSBnZXRfY3B1X3B0cihkZXYtXHUwMDNlZHN0YXRzKTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuK1x0dTY0X3N0YXRzX2luYyhcdTAwMjZkc3RhdHMtXHUwMDNldHhfZHJvcHMpO1xuK1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcdHB1dF9jcHVfcHRyKGRldi1cdTAwM2Vkc3RhdHMpO1xuK31cbitcbisvKlxuKyAqIENvbXBsZXRpb24gZm9yIHRoZSAtXHUwMDNlc2VuZCgpIG9wLiBUaGlzIHdpbGwgdXBkYXRlIG5ldGRldiBzdGF0cyBhbmRcbisgKiBmcmVlIHRoZSB0eCBjb250ZXh0LlxuKyAqXG4rICogTGlrZWx5IGNhbGxlZCBmcm9tIChhdG9taWMpIFVSQiBjb21wbGV0aW9uIGNvbnRleHQuXG4rICovXG4rdm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcbitcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBvaylcbit7XG4rXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPVxuK1x0XHRvayA/IFNLQl9DT05TVU1FRCA6IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xuK1xuK1x0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKHR4X2N0eCwgZGV2LCBvayk7XG4rXHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZSh0eF9jdHgsIHJlYXNvbik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUpO1xuK1xuKy8qIFByZXBhcmUgYSBza2IgZm9yIHB1c2goKVxuKyAqXG4rICogT24gZXJyb3IsIHBvcHVsYXRlcyBAcmVhc29uLlxuKyAqL1xuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2tiX3ByZXBhcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzcGFuLFxuK1x0XHRcdFx0ICAgICAgZW51bSBza2JfZHJvcF9yZWFzb24gKnJlYXNvbilcbit7XG4rXHR1bnNpZ25lZCBsb25nIHBsZW4sIG1heF9sZW47XG4rXHRzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7XG4rXHRpbnQgcmM7XG4rXG4rXHRtYXhfbGVuID0gc3BhbiA/IE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYIDogTUNUUF9VU0JfMV8wX1BLVExFTl9NQVg7XG4rXG4rXHRwbGVuID0gc2tiLVx1MDAzZWxlbjtcbitcdGlmIChwbGVuICsgc2l6ZW9mKCpoZHIpIFx1MDAzZSBtYXhfbGVuKSB7XG4rXHRcdCpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUEtUX1RPT19CSUc7XG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXHR9XG4rXG4rXHRyYyA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqaGRyKSk7XG4rXHRpZiAocmMpIHtcbitcdFx0KnJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT01FTTtcbitcdFx0cmV0dXJuIHJjO1xuK1x0fVxuK1xuK1x0aGRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKmhkcikpO1xuK1x0aWYgKCFoZHIpIHtcbitcdFx0KnJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT01FTTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRoZHItXHUwMDNlaWQgPSBjcHVfdG9fYmUxNihNQ1RQX1VTQl9ETVRGX0lEKTtcbitcdGhkci1cdTAwM2VsZW4gPSBjcHVfdG9fYmUxNihwbGVuICsgc2l6ZW9mKCpoZHIpKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIFB1c2ggYSBuZXcgc2tiIHRvIHRoZSB0cmFuc2Zlci4gTWF5IHJlc3VsdCBpbiB6ZXJvIG9yIG1vcmUgY2FsbHMgdG9cbisgKiBvcHMtXHUwMDNlc2VuZCgpLlxuKyAqXG4rICogVGFrZXMgb3duZXJzaGlwIG9mIEBza2IsIGluY2x1ZGluZyBvbiBlcnJvci5cbisgKi9cbitpbnQgbWN0cF91c2JsaWJfdHhfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsXG4rXHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBtb3JlKVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCwgKnNlbmRfY3R4ID0gTlVMTDtcbitcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjtcbitcdGNvbnN0IGludCBtYXhfdHJpZXMgPSAzO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGludCB0cnkgPSAxLCByYztcbitcbitcdHJjID0gbWN0cF91c2JsaWJfdHhfc2tiX3ByZXBhcmUoc2tiLCB0eC1cdTAwM2VzcGFuLCBcdTAwMjZyZWFzb24pO1xuK1x0aWYgKHJjKSB7XG4rXHRcdG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7XG4rXHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xuK1x0XHQvKiB3ZSBtYXkgc3RpbGwgbmVlZCB0byBwcm9jZWVkLCBpbiBjYXNlIGFuIGV4aXN0aW5nIGN0eFxuK1x0XHQgKiBpcyBub3cgc2VuZGFibGUgKGllLjogIW1vcmUpLlxuK1x0XHQgKi9cbitcdFx0c2tiID0gTlVMTDtcbitcdH1cbitcbitcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xuK3JldHJ5OlxuK1x0LyogVHJ5IGFuZCBxdWV1ZSB0byB0aGUgY3VycmVudCBjb250ZXh0LiBXZSBleGl0IHRoaXMgY3JpdGljYWwgc2VjdGlvblxuK1x0ICogd2l0aCBhIGZldyBiaXRzIG9mIHN0YXRlOlxuK1x0ICogIC0gc2VuZF9jdHg6IGluZGljYXRpbmcgYSBwcmlvciBjb250ZXh0IHRoYXQgbmVlZHMgdG8gYmUgc2VudFxuK1x0ICogIC0gc2tiOiBpbmRpY2F0aW5nIHRoYXQgYSBza2Igc3RpbGwgbmVlZHMgdG8gYmUgcXVldWVkL3NlbnRcbitcdCAqL1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0Y3R4ID0gdHgtXHUwMDNlY3VyX2N0eDtcbitcdGlmIChjdHgpIHtcbitcdFx0aWYgKHNrYikge1xuK1x0XHRcdHJjID0gbWN0cF91c2JsaWJfdHhfYXBwZW5kKGN0eCwgc2tiKTtcbitcdFx0XHRpZiAocmMpIHtcbitcdFx0XHRcdC8qIGNhbid0IGFwcGVuZCB0byB0aGUgcGVuZGluZyB0eCAtIGRldGFjaCBmb3JcbitcdFx0XHRcdCAqIHNlbmRpbmcsIGFuZCB3ZSdsbCBjcmVhdGUgYSBuZXcgdHggYmVsb3cuXG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdHN3YXAodHgtXHUwMDNlY3VyX2N0eCwgc2VuZF9jdHgpO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHQvKiB3ZSBoYXZlIHF1ZXVlZCAqL1xuK1x0XHRcdFx0c2tiID0gTlVMTDtcbitcdFx0XHRcdGlmICghbW9yZSB8fCBtY3RwX3VzYmxpYl90eF9zaG91bGRfc2VuZChjdHgpKVxuK1x0XHRcdFx0XHRzd2FwKHR4LVx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcbitcdFx0XHR9XG4rXHRcdH0gZWxzZSBpZiAoIW1vcmUpIHtcbitcdFx0XHRzd2FwKHR4LVx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcbitcdFx0fVxuK1x0fVxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHRpZiAoc2VuZF9jdHgpIHtcbitcdFx0cmMgPSBtY3RwX3VzYmxpYl90eF9zZW5kKHNlbmRfY3R4KTtcbitcdFx0aWYgKHJjKSB7XG4rXHRcdFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKHNlbmRfY3R4LCBkZXYsIGZhbHNlKTtcbitcdFx0XHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShzZW5kX2N0eCwgcmVhc29uKTtcbitcdFx0fVxuK1x0XHRzZW5kX2N0eCA9IE5VTEw7XG4rXHR9XG4rXG4rXHQvKiB3ZSBoYXZlIGVpdGhlciBxdWV1ZWQsIG9yIHRoZSBwcmVwYXJlIGZhaWxlZDsgbm90aGluZyBtb3JlIHRvIGRvICovXG4rXHRpZiAoIXNrYilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRjdHggPSBtY3RwX3VzYmxpYl90eF9jdHhfY3JlYXRlKHR4LCBza2IsICFtb3JlKTtcbitcdGlmICghY3R4KSB7XG4rXHRcdG5ldGRldl9kYmcoZGV2LCBcIlRYIGNvbnRleHQgY3JlYXRlIGZhaWxlZFxcblwiKTtcbitcdFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3AoZGV2KTtcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0LyogaWYgd2UncmUgcmVhZHkgdG8gc2VuZCBub3csIG5vIG5lZWQgdG8gZW5xdWV1ZSAqL1xuK1x0aWYgKCFtb3JlIHx8IG1jdHBfdXNibGliX3R4X3Nob3VsZF9zZW5kKGN0eCkpIHtcbitcdFx0cmMgPSBtY3RwX3VzYmxpYl90eF9zZW5kKGN0eCk7XG4rXHRcdGlmIChyYykge1xuK1x0XHRcdG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShjdHgsIGRldiwgZmFsc2UpO1xuK1x0XHRcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKGN0eCwgcmVhc29uKTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnR4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdGlmICghdHgtXHUwMDNlY3VyX2N0eCkge1xuK1x0XHR0eC1cdTAwM2VjdXJfY3R4ID0gY3R4O1xuK1x0XHRjdHggPSBOVUxMO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHQvKiB3ZSBtYXkgaGF2ZSBsb3N0IHRoZSByYWNlIHdpdGggYSBjb25jdXJyZW50IHR4OyBzaG91bGRuJ3QgaGFwcGVuLCBhc1xuK1x0ICogbmRvX3N0YXJ0X3htaXQgc2hvdWxkIGJlIHNlcmlhbGlzZWQgb3ZlciBvbmUgcXVldWUsIGJ1dCB0cnkgYWdhaW5cbitcdCAqIGZyb20gdGhlIHRvcCwgYXMgd2UgbWF5IGJlIGFibGUgdG8gcXVldWUgdGhlIHNrYiB0byB0aGF0IGNvbnRleHQuXG4rXHQgKi9cbitcdGlmIChjdHgpIHtcbitcdFx0LyogdW5saW5rIHRoZSBuZXcgKHNvbGUpIHNrYiwgd2UgZG9uJ3Qgd2FudCBpdCBmcmVlZCB3aXRoIGN0eCAqL1xuK1x0XHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2Y3R4LVx1MDAzZXNrYnMpO1xuK1x0XHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShjdHgsIHJlYXNvbik7XG4rXHRcdGlmICgrK3RyeSBcdTAwM2UgbWF4X3RyaWVzKSB7XG4rXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3AoZGV2KTtcbitcdFx0XHRyZXR1cm4gLUVCVVNZO1xuK1x0XHR9XG4rXHRcdGdvdG8gcmV0cnk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfcHVzaCk7XG4rXG4rLyogQ2FuY2VsIGEgdHg6IGFueSB1bi1zZW50IGNvbnRleHQgaXMgcmVsZWFzZWQuICovXG4rdm9pZCBtY3RwX3VzYmxpYl90eF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4ID0gTlVMTDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRzd2FwKHR4LVx1MDAzZWN1cl9jdHgsIGN0eCk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnR4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdGlmICghY3R4KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoY3R4LCBkZXYsIGZhbHNlKTtcbitcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKGN0eCwgcmVhc29uKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfY2FuY2VsKTtcbitcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbitNT0RVTEVfQVVUSE9SKFwiSmVyZW15IEtlcnIgXHUwMDNjamtAY29kZWNvbnN0cnVjdC5jb20uYXVcdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiTUNUUCBVU0IgdHJhbnNwb3J0IGxpYnJhcnlcIik7XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUKVxuKyNpbmNsdWRlIFwibWN0cC11c2JsaWItdGVzdC5jXCJcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9tY3RwLXVzYi5oIGIvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaFxuaW5kZXggYTJmNmYxZTA0ZWZiZDAuLjM1Y2MyY2MxNWY5YTA0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaFxuKysrIGIvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaFxuQEAgLTIsNyArMiw3IEBAXG4gLypcbiAgKiBtY3RwLXVzYi5oIC0gTUNUUCBVU0IgdHJhbnNwb3J0IGJpbmRpbmc6IGNvbW1vbiBkZWZpbml0aW9ucyxcbiAgKiBiYXNlZCBvbiBETVRGMDI4MyBzcGVjaWZpY2F0aW9uOlxuLSAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMC4xLnBkZlxuKyAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMS4wLnBkZlxuICAqXG4gICogVGhlc2UgYXJlIHByb3RvY29sLWxldmVsIGRlZmluaXRpb25zLCB0aGF0IG1heSBiZSBzaGFyZWQgYmV0d2VlbiBob3N0XG4gICogYW5kIGdhZGdldCBkcml2ZXJzLlxuQEAgLTEzLDE4ICsxMyw5NiBAQFxuICNpZm5kZWYgX19MSU5VWF9VU0JfTUNUUF9VU0JfSFxuICNkZWZpbmUgX19MSU5VWF9VU0JfTUNUUF9VU0JfSFxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4rLypcbisgKiBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydCBoZWFkZXIuIERTUDAyODMgdjEuMCBoYXMgYW4gOC1iaXQgbGVuZ3RoIGZpZWxkXG4rICogKHByZWNlZGVkIGJ5IDggcmVzZXJ2ZWQgYml0cyksIHYxLjEgaGFzIGEgMTMtYml0IGxlbmd0aCBmaWVsZCAocHJlY2VkZWQgYnlcbisgKiAzIHJlc2VydmVkIGJpdHMpLiBXZSB1c2UgYSBiZTE2IGZvciBvdXIgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgbGFyZ2VyIHYxLjFcbisgKiByZXByZXNlbnRhdGlvbiwgYW5kIG1hc2sgYXMgYXBwcm9wcmlhdGUuXG4rICovXG4gc3RydWN0IG1jdHBfdXNiX2hkciB7XG4gXHRfX2JlMTZcdGlkO1xuLVx0dThcdHJzdmQ7XG4tXHR1OFx0bGVuO1xuK1x0X19iZTE2XHRsZW47XG4gfSBfX3BhY2tlZDtcbiBcbi0jZGVmaW5lIE1DVFBfVVNCX1hGRVJfU0laRVx0NTEyXG4rLyogbWF4IHRyYW5zZmVyIHNpemUgZm9yIERTUDAyODMgdjEuMCAqL1xuKyNkZWZpbmUgTUNUUF9VU0JfMV8wX1hGRVJfU0laRVx0NTEyXG4gI2RlZmluZSBNQ1RQX1VTQl9CVFVcdFx0NjhcbiAjZGVmaW5lIE1DVFBfVVNCX01UVV9NSU5cdE1DVFBfVVNCX0JUVVxuLSNkZWZpbmUgTUNUUF9VU0JfTVRVX01BWFx0KFU4X01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSlcbisjZGVmaW5lIE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYXHRVOF9NQVhcbisjZGVmaW5lIE1DVFBfVVNCXzFfMF9NVFVfTUFYXHQoTUNUUF9VU0JfMV8wX1BLVExFTl9NQVggLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWFx0R0VOTUFTSygxMiwgMClcbisjZGVmaW5lIE1DVFBfVVNCXzFfMV9NVFVfTUFYXHQoTUNUUF9VU0JfMV8xX1BLVExFTl9NQVggLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpXG4gI2RlZmluZSBNQ1RQX1VTQl9ETVRGX0lEXHQweDFhYjRcbiBcbisvKiBtY3RwLXVzYmxpYiAqL1xuK1xuKy8qXG4rICogUlggaGFuZGxlOiBkcml2ZXJzIHdpbGwgdHlwaWNhbGx5IGNyZWF0ZSBvbmUgb24gaW5pdCwgd2hpY2ggcGVyc2lzdHMgZm9yXG4rICogdGhlIGxpZmUgb2YgdGhlIGRyaXZlci4gVGhlIHNhbWUgaGFuZGxlIGlzIHVzZWQgZm9yIHByb2dyZXNzaXZlXG4rICogcHJlcGFyZSAtXHUwMDNlIGNvbXBsZXRlIG9wZXJhdGlvbnMgKGZvciBlYWNoIGluY29taW5nIFVTQiB0cmFuc2ZlciksIHdoaWNoXG4rICogcmVzdWx0IGluIG5ldGlmX3J4KCktaW5nIHRoZSBNQ1RQIHBhY2tldHMgcmVjZWl2ZWRcbisgKi9cbitzdHJ1Y3QgbWN0cF91c2JsaWJfcngge1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHUxNiBlcF9wa3RsZW47XG4rXHRib29sIHNwYW47XG4rfTtcbitcbit2b2lkIG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKTtcbit2b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCk7XG4rXG4raW50IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHQgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LFxuK1x0XHRcdCAgIHZvaWQgKipidWZwLCBzaXplX3QgKmxlbnAsIGdmcF90IGdmcCk7XG4rXG4raW50IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pO1xuK1xuK3ZvaWQgbWN0cF91c2JsaWJfcnhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpO1xuK1xuKy8qXG4rICogVFggaGFuZGxlOiBjcmVhdGVkIGJ5IG1jdHBfdXNibGliX3R4X3B1c2goKSBkdXJpbmcgdGhlIHR4IHBhdGgsIGFuZFxuKyAqIG1heSBwZXJzaXN0IGFjcm9zcyBtdWx0aXBsZSBwYWNrZXQgdHJhbnNtaXRzLlxuKyAqL1xuK3N0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHg7XG4rXG4rc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB7XG4rXHQvKiBTdGFydCBhIFVTQiBUWCBmb3IgQGRhdGEuIE9uIHJldHVybmluZyBzdWNjZXNzLCB0aGUgaW1wbGVtZW50YXRpb25cbitcdCAqIG11c3QgYXJyYW5nZSBmb3IgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSgpIHRvIGJlIGNhbGxlZCBhdCBzb21lXG4rXHQgKiBsYXRlciBwb2ludCAoZWcuLCBvbiB1cmIgY29tcGxldGlvbikuXG4rXHQgKi9cbitcdGludCAoKnNlbmQpKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7XG4rfTtcbitcbitzdHJ1Y3QgbWN0cF91c2JsaWJfdHgge1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7XG4rXHR2b2lkICpwcml2O1xuK1x0Ym9vbCBzcGFuO1xuK1x0LyogcHJvdGVjdHMgYWNjZXNzIHRvIGN1cl9jdHggKi9cbitcdHNwaW5sb2NrX3QgbG9jaztcbitcdC8qIGNvbnRleHQgdG8gd2hpY2ggd2UgYXJlIGFkZGluZyBwYWNrZXRzLCBjbGVhcmVkIG9uIHNlbmQgKi9cbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN1cl9jdHg7XG4rfTtcbitcbit2b2lkIG1jdHBfdXNibGliX3R4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcbitcdFx0XHQgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLCB2b2lkICpwcml2LFxuK1x0XHRcdCBib29sIHNwYW4pO1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KTtcbitcbit2b2lkICptY3RwX3VzYmxpYl90eF9jdHhfcHJpdihzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgpO1xuK1xuK2ludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcbitcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpO1xuK1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgb2spO1xuK1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcbitcbiAjZW5kaWYgLyogIF9fTElOVVhfVVNCX01DVFBfVVNCX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjI5OjQ4LjkyNzc2NjQ5NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0ODk0MDE1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNQ1RQLW92ZXItVVNCIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCBsb29rcyBsaWtlIGl0J3MgbWFraW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgTUNUUCBVU0IgdHJhbnNwb3J0IGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCdzIHVwZGF0aW5nIGBkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNgIGFuZCBpbnRyb2R1Y2luZyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiwgd2hpY2ggaXMgYGRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuY2AuICBUaGV5J3ZlIGFsc28gYWRkZWQgc29tZSBLVW5pdCB0ZXN0cyBpbiBgZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNgIOKAkyBhbHdheXMgYSBnb29kIHNpZ24uIEFuZCBvZiBjb3Vyc2UsIHRoZXJlIGFyZSBuZXcgS2NvbmZpZyBvcHRpb25zLCBgTUNUUF9UUkFOU1BPUlRfVVNCTElCYCBhbmQgYE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUYC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgXCJDYW4gdGhpcyB0aGluZyBldmVuICpiZSogZnV6emVkIGVmZmVjdGl2ZWx5P1wiICBMZXQncyBzZWUuIFRoaXMgYG1jdHAtdXNiLmNgIGRyaXZlciBpcyBhIFVTQiBkZXZpY2UgZHJpdmVyLCByaWdodD8gQW5kIGl0IGJpbmRzIHRvIFVTQiBpbnRlcmZhY2VzIHdpdGggYFVTQl9DTEFTU19NQ1RQYC4gT2theSwgZ29vZC4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUsIHdlIGNhbiBlbXVsYXRlIFVTQiBkZXZpY2VzIHVzaW5nIGB1c2ItZHVtbXlgIG9yIGB1c2ItZ2FkZ2V0YC4gIEFuZCB0aGUgcmVhbGx5IGltcG9ydGFudCBiaXQuLi4gc3l6a2FsbGVyLCB3aGljaCBpcyB3aGF0IEknZCBsaWtlbHkgdXNlLCAqZG9lcyogc3VwcG9ydCBmdXp6aW5nIFVTQiBkcml2ZXJzIHZpYSBgcmF3LWdhZGdldGAuICBTbywgeWVzLCBpdCBzZWVtcyB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCB0aGUgZWZmb3J0LiAgRXhjZWxsZW50LlxuXG5Ob3csIGxldCdzIGRpZyBpbnRvIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLiAgSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgcmVmYWN0b3JpbmcgYG1jdHAtdXNiLmNgIHRvIGxldmVyYWdlIHRoZSBuZXcgZnVuY3Rpb25zIGluIGBtY3RwLXVzYmxpYi5jYC4gVGhpcyBpcyB3aGVyZSB0aGUganVpY3kgYml0cyBhcmUuIFRoZSBuZXcgZnVuY3Rpb25zIGFyZTogYG1jdHBfdXNibGliX3J4X2luaXRgLCBgbWN0cF91c2JsaWJfcnhfZmluaWAsIGBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlYCwgYG1jdHBfdXNibGliX3J4X2NvbXBsZXRlYCwgYG1jdHBfdXNibGliX3J4X2NhbmNlbGAsIGBtY3RwX3VzYmxpYl90eF9pbml0YCwgYG1jdHBfdXNibGliX3R4X2ZpbmlgLCBgbWN0cF91c2JsaWJfdHhfY3R4X3ByaXZgLCBgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZWAsIGBtY3RwX3VzYmxpYl90eF9wdXNoYCwgYW5kIGBtY3RwX3VzYmxpYl90eF9jYW5jZWxgLiBUaGVzZSBsb29rIGxpa2UgY29yZSBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIHRoZSBSWC9UWCBzaWRlIG9mIHRoZSBNQ1RQLW92ZXItVVNCIGNvbW11bmljYXRpb24uICBUaGlzIGlzIGRlZmluaXRlbHkgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cblxuSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggYWxzbyBoYXMgdXBkYXRlZCBzb21lIGV4aXN0aW5nIGBtY3RwLXVzYi5jYCBmdW5jdGlvbnMgdG8gYWxpZ24gd2l0aCB0aGUgbmV3IGxpYnJhcnk6IGBtY3RwX3VzYl9vdXRfY29tcGxldGVgLCBgbWN0cF91c2JfdHhfc2VuZGAsIGBtY3RwX3VzYl9zdGFydF94bWl0YCwgYG1jdHBfdXNiX3J4X3F1ZXVlYCwgYG1jdHBfdXNiX2luX2NvbXBsZXRlYCwgYG1jdHBfdXNiX3J4X3JldHJ5X3dvcmtgLCBgbWN0cF91c2Jfb3BlbmAsIGBtY3RwX3VzYl9zdG9wYCwgYG1jdHBfdXNiX25ldGRldl9zZXR1cGAsIGBtY3RwX3VzYl9wcm9iZWAsIGFuZCBgbWN0cF91c2JfZGlzY29ubmVjdGAuIFRoZXkgYXJlIGNoYW5naW5nIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBVU0Igc3RhY2ssIHdoaWNoIG1lYW5zIHRoaXMgY291bGQgZXhwb3NlIG5ldyBhdHRhY2sgc3VyZmFjZXMuXG5cblJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCB0byBwcm9wZXJseSBlbmFibGUgdGhpcyBmb3IgZnV6emluZywgSSdsbCBuZWVkIGBNQ1RQX1RSQU5TUE9SVF9VU0JgIGFuZCwgc2luY2UgaXQgbG9va3MgbGlrZSBgTUNUUF9UUkFOU1BPUlRfVVNCTElCYCBpcyBzZWxlY3RlZCBieSBgTUNUUF9UUkFOU1BPUlRfVVNCYCwgSSBjYW4gZXhwZWN0IHRoZW0gdG8gYmUgZW5hYmxlZCB0b2dldGhlci4gT2YgY291cnNlLCBgVVNCYCBpdHNlbGYgd2lsbCBoYXZlIHRvIGJlIGVuYWJsZWQuIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgYGRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ2AgdG8gY29uZmlybSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIGJ1aWxkIHJlcXVpcmVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1NjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzoyOTo1OC40MTcxNzAyNzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg4OTQ2MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tY3RwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTQxPWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0NcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy00OS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NTA6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQlxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy01MS1cXHR0cmlzdGF0ZSBcXFwiTUNUUCBvdmVyIFVTQiBjb21tb24gbGlicmFyeVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy01OS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NjA6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTYxLSAgICAgICAgYm9vbCBcXFwiTUNUUCB1c2JsaWIgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02NC1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NjU6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQlxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02Ni1cXHR0cmlzdGF0ZSBcXFwiTUNUUCBVU0IgdHJhbnNwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzoyOTo1OC40ODYwNjkzODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDg2MTYzMDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIHRoZSBNQ1RQX1RSQU5TUE9SVF9VU0IgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYE1DVFBfVFJBTlNQT1JUX1VTQmAgZGVwZW5kZW5jeSBzaXR1YXRpb24uIExldCdzIHN0YXJ0IGJ5IG1hcHBpbmcgb3V0IGV4YWN0bHkgd2hhdCBpdCByZWxpZXMgdXBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0cmFuc3BvcnQgbGF5ZXIgaW5zaWRlIGFuZCBvdXQsIGVzcGVjaWFsbHkgYW55IGV4dGVybmFsIGxpYnJhcmllcyBvciBrZXJuZWwgbW9kdWxlcyBpdCBtaWdodCBiZSB0aWVkIHRvLiBJJ20gdGhpbmtpbmcgYWJvdXQgZHJpdmVyIGludGVyZmFjZXMsIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVycyAoSEFMcyksIHBvdGVudGlhbGx5IHNwZWNpZmljIFVTQiBob3N0IGNvbnRyb2xsZXIgZGVwZW5kZW5jaWVzLCBtYXliZSBldmVuIGZpcm13YXJlIGludGVyYWN0aW9ucywgaWYgYXBwbGljYWJsZS4gQSBjb21wcmVoZW5zaXZlIGRlcGVuZGVuY3kgdHJlZSBpcyBjcnVjaWFsIGhlcmUuIEkgbmVlZCB0byBjb25zaWRlciBub3QganVzdCBkaXJlY3QgZGVwZW5kZW5jaWVzLCBidXQgYWxzbyB0cmFuc2l0aXZlIG9uZXMuIEFueSByaXBwbGUgZWZmZWN0cyBmcm9tIHVwZGF0aW5nIG9yIG1vZGlmeWluZyB0aGlzIGNvbXBvbmVudCBkb3duIHRoZSBsaW5lIGFyZSBhIG1ham9yIGNvbmNlcm4uIEFueSBrbm93biBpc3N1ZXMgb3IgY29uZmxpY3RzIHdpdGhpbiB0aGUgZXhpc3Rpbmcgc3lzdGVtIGFsc28gbmVlZCB0byBiZSBub3RlZC4gSSB3YW50IHRvIGJ1aWxkIGEgdHJ1bHkgcm9idXN0IGRlcGVuZGVuY3kgbW9kZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzQ3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MDEuNTcyMjM0NjE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MTc2MzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz02PWNvbmZpZyBNQ1RQX1NFUklBTFxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJNQ1RQIHNlcmlhbCB0cmFuc3BvcnRcXFwiXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBUVFlcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctOS1cXHRzZWxlY3QgQ1JDX0NDSVRUXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc9MjQ9Y29uZmlnIE1DVFBfU0VSSUFMX1RFU1RcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMjUtICAgICAgICBib29sIFxcXCJNQ1RQIHNlcmlhbCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzoyNjogICAgICAgIGRlcGVuZHMgb24gTUNUUF9TRVJJQUw9eSBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTI3LSAgICAgICAgZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz0yOT1jb25maWcgTUNUUF9UUkFOU1BPUlRfSTJDXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMzEtXFx0IyBpMmMtbXV4IGlzIG9wdGlvbmFsLCBidXQgd2UgbXVzdCBidWlsZCBhcyBhIG1vZHVsZSBpZiBpMmMtbXV4IGlzIGEgbW9kdWxlXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjMyOlxcdGRlcGVuZHMgb24gSTJDX01VWCB8fCAhSTJDX01VWFxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzozMzpcXHRkZXBlbmRzIG9uIEkyQ1xcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzozNDpcXHRkZXBlbmRzIG9uIEkyQ19TTEFWRVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy0zNS1cXHRzZWxlY3QgTUNUUF9GTE9XU1xcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTQxPWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0NcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNDItXFx0dHJpc3RhdGUgXFxcIk1DVFAgSTNDIHRyYW5zcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBJM0NcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNDQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTUwPWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNTEtXFx0dHJpc3RhdGUgXFxcIk1DVFAgb3ZlciBVU0IgY29tbW9uIGxpYnJhcnlcXFwiXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjUyOlxcdGRlcGVuZHMgb24gVVNCXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTUzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz02MD1jb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1RcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjEtICAgICAgICBib29sIFxcXCJNQ1RQIHVzYmxpYiB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo2MjogICAgICAgIGRlcGVuZHMgb24gTUNUUF9UUkFOU1BPUlRfVVNCTElCPXkgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02My0gICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc9NjU9Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQlxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02Ni1cXHR0cmlzdGF0ZSBcXFwiTUNUUCBVU0IgdHJhbnNwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo2NzpcXHRkZXBlbmRzIG9uIFVTQlxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02OC1cXHRzZWxlY3QgTUNUUF9UUkFOU1BPUlRfVVNCTElCXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjMwOjAxLjY0OTQxNjQyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NjMxNjQzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgTUNUUF9UUkFOU1BPUlRfVVNCYCByZWxpZXMgb24gYFVTQmAsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIE5vdywgdGhlIGJpZ2dlciBxdWVzdGlvbiBpcywgd2hhdCdzIHRoZSBkZXBlbmRlbmN5IG9uIGBNQ1RQYCBpdHNlbGY/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIExldCdzIGRpZyBpbnRvIGBuZXQvbWN0cC9LY29uZmlnYC4gSSdsbCBvcGVuIHVwIHRoYXQgS2NvbmZpZyBmaWxlIGFuZCBzZWUgd2hhdCBraW5kIG9mIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCBmb3IgdGhlIHdob2xlIGBNQ1RQYCBzdGFjayBhbmQgaG93IGBNQ1RQX1RSQU5TUE9SVF9VU0JgIGlzIHRpZWQgdG8gaXQuIEdvdHRhIGVuc3VyZSBJJ20gZ2V0dGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhlIGdvYWwgaXMgYSBjbGVhciB2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoZSBNQ1RQIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNDEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzozMDowNC41MTI1ODM2NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyNTc5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1DVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21jdHAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWN0cC9LY29uZmlnLTEtXFxubmV0L21jdHAvS2NvbmZpZzoyOm1lbnVjb25maWcgTUNUUFxcbm5ldC9tY3RwL0tjb25maWctMy1cXHRkZXBlbmRzIG9uIE5FVFxcbi0tXFxubmV0L21jdHAvS2NvbmZpZy0xNC1cXG5uZXQvbWN0cC9LY29uZmlnOjE1OmNvbmZpZyBNQ1RQX1RFU1RcXG5uZXQvbWN0cC9LY29uZmlnLTE2LSAgICAgICAgYm9vbCBcXFwiTUNUUCBjb3JlIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5uZXQvbWN0cC9LY29uZmlnLTIwLVxcbm5ldC9tY3RwL0tjb25maWc6MjE6Y29uZmlnIE1DVFBfRkxPV1NcXG5uZXQvbWN0cC9LY29uZmlnLTIyLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MDQuNTc5ODQ2NjA2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwNzc3Njc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBNQ1RQIG92ZXIgVVNCKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnVzaW5lc3MuIEZpcnN0IHRoaW5ncyBmaXJzdDogZW5zdXJlIGBNQ1RQYCBhbmQgYE1DVFBfVFJBTlNQT1JUX1VTQmAgYXJlIGVuYWJsZWQuIFRoYXQncyB0aGUgZm91bmRhdGlvbiB3ZSBuZWVkLiBOb3csIHRoZSBrZXkgaXMgdG8gcGlucG9pbnQgdGhlIG1vc3QgZnJ1aXRmdWwgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hlcmUgdG8gdGFyZ2V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cbkxldCdzIGJlZ2luIGJ5IGV4YW1pbmluZyBgbWN0cC11c2JsaWIuY2AuIFRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIGNsb3NlIGF0dGVudGlvbiBoZXJlIGFyZTogYG1jdHBfdXNibGliX3J4X3ByZXBhcmVgLCBgbWN0cF91c2JsaWJfcnhfY29tcGxldGVgLCBgbWN0cF91c2JsaWJfdHhfcHVzaGAsIGFuZCBgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMgZm9yIGRhdGEgdHJhbnNmZXIgYW5kIHByb2Nlc3Npbmcgd2l0aGluIHRoZSB1c2JsaWIgY29tcG9uZW50LlxuXG5OZXh0LCB3ZSdsbCBzaGlmdCBvdXIgZm9jdXMgdG8gYG1jdHAtdXNiLmNgLiBIZXJlLCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3YXJyYW50IGEgZGVlcCBkaXZlOiBgbWN0cF91c2JfaW5fY29tcGxldGVgLCBgbWN0cF91c2Jfb3V0X2NvbXBsZXRlYCwgYG1jdHBfdXNiX3R4X3NlbmRgLCBgbWN0cF91c2Jfc3RhcnRfeG1pdGAsIGFuZCBgbWN0cF91c2JfcnhfcXVldWVgLiBUaGVzZSBhbGwgaGFuZGxlIGRhdGEgZmxvdyBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBVU0IgaGFyZHdhcmUuIFRoZXkgYXJlIG9mIGhpZ2ggaW50ZXJlc3QuXG5cbldhaXQuLi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIExldCBtZSBzZWUgaWYgYG1jdHBfdXNibGliX3J4YCBpcyBhIGZ1bmN0aW9uLiBBaCwgbm8sIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gaW5zaWRlIGBtY3RwLXVzYmxpYi5jYCwgd2hpY2ggbWFrZXMgaXQgYSBzbGlnaHRseSBkaWZmZXJlbnQgdGFyZ2V0LiBJdCdzIGxpa2VseSBpbXBvcnRhbnQgaW4gdGhlIG92ZXJhbGwgZmxvdywgYnV0IHdlIGNhbid0IGRpcmVjdGx5IHRhcmdldCBpdC4gTGV0J3Mgc3RpbGwgbWFrZSBzdXJlIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBgbWN0cF91c2JsaWJfcnhgIG5vdywgc3BlY2lmaWNhbGx5IGluIGBtY3RwLXVzYmxpYi5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3NDksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MDkuODg3NjI2Mzc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTA2OTU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtY3RwX3VzYmxpYl9yeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTE2LVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoxNzp2b2lkIG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0xOC17XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjItfVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoyMzpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9pbml0KTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjQtXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjI1OnZvaWQgbWN0cF91c2JsaWJfcnhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yNi17XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjgtfVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoyOTpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9maW5pKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMzAtXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMzQtICovXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjM1OmludCBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjM2OlxcdFxcdFxcdCAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTM3LVxcdFxcdFxcdCAgIHZvaWQgKipidWZwLCBzaXplX3QgKmxlbnAsIGdmcF90IGdmcClcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy00My1cXHRcXHQvKiBzb21ldGhpbmcgbXVzdCBoYXZlIGdvbmUgdGVycmlibHkgd3JvbmcuIGNsZWFyIGFuZCByZXN0YXJ0ICovXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjQ0OlxcdFxcdG1jdHBfdXNibGliX3J4X2NhbmNlbChyeCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTQ1LVxcdFxcdHNrYiA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtODgtfVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzo4OTpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtOTAtXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjkxOnN0YXRpYyB2b2lkIG1jdHBfdXNibGliX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTkyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0xMTQtXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjExNTpzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0xMTYte1xcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTEzMS0gKi9cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MTMyOmludCBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoxMzM6XFx0XFx0XFx0ICAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTEzNC17XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMTk4LVxcdFxcdGlmIChwa3RfbGVuID09IHNrYi1cXHUwMDNlbGVuKSB7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjE5OTpcXHRcXHRcXHRtY3RwX3VzYmxpYl9yeChuZXRkZXYsIHNrYik7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIwMC1cXHRcXHRcXHRyeC1cXHUwMDNlc2tiID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMTAtXFx0XFx0XFx0c2tiX3RyaW0oc2tiMiwgcGt0X2xlbik7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjIxMTpcXHRcXHRcXHRtY3RwX3VzYmxpYl9yeChuZXRkZXYsIHNrYjIpO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMTItXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjEzOlxcdFxcdFxcdG1jdHBfdXNibGliX3J4X3N0YXRzX3NpbmdsZV9kcm9wKG5ldGRldik7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIxNC1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjI0LX1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjI1OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjI2LVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIzMC0gKi9cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjMxOnZvaWQgbWN0cF91c2JsaWJfcnhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIzMi17XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjM1LX1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjM2OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NhbmNlbCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTIzNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MDkuOTUyNzAxMzQzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzAwNTYzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gVVNCIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHRoZSBVU0IgaW50ZXJmYWNlIGluIHRoaXMgTUNUUCBpbXBsZW1lbnRhdGlvbi4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBjZW50ZXJzIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnMsIHdoaWNoIGFyZSB0aGUgbGluY2hwaW5zIG9mIHRoZSBkYXRhIGZsb3c6IGBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlYCwgYG1jdHBfdXNibGliX3J4X2NvbXBsZXRlYCwgYG1jdHBfdXNibGliX3R4X3B1c2hgLCBgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZWAsIGBtY3RwX3VzYl9pbl9jb21wbGV0ZWAsIGBtY3RwX3VzYl9vdXRfY29tcGxldGVgLCBgbWN0cF91c2JfdHhfc2VuZGAsIGBtY3RwX3VzYl9zdGFydF94bWl0YCwgYW5kIGBtY3RwX3VzYl9yeF9xdWV1ZWAuIEkgbmVlZCB0byBlbnN1cmUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IGRhdGEgaXMgcmVjZWl2ZWQsIHRyYW5zbWl0dGVkLCBhbmQgbWFuYWdlZCB0aHJvdWdob3V0IHRoZSBVU0IgY29tbXVuaWNhdGlvbiBsaWZlY3ljbGUuIEEgdGhvcm91Z2ggZXhhbWluYXRpb24gb2YgdGhlc2UgZWxlbWVudHMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtLiBJIHdpbGwgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBtY3RwX3VzYl9pbl9jb21wbGV0ZWAgd2l0aGluIHRoZSBgbWN0cC11c2IuY2AgZmlsZS4gVGhpcyBmdW5jdGlvbiBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gYW5hbHl6ZSB0aGUgUlggZGF0YSBwcm9jZXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODAxOSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzozMDoxMy44ODI3NjAzOTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDE0NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1jdHBfdXNiX2luX2NvbXBsZXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MTI2PXN0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTM2LVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYzoxMzc6c3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTM4LVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jPTE0NT1zdGF0aWMgaW50IG1jdHBfdXNiX3J4X3F1ZXVlKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGdmcF90IGdmcClcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0xNTgtXFx0XFx0XFx0ICB1c2JfcmN2YnVsa3BpcGUobWN0cF91c2ItXFx1MDAzZXVzYmRldiwgbWN0cF91c2ItXFx1MDAzZWVwX2luKSxcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MTU5OlxcdFxcdFxcdCAgYnVmLCBsZW4sIG1jdHBfdXNiX2luX2NvbXBsZXRlLCBtY3RwX3VzYik7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTE2MC1cXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz0xNzk9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByeF9lcnJfbWF4ID0gMTA7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTE4MC1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MTgxOnN0YXRpYyB2b2lkIG1jdHBfdXNiX2luX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTgyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MTMuOTQxMTgwNzY1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTI4NTQ1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBtY3RwX3VzYl9vdXRfY29tcGxldGUgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlIG91dHB1dCBjb21wbGV0aW9uIGhhbmRsaW5nIGluIHRoZSBNQ1RQLW92ZXItVVNCIGRyaXZlci4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgbWN0cF91c2Jfb3V0X2NvbXBsZXRlYCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyBpbiBgbWN0cC11c2IuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgZnVuY3Rpb24uIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGF0IGNvZGUgYW5kIHNlZWluZyB3aGF0IGl0J3MgZG9pbmcuIEknbSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdHMgcm9sZSBpbiB0aGUgZGF0YSB0cmFuc2ZlciBwcm9jZXNzIGZyb20gdGhlIHN5c3RlbSB0byB0aGUgVVNCIGRldmljZSwgcGFydGljdWxhcmx5IHdoZW4gYSB0cmFuc2ZlciBpcyBjb25zaWRlcmVkIGNvbXBsZXRlLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2U6IHdoYXQgaGFwcGVucyB0byB0aGUgZGF0YSwgaXMgdGhlcmUgYW55IGVycm9yIGhhbmRsaW5nLCBhbmQgaG93IGRvZXMgaXQgc2lnbmFsIHRoZSBjb21wbGV0aW9uIHRvIHRoZSBoaWdoZXIgbGF5ZXJzP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyODg4OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjMwOjE2Ljk5NDAzNzgxN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2Mjg1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWN0cF91c2Jfb3V0X2NvbXBsZXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9NjQ9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUWF9RTUVNX01BWCA9IDE2Mzg0O1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy02NS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6NjY6c3RhdGljIHZvaWQgbWN0cF91c2Jfb3V0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtNjcte1xcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jPTg1PXN0YXRpYyBpbnQgbWN0cF91c2JfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtOTgtXFx0XFx0XFx0ICB1c2Jfc25kYnVsa3BpcGUobWN0cF91c2ItXFx1MDAzZXVzYmRldiwgbWN0cF91c2ItXFx1MDAzZWVwX291dCksXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjk5OlxcdFxcdFxcdCAgZGF0YSwgbGVuLCBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHR4X2N0eCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTEwMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MTcuMDUzNjc0NDM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTE3MTM5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNQ1RQLVVTQiBUWCBTZW5kIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBtY3RwX3VzYl90eF9zZW5kYCB3aXRoaW4gYG1jdHAtdXNiLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IHB1c2hlcyBvdXIgTUNUUCBkYXRhIG91dCBvdmVyIFVTQi4gSSB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgaW50cmljYWNpZXMgb2YgdGhlIFVTQiB0cmFuc3BvcnQgbGF5ZXIsIGVzcGVjaWFsbHkgZXJyb3IgY2hlY2tpbmcgYW5kIGJ1ZmZlcmluZy4gSSdtIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGUgZGF0YSB0cmFuc2ZlciwgcGFydGljdWxhcmx5IHdoYXQgaGFwcGVucyBpZiB0aGVyZSdzIGNvbnRlbnRpb24gb24gdGhlIFVTQiBidXMgb3IgaWYgYW4gZW5kcG9pbnQgaXMgYnVzeS4gQXJlIHRoZXkgdXNpbmcgRE1BIGVmZmVjdGl2ZWx5PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbiB0aGlzIHNlbmQgZnVuY3Rpb24gdGhhdCBtaWdodCBpbXBhY3Qgb3ZlcmFsbCBNQ1RQIHBlcmZvcm1hbmNlPyBBbnkgbG9jayBjb250ZW50aW9uIGlzc3VlcyBJIHNob3VsZCBrbm93PyBBcmUgdGhleSB1c2luZyBhbnkgdHJpY2tzIHdpdGggdGhlIFVTQiB0cmFuc2ZlciBkZXNjcmlwdG9ycyB0byBvcHRpbWl6ZSB0aGUgcHJvY2VzcywgbWF5YmUgaGFuZGxpbmcgdGhlIHBhY2tldGl6YXRpb24gb2YgTUNUUCBkYXRhPyBUaW1lIHRvIGdldCB0aGUgZGVidWdnZXIgb3V0IGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDIzLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MjAuMjQ1MzkyNTM0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDAwMDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtY3RwX3VzYl90eF9zZW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9NjY9c3RhdGljIHZvaWQgbWN0cF91c2Jfb3V0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy04NC1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6ODU6c3RhdGljIGludCBtY3RwX3VzYl90eF9zZW5kKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtODYtXFx0XFx0XFx0ICAgIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIHR4X29wcyA9IHtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MTIzOlxcdC5zZW5kID0gbWN0cF91c2JfdHhfc2VuZCxcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMTI0LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjMwOjIwLjMwNTM5OTE1NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA4MjA0NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtY3RwX3VzYl9zdGFydF94bWl0YCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGBtY3RwX3VzYl9zdGFydF94bWl0YCwgc3BlY2lmaWNhbGx5IGluIGBtY3RwLXVzYi5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgVVNCIHRyYW5zcG9ydCBpbml0aWF0ZXMgdHJhbnNtaXNzaW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIE1DVFAgbWVzc2FnZXMgYXJlIG1hcnNoYWxlZCwgd2hlcmUgdGhlIERNQSBpcyBzZXQgdXAgKGlmIGFwcGxpY2FibGUpLCBhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBwb3RlbnRpYWwgYnVzIGNvbnRlbnRpb24gb3IgZXJyb3JzLiBJJ20gcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4gdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGVtcGxveWVkIHRvIGVuc3VyZSBhdG9taWMgb3BlcmF0aW9ucywgYmVjYXVzZSB0aGF0J3MgYWx3YXlzIGEgcG9pbnQgb2Ygc3VidGxlIGJ1Z3MgaW4gbXVsdGktdGhyZWFkZWQgY29udGV4dHMuIExldCdzIHNlZSBob3cgdGhlIHBhY2tldCBkZXNjcmlwdG9yIGlzIHVzZWQsIGFuZCBob3cgdGhlIGJ1ZmZlciBwb29sIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIHNldHVwIHRvbzsgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIGhvdyB0aGUgVFggY29tcGxldGlvbiBpbnRlcnJ1cHQgaXMgaGFuZGxlZCBhbmQgaWYgd2UncmUgdXNpbmcgcG9sbGluZy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIGFyb3VuZCBzaGFyZWQgcmVzb3VyY2VzLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgcmluZyBidWZmZXIgaWYgaXQncyB0aGVyZS4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IHRoaXMgcGFydCBvZiB0aGUgZHJpdmVyIGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgdG8gdGhlIGV4aXN0aW5nIE1DVFAgaW1wbGVtZW50YXRpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgYnVmZmVyIG1hbmFnZW1lbnQgdG8gYXZvaWQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTUwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MjMuNzEzNjA2MTc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTQ0NjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtY3RwX3VzYl9zdGFydF94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIHR4X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0xMjUtXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjEyNjpzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0xMjctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MzA0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWN0cF91c2JfbmV0ZGV2X29wcyA9IHtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MzA1OlxcdC5uZG9fc3RhcnRfeG1pdCA9IG1jdHBfdXNiX3N0YXJ0X3htaXQsXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTMwNi1cXHQubmRvX29wZW4gPSBtY3RwX3VzYl9vcGVuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzozMDoyMy43NzUwNTg0MTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMjM5OTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbWN0cF91c2JfcnhfcXVldWVgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBtY3RwX3VzYl9yeF9xdWV1ZWAgZnVuY3Rpb24gd2l0aGluIHRoZSBgbWN0cC11c2IuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgaW5jb21pbmcgVVNCIGRhdGEgcmVjZXB0aW9uIGlzIGhhbmRsZWQsIHNvIGl0J3MgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBxdWV1ZSBvcGVyYXRlcywgaG93IGl0J3MgbWFuYWdlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBjb21wb25lbnRzIGluIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGJ1ZmZlciBtYW5hZ2VtZW50LCBhbmQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoaXMgcGFydCBvZiB0aGUgY29kZS4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHB1bGxpbmcgaW5jb21pbmcgcGFja2V0cyBvZmYgdGhlIFVTQiBpbnRlcmZhY2UsIHZhbGlkYXRpbmcgdGhlbSwgYW5kIHRoZW4gcGVyaGFwcyBlbnF1ZXVpbmcgdGhlbSBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBJIGV4cGVjdCB0byBzZWUgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gYnVmZmVyaW5nLCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBwZXJoYXBzIHNvbWUgZm9ybSBvZiBsb2NraW5nIG9yIHN5bmNocm9uaXphdGlvbiB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkuIExldCdzIHNlZSB3aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDU3NCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjMwOjI3LjM3NzQ2MTUzM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI2MTQzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWN0cF91c2JfcnhfcXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz0xNDM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgUlhfUkVUUllfREVMQVkgPSBIWiAvIDQ7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTE0NC1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MTQ1OnN0YXRpYyBpbnQgbWN0cF91c2JfcnhfcXVldWUoc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiwgZ2ZwX3QgZ2ZwKVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0xNDYte1xcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jPTE4MT1zdGF0aWMgdm9pZCBtY3RwX3VzYl9pbl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMjQxLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYzoyNDI6XFx0bWN0cF91c2JfcnhfcXVldWUobWN0cF91c2IsIEdGUF9BVE9NSUMpO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0yNDMtfVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jPTI0NT1zdGF0aWMgdm9pZCBtY3RwX3VzYl9yeF9yZXRyeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0yNjMtXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jOjI2NDpcXHRtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTI2NS19XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MjY3PXN0YXRpYyBpbnQgbWN0cF91c2Jfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTI3Ni1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6Mjc3OlxcdHJldHVybiBtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTI3OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjMwOjI3LjQ0MDA4MDgxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIzMDAyNTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtY3RwX3VzYmxpYl90eF9wdXNoYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGUgdHJhbnNtaXQgc2lkZSBvZiB0aGUgVVNCIGxpYnJhcnkgaW1wbGVtZW50YXRpb24uIFRoZSBmaXJzdCBwbGFjZSB0byBjaGVjaywgbmF0dXJhbGx5LCBpcyBgbWN0cF91c2JsaWJfdHhfcHVzaGAgd2l0aGluIGBtY3RwLXVzYmxpYi5jYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGNvcmUgb2YgcHVzaGluZyBkYXRhIG9udG8gdGhlIFVTQiB0cmFuc21pdCBxdWV1ZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSBidWZmZXIgYWxsb2NhdGlvbiwgaW50ZXJydXB0IHByb3RlY3Rpb24gKHByb2JhYmx5IG11dGV4ZXMgb3Igc3BpbmxvY2tzKSwgYW55IHBvdGVudGlhbCBmbG93IGNvbnRyb2wgbWVjaGFuaXNtcywgYW5kIG9mIGNvdXJzZSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBVU0IgY29udHJvbGxlciBoYXJkd2FyZSByZWdpc3RlcnMgb3IgZHJpdmVyIGZ1bmN0aW9ucyB0byBhY3R1YWxseSBpbml0aWF0ZSB0aGUgdHJhbnNtaXNzaW9uLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBkZWFscyB3aXRoIHBhcnRpYWwgcGFja2V0cyBvciBpZiBpdCBoYXMgYW55IHNtYXJ0IGJ1ZmZlcmluZyBzY2hlbWVzIGZvciBkaWZmZXJlbnQgbWVzc2FnZSBzaXplcy4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiBpdCByZXR1cm5zIGFueSBlcnJvciBjb2RlcyB0aGF0IHdvdWxkIHRlbGwgbWUgaG93IHRoZSBmdW5jdGlvbiBkZWFscyB3aXRoIGEgZnVsbCBxdWV1ZS4gTGV0J3Mgc2VlIGhvdyB0aGV5IGhhbmRsZWQgdGhlIERNQSBjb25maWd1cmF0aW9uIHRvby4gR290IHRvIGJlIHN1cmUgdGhleSdyZSBub3QgYmxvY2tpbmcgdW5uZWNlc3NhcmlseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzODYsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzozMDozMC44NjMwODUzN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxNzY4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWN0cF91c2JsaWJfdHhfcHVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTQ0NT1zdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X3NrYl9wcmVwYXJlKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgc3BhbixcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy00ODMtICovXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjQ4NDppbnQgbWN0cF91c2JsaWJfdHhfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy00ODUtXFx0XFx0XFx0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy01ODgtfVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzo1ODk6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfcHVzaCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTU5MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MzAuOTIyMjY4MDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NzcwMzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgbWN0cC11c2JsaWIuYyBUcmFuc2FjdGlvbiBDb21wbGV0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoZSBjb21wbGV0aW9uIG9mIGEgdHJhbnNtaXNzaW9uLiBUaW1lIHRvIHplcm8gaW4gb24gYG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGVgIHdpdGhpbiBgbWN0cC11c2JsaWIuY2AuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIHByb3BlciB0cmFuc2FjdGlvbiBoYW5kbGluZyBhbmQgZXJyb3IgbWFuYWdlbWVudCBhdCB0aGUgVVNCIGxheWVyIG9mIHRoZSBNQ1RQIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGNvbXBsZXRpb24gY2FsbGJhY2sgdGllcyBpbnRvIHRoZSBvdmVyYWxsIHN0YXRlIG1hY2hpbmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgVVNCIGRyaXZlciBhcyB3ZWxsIGFzIHRoZSBNQ1RQIGNvcmUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB2YXJpYWJsZXMgYXJlIGJlaW5nIHNldCBvciBjbGVhcmVkLCBhbnkgaW50ZXJydXB0cyBiZWluZyB0cmlnZ2VyZWQsIGFuZCBlcnJvciBjb2RlcyBiZWluZyBoYW5kbGVkIG9uIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBidWZmZXIgbWFuYWdlbWVudC4gSSdsbCBwcm9iYWJseSBzdGFydCBieSBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHJlbGV2YW50IGludGVycnVwdCBoYW5kbGVycyBhbmQgZXJyb3IgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxOTUzLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MzQuMjE5OTczOTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTI3NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz00MTM9c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy00MjktICovXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjQzMDp2b2lkIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy00MzEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG9rKVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTQzOC19XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjQzOTpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNDQwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzozMDozNC4yNzcxMDcyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDU3NTQ3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoYXQgY29kZSBzbmlwcGV0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNQ1RQIFVTQiBMaWJyYXJ5KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB0cmFuc21pc3Npb24gY2FuY2VsbGF0aW9uIHdvcmtzIHdpdGhpbiB0aGUgTUNUUCBVU0IgbGlicmFyeS4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbWN0cF91c2JsaWJfdHhfY2FuY2VsYCBpbiBgbWN0cC11c2JsaWIuY2AuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY2Vzc2F0aW9uIG9mIGRhdGEgdHJhbnNtaXNzaW9uLiBJcyBpdCBhIGdyYWNlZnVsIHNodXRkb3duIG9mIHRoZSBVU0IgZW5kcG9pbnQsIGEgcXVldWluZyBpc3N1ZSwgb3IganVzdCBjbGVhcmluZyBhIGZsYWc/IEFuZCwgd2hhdCBzdGF0ZSBkb2VzIHRoZSBkZXZpY2Ugb3IgY29udHJvbGxlciBlbnRlciB1cG9uIHRoZSBjYW5jZWxsYXRpb24/IEknbGwgcHJvYmFibHkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIFVTQiBkcml2ZXIgYW5kIHRoZSBNQ1RQIHByb3RvY29sIGxheWVycy4gSSdtIGV4cGVjdGluZyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIHJlZ2FyZGluZyBkaWZmZXJlbnQgdHJhbnNtaXNzaW9uIHN0YXRlcyBvciBlcnJvciBjb25kaXRpb25zLCBzbyB0aGF0IHdpbGwgYmUgdGhlIGZvY2FsIHBvaW50IG9mIG15IHNjcnV0aW55LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjUyMSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjMwOjM3LjQ4Mjg2NTM3NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc5MDM0MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWN0cF91c2JsaWJfdHhfY2FuY2VsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9NTg5PUVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3B1c2gpO1xcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTU5MS0vKiBDYW5jZWwgYSB0eDogYW55IHVuLXNlbnQgY29udGV4dCBpcyByZWxlYXNlZC4gKi9cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6NTkyOnZvaWQgbWN0cF91c2JsaWJfdHhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTU5My1cXHRcXHRcXHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNjA3LX1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6NjA4OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2NhbmNlbCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYwOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MzA6MzcuNTQwNzc0NTY2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNjg3NDI0OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBNQ1RQLW92ZXItVVNCIHdpdGggdGhlIE5ldyBMaWJyYXJ5KipcblxuT2theSwgc28gSSd2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIG5ldyBjb21tb24gbGlicmFyeSwgYG1jdHAtdXNibGliYCwgYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBleGlzdGluZyBgbWN0cC11c2JgIHRyYW5zcG9ydCBkcml2ZXIuXG5cbk15IG1haW4gZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGluY2x1ZGVkIGluIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb246IGBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlYCwgYG1jdHBfdXNibGliX3J4X2NvbXBsZXRlYCwgYG1jdHBfdXNibGliX3R4X3B1c2hgLCBgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZWAsIGBtY3RwX3VzYl9pbl9jb21wbGV0ZWAsIGBtY3RwX3VzYl9vdXRfY29tcGxldGVgLCBgbWN0cF91c2JfdHhfc2VuZGAsIGBtY3RwX3VzYl9zdGFydF94bWl0YCwgYW5kIGBtY3RwX3VzYl9yeF9xdWV1ZWAuIFRoZXNlIGFyZSB0aGUgY29yZSBlbnRyeSBwb2ludHMgYW5kIGNvbXBsZXRpb24gcm91dGluZXMsIHNvIHRob3NlIGFyZSB3aGF0IEknbGwgc3RhcnQgd2l0aC5cblxuVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgZnVuY3Rpb25hbC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGdhZGdldCBlbXVsYXRpb24sIHdoaWNoIGlzIHdoYXQgSSdkIGV4cGVjdC4gVG8gZW5zdXJlIHRoaXMgaXMgc2V0dXAgcHJvcGVybHksIEknbGwgbmVlZCB0byBlbmFibGUgYSBmZXcgY29uZmlndXJhdGlvbnM6IEZpcnN0LCB0aGUgYmFzaWMgYE1DVFBgIHN1cHBvcnQuIFRoZW4sIG9mIGNvdXJzZSwgdGhlIGBNQ1RQX1RSQU5TUE9SVF9VU0JgIG9wdGlvbiwgYW5kIGZpbmFsbHksIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJgLiBJIG5vdGVkIHRoYXQgYE1DVFBfVFJBTlNQT1JUX1VTQkxJQmAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBieSBgTUNUUF9UUkFOU1BPUlRfVVNCYCwgYnV0IEknbSBnb2luZyB0byBsaXN0IGl0IGV4cGxpY2l0bHkgZm9yIGNsYXJpdHkuXG5cbkknbSBza2lwcGluZyB0aGUgYE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUYCBjb25maWcsIHNpbmNlIHRoYXQncyBhIEtVbml0IHRlc3QsIGFuZCBmdXp6aW5nIGRvZXNuJ3QgdHlwaWNhbGx5IHJlcXVpcmUgdGhvc2UuIEl0J3MgbW9yZSBhYm91dCBjb2RlIGNvdmVyYWdlIHRoYW4gcnVubmluZyB1bml0IHRlc3RzLlxuXG5TbywgaGVyZSdzIHdoYXQgSSdsbCBzZXQgdXAgZm9yIHRoZSBmdXp6aW5nIHJ1bjpcblxuKipXb3J0aEZ1enppbmc6IHRydWUqKlxuXG4qKkZvY3VzU3ltYm9sczoqKlxuLSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlXG4tIG1jdHBfdXNibGliX3J4X2NvbXBsZXRlXG4tIG1jdHBfdXNibGliX3R4X3B1c2hcbi0gbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZVxuLSBtY3RwX3VzYl9pbl9jb21wbGV0ZVxuLSBtY3RwX3VzYl9vdXRfY29tcGxldGVcbi0gbWN0cF91c2JfdHhfc2VuZFxuLSBtY3RwX3VzYl9zdGFydF94bWl0XG4tIG1jdHBfdXNiX3J4X3F1ZXVlXG5cbioqRW5hYmxlQ29uZmlnczoqKlxuLSBNQ1RQXG4tIE1DVFBfVFJBTlNQT1JUX1VTQlxuLSBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcblxuVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiBhbmQgbW9kaWZpZXMgdGhlIE1DVFAgVVNCIHRyYW5zcG9ydCBkcml2ZXIgdG8gdXNlIGl0LiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi4gSXQncyBwcmltZSB0ZXJyaXRvcnkgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDQxLCJPdXRwdXRUb2tlbnMiOjIzOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzozMDo0Ni44MDk1MjMyMjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTgyNjIwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUNUUFwiLFxuICAgIFwiTUNUUF9UUkFOU1BPUlRfVVNCXCIsXG4gICAgXCJNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9wcmVwYXJlXCIsXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfcHVzaFwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2JfaW5fY29tcGxldGVcIixcbiAgICBcIm1jdHBfdXNiX291dF9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2JfdHhfc2VuZFwiLFxuICAgIFwibWN0cF91c2Jfc3RhcnRfeG1pdFwiLFxuICAgIFwibWN0cF91c2JfcnhfcXVldWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBsaWJyYXJ5IGZvciBNQ1RQLW92ZXItVVNCIChgbWN0cC11c2JsaWJgKSBhbmQgbW9kaWZpZXMgdGhlIE1DVFAgVVNCIHRyYW5zcG9ydCBkcml2ZXIgKGBtY3RwLXVzYmApIHRvIHVzZSBpdC4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24gKGUuZy4sIHJhdy1nYWRnZXQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1DVFBcIixcbiAgICBcIk1DVFBfVFJBTlNQT1JUX1VTQlwiLFxuICAgIFwiTUNUUF9UUkFOU1BPUlRfVVNCTElCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWN0cF91c2JsaWJfcnhfcHJlcGFyZVwiLFxuICAgIFwibWN0cF91c2JsaWJfcnhfY29tcGxldGVcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X3B1c2hcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGVcIixcbiAgICBcIm1jdHBfdXNiX2luX2NvbXBsZXRlXCIsXG4gICAgXCJtY3RwX3VzYl9vdXRfY29tcGxldGVcIixcbiAgICBcIm1jdHBfdXNiX3R4X3NlbmRcIixcbiAgICBcIm1jdHBfdXNiX3N0YXJ0X3htaXRcIixcbiAgICBcIm1jdHBfdXNiX3J4X3F1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiAoYG1jdHAtdXNibGliYCkgYW5kIG1vZGlmaWVzIHRoZSBNQ1RQIFVTQiB0cmFuc3BvcnQgZHJpdmVyIChgbWN0cC11c2JgKSB0byB1c2UgaXQuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIFVTQiBnYWRnZXQgZW11bGF0aW9uIChlLmcuLCByYXctZ2FkZ2V0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow6glw2[1] Phase: Succeeded StartedAt: 2026-07-08 23:30:58 +0000 UTC FinishedAt: 2026-07-08 23:30:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 23:30:58 +0000 UTC FinishedAt: 2026-07-08 23:30:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2] Phase: Succeeded StartedAt: 2026-07-08 23:30:58 +0000 UTC FinishedAt: 2026-07-09 01:26:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-08 23:30:58 +0000 UTC FinishedAt: 2026-07-09 01:26:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-08 23:30:58 +0000 UTC FinishedAt: 2026-07-08 23:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-08 23:30:58 +0000 UTC FinishedAt: 2026-07-08 23:31:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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-workflow6glw2/series-workflow6glw2-convert-artifact-379194325/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-08 23:31:09 +0000 UTC FinishedAt: 2026-07-08 23:53:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-08 23:31:09 +0000 UTC FinishedAt: 2026-07-08 23:53:20 +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:*f6bcd8af-c3fa-40a9-b72c-ba8113a0bb4d,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-workflow6glw2/series-workflow6glw2-convert-artifact-379194325/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": "347bcc00-da7c-4e28-8e2a-327316f8dba7", "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-workflow6glw2/series-workflow6glw2-build-action-3767907899/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-08 23:31:09 +0000 UTC FinishedAt: 2026-07-08 23:53:10 +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:*f6bcd8af-c3fa-40a9-b72c-ba8113a0bb4d,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-workflow6glw2/series-workflow6glw2-convert-artifact-379194325/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": "347bcc00-da7c-4e28-8e2a-327316f8dba7", "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-workflow6glw2/series-workflow6glw2-build-action-3767907899/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-08 23:53:20 +0000 UTC FinishedAt: 2026-07-08 23:53:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-08 23:53:20 +0000 UTC FinishedAt: 2026-07-08 23:53:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-08 23:53:20 +0000 UTC FinishedAt: 2026-07-08 23:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-08 23:53:20 +0000 UTC FinishedAt: 2026-07-08 23:53:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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-workflow6glw2/series-workflow6glw2-convert-artifact-552909744/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-08 23:53:30 +0000 UTC FinishedAt: 2026-07-08 23:55:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-08 23:53:30 +0000 UTC FinishedAt: 2026-07-08 23:55:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*347bcc00-da7c-4e28-8e2a-327316f8dba7,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-workflow6glw2/series-workflow6glw2-build-action-3767907899/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-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-08 23:55:31 +0000 UTC FinishedAt: 2026-07-08 23:55:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-08 23:55:31 +0000 UTC FinishedAt: 2026-07-08 23:55:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-08 23:55:31 +0000 UTC FinishedAt: 2026-07-09 00:36:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-08 23:55:31 +0000 UTC FinishedAt: 2026-07-09 00:36:04 +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:*f6bcd8af-c3fa-40a9-b72c-ba8113a0bb4d,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-workflow6glw2/series-workflow6glw2-convert-artifact-552909744/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": "19b1eacb-c0b2-4d8e-9bba-f66b9eae9f99", "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-workflow6glw2/series-workflow6glw2-build-action-1817875884/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-08 23:55:31 +0000 UTC FinishedAt: 2026-07-09 00:35:52 +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:*f6bcd8af-c3fa-40a9-b72c-ba8113a0bb4d,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-workflow6glw2/series-workflow6glw2-convert-artifact-552909744/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": "19b1eacb-c0b2-4d8e-9bba-f66b9eae9f99", "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-workflow6glw2/series-workflow6glw2-build-action-1817875884/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-09 00:36:04 +0000 UTC FinishedAt: 2026-07-09 00:36:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-09 00:36:05 +0000 UTC FinishedAt: 2026-07-09 00:36:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-09 00:36:05 +0000 UTC FinishedAt: 2026-07-09 00:38:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-09 00:36:05 +0000 UTC FinishedAt: 2026-07-09 00:38:02 +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:*19b1eacb-c0b2-4d8e-9bba-f66b9eae9f99,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-workflow6glw2/series-workflow6glw2-build-action-1817875884/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-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-09 00:38:12 +0000 UTC FinishedAt: 2026-07-09 01:26:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-09 00:38:12 +0000 UTC FinishedAt: 2026-07-09 01:26:57 +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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"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:*347bcc00-da7c-4e28-8e2a-327316f8dba7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*19b1eacb-c0b2-4d8e-9bba-f66b9eae9f99,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-workflow6glw2/series-workflow6glw2-build-action-3767907899/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-workflow6glw2/series-workflow6glw2-build-action-1817875884/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-09 00:38:12 +0000 UTC FinishedAt: 2026-07-09 00:38:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-09 00:38:12 +0000 UTC FinishedAt: 2026-07-09 00:38:24 +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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"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-workflow6glw2/series-workflow6glw2-convert-artifact-1365539369/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-09 00:38:12 +0000 UTC FinishedAt: 2026-07-09 00:38:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-09 00:38:12 +0000 UTC FinishedAt: 2026-07-09 00:38:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-09 00:38:12 +0000 UTC FinishedAt: 2026-07-09 00:38:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-09 00:38:33 +0000 UTC FinishedAt: 2026-07-09 01:26:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6glw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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":["mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usb_in_complete","mctp_usb_out_complete","mctp_usb_tx_send","mctp_usb_start_xmit","mctp_usb_rx_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","MCTP_TRANSPORT_USBLIB"],"series_id":"ea616825-019c-408e-9c2b-76afe964466e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-09 00:38:33 +0000 UTC FinishedAt: 2026-07-09 01:26:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*347bcc00-da7c-4e28-8e2a-327316f8dba7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*19b1eacb-c0b2-4d8e-9bba-f66b9eae9f99,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-workflow6glw2/series-workflow6glw2-build-action-3767907899/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-workflow6glw2/series-workflow6glw2-build-action-1817875884/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-workflow6glw2/series-workflow6glw2-convert-artifact-1365539369/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,}